diff --git a/stomping.lua b/stomping.lua index 2bf05ec..513fe64 100644 --- a/stomping.lua +++ b/stomping.lua @@ -41,12 +41,12 @@ function poschangelib.get_footprint_node_name(source_node_name, mod_name) end --- poschangelib walk callback -local function walk_listener(player, pos, node, desc) - poschangelib.chance_stomp(player, pos, node, node_desc) +local function walk_listener(player, pos, node, desc, trigger_meta) + poschangelib.chance_stomp(player, pos, node, desc, trigger_meta) end --- Random roll and do the stomp if it succeeds. -function poschangelib.chance_stomp(player, pos, node, node_desc) +function poschangelib.chance_stomp(player, pos, node, node_desc, trigger_meta) local stomp_desc = stomps[node.name] if not stomp_desc then minetest.log('warning', 'No stomping data found for node ' .. node.name) @@ -54,7 +54,7 @@ function poschangelib.chance_stomp(player, pos, node, node_desc) end for i, s_desc in ipairs(stomp_desc) do if (math.random() * s_desc.chance) < 1.0 then - poschangelib.do_stomp(player, pos, node, node_desc, s_desc) + poschangelib.do_stomp(player, pos, node, node_desc, s_desc, trigger_meta) return end end @@ -66,7 +66,8 @@ end -- @param node Node being stomped. -- @param node_desc Description of the node being stomped. -- @param stomp_desc Optional stomp description. If not provided it looks for it. -function poschangelib.do_stomp(player, pos, node, node_desc, stomp_desc) +-- @param trigger_meta Optional trigger meta, passed by walk listeners. +function poschangelib.do_stomp(player, pos, node, node_desc, stomp_desc, trigger_meta) if not stomp_desc then stomp_desc = stomps[node.name] if stomp_desc then stomp_desc = stomp_desc[1] end @@ -75,9 +76,14 @@ function poschangelib.do_stomp(player, pos, node, node_desc, stomp_desc) minetest.log('warning', 'No stomping data found for node ' .. node.name) return end + if not trigger_meta then trigger_meta = {} end if type(stomp_desc.dest_node_name) == 'function' then local dest_node = stomp_desc.dest_node_name(player, pos, node, trigger_meta) if not dest_node then return end + if not dest_node.name then + minetest.log('error', 'Stomping: function did not set node name for ' .. node.name) + return + end minetest.set_node(pos, dest_node) else local new_node = minetest.get_node(pos)