forked from mtcontrib/awards
		
	On chat trigger and code style
This commit is contained in:
		
							
								
								
									
										19
									
								
								api.lua
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								api.lua
									
									
									
									
									
								
							| @@ -43,7 +43,7 @@ function awards.tbv(tb,value,default) | ||||
| 		if not value then | ||||
| 			value = "[NULL]" | ||||
| 		end | ||||
| 		minetest.log("error", "awards.tbv - table '"..value.."' is null, or not a table! Dump: "..dump(tb)) | ||||
| 		minetest.log("error", "awards.tbv - table "..dump(value).." is null, or not a table! Dump: "..dump(tb)) | ||||
| 		return | ||||
| 	end | ||||
| 	if not value then | ||||
| @@ -94,6 +94,12 @@ function awards.register_achievement(name,data_table) | ||||
| 			 	target = data_table.trigger.target, | ||||
| 			} | ||||
| 			table.insert(awards.onDeath,tmp) | ||||
| 		elseif data_table.trigger.type == "chat" then | ||||
| 			local tmp = { | ||||
| 				award = name, | ||||
| 			 	target = data_table.trigger.target, | ||||
| 			} | ||||
| 			table.insert(awards.onChat,tmp) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| @@ -113,21 +119,26 @@ function awards.register_achievement(name,data_table) | ||||
| 	awards.def[name] = data_table | ||||
| end | ||||
|  | ||||
| -- this function adds a trigger function or table to the ondig table | ||||
| -- run a function when a node is dug | ||||
| function awards.register_onDig(func) | ||||
| 	table.insert(awards.onDig,func) | ||||
| end | ||||
|  | ||||
| -- this function adds a trigger function or table to the ondig table | ||||
| -- run a function when a node is placed | ||||
| function awards.register_onPlace(func) | ||||
| 	table.insert(awards.onPlace,func) | ||||
| end | ||||
|  | ||||
| -- this function adds a trigger function or table to the ondeath table | ||||
| -- run a function when a player dies | ||||
| function awards.register_onDeath(func) | ||||
| 	table.insert(awards.onDeath,func) | ||||
| end | ||||
|  | ||||
| -- run a function when a player chats | ||||
| function awards.register_onChat(func) | ||||
| 	table.insert(awards.onChat,func) | ||||
| end | ||||
|  | ||||
| -- This function is called whenever a target condition is met. | ||||
| -- It checks if a player already has that achievement, and if they do not, | ||||
| -- it gives it to them | ||||
|   | ||||
							
								
								
									
										65
									
								
								triggers.lua
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								triggers.lua
									
									
									
									
									
								
							| @@ -8,6 +8,7 @@ | ||||
| awards.onDig = {} | ||||
| awards.onPlace = {} | ||||
| awards.onTick = {} | ||||
| awards.onChat = {} | ||||
| awards.onDeath = {} | ||||
|  | ||||
| -- Trigger Handles | ||||
| @@ -126,37 +127,61 @@ minetest.register_on_dieplayer(function(player) | ||||
| 	if not player or not player:get_player_name() or player:get_player_name()=="" then | ||||
| 		return | ||||
| 	end | ||||
| 	local playern = player:get_player_name() | ||||
| 	awards.assertPlayer(playern) | ||||
| 	 | ||||
| 	-- Get player | ||||
| 	local name = player:get_player_name() | ||||
| 	awards.assertPlayer(playern) | ||||
| 	local data = awards.players[name] | ||||
|  | ||||
| 	-- Increment counter | ||||
| 	awards.players[player:get_player_name()].deaths = awards.players[player:get_player_name()].deaths + 1 | ||||
| 	data.deaths = data.deaths + 1 | ||||
| 	 | ||||
| 	-- Run callbacks and triggers | ||||
| 	local data=awards.players[playern] | ||||
| 	for i=1,# awards.onDeath do | ||||
| 	for _,trigger in pairs(awards.onDeath) do | ||||
| 		local res = nil | ||||
| 		if type(awards.onDeath[i]) == "function" then | ||||
| 			-- Run trigger callback | ||||
| 			res=awards.onDeath[i](player,data) | ||||
| 		elseif type(awards.onDeath[i]) == "table" then | ||||
| 			-- handle table here | ||||
| 			if not awards.onDeath[i].target or not awards.onDeath[i].award then | ||||
| 				-- table running failed! | ||||
| 				print("[ERROR] awards - onDeath trigger "..i.." is invalid!") | ||||
| 			else | ||||
| 				-- run the table | ||||
| 				if not data.deaths then | ||||
| 					-- table running failed! | ||||
| 				elseif data.deaths > awards.onDeath[i].target-1 then | ||||
| 					res=awards.onDeath[i].award | ||||
| 		if type(trigger) == "function" then | ||||
| 			res = trigger(player,data) | ||||
| 		elseif type(trigger) == "table" then | ||||
| 			if trigger.target and trigger.award then | ||||
| 				if data.deaths and data.deaths >= trigger.target then | ||||
| 					res = trigger.award | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 		if res ~= nil then | ||||
| 			awards.give_achievement(name,res) | ||||
| 		end | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| minetest.register_on_chat_message(function(name, message) | ||||
| 	-- Run checks | ||||
| 	if not name then | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	-- Get player | ||||
| 	awards.assertPlayer(name) | ||||
| 	local data = awards.players[name] | ||||
| 	local player = minetest.get_player_by_name(name) | ||||
| 	 | ||||
| 	-- Increment counter | ||||
| 	data.chats = data.chats + 1 | ||||
| 	 | ||||
| 	-- Run callbacks and triggers	 | ||||
| 	for _,trigger in pairs(awards.onChat) do | ||||
| 		local res = nil | ||||
| 		if type(trigger) == "function" then | ||||
| 			res = trigger(player,data) | ||||
| 		elseif type(trigger) == "table" then | ||||
| 			if trigger.target and trigger.award then | ||||
| 				if data.chats and data.chats >= trigger.target then | ||||
| 					res = trigger.award | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 		if res ~= nil then | ||||
| 			awards.give_achievement(playern,res) | ||||
| 			awards.give_achievement(name,res) | ||||
| 		end | ||||
| 	end | ||||
| end) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user