diff --git a/nssm_spears.lua b/nssm_spears.lua index a46e4a0..96d9142 100644 --- a/nssm_spears.lua +++ b/nssm_spears.lua @@ -27,7 +27,7 @@ local function spears_shot(itemstack, player) end local drag = .3 - local playerpos = player:getpos() + local playerpos = player:get_pos() local dir = player:get_look_dir() local obj = minetest.add_entity({ x = playerpos.x, @@ -55,13 +55,18 @@ local function spears_set_entity(kind, eq, toughness, breadth) breadth = breadth or 1 local SPEAR_ENTITY = { - physical = false, + + initial_properties = { + + physical = false, + visual = "wielditem", + visual_size = {x = 0.15, y = 0.1}, + textures = {spearname}, + collisionbox = {0,0,0,0,0,0}, + }, + timer = 0, - visual = "wielditem", - visual_size = {x = 0.15, y = 0.1}, - textures = {spearname}, lastpos = {}, - collisionbox = {0,0,0,0,0,0}, on_punch = function(self, puncher) @@ -88,7 +93,7 @@ local function spears_set_entity(kind, eq, toughness, breadth) self.timer = self.timer + dtime - local pos = self.object:getpos() + local pos = self.object:get_pos() local node = minetest.get_node(pos) if not self.wear then @@ -134,7 +139,7 @@ local function spears_set_entity(kind, eq, toughness, breadth) and obj:get_luaentity().shooter:get_player_name() == obj:get_player_name() ) then - local speed = vector.length(self.object:getvelocity()) + local speed = vector.length(self.object:get_velocity()) local damage = (speed + eq) ^ 1.12 - 20 obj:punch(self.object, 1.0, { diff --git a/nssm_weapons.lua b/nssm_weapons.lua index 890542a..4f6b423 100644 --- a/nssm_weapons.lua +++ b/nssm_weapons.lua @@ -384,7 +384,10 @@ Function to register new weapons: parameters: local function nssm_register_weapon(name, def) minetest.register_entity("nssm:"..name, { - textures = {name..".png"}, + + initial_properties = { + textures = {name..".png"}, + }, on_step = function(self, dtime) def.on_step(self, dtime) @@ -506,8 +509,6 @@ local function nssm_register_throwitem(name, descr, def) local dir = placer:get_look_dir() local playerpos = placer:get_pos() - posthrow = playerpos - local obj = minetest.add_entity({ x = playerpos.x + dir.x, y = playerpos.y + 2 + dir.y, @@ -520,6 +521,8 @@ local function nssm_register_throwitem(name, descr, def) obj:set_velocity(vec) obj:set_acceleration(acc) +local ent = obj:get_luaentity() ; ent.posthrow = playerpos + itemstack:take_item() return itemstack @@ -527,9 +530,13 @@ local function nssm_register_throwitem(name, descr, def) }) minetest.register_entity("nssm:" .. name .. "_bomb_flying", { - textures = {name .. "_bomb.png"}, - hp_max = 20, - collisionbox = {-0.1,-0.1,-0.1, 0.1,0.1,0.1}, + + initial_properties = { + + textures = {name .. "_bomb.png"}, + hp_max = 20, + collisionbox = {-0.1,-0.1,-0.1, 0.1,0.1,0.1} + }, on_step = function(self, dtime) @@ -898,7 +905,7 @@ minetest.register_craft({ nssm_register_throwitem("teleport", "Teleport Bomb", { - hit_node = function(self,pos,placer) + hit_node = function(self, pos, placer) local pos1 = {x = pos.x, y = pos.y + 1, z = pos.z} local pos2 = {x = pos.x, y = pos.y + 2, z = pos.z} @@ -907,6 +914,8 @@ nssm_register_throwitem("teleport", "Teleport Bomb", { or not minetest.get_item_group( minetest.get_node(pos1).name, "unbreakable") == 1 then + local posthrow = self.posthrow ; if not posthrow then return end + for _,obj in ipairs(minetest.get_objects_inside_radius(posthrow, 2)) do if obj:is_player() then