local default_dir = { x = 1, y = 1, z = 1, } local function node_ok(pos, fallback) fallback = fallback or "default:dirt" local node = minetest.get_node_or_nil(pos) if not node then return minetest.registered_nodes[fallback] end if minetest.registered_nodes[node.name] then return node end return minetest.registered_nodes[fallback] end function weapons_shot(itemstack, placer, pointed_thing, velocity, name) local dir = placer:get_look_dir(); local playerpos = placer:getpos(); local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+2+dir.y,z=playerpos.z+0+dir.z}, "nssm:"..name) local vec = {x=dir.x*velocity,y=dir.y*velocity,z=dir.z*velocity} obj:setvelocity(vec) return itemstack end function search_on_step(self, dtime, name, max_time, damage, dir, radius, not_transparent, vel, timer) --local timer = 0 local pos = self.object:getpos() local vel = self.object:getvelocity() minetest.register_globalstep(function(dtime) timer = timer + dtime --minetest.chat_send_all("Time: = "..timer.." Max_time: "..max_time) if timer>max_time then self.object:remove() end end) --while going around it damages entities local objects = minetest.env:get_objects_inside_radius(pos, 30) local min_dist = 100 local obj_min = nil local obj_p = nil local vec_min = nil for _,obj in ipairs(objects) do if (obj:is_player()) then elseif (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item" and obj:get_luaentity().name ~= self.object:get_luaentity().name) then obj_p = obj:getpos() local vec = {x=obj_p.x-pos.x, y=obj_p.y-pos.y, z=obj_p.z-pos.z} local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5 if (distmax_time then self.object:remove() end end) --while going around it damages entities local objects = minetest.env:get_objects_inside_radius(pos, 2) for _,obj in ipairs(objects) do if (obj:is_player()) then elseif (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then obj:set_hp(obj:get_hp()-damage) if (obj:get_hp() <= 0) then if (not obj:is_player()) and obj:get_entity_name() ~= "nssm:"..name then obj:remove() end end end end local n = minetest.env:get_node(pos).name if n ~=not_transparent or not_transparent==nil then --minetest.env:set_node(pos, {name="air"}) local vec = self.object:getvelocity() local c=vel/10 --calculate how many blocks around need to be removed local max = 0 local posmax = 0 if max