forked from nalc/nalc_game
		
	Flint & steel sounds: Fix bugs caused by nil position
Usage and tool break sounds were played at 'pointed_thing.above' which can be nil if not pointing at anything or at an entity. This caused sounds to be played to all players on a server non-positionally. Fallback to player pos for sounds if 'pointed_thing.above' is nil. Replace 'pt' variable with 'pointed_thing' in 'register_tool'.
This commit is contained in:
		| @@ -80,27 +80,27 @@ minetest.register_tool("fire:flint_and_steel", { | ||||
| 	sound = {breaks = "default_tool_breaks"}, | ||||
|  | ||||
| 	on_use = function(itemstack, user, pointed_thing) | ||||
| 		local pt = pointed_thing | ||||
| 		local sound_pos = pointed_thing.above or user:get_pos() | ||||
| 		minetest.sound_play( | ||||
| 			"fire_flint_and_steel", | ||||
| 			{pos = pt.above, gain = 0.5, max_hear_distance = 8} | ||||
| 			{pos = sound_pos, gain = 0.5, max_hear_distance = 8} | ||||
| 		) | ||||
| 		if pt.type == "node" then | ||||
| 			local node_under = minetest.get_node(pt.under).name | ||||
| 		if pointed_thing.type == "node" then | ||||
| 			local node_under = minetest.get_node(pointed_thing.under).name | ||||
| 			local nodedef = minetest.registered_nodes[node_under] | ||||
| 			if not nodedef then | ||||
| 				return | ||||
| 			end | ||||
| 			local player_name = user:get_player_name() | ||||
| 			if minetest.is_protected(pt.under, player_name) then | ||||
| 			if minetest.is_protected(pointed_thing.under, player_name) then | ||||
| 				minetest.chat_send_player(player_name, "This area is protected") | ||||
| 				return | ||||
| 			end | ||||
| 			if nodedef.on_ignite then | ||||
| 				nodedef.on_ignite(pt.under, user) | ||||
| 				nodedef.on_ignite(pointed_thing.under, user) | ||||
| 			elseif minetest.get_item_group(node_under, "flammable") >= 1 | ||||
| 					and minetest.get_node(pt.above).name == "air" then | ||||
| 				minetest.set_node(pt.above, {name = "fire:basic_flame"}) | ||||
| 					and minetest.get_node(pointed_thing.above).name == "air" then | ||||
| 				minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) | ||||
| 			end | ||||
| 		end | ||||
| 		if not minetest.setting_getbool("creative_mode") then | ||||
| @@ -109,7 +109,7 @@ minetest.register_tool("fire:flint_and_steel", { | ||||
| 			itemstack:add_wear(1000) | ||||
| 			-- Tool break sound | ||||
| 			if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then | ||||
| 				minetest.sound_play(wdef.sound.breaks, {pos = pt.above, gain = 0.5}) | ||||
| 				minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, gain = 0.5}) | ||||
| 			end | ||||
| 			return itemstack | ||||
| 		end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user