diff --git a/nssm_weapons.lua b/nssm_weapons.lua index ba75cc5..5619610 100644 --- a/nssm_weapons.lua +++ b/nssm_weapons.lua @@ -15,6 +15,104 @@ local function weapons_shot(itemstack, placer, pointed_thing, velocity, name) return itemstack end +local function hit(pos, self) + local node = nssm:node_ok(pos).name + self.hit_node(self, pos, node) + self.object:remove() + return +end + +local function activate_balls(pos) + + local radius = 50 + + local objects = minetest.env:get_objects_inside_radius(pos, radius) + for _,obj in ipairs(objects) do + if (obj:get_luaentity() and obj:get_luaentity().name == "nssm:spirit_ball") then + obj:get_luaentity().move = 1 + end + end +end + +local function search_on_step2( + self, + dtime, --used to count time + max_time, --after this amount of time the entity is removec + radius, --radius in which look for entities to follow + vel, --velocity of the projectile + timer) + + local pos = self.object:getpos() + + --Disappear after a certain time + minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer>max_time then + self.object:remove() + end + end) + + --Look for an entity to follow + local objects = minetest.env:get_objects_inside_radius(pos, radius) + 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 (dist