mirror of
				https://gitlab.com/rubenwardy/awards.git
				synced 2025-10-31 13:05:22 +01:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev
This commit is contained in:
		
							
								
								
									
										6
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								init.lua
									
									
									
									
									
								
							| @@ -16,7 +16,11 @@ dofile(minetest.get_modpath("awards").."/src/api_triggers.lua") | |||||||
| dofile(minetest.get_modpath("awards").."/src/chat_commands.lua") | dofile(minetest.get_modpath("awards").."/src/chat_commands.lua") | ||||||
| dofile(minetest.get_modpath("awards").."/src/gui.lua") | dofile(minetest.get_modpath("awards").."/src/gui.lua") | ||||||
| dofile(minetest.get_modpath("awards").."/src/triggers.lua") | dofile(minetest.get_modpath("awards").."/src/triggers.lua") | ||||||
| dofile(minetest.get_modpath("awards").."/src/awards.lua") |  | ||||||
|  | -- Optionally add default awards. | ||||||
|  | if minetest.settings:get_bool("awards.add_defaults", true) then | ||||||
|  | 	dofile(minetest.get_modpath("awards").."/src/awards.lua") | ||||||
|  | end | ||||||
|  |  | ||||||
| awards.load() | awards.load() | ||||||
| minetest.register_on_shutdown(awards.save) | minetest.register_on_shutdown(awards.save) | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								settingtypes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								settingtypes.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | # Add default achievements from the awards mod | ||||||
|  | awards.add_defaults (Add Default Achievements) bool true | ||||||
| @@ -43,6 +43,11 @@ end | |||||||
| -- name - the name of the player | -- name - the name of the player | ||||||
| -- award - the name of the award to give | -- award - the name of the award to give | ||||||
| function awards.unlock(name, award) | function awards.unlock(name, award) | ||||||
|  | 	-- Ensure the player is online. | ||||||
|  | 	if not minetest.get_player_by_name(name) then | ||||||
|  | 		return | ||||||
|  | 	end | ||||||
|  |  | ||||||
| 	-- Access Player Data | 	-- Access Player Data | ||||||
| 	local data  = awards.player(name) | 	local data  = awards.player(name) | ||||||
| 	local awdef = awards.registered_awards[award] | 	local awdef = awards.registered_awards[award] | ||||||
| @@ -60,7 +65,7 @@ function awards.unlock(name, award) | |||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	-- Unlock Award | 	-- Unlock Award | ||||||
| 	minetest.log("action", name.." has unlocked award "..name) | 	minetest.log("action", name.." has unlocked award "..award) | ||||||
| 	data.unlocked[award] = award | 	data.unlocked[award] = award | ||||||
| 	awards.save() | 	awards.save() | ||||||
|  |  | ||||||
| @@ -91,7 +96,7 @@ function awards.unlock(name, award) | |||||||
| 	local title = awdef.title or award | 	local title = awdef.title or award | ||||||
| 	local desc = awdef.description or "" | 	local desc = awdef.description or "" | ||||||
| 	local background = awdef.background or "awards_bg_default.png" | 	local background = awdef.background or "awards_bg_default.png" | ||||||
| 	local icon = awdef.icon or "awards_unknown.png" | 	local icon = (awdef.icon or "awards_unknown.png") .. "^[resize:32x32" | ||||||
| 	local sound = awdef.sound | 	local sound = awdef.sound | ||||||
| 	if sound == nil then | 	if sound == nil then | ||||||
| 		-- Explicit check for nil because sound could be `false` to disable it | 		-- Explicit check for nil because sound could be `false` to disable it | ||||||
|   | |||||||
| @@ -144,8 +144,8 @@ function awards.register_trigger(tname, tdef) | |||||||
| 			if tdef.key_is_item and key:sub(1, 6) ~= "group:" then | 			if tdef.key_is_item and key:sub(1, 6) ~= "group:" then | ||||||
| 				local itemdef = minetest.registered_items[key] | 				local itemdef = minetest.registered_items[key] | ||||||
| 				if itemdef then | 				if itemdef then | ||||||
| 					for groupname, _ in pairs(itemdef.groups or {}) do | 					for groupname,rating in pairs(itemdef.groups or {}) do | ||||||
| 						if tdef.watched_groups[groupname] then | 						if rating ~= 0 and tdef.watched_groups[groupname] then | ||||||
| 							tdef.notify(player, "group:" .. groupname, n) | 							tdef.notify(player, "group:" .. groupname, n) | ||||||
| 						end | 						end | ||||||
| 					end | 					end | ||||||
| @@ -160,8 +160,9 @@ function awards.register_trigger(tname, tdef) | |||||||
| 			data[tname] = data[tname] or {} | 			data[tname] = data[tname] or {} | ||||||
| 			local currentVal = (data[tname][key] or 0) + n | 			local currentVal = (data[tname][key] or 0) + n | ||||||
| 			data[tname][key] = currentVal | 			data[tname][key] = currentVal | ||||||
|  | 			data[tname].__total = (data[tname].__total or 0) | ||||||
| 			if key:sub(1, 6) ~= "group:" then | 			if key:sub(1, 6) ~= "group:" then | ||||||
| 				data[tname].__total = (data[tname].__total or 0) + n | 				data[tname].__total = data[tname].__total + n | ||||||
| 			end | 			end | ||||||
|  |  | ||||||
| 			tdef:run_callbacks(player, data, function(entry) | 			tdef:run_callbacks(player, data, function(entry) | ||||||
| @@ -173,7 +174,6 @@ function awards.register_trigger(tname, tdef) | |||||||
| 				else | 				else | ||||||
| 					return | 					return | ||||||
| 				end | 				end | ||||||
|  |  | ||||||
| 				if current >= entry.target then | 				if current >= entry.target then | ||||||
| 					return entry.award | 					return entry.award | ||||||
| 				end | 				end | ||||||
| @@ -201,7 +201,7 @@ end | |||||||
|  |  | ||||||
| function awards.increment_item_counter(data, field, itemname, count) | function awards.increment_item_counter(data, field, itemname, count) | ||||||
| 	itemname = minetest.registered_aliases[itemname] or itemname | 	itemname = minetest.registered_aliases[itemname] or itemname | ||||||
| 	data[field][itemname] = (data[field][itemname] or 0) + 1 | 	data[field][itemname] = (data[field][itemname] or 0) + (count or 1) | ||||||
| end | end | ||||||
|  |  | ||||||
| function awards.get_item_count(data, field, itemname) | function awards.get_item_count(data, field, itemname) | ||||||
|   | |||||||
| @@ -89,7 +89,7 @@ if minetest.get_modpath("fire") then | |||||||
| 		secret = true, | 		secret = true, | ||||||
| 	}) | 	}) | ||||||
| 	awards.register_on_death(function(player,data) | 	awards.register_on_death(function(player,data) | ||||||
| 		local pos = player:getpos() | 		local pos = player:get_pos() | ||||||
| 		if pos and minetest.find_node_near(pos, 2, "fire:basic_flame") ~= nil then | 		if pos and minetest.find_node_near(pos, 2, "fire:basic_flame") ~= nil then | ||||||
| 			return "award_burn" | 			return "award_burn" | ||||||
| 		end | 		end | ||||||
| @@ -115,7 +115,7 @@ awards.register_award("award_deep_down", { | |||||||
| 	secret = true, | 	secret = true, | ||||||
| }) | }) | ||||||
| awards.register_on_death(function(player,data) | awards.register_on_death(function(player,data) | ||||||
| 	local pos = player:getpos() | 	local pos = player:get_pos() | ||||||
| 	if pos and pos.y < -10000 then | 	if pos and pos.y < -10000 then | ||||||
| 		return "award_deep_down" | 		return "award_deep_down" | ||||||
| 	end | 	end | ||||||
| @@ -129,7 +129,7 @@ awards.register_award("award_no_screen", { | |||||||
| 	secret = true, | 	secret = true, | ||||||
| }) | }) | ||||||
| awards.register_on_death(function(player,data) | awards.register_on_death(function(player,data) | ||||||
| 	local pos = player:getpos() | 	local pos = player:get_pos() | ||||||
| 	if pos and pos.y > 10000 then | 	if pos and pos.y > 10000 then | ||||||
| 		return "award_no_screen" | 		return "award_no_screen" | ||||||
| 	end | 	end | ||||||
| @@ -767,7 +767,7 @@ if minetest.get_modpath("default") then | |||||||
| 		secret = true, | 		secret = true, | ||||||
| 	}) | 	}) | ||||||
| 	awards.register_on_death(function(player,data) | 	awards.register_on_death(function(player,data) | ||||||
| 		local pos = player:getpos() | 		local pos = player:get_pos() | ||||||
| 		if pos and (minetest.find_node_near(pos, 2, "default:lava_flowing") ~= nil or | 		if pos and (minetest.find_node_near(pos, 2, "default:lava_flowing") ~= nil or | ||||||
| 				minetest.find_node_near(pos, 2, "default:lava_source") ~= nil) then | 				minetest.find_node_near(pos, 2, "default:lava_source") ~= nil) then | ||||||
| 			return "award_in_the_flow" | 			return "award_in_the_flow" | ||||||
| @@ -782,7 +782,7 @@ if minetest.get_modpath("default") then | |||||||
| 		secret = true, | 		secret = true, | ||||||
| 	}) | 	}) | ||||||
| 	awards.register_on_death(function(player,data) | 	awards.register_on_death(function(player,data) | ||||||
| 		local pos = player:getpos() | 		local pos = player:get_pos() | ||||||
| 		if pos and minetest.find_node_near(pos, 5, "default:stone_with_diamond") ~= nil then | 		if pos and minetest.find_node_near(pos, 5, "default:stone_with_diamond") ~= nil then | ||||||
| 			return "award_this_is_sad" | 			return "award_this_is_sad" | ||||||
| 		end | 		end | ||||||
| @@ -798,7 +798,7 @@ if minetest.get_modpath("bones") then | |||||||
| 		secret = true, | 		secret = true, | ||||||
| 	}) | 	}) | ||||||
| 	awards.register_on_death(function(player,data) | 	awards.register_on_death(function(player,data) | ||||||
| 		local pos = player:getpos() | 		local pos = player:get_pos() | ||||||
| 		if pos and minetest.find_node_near(pos, 5, "bones:bones") ~= nil then | 		if pos and minetest.find_node_near(pos, 5, "bones:bones") ~= nil then | ||||||
| 			return "award_the_stack" | 			return "award_the_stack" | ||||||
| 		end | 		end | ||||||
|   | |||||||
| @@ -14,6 +14,10 @@ | |||||||
| -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | -- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||||||
| -- | -- | ||||||
|  |  | ||||||
|  | -- Check if a player object is valid for awards. | ||||||
|  | local function player_ok(player) | ||||||
|  | 	return player and player.is_player and player:is_player() and not player.is_fake_player | ||||||
|  | end | ||||||
|  |  | ||||||
| awards.register_trigger("chat", { | awards.register_trigger("chat", { | ||||||
| 	type = "counted", | 	type = "counted", | ||||||
| @@ -22,7 +26,7 @@ awards.register_trigger("chat", { | |||||||
| }) | }) | ||||||
| minetest.register_on_chat_message(function(name, message) | minetest.register_on_chat_message(function(name, message) | ||||||
| 	local player = minetest.get_player_by_name(name) | 	local player = minetest.get_player_by_name(name) | ||||||
| 	if not player or string.find(message, "/")  then | 	if not player_ok(player) or string.find(message, "/")  then | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| @@ -68,7 +72,7 @@ awards.register_trigger("dig", { | |||||||
| 	key_is_item = true, | 	key_is_item = true, | ||||||
| }) | }) | ||||||
| minetest.register_on_dignode(function(pos, node, player) | minetest.register_on_dignode(function(pos, node, player) | ||||||
| 	if not player or not pos or not node then | 	if not player_ok(player) or not pos or not node then | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| @@ -89,7 +93,7 @@ awards.register_trigger("place", { | |||||||
| 	key_is_item = true, | 	key_is_item = true, | ||||||
| }) | }) | ||||||
| minetest.register_on_placenode(function(pos, node, player) | minetest.register_on_placenode(function(pos, node, player) | ||||||
| 	if not player or not pos or not node then | 	if not player_ok(player) or not pos or not node then | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| @@ -110,7 +114,7 @@ awards.register_trigger("craft", { | |||||||
| 	key_is_item = true, | 	key_is_item = true, | ||||||
| }) | }) | ||||||
| --minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) | --minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) | ||||||
| --	if not player or itemstack:is_empty() then | --	if not player_ok(player) or itemstack:is_empty() then | ||||||
| --		return | --		return | ||||||
| --	end | --	end | ||||||
| -- | -- | ||||||
| @@ -131,11 +135,11 @@ awards.register_trigger("eat", { | |||||||
| 	key_is_item = true, | 	key_is_item = true, | ||||||
| }) | }) | ||||||
| minetest.register_on_item_eat(function(_, _, itemstack, player, _) | minetest.register_on_item_eat(function(_, _, itemstack, player, _) | ||||||
| 	if not player or itemstack:is_empty() then | 	if not player_ok(player) or itemstack:is_empty() then | ||||||
| 		return | 		return | ||||||
| 	end | 	end | ||||||
|  |  | ||||||
| 	local itemname = itemstack:get_name() | 	local itemname = itemstack:get_name() | ||||||
| 	itemname = minetest.registered_aliases[itemname] or itemname | 	itemname = minetest.registered_aliases[itemname] or itemname | ||||||
| 	awards.notify_craft(player, itemname, itemstack:get_count()) | 	awards.notify_eat(player, itemname) | ||||||
| end) | end) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user