diff options
| -rw-r--r-- | api.lua | 94 | ||||
| -rw-r--r-- | init.lua | 109 | ||||
| -rw-r--r-- | readme.md | 14 | 
3 files changed, 117 insertions, 100 deletions
| @@ -0,0 +1,94 @@ + +-- Table Save Load Functions +local function save_playerD() +	local file = io.open(minetest.get_worldpath().."/awards.txt", "w") +	if file then +		file:write(minetest.serialize(player_data)) +		file:close() +	end +end + +local function load_playerD() +	local file = io.open(minetest.get_worldpath().."/awards.txt", "r") +	if file then +		local table = minetest.deserialize(file:read("*all")) +		if type(table) == "table" then +			return table +		end +	end +	return {} +end + +-- The global award namespace +awards={} +player_data=load_playerD() + +-- A table of award definitions +awards.def={} + +-- Load files +dofile(minetest.get_modpath("awards").."/triggers.lua") + +-- API Functions +function awards.register_achievement(name,data_table) +	awards['def'][name] = data_table +end + +function awards.register_onDig(func) +	table.insert(awards.onDig,func); +end + +function awards.register_onPlace(func) +	table.insert(awards.onPlace,func); +end + +function awards.give_achievement(name,award) +	local data=player_data[name] + +	if not data['unlocked'] then +		data['unlocked']={} +	end +	 +	if not data['unlocked'][award] or data['unlocked'][award]~=award then +		-- set player_data table +		data['unlocked'][award]=award + +		-- define local award data +		local title = award +		local desc = "" + +		-- check definition table +		if awards['def'][award] and awards['def'][award]['title'] then +			title=awards['def'][award]['title'] +		end +		 +		if awards['def'][award] and awards['def'][award]['description'] then +			desc=awards['def'][award]['description'] +		end + +		-- send award header +		minetest.chat_send_player(name, "Achievement Unlocked: "..title) +		 +		-- send award content +		if desc~="" then +			minetest.chat_send_player(name, desc) +		end +		 +		-- save playertable +		save_playerD() +	end +end + +-- List a player's achievements +minetest.register_chatcommand("list_awards", { +	params = "", +	description = "list_awards: list your awards", +	func = function(name, param) +		minetest.chat_send_player(name, "Your awards:"); + +		for _, str in pairs(player_data[name].unlocked) do +			minetest.chat_send_player(name, str); +		end +	end, +}) + @@ -1,104 +1,12 @@  --	AWARDS  --	   by Rubenwardy, CC-BY-SA  ------------------------------------------------------- --- this is the api definition file for the awards mod +-- this is the init file for the award mod  ------------------------------------------------------- --- Table Save Load Functions -local function save_playerD() -	local file = io.open(minetest.get_worldpath().."/awards.txt", "w") -	if file then -		file:write(minetest.serialize(player_data)) -		file:close() -	end -end - -local function load_playerD() -	local file = io.open(minetest.get_worldpath().."/awards.txt", "r") -	if file then -		local table = minetest.deserialize(file:read("*all")) -		if type(table) == "table" then -			return table -		end -	end -	return {} -end - --- The global award namespace -awards={} -player_data=load_playerD() - --- A table of award definitions -awards.def={} - --- Load files -dofile(minetest.get_modpath("awards").."/triggers.lua") - --- API Functions -function awards.register_achievement(name,data_table) -	awards['def'][name] = data_table -end - -function awards.register_onDig(func) -	table.insert(awards.onDig,func); -end - -function awards.register_onPlace(func) -	table.insert(awards.onPlace,func); -end - -function awards.give_achievement(name,award) -	local data=player_data[name] - -	if not data['unlocked'] then -		data['unlocked']={} -	end -	 -	if not data['unlocked'][award] or data['unlocked'][award]~=award then -		-- set player_data table -		data['unlocked'][award]=award +dofile(minetest.get_modpath("awards").."/api.lua") -		-- define local award data -		local title = award -		local desc = "" - -		-- check definition table -		if awards['def'][award] and awards['def'][award]['title'] then -			title=awards['def'][award]['title'] -		end -		 -		if awards['def'][award] and awards['def'][award]['description'] then -			desc=awards['def'][award]['description'] -		end - -		-- send award header -		minetest.chat_send_player(name, "Achievement Unlocked: "..title) -		 -		-- send award content -		if desc~="" then -			minetest.chat_send_player(name, desc) -		end -		 -		-- save player_data table -		save_playerD() -	end -end - --- List a player's achievements -minetest.register_chatcommand("list_awards", { -	params = "", -	description = "list_awards: list your awards", -	func = function(name, param) -		minetest.chat_send_player(name, "Your awards:"); - -		for _, str in pairs(player_data[name].unlocked) do -			minetest.chat_send_player(name, str); -		end -	end, -}) - - --- Example Achievements +-- Found some Mese!  awards.register_achievement("award_mesefind",{  	title = "First Mese Find",  	description = "Found some Mese!", @@ -114,12 +22,19 @@ awards.register_onDig(function(player,data)  	end  end) + +-- First Wood Placed! +awards.register_achievement("award_woodplace",{ +	title = "Foundations", +	description = "First Wood Placed!", +}) +  awards.register_onPlace(function(player,data)  	if not data['place']['default'] or not data['place']['default']['mese'] then  		return  	end -	if data['place']['default']['mese'] > 0 then -		return "award_meseplace" +	if data['place']['default']['wood'] > 0 then +		return "award_woodplace"  	end  end)
\ No newline at end of file @@ -17,8 +17,13 @@ The API  	* sound [optional]  	* image [optional]  	* func [optional] - see below +* awards.give_achievement(name,award) +	* -- gives an award to a player  * awards.register_onDig(func) -	* -- return true if the medal should be rewarded +	* -- return award name or null +	* -- there will be built in versions of this function +* awards.register_onPlace(func) +	* -- return award name or null  	* -- there will be built in versions of this function @@ -29,6 +34,9 @@ A list of data referenced/hashed by the player's name.  * name [string]  * getNodeCount('node_name') [function] -* count [table] +* count [table] - dig counter +	* modname [table] +		* itemname [int] +* place [table] - place counter  	* modname [table] -		*itemname [int]
\ No newline at end of file +		* itemname [int]
\ No newline at end of file | 
