91 lines
2.7 KiB
Lua
91 lines
2.7 KiB
Lua
minetest.register_entity("hook:power",{
|
|
hp_max = 100,
|
|
physical = true,
|
|
collisionbox = {-0.2,-0.2,-0.2, 0.2,0.2,0.2},
|
|
visual = "mesh",
|
|
mesh = "hook_hook.obj",
|
|
visual_size = {x=10, y=10},
|
|
textures = {"hook_iron.png"},
|
|
is_visible = true,
|
|
makes_footstep_sound = false,
|
|
timer2=0,
|
|
d=0,
|
|
uname="",
|
|
locked=false,
|
|
on_activate=function(self, staticdata)
|
|
if hook.user==nil then
|
|
self.object:remove()
|
|
return self
|
|
end
|
|
self.d=hook.user:get_look_dir()
|
|
self.fd=minetest.dir_to_facedir(self.d)
|
|
self.uname=hook.user:get_player_name()
|
|
self.user=hook.user
|
|
self.locked=hook.locked
|
|
hook.user=nil
|
|
if self.fd==3 then
|
|
self.fd=1
|
|
elseif self.fd==1 then
|
|
self.fd=3
|
|
elseif self.fd==2 then
|
|
self.fd=0
|
|
elseif self.fd==0 then
|
|
self.fd=2
|
|
end
|
|
end,
|
|
on_step= function(self, dtime)
|
|
self.timer2=self.timer2+dtime
|
|
local pos=self.object:get_pos()
|
|
local kill=0
|
|
if hook.slingshot_def({x=pos.x+self.d.x,y=pos.y,z=pos.z+self.d.z},"walkable") and not hook.slingshot_def({x=pos.x+self.d.x,y=pos.y+1,z=pos.z+self.d.z},"walkable")
|
|
and hook.is_hook(pos,self.uname) and hook.is_hook({x=pos.x,y=pos.y+1,z=pos.z},self.uname) then
|
|
kill=1
|
|
if self.locked then
|
|
if self.user:get_inventory():contains_item("main", "hook:climb_rope_locked")==false then
|
|
self.object:remove()
|
|
return self
|
|
end
|
|
if hook.is_hook({x=pos.x,y=pos.y+1,z=pos.z},self.uname) then
|
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "hook:hooking",param2=self.fd})
|
|
minetest.get_meta({x=pos.x,y=pos.y+1,z=pos.z}):set_int("a",1)
|
|
else
|
|
return self
|
|
end
|
|
self.user:get_inventory():remove_item("main", "hook:climb_rope_locked")
|
|
for i=0,20,1 do
|
|
if hook.is_hook({x=pos.x,y=pos.y-i,z=pos.z},self.uname) then
|
|
minetest.set_node({x=pos.x,y=pos.y-i,z=pos.z},{name = "hook:rope3",param2=self.fd})
|
|
else
|
|
break
|
|
end
|
|
minetest.get_meta({x=pos.x,y=pos.y-i,z=pos.z}):set_string("owner",self.uname)
|
|
end
|
|
else
|
|
if self.user:get_inventory():contains_item("main", "hook:climb_rope")==false then
|
|
self.object:remove()
|
|
return self
|
|
end
|
|
if hook.is_hook({x=pos.x,y=pos.y+1,z=pos.z},self.uname) then
|
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "hook:hooking",param2=self.fd})
|
|
minetest.get_meta({x=pos.x,y=pos.y+1,z=pos.z}):set_int("a",1)
|
|
else
|
|
return self
|
|
end
|
|
self.user:get_inventory():remove_item("main", "hook:climb_rope")
|
|
for i=0,20,1 do
|
|
if hook.is_hook({x=pos.x,y=pos.y-i,z=pos.z},self.uname) then
|
|
minetest.set_node({x=pos.x,y=pos.y-i,z=pos.z},{name = "hook:rope2",param2=self.fd})
|
|
else
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if self.timer2>3 or kill==1 then
|
|
self.object:remove()
|
|
|
|
end
|
|
return self
|
|
end,
|
|
})
|