improve the code & + model back

master
AiTechEye 2019-04-29 22:38:11 +02:00 committed by GitHub
parent 962550fa99
commit b5cf0fdc78
4 changed files with 852 additions and 213 deletions

264
init.lua
View File

@ -1,24 +1,29 @@
local hook_tmp_throw={}
local hook_tmp_throw_timer=0
local hook_tmp_time= tonumber(minetest.settings:get("item_entity_ttl"))
hook={}
hook={
tmp_throw={},
tmp_throw_timer=0,
tmp_time= tonumber(minetest.settings:get("item_entity_ttl")),
pvp = minetest.settings:get_bool("enable_pvp") == true,
}
dofile(minetest.get_modpath("hook") .. "/project.lua")
dofile(minetest.get_modpath("hook") .. "/pchest.lua")
if hook_tmp_time=="" or hook_tmp_time==nil then
hook_tmp_time=890
if hook.tmp_time=="" or hook.tmp_time==nil then
hook.tmp_time=890
else
hook_tmp_time=hook_tmp_time-10
hook.tmp_time=hook.tmp_time-10
end
hook.punch=function(ob1,ob2,hp)
ob2:punch(ob1,1,{full_punch_interval=1,damage_groups={fleshy=hp}})
end
slingshot_def=function(pos,n)
if not (pos and pos.x and pos.y and pos.z and n) then return false end
hook.slingshot_def=function(pos,n)
local nn=minetest.get_node(pos).name
return (minetest.registered_nodes[nn] and minetest.registered_nodes[nn][n])
end
local function slingshot_onuse(itemstack, user)
hook.slingshot_onuse=function(itemstack, user)
local veloc=15
local pos = user:get_pos()
local upos={x=pos.x,y=pos.y+2,z=pos.z}
@ -32,72 +37,68 @@ local function slingshot_onuse(itemstack, user)
local e=minetest.add_item({x=pos.x,y=pos.y+2,z=pos.z},item)
e:set_velocity({x=dir.x*veloc, y=dir.y*veloc, z=dir.z*veloc})
e:set_acceleration({x=dir.x*-3, y=-5, z=dir.z*-3})
e:get_luaentity().age=hook_tmp_time
table.insert(hook_tmp_throw,{ob=e,timer=2,user=user:get_player_name()})
e:get_luaentity().age=hook.tmp_time
table.insert(hook.tmp_throw,{ob=e,timer=2,user=user:get_player_name()})
if item=="hook:slingshot" then
itemstack:set_wear(9999999)
itemstack:set_wear(9999999)
end
user:get_inventory():remove_item("main", item)
minetest.sound_play("hook_throw", {pos=pos, gain = 1.0, max_hear_distance = 5,})
return itemstack
end
minetest.register_tool("hook:slingshot", {
description = "Slingshot",
range = 4,
inventory_image = "hook_slingshot.png",
on_use=function(itemstack, user, pointed_thing)
if pointed_thing.ref and pointed_thing.ref:is_player()==false and pointed_thing.ref:get_luaentity().name=="__builtin:item" then
pointed_thing.ref:punch(user, {full_punch_interval=1.0,damage_groups={fleshy=4}}, "default:bronze_pick", nil)
on_use=function(itemstack, user, pointed_thing)
local ref = pointed_thing.ref
if ref and not (ref:get_luaentity() and ref:get_luaentity().name == "__builtin:item") then
hook.punch(user,ref,4)
return itemstack
end
hook.slingshot_onuse(itemstack, user)
return itemstack
end,
on_place=function(itemstack, user, pointed_thing)
local item=itemstack:to_table()
local meta=minetest.deserialize(item["metadata"])
local mode=0
if meta==nil then meta={} mode=1 end
if meta.mode==nil then meta.mode=1 end
mode=(meta.mode)
if mode==1 then
mode=-1
minetest.chat_send_player(user:get_player_name(), "Use stack to left")
else
mode=1
minetest.chat_send_player(user:get_player_name(), "Use stack to right ")
end
meta.mode=mode
item.metadata=minetest.serialize(meta)
item.meta=minetest.serialize(meta)
itemstack:replace(item)
return itemstack
end
slingshot_onuse(itemstack, user)
return itemstack
end,
on_place=function(itemstack, user, pointed_thing)
local item=itemstack:to_table()
local meta=minetest.deserialize(item["metadata"])
local mode=0
if meta==nil then meta={} mode=1 end
if meta.mode==nil then meta.mode=1 end
mode=(meta.mode)
if mode==1 then
mode=-1
minetest.chat_send_player(user:get_player_name(), "Use stack to left")
else
mode=1
minetest.chat_send_player(user:get_player_name(), "Use stack to right ")
end
meta.mode=mode
item.metadata=minetest.serialize(meta)
item.meta=minetest.serialize(meta)
itemstack:replace(item)
return itemstack
end
})
minetest.register_globalstep(function(dtime)
hook_tmp_throw_timer=hook_tmp_throw_timer+dtime
if hook_tmp_throw_timer<0.2 then return end
hook_tmp_throw_timer=0
for i, t in pairs(hook_tmp_throw) do
hook.tmp_throw_timer=hook.tmp_throw_timer+dtime
if hook.tmp_throw_timer<0.1 then return end
hook.tmp_throw_timer=0
for i, t in pairs(hook.tmp_throw) do
t.timer=t.timer-0.25
if t.timer<=0 or t.ob==nil or t.ob:get_pos()==nil then table.remove(hook_tmp_throw,i) return end
if t.timer<=0 or t.ob==nil or t.ob:get_pos()==nil then table.remove(hook.tmp_throw,i) return end
for ii, ob in pairs(minetest.get_objects_inside_radius(t.ob:get_pos(), 1.5)) do
if (not ob:get_luaentity()) or (ob:get_luaentity() and (ob:get_luaentity().name~="__builtin:item")) then
if (not ob:is_player()) or (ob:is_player() and ob:get_player_name(ob)~=t.user and minetest.setting_getbool("enable_pvp")==true) then
if (not ob:is_player()) or (ob:is_player() and ob:get_player_name(ob)~=t.user and hook.pvp) then
ob:set_hp(ob:get_hp()-5)
ob:punch(ob, {full_punch_interval=1.0,damage_groups={fleshy=4}}, "default:bronze_pick", nil)
hook.punch(ob,ob,4)
t.ob:set_velocity({x=0, y=0, z=0})
if ob:get_hp()<=0 and ob:is_player()==false then ob:remove() end
t.ob:set_acceleration({x=0, y=-10,z=0})
t.ob:set_velocity({x=0, y=-10, z=0})
table.remove(hook_tmp_throw,i)
table.remove(hook.tmp_throw,i)
minetest.sound_play("hook_hard_punch", {pos=ob:get_pos(), gain = 1.0, max_hear_distance = 5,})
break
end
@ -106,17 +107,16 @@ minetest.register_globalstep(function(dtime)
end
end)
function is_hook(pos,name)
local nname=minetest.get_node(pos).name
if name==nil or minetest.is_protected(pos,name)==false then
if nname=="air" or nname=="hook:rope" or
(nname=="hook:hooking" and minetest.get_meta(pos):get_int("a")==0) then
return true
hook.is_hook=function(pos,name)
if not (name and minetest.is_protected(pos,name)) then
local def = minetest.registered_nodes[minetest.get_node(pos).name]
if def and def.name == "hook:hooking" or (def.buildable_to and not (def.liquidtype == "source" and def.paramtype2 == "none")) then
if not (def.name == "hook:hooking" and minetest.get_meta(pos):get_int("a") ~= 0) then
return true
end
end
end
return false
end
minetest.register_tool("hook:hook", {
@ -130,21 +130,29 @@ minetest.register_tool("hook:hook", {
local pos2=pointed_thing.under
local name=user:get_player_name()
if slingshot_def(pos2,"walkable") and
slingshot_def({x=pos.x,y=pos.y-1,z=pos.z},"walkable")==false
and (slingshot_def({x=pos2.x,y=pos2.y+1,z=pos2.z},"walkable")==false or minetest.get_node({x=pos2.x,y=pos2.y+1,z=pos2.z}).name=="default:snow") and
is_hook(pos,name) and
slingshot_def({x=pos.x,y=pos.y+1,z=pos.z},"walkable")==false then
if hook.slingshot_def(pos2,"walkable") and
hook.slingshot_def({x=pos.x,y=pos.y-1,z=pos.z},"walkable")==false
and (hook.slingshot_def({x=pos2.x,y=pos2.y+1,z=pos2.z},"walkable")==false or minetest.get_node({x=pos2.x,y=pos2.y+1,z=pos2.z}).name=="default:snow") and
hook.is_hook(pos,name) and
hook.slingshot_def({x=pos.x,y=pos.y+1,z=pos.z},"walkable")==false then
if d==3 then d=1
elseif d==1 then d=3
elseif d==2 then d=0
elseif d==0 then d=2
end
if is_hook({x=pos.x,y=pos.y+1,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "hook:hooking",param2=d}) else return itemstack end
if is_hook(pos,name) then minetest.set_node(pos,{name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-1,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-2,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-2,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-3,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-3,z=pos.z}, {name = "hook:rope",param2=d}) end
if hook.is_hook({x=pos.x,y=pos.y+1,z=pos.z},name) then
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "hook:hooking",param2=d})
minetest.get_node_timer({x=pos.x,y=pos.y+1,z=pos.z}):start(3)
else
return itemstack
end
for i=0,-4, -1 do
if hook.is_hook({x=pos.x,y=pos.y+i,z=pos.z},name) then
minetest.set_node({x=pos.x,y=pos.y+i,z=pos.z}, {name = "hook:rope",param2=d})
else
return itemstack
end
end
end
return itemstack
end,
@ -160,25 +168,29 @@ minetest.register_tool("hook:hook_upgrade", {
local pos=pointed_thing.above
local pos2=pointed_thing.under
local name=user:get_player_name()
if slingshot_def(pos2,"walkable") and
slingshot_def({x=pos.x,y=pos.y-1,z=pos.z},"walkable")==false and
(slingshot_def({x=pos2.x,y=pos2.y+1,z=pos2.z},"walkable")==false or minetest.get_node({x=pos2.x,y=pos2.y+1,z=pos2.z}).name=="default:snow") and
is_hook(pos,name) and
slingshot_def({x=pos.x,y=pos.y+1,z=pos.z},"walkable")==false then
if hook.slingshot_def(pos2,"walkable") and
hook.slingshot_def({x=pos.x,y=pos.y-1,z=pos.z},"walkable")==false and
(hook.slingshot_def({x=pos2.x,y=pos2.y+1,z=pos2.z},"walkable")==false or minetest.get_node({x=pos2.x,y=pos2.y+1,z=pos2.z}).name=="default:snow") and
hook.is_hook(pos,name) and
hook.slingshot_def({x=pos.x,y=pos.y+1,z=pos.z},"walkable")==false then
if d==3 then d=1
elseif d==1 then d=3
elseif d==2 then d=0
elseif d==0 then d=2
end
if is_hook({x=pos.x,y=pos.y+1,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "hook:hooking",param2=d}) else return itemstack end
if is_hook(pos,name) then minetest.set_node(pos,{name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-1,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-2,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-2,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-3,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-3,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-4,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-4,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-5,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-5,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-6,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-6,z=pos.z}, {name = "hook:rope",param2=d}) else return itemstack end
if is_hook({x=pos.x,y=pos.y-7,z=pos.z},name) then minetest.set_node({x=pos.x,y=pos.y-7,z=pos.z}, {name = "hook:rope",param2=d}) end
if hook.is_hook({x=pos.x,y=pos.y+1,z=pos.z},name) then
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "hook:hooking",param2=d})
minetest.get_node_timer({x=pos.x,y=pos.y+1,z=pos.z}):start(3)
else
return itemstack
end
for i=0,-8, -1 do
if hook.is_hook({x=pos.x,y=pos.y+i,z=pos.z},name) then
minetest.set_node({x=pos.x,y=pos.y+i,z=pos.z}, {name = "hook:rope",param2=d})
else
return itemstack
end
end
end
return itemstack
end,
@ -204,18 +216,20 @@ minetest.register_tool("hook:climb_rope", {
local z=0
local x=0
local name=user:get_player_name()
if slingshot_def(pos,"walkable") then
if hook.slingshot_def(pos,"walkable") then
if d==0 then z=1 end
if d==2 then z=-1 end
if d==1 then x=1 end
if d==3 then x=-1 end
if is_hook({x=pos.x+x,y=pos.y,z=pos.z+z},name) and is_hook({x=pos.x+x,y=pos.y+1,z=pos.z+z},name) then
if hook.is_hook({x=pos.x+x,y=pos.y,z=pos.z+z},name) and hook.is_hook({x=pos.x+x,y=pos.y+1,z=pos.z+z},name) then
minetest.set_node({x=pos.x+x,y=pos.y+1,z=pos.z+z},{name = "hook:hooking",param2=d})
minetest.get_meta({x=pos.x+x,y=pos.y+1,z=pos.z+z}):set_int("a",1)
else return itemstack end
else
return itemstack
end
itemstack:take_item()
for i=0,20,1 do
if is_hook({x=pos.x+x,y=pos.y-i,z=pos.z+z},name) then minetest.set_node({x=pos.x+x,y=pos.y-i,z=pos.z+z},{name = "hook:rope2",param2=d}) else return itemstack end
if hook.is_hook({x=pos.x+x,y=pos.y-i,z=pos.z+z},name) then minetest.set_node({x=pos.x+x,y=pos.y-i,z=pos.z+z},{name = "hook:rope2",param2=d}) else return itemstack end
end
end
return itemstack
@ -244,18 +258,20 @@ minetest.register_tool("hook:climb_rope_locked", {
local z=0
local x=0
local name=user:get_player_name()
if slingshot_def(pos,"walkable") then
if hook.slingshot_def(pos,"walkable") then
if d==0 then z=1 end
if d==2 then z=-1 end
if d==1 then x=1 end
if d==3 then x=-1 end
if is_hook({x=pos.x+x,y=pos.y,z=pos.z+z},name) and is_hook({x=pos.x+x,y=pos.y+1,z=pos.z+z},name) then
if hook.is_hook({x=pos.x+x,y=pos.y,z=pos.z+z},name) and hook.is_hook({x=pos.x+x,y=pos.y+1,z=pos.z+z},name) then
minetest.set_node({x=pos.x+x,y=pos.y+1,z=pos.z+z},{name = "hook:hooking",param2=d})
minetest.get_meta({x=pos.x+x,y=pos.y+1,z=pos.z+z}):set_int("a",1)
else return itemstack end
else
return itemstack
end
itemstack:take_item()
for i=0,20,1 do
if is_hook({x=pos.x+x,y=pos.y-i,z=pos.z+z},name) then
if hook.is_hook({x=pos.x+x,y=pos.y-i,z=pos.z+z},name) then
minetest.set_node({x=pos.x+x,y=pos.y-i,z=pos.z+z},{name = "hook:rope3",param2=d})
minetest.get_meta({x=pos.x+x,y=pos.y-i,z=pos.z+z}):set_string("owner",user:get_player_name())
else
@ -275,12 +291,13 @@ minetest.register_node("hook:rope", {
node_box = {
type = "fixed",
fixed = {
{0, -0.5, -0.0625, 0.0625, 0.5, 0},
{-0.0625, -0.5, -0.5, 0.0625, 0.5, -0.375}
}
},
tiles = {"hook_rope.png"},
paramtype = "light",
paramtype2 = "facedir",
buildable_to = true,
drop = "",
liquid_viscosity = 1,
liquidtype = "source",
@ -310,7 +327,7 @@ minetest.register_node("hook:rope2", {
node_box = {
type = "fixed",
fixed = {
{0, -0.5, -0.0625, 0.0625, 0.5, 0},
{-0.0625, -0.5, -0.5, 0.0625, 0.5, -0.375}
}
},
tiles = {"hook_rope.png"},
@ -348,7 +365,7 @@ minetest.register_node("hook:rope3", {
node_box = {
type = "fixed",
fixed = {
{0, -0.5, -0.0625, 0.0625, 0.5, 0},
{-0.0625, -0.5, -0.5, 0.0625, 0.5, -0.375}
}
},
tiles = {"hook_rope.png"},
@ -364,15 +381,15 @@ minetest.register_node("hook:rope3", {
sunlight_propagates = false,
walkable = false,
is_ground_content = false,
can_dig = function(pos, player)
if minetest.get_meta(pos):get_string("owner")~=player:get_player_name() then
minetest.chat_send_player(player:get_player_name(), "This rope is owned by: ".. minetest.get_meta(pos):get_string("owner"))
return false
end
return true
end,
can_dig = function(pos, player)
if minetest.get_meta(pos):get_string("owner")~=player:get_player_name() then
minetest.chat_send_player(player:get_player_name(), "This rope is owned by: ".. minetest.get_meta(pos):get_string("owner"))
return false
end
return true
end,
groups = {not_in_creative_inventory=1,fleshy = 3, dig_immediate = 3,},
on_punch = function(pos, node, puncher, pointed_thing)
on_punch = function(pos, node, puncher, pointed_thing)
if minetest.get_meta(pos):get_string("owner")~=puncher:get_player_name() then
minetest.chat_send_player(puncher:get_player_name(), "This rope is owned by: ".. minetest.get_meta(pos):get_string("owner"))
return false
@ -384,14 +401,14 @@ on_punch = function(pos, node, puncher, pointed_thing)
for i=0,20,1 do
if minetest.get_node({x=pos.x,y=pos.y+i,z=pos.z}).name=="hook:rope3" or minetest.get_node({x=pos.x,y=pos.y+i,z=pos.z}).name=="hook:hooking" or minetest.get_node({x=pos.x,y=pos.y+i,z=pos.z}).name=="air" then minetest.set_node({x=pos.x,y=pos.y+i,z=pos.z},{name = "air"}) else return false end
end
end,
end,
})
minetest.register_node("hook:hooking", {
description = "Hooking",
drawtype = "mesh",
mesh="hook.obj",
tiles = {"default_stone.png"},
mesh="hook_hook.obj",
tiles = {"hook_rope.png"},
paramtype = "light",
paramtype2 = "facedir",
walkable=false,
@ -399,15 +416,10 @@ minetest.register_node("hook:hooking", {
drop = "",
sunlight_propagates = false,
groups = {not_in_creative_inventory=1},
on_construct = function(pos)
minetest.get_node_timer(pos):start(3)
end,
on_timer = function (pos, elapsed)
if minetest.get_meta(pos):get_int("a")==1 then return false end
local r=minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name
if r~="hook:rope" then
minetest.set_node(pos, {name="air"})
minetest.remove_node(pos)
return false
end
return true
@ -419,20 +431,20 @@ minetest.register_tool("hook:mba", {
description = "Mouth breather assembly",
range = 1,
inventory_image = "hook_mba.png",
on_use=function(itemstack, user, pointed_thing)
local pos=user:get_pos()
pos.y=pos.y+1.5
if slingshot_def(pos,"drowning")==0 then
itemstack:set_wear(1)
else
local use=itemstack:get_wear()+(65536/10)
if use<65536 then
itemstack:set_wear(use)
user:set_breath(11)
on_use=function(itemstack, user, pointed_thing)
local pos=user:get_pos()
pos.y=pos.y+1.5
if hook.slingshot_def(pos,"drowning")==0 then
itemstack:set_wear(1)
else
local use=itemstack:get_wear()+(65536/10)
if use<65536 then
itemstack:set_wear(use)
user:set_breath(11)
end
end
return itemstack
end
return itemstack
end,
})
minetest.register_craft({
@ -483,4 +495,4 @@ minetest.register_craft({
{"","default:steelblock",""},
{"","default:steel_ingot",""},
}
})
})

627
models/hook_hook.obj Normal file
View File

@ -0,0 +1,627 @@
# Blender v2.79 (sub 0) OBJ File: 'hook.blend'
# www.blender.org
mtllib hook.mtl
o NurbsPath.004_CUNurbsPath.003
v -0.005416 -0.565325 0.040990
v 0.000000 -0.565094 0.046401
v 0.005416 -0.565325 0.040990
v 0.000000 -0.565556 0.035579
v -0.027080 -0.430996 0.027621
v 0.000000 -0.426448 0.054316
v 0.027080 -0.430996 0.027621
v 0.000000 -0.435544 0.000926
v -0.027080 -0.375535 0.015937
v 0.000000 -0.368796 0.042164
v 0.027080 -0.375536 0.015937
v 0.000000 -0.382275 -0.010291
v -0.027080 -0.327221 0.001093
v 0.000000 -0.317929 0.026529
v 0.027080 -0.327221 0.001093
v 0.000000 -0.336512 -0.024343
v -0.027080 -0.285559 -0.016780
v 0.000000 -0.273391 0.007413
v 0.027080 -0.285559 -0.016780
v 0.000000 -0.297726 -0.040972
v -0.027080 -0.250056 -0.037549
v 0.000000 -0.234815 -0.015166
v 0.027080 -0.250057 -0.037549
v 0.000000 -0.265298 -0.059933
v -0.027080 -0.220222 -0.061086
v 0.000000 -0.201933 -0.041115
v 0.027080 -0.220222 -0.061086
v 0.000000 -0.238510 -0.081057
v -0.027080 -0.195561 -0.087258
v 0.000000 -0.174525 -0.070205
v 0.027080 -0.195561 -0.087258
v 0.000000 -0.216597 -0.104312
v -0.027080 -0.175582 -0.115936
v 0.000000 -0.152325 -0.102065
v 0.027080 -0.175582 -0.115936
v 0.000000 -0.198840 -0.129808
v -0.027080 -0.159792 -0.146989
v 0.000000 -0.134927 -0.136263
v 0.027080 -0.159792 -0.146988
v 0.000000 -0.184657 -0.157714
v -0.027080 -0.147698 -0.180284
v 0.000000 -0.121787 -0.172415
v 0.027080 -0.147698 -0.180284
v 0.000000 -0.173609 -0.188154
v -0.027080 -0.138807 -0.215693
v 0.000000 -0.112281 -0.210243
v 0.027080 -0.138807 -0.215693
v 0.000000 -0.165333 -0.221142
v -0.027080 -0.128664 -0.292325
v 0.000000 -0.101661 -0.290277
v 0.027080 -0.128664 -0.292325
v 0.000000 -0.155666 -0.294374
v -0.027080 -0.125142 -0.442362
v -0.000000 -0.098062 -0.442362
v 0.027080 -0.125142 -0.442362
v 0.000000 -0.152222 -0.442362
v -0.027080 -0.132530 -0.441949
v 0.000000 -0.132530 -0.469029
v 0.027080 -0.132530 -0.441949
v -0.000000 -0.132530 -0.414869
v -0.027080 -0.561957 -0.441949
v 0.000000 -0.561957 -0.469029
v 0.027080 -0.561957 -0.441949
v -0.000000 -0.561957 -0.414869
v 0.005416 -0.565325 -0.924887
v -0.000000 -0.565094 -0.930299
v -0.005416 -0.565325 -0.924887
v -0.000000 -0.565556 -0.919476
v 0.027080 -0.430996 -0.911519
v -0.000000 -0.426448 -0.938214
v -0.027080 -0.430996 -0.911519
v -0.000000 -0.435544 -0.884824
v 0.027080 -0.375535 -0.899834
v -0.000000 -0.368796 -0.926062
v -0.027080 -0.375536 -0.899834
v -0.000000 -0.382275 -0.873606
v 0.027080 -0.327221 -0.884990
v -0.000000 -0.317929 -0.910426
v -0.027080 -0.327221 -0.884990
v -0.000000 -0.336512 -0.859554
v 0.027080 -0.285559 -0.867118
v -0.000000 -0.273391 -0.891311
v -0.027080 -0.285559 -0.867118
v -0.000000 -0.297726 -0.842926
v 0.027080 -0.250056 -0.846348
v -0.000000 -0.234815 -0.868732
v -0.027080 -0.250057 -0.846348
v -0.000000 -0.265298 -0.823965
v 0.027080 -0.220222 -0.822812
v -0.000000 -0.201933 -0.842783
v -0.027080 -0.220222 -0.822812
v -0.000000 -0.238510 -0.802841
v 0.027080 -0.195561 -0.796639
v -0.000000 -0.174525 -0.813693
v -0.027080 -0.195561 -0.796639
v -0.000000 -0.216597 -0.779586
v 0.027080 -0.175582 -0.767961
v -0.000000 -0.152325 -0.781833
v -0.027080 -0.175582 -0.767961
v -0.000000 -0.198840 -0.754090
v 0.027080 -0.159792 -0.736909
v -0.000000 -0.134927 -0.747635
v -0.027080 -0.159792 -0.736909
v -0.000000 -0.184657 -0.726183
v 0.027080 -0.147698 -0.703613
v -0.000000 -0.121787 -0.711483
v -0.027080 -0.147698 -0.703614
v -0.000000 -0.173609 -0.695744
v 0.027080 -0.138807 -0.668205
v -0.000000 -0.112281 -0.673654
v -0.027080 -0.138807 -0.668205
v -0.000000 -0.165333 -0.662755
v 0.027080 -0.128664 -0.591572
v -0.000000 -0.101661 -0.593621
v -0.027080 -0.128664 -0.591572
v -0.000000 -0.155666 -0.589524
v 0.027080 -0.125142 -0.441536
v 0.000000 -0.098062 -0.441536
v -0.027080 -0.125142 -0.441536
v -0.000000 -0.152222 -0.441536
v 0.482939 -0.565325 -0.436533
v 0.488350 -0.565094 -0.441949
v 0.482939 -0.565325 -0.447365
v 0.477527 -0.565556 -0.441949
v 0.469570 -0.430996 -0.414869
v 0.496265 -0.426448 -0.441949
v 0.469570 -0.430996 -0.469029
v 0.442875 -0.435544 -0.441949
v 0.457885 -0.375535 -0.414869
v 0.484113 -0.368796 -0.441949
v 0.457885 -0.375536 -0.469029
v 0.431657 -0.382275 -0.441949
v 0.443042 -0.327221 -0.414869
v 0.468477 -0.317929 -0.441949
v 0.443042 -0.327221 -0.469029
v 0.417606 -0.336512 -0.441949
v 0.425169 -0.285559 -0.414869
v 0.449362 -0.273391 -0.441949
v 0.425169 -0.285559 -0.469029
v 0.400977 -0.297726 -0.441949
v 0.404400 -0.250056 -0.414869
v 0.426783 -0.234815 -0.441949
v 0.404400 -0.250057 -0.469029
v 0.382016 -0.265298 -0.441949
v 0.380863 -0.220222 -0.414869
v 0.400834 -0.201933 -0.441949
v 0.380863 -0.220222 -0.469029
v 0.360892 -0.238510 -0.441949
v 0.354690 -0.195561 -0.414869
v 0.371744 -0.174525 -0.441949
v 0.354690 -0.195561 -0.469029
v 0.337637 -0.216597 -0.441949
v 0.326013 -0.175582 -0.414869
v 0.339884 -0.152325 -0.441949
v 0.326013 -0.175582 -0.469029
v 0.312141 -0.198840 -0.441949
v 0.294960 -0.159792 -0.414869
v 0.305686 -0.134927 -0.441949
v 0.294960 -0.159792 -0.469029
v 0.284235 -0.184657 -0.441949
v 0.261665 -0.147698 -0.414869
v 0.269534 -0.121787 -0.441949
v 0.261665 -0.147698 -0.469029
v 0.253795 -0.173609 -0.441949
v 0.226256 -0.138807 -0.414869
v 0.231706 -0.112281 -0.441949
v 0.226256 -0.138807 -0.469029
v 0.220806 -0.165333 -0.441949
v 0.149624 -0.128664 -0.414869
v 0.151672 -0.101661 -0.441949
v 0.149624 -0.128664 -0.469029
v 0.147575 -0.155666 -0.441949
v -0.000413 -0.125142 -0.414869
v -0.000413 -0.098062 -0.441949
v -0.000413 -0.125142 -0.469029
v -0.000413 -0.152222 -0.441949
v -0.482939 -0.565325 -0.447365
v -0.488350 -0.565094 -0.441949
v -0.482939 -0.565325 -0.436533
v -0.477527 -0.565556 -0.441949
v -0.469570 -0.430996 -0.469029
v -0.496265 -0.426448 -0.441949
v -0.469570 -0.430996 -0.414869
v -0.442875 -0.435544 -0.441949
v -0.457885 -0.375535 -0.469029
v -0.484113 -0.368796 -0.441949
v -0.457885 -0.375536 -0.414869
v -0.431657 -0.382275 -0.441949
v -0.443042 -0.327221 -0.469029
v -0.468477 -0.317929 -0.441949
v -0.443042 -0.327221 -0.414869
v -0.417606 -0.336512 -0.441949
v -0.425169 -0.285559 -0.469029
v -0.449362 -0.273391 -0.441949
v -0.425169 -0.285559 -0.414869
v -0.400977 -0.297726 -0.441949
v -0.404400 -0.250056 -0.469029
v -0.426783 -0.234815 -0.441949
v -0.404400 -0.250057 -0.414869
v -0.382016 -0.265298 -0.441949
v -0.380863 -0.220222 -0.469029
v -0.400834 -0.201933 -0.441949
v -0.380863 -0.220222 -0.414869
v -0.360892 -0.238510 -0.441949
v -0.354690 -0.195561 -0.469029
v -0.371744 -0.174525 -0.441949
v -0.354690 -0.195561 -0.414869
v -0.337637 -0.216597 -0.441949
v -0.326013 -0.175582 -0.469029
v -0.339884 -0.152325 -0.441949
v -0.326013 -0.175582 -0.414869
v -0.312141 -0.198840 -0.441949
v -0.294960 -0.159792 -0.469029
v -0.305686 -0.134927 -0.441949
v -0.294960 -0.159792 -0.414869
v -0.284235 -0.184657 -0.441949
v -0.261665 -0.147698 -0.469029
v -0.269534 -0.121787 -0.441949
v -0.261665 -0.147698 -0.414869
v -0.253795 -0.173609 -0.441949
v -0.226256 -0.138807 -0.469029
v -0.231706 -0.112281 -0.441949
v -0.226256 -0.138807 -0.414869
v -0.220806 -0.165333 -0.441949
v -0.149624 -0.128664 -0.469029
v -0.151672 -0.101661 -0.441949
v -0.149624 -0.128664 -0.414869
v -0.147575 -0.155666 -0.441949
v 0.000413 -0.125142 -0.469029
v 0.000413 -0.098062 -0.441949
v 0.000413 -0.125142 -0.414869
v 0.000413 -0.152222 -0.441949
vn -0.9948 0.1022 0.0000
vn -0.0342 -0.0722 -0.9968
vn -0.0554 -0.6337 -0.7716
vn -0.8164 -0.5775 0.0000
vn 0.0342 -0.0722 -0.9968
vn 0.9948 0.1022 0.0000
vn 0.8164 -0.5775 0.0000
vn 0.0554 -0.6337 -0.7716
vn -0.9968 -0.0722 -0.0342
vn 0.0000 0.1022 -0.9948
vn 0.0000 -0.5775 -0.8164
vn -0.7716 -0.6337 -0.0554
vn 0.9968 -0.0722 0.0342
vn 0.0000 0.1022 0.9948
vn 0.0000 -0.5775 0.8164
vn 0.7716 -0.6337 0.0554
vn -1.0000 0.0002 -0.0000
vn -0.9997 0.0079 0.0227
vn 0.0000 -0.3218 -0.9468
vn 0.0000 -0.2474 -0.9689
vn 0.0000 -0.2521 -0.9677
vn -0.9968 -0.0722 0.0342
vn 1.0000 0.0002 -0.0000
vn 0.9997 0.0079 0.0227
vn 0.0000 0.3220 0.9467
vn 0.0000 0.2478 0.9688
vn -0.9997 0.0079 -0.0227
vn 0.0000 0.3220 -0.9467
vn 0.0000 0.2478 -0.9688
vn -0.9467 0.3220 0.0000
vn -0.0227 0.0079 -0.9997
vn 0.0000 0.0002 -1.0000
vn -0.9688 0.2478 0.0000
vn -0.0248 0.0127 -0.9996
vn 0.8928 -0.4504 0.0000
vn 0.9468 -0.3218 0.0000
vn -0.0248 0.0127 0.9996
vn -0.8928 0.4505 0.0000
vn -0.0227 0.0079 0.9997
vn -0.7716 -0.6337 0.0554
vn 0.0000 -0.6912 -0.7226
vn 0.8260 0.5636 0.0000
vn 0.0257 0.0176 0.9995
vn 0.0248 0.0127 0.9996
vn 0.8928 0.4505 0.0000
vn -0.9995 0.0176 -0.0257
vn 0.0000 0.5636 -0.8260
vn 0.0000 0.4505 -0.8928
vn -0.9996 0.0127 -0.0248
vn -0.0257 0.0176 -0.9995
vn 0.8261 -0.5634 0.0000
vn -0.0257 0.0176 0.9995
vn -0.8260 0.5636 0.0000
vn -0.0244 0.0224 -0.9995
vn 0.7374 -0.6754 0.0000
vn 0.0000 0.6754 -0.7374
vn 0.9995 0.0224 -0.0244
vn 0.9995 0.0176 -0.0257
vn -0.0244 0.0224 0.9995
vn -0.9995 0.0224 0.0244
vn 0.0000 -0.6754 -0.7374
vn 0.0000 -0.5634 -0.8261
vn -0.9995 0.0176 0.0257
vn 0.0000 -0.7762 -0.6304
vn 0.9995 0.0256 0.0209
vn 0.9995 0.0224 0.0244
vn 0.0244 0.0224 -0.9995
vn 0.0209 0.0256 -0.9995
vn 0.6304 0.7763 0.0000
vn 0.7374 0.6754 0.0000
vn -0.9995 0.0224 -0.0244
vn -0.9995 0.0256 -0.0209
vn 0.0000 0.7763 -0.6304
vn -0.0000 0.0002 1.0000
vn 0.0227 0.0079 0.9997
vn -0.9468 -0.3218 0.0000
vn -0.9689 -0.2474 0.0000
vn -0.9677 -0.2521 0.0000
vn 0.0342 -0.0722 0.9968
vn 0.9995 0.0266 -0.0161
vn 0.0000 -0.8580 0.5136
vn 0.0000 -0.7762 0.6304
vn 0.9995 0.0256 -0.0209
vn 0.0000 0.8580 -0.5137
vn -0.5137 0.8580 0.0000
vn -0.0161 0.0266 -0.9995
vn -0.0209 0.0256 -0.9995
vn -0.6304 0.7763 0.0000
vn 0.5136 -0.8580 0.0000
vn 0.6304 -0.7762 0.0000
vn 0.0000 -0.9274 0.3740
vn -0.9996 0.0253 -0.0105
vn -0.9995 0.0266 -0.0161
vn 0.0105 0.0253 -0.9996
vn 0.3742 0.9273 0.0000
vn 0.5137 0.8580 0.0000
vn 0.0161 0.0266 -0.9995
vn -0.0105 0.0253 0.9996
vn -0.3742 0.9273 0.0000
vn -0.0161 0.0266 0.9995
vn -0.0105 0.0253 -0.9996
vn 0.3740 -0.9274 0.0000
vn 0.0000 -0.9274 -0.3740
vn 0.0000 -0.9565 -0.2918
vn 0.0000 -0.9843 -0.1762
vn 0.9997 0.0252 0.0042
vn 1.0000 -0.0001 0.0003
vn 0.9996 0.0253 0.0105
vn 0.0000 0.9563 0.2924
vn 0.0000 0.9839 0.1785
vn -0.9997 0.0252 0.0042
vn -1.0000 -0.0001 0.0003
vn -0.9996 0.0253 0.0105
vn 0.0000 0.9273 0.3742
vn -0.0003 -0.0001 1.0000
vn -0.0042 0.0252 0.9997
vn -0.1785 0.9839 0.0000
vn -0.2924 0.9563 0.0000
vn 0.0003 -0.0001 1.0000
vn 0.0042 0.0252 0.9997
vn -0.1762 -0.9843 0.0000
vn -0.2918 -0.9565 0.0000
vn -0.3740 -0.9274 0.0000
vn 0.0105 0.0253 0.9996
vn 0.0606 0.9981 0.0000
vn 0.0011 0.0105 0.9999
vn 0.0005 -0.0000 1.0000
vn 0.1785 0.9839 0.0000
vn -0.0597 -0.9982 0.0000
vn -0.0606 0.9981 0.0000
vn -0.0011 0.0105 -0.9999
vn -0.0005 -0.0000 -1.0000
vn -0.0042 0.0252 -0.9997
vn 0.0000 -0.9982 0.0597
vn -0.9999 0.0105 -0.0011
vn -1.0000 -0.0000 -0.0005
vn -0.9997 0.0252 -0.0042
vn 0.0000 -0.9843 0.1762
vn -0.8165 -0.5773 0.0000
vn 0.0000 -0.5773 0.8165
vn 0.0000 0.0000 1.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.5773 -0.8165
vn 0.0000 0.0000 -1.0000
vn 0.8165 -0.5773 0.0000
vn 1.0000 0.0000 0.0000
vn -0.0342 -0.0722 0.9968
vn -0.0554 -0.6337 0.7716
vn 0.9968 -0.0722 -0.0342
vn 0.7716 -0.6337 -0.0554
vn 0.0554 -0.6337 0.7716
vn -0.7226 -0.6912 0.0000
vn 0.9997 0.0079 -0.0227
vn 0.0000 -0.3218 0.9468
vn 0.0000 -0.2474 0.9689
vn 0.0000 -0.2521 0.9677
vn -0.9996 0.0127 0.0248
vn 0.0000 -0.4504 -0.8928
vn 0.0248 0.0127 -0.9996
vn 0.9467 0.3220 0.0000
vn 0.0227 0.0079 -0.9997
vn -0.8928 -0.4504 0.0000
vn 0.9996 0.0127 -0.0248
vn 0.0257 0.0176 -0.9995
vn -0.8261 -0.5634 0.0000
vn -0.7374 0.6754 0.0000
vn 0.0000 -0.6754 0.7374
vn 0.0000 -0.5634 0.8261
vn -0.0209 0.0256 0.9995
vn 0.0000 0.7763 0.6304
vn 0.0000 0.6754 0.7374
vn 0.0244 0.0224 0.9995
vn 0.0000 -0.8580 -0.5136
vn 0.9995 0.0266 0.0161
vn -0.5136 -0.8580 0.0000
vn 0.0000 0.9273 -0.3742
vn 0.9996 0.0253 -0.0105
vn 0.0161 0.0266 0.9995
vn -0.0003 -0.0001 -1.0000
vn 0.0003 -0.0001 -1.0000
vn 0.0042 0.0252 -0.9997
vn 0.2924 0.9563 0.0000
vn 0.0000 0.9563 -0.2924
vn 0.0000 0.9839 -0.1785
vn 0.9997 0.0252 -0.0042
vn 1.0000 -0.0001 -0.0003
vn 0.0000 -0.9565 0.2918
vn -1.0000 -0.0001 -0.0003
vn 0.0011 0.0105 -0.9999
vn 0.0005 -0.0000 -1.0000
vn -0.0005 -0.0000 1.0000
vn -0.0011 0.0105 0.9999
vn 0.0000 -0.9982 -0.0597
vn 0.9999 0.0105 0.0011
vn 1.0000 -0.0000 0.0005
vn 0.9677 -0.2521 0.0000
vn 0.7226 -0.6912 0.0000
vn 0.9689 -0.2474 0.0000
vn 0.9688 0.2478 0.0000
vn 0.0000 0.4505 0.8928
vn 0.9996 0.0127 0.0248
vn 0.9995 0.0176 0.0257
vn 0.0000 0.5636 0.8260
vn -0.7374 -0.6754 0.0000
vn -0.9995 0.0256 0.0209
vn 0.0209 0.0256 0.9995
vn -0.6304 -0.7762 0.0000
vn 0.0000 0.8580 0.5137
vn -0.9995 0.0266 0.0161
vn 0.1762 -0.9843 0.0000
vn 0.2918 -0.9565 0.0000
vn 0.0597 -0.9982 0.0000
vn 0.0000 0.9981 0.0606
vn -0.9999 0.0105 0.0011
vn -1.0000 -0.0000 0.0005
vn 0.0000 -0.6912 0.7226
vn 0.0000 -0.4504 0.8928
vn 1.0000 -0.0000 -0.0005
vn 0.9999 0.0105 -0.0011
vn 0.0000 0.9981 -0.0606
usemtl None
s 1
f 182//1 181//2 177//3 178//4
f 127//5 126//6 122//7 123//8
f 71//9 70//10 66//11 67//12
f 7//13 6//14 2//15 3//16
f 9//17 13//18 16//19 12//20 8//21 5//22
f 11//23 15//24 14//25 10//26 6//14 7//13
f 75//17 79//27 78//28 74//29 70//10 71//9
f 190//30 189//31 185//32 181//2 182//1 186//33
f 193//34 196//35 192//36 189//31
f 195//37 194//38 190//30 191//39
f 1//40 5//22 8//21 4//41
f 196//35 195//37 191//39 192//36
f 142//42 141//43 137//44 138//45
f 87//46 86//47 82//48 83//49
f 193//34 197//50 200//51 196//35
f 199//52 198//53 194//38 195//37
f 201//54 204//55 200//51 197//50
f 90//56 89//57 85//58 86//47
f 204//55 203//59 199//52 200//51
f 25//60 28//61 24//62 21//63
f 28//61 32//64 31//65 27//66
f 147//67 151//68 150//69 146//70
f 91//71 95//72 94//73 90//56
f 129//74 133//75 136//76 132//77 128//78 125//79
f 97//80 100//81 96//82 93//83
f 98//84 97//80 93//83 94//73
f 210//85 209//86 205//87 206//88
f 209//86 212//89 208//90 205//87
f 104//91 103//92 99//93 100//81
f 159//94 158//95 154//96 155//97
f 215//98 214//99 210//85 211//100
f 209//86 213//101 216//102 212//89
f 40//103 44//104 48//105 47//106 43//107 39//108
f 42//109 46//110 45//111 41//112 37//113 38//114
f 215//98 219//115 223//116 222//117 218//118 214//99
f 161//119 165//120 168//121 164//122 160//123 157//124
f 170//125 174//125 173//126 169//127 165//120 166//128
f 165//120 169//127 173//126 176//129 172//129 168//121
f 226//130 230//130 229//131 225//132 221//133 222//117
f 116//134 120//134 119//135 115//136 111//137 112//138
f 61//139 64//140 60//141 57//142
f 62//143 61//139 57//142 58//144
f 60//141 64//140 63//145 59//146
f 59//146 63//145 62//143 58//144
f 6//14 5//22 1//40 2//15
f 183//147 182//1 178//4 179//148
f 70//10 69//149 65//150 66//11
f 121//151 125//79 128//78 124//152
f 73//23 77//153 80//154 76//155 72//156 69//149
f 187//74 191//39 190//30 186//33 182//1 183//147
f 78//28 77//153 73//23 69//149 70//10 74//29
f 80//154 79//27 75//17 71//9 72//156 76//155
f 17//157 20//158 16//19 13//18
f 194//38 193//34 189//31 190//30
f 139//159 138//45 134//160 135//161
f 140//162 139//159 135//161 136//76
f 86//47 85//58 81//163 82//48
f 143//164 142//42 138//45 139//159
f 198//53 197//50 193//34 194//38
f 140//162 144//165 143//164 139//159
f 202//166 206//88 205//87 201//54
f 203//59 202//166 198//53 199//52
f 202//166 201//54 197//50 198//53
f 89//57 92//167 88//168 85//58
f 204//55 208//90 207//169 203//59
f 27//66 31//65 30//170 26//171
f 203//59 207//169 206//88 202//166
f 89//57 93//83 96//82 92//167
f 146//70 145//172 141//43 142//42
f 211//100 210//85 206//88 207//169
f 96//82 100//81 99//93 95//72
f 32//64 36//173 35//174 31//65
f 160//123 159//94 155//97 156//175
f 214//99 213//101 209//86 210//85
f 102//176 101//177 97//80 98//84
f 153//178 157//124 160//123 156//175
f 218//118 222//117 221//133 217//179 213//101 214//99
f 159//94 163//180 167//181 166//128 162//182 158//95
f 106//183 110//184 109//185 105//186 101//177 102//176
f 104//91 108//187 112//138 111//137 107//188 103//92
f 172//129 176//129 175//189 171//190 167//181 168//121
f 171//190 175//189 174//125 170//125 166//128 167//181
f 227//191 231//192 230//130 226//130 222//117 223//116
f 52//193 56//193 55//194 51//195 47//106 48//105
f 177//3 181//2 184//196 180//197
f 126//6 125//79 121//151 122//7
f 180//197 184//196 183//147 179//148
f 192//36 191//39 187//74 183//147 184//196 188//198
f 131//32 135//161 134//160 130//199 126//6 127//5
f 185//32 189//31 192//36 188//198 184//196 181//2
f 83//49 82//48 78//28 79//27
f 18//200 17//157 13//18 14//25
f 82//48 81//163 77//153 78//28
f 20//158 19//201 15//24 16//19
f 155//97 154//96 150//69 151//68
f 23//202 22//203 18//200 19//201
f 196//35 200//51 199//52 195//37
f 137//44 141//43 144//165 140//162
f 92//167 91//71 87//46 88//168
f 26//171 25//60 21//63 22//203
f 27//66 26//171 22//203 23//202
f 145//172 148//204 144//165 141//43
f 25//60 29//205 32//64 28//61
f 26//171 30//170 29//205 25//60
f 90//56 94//73 93//83 89//57
f 145//172 149//206 152//207 148//204
f 208//90 212//89 211//100 207//169
f 34//208 33//209 29//205 30//170
f 154//96 153//178 149//206 150//69
f 33//209 36//173 32//64 29//205
f 97//80 101//177 104//91 100//81
f 103//92 102//176 98//84 99//93
f 216//102 215//98 211//100 212//89
f 22//203 21//63 17//157 18//200
f 105//186 109//185 112//138 108//187 104//91 101//177
f 103//92 107//188 111//137 110//184 106//183 102//176
f 217//179 221//133 224//210 220//211 216//102 213//101
f 16//19 15//24 11//23 7//13 8//21 12//20
f 124//152 128//78 127//5 123//8
f 221//133 225//132 229//131 232//212 228//212 224//210
f 50//213 54//213 53//214 49//215 45//111 46//110
f 51//195 55//194 54//213 50//213 46//110 47//106
f 216//102 220//211 224//210 223//116 219//115 215//98
f 4//41 8//21 7//13 3//16
f 65//150 69//149 72//156 68//216
f 68//216 72//156 71//9 67//12
f 136//76 135//161 131//32 127//5 128//78 132//77
f 41//112 45//111 48//105 44//104 40//103 37//113
f 134//160 133//75 129//74 125//79 126//6 130//199
f 14//25 13//18 9//17 5//22 6//14 10//26
f 137//44 140//162 136//76 133//75
f 138//45 137//44 133//75 134//160
f 19//201 18//200 14//25 15//24
f 81//163 84//217 80//154 77//153
f 20//158 24//62 23//202 19//201
f 81//163 85//58 88//168 84//217
f 84//217 88//168 87//46 83//49
f 17//157 21//63 24//62 20//158
f 148//204 147//67 143//164 144//165
f 147//67 146//70 142//42 143//164
f 91//71 90//56 86//47 87//46
f 28//61 27//66 23//202 24//62
f 148//204 152//207 151//68 147//67
f 146//70 150//69 149//206 145//172
f 92//167 96//82 95//72 91//71
f 201//54 205//87 208//90 204//55
f 153//178 156//175 152//207 149//206
f 99//93 98//84 94//73 95//72
f 35//174 34//208 30//170 31//65
f 152//207 156//175 155//97 151//68
f 33//209 37//113 40//103 36//173
f 39//108 38//114 34//208 35//174
f 38//114 37//113 33//209 34//208
f 40//103 39//108 35//174 36//173
f 84//217 83//49 79//27 80//154
f 162//182 166//128 165//120 161//119 157//124 158//95
f 228//212 232//212 231//192 227//191 223//116 224//210
f 39//108 43//107 47//106 46//110 42//109 38//114
f 160//123 164//122 168//121 167//181 163//180 159//94
f 158//95 157//124 153//178 154//96
f 109//185 113//218 117//219 120//134 116//134 112//138
f 114//220 118//220 117//219 113//218 109//185 110//184
f 115//136 119//135 118//220 114//220 110//184 111//137
f 45//111 49//215 53//214 56//193 52//193 48//105
f 1//40 4//41 3//16 2//15
f 121//151 124//152 123//8 122//7
f 65//150 68//216 67//12 66//11
f 177//3 180//197 179//148 178//4
f 64//140 61//139 62//143 63//145

View File

@ -1,72 +1,62 @@
pchest={}
minetest.register_craft({
output = "hook:pchest",
recipe = {
{"default:stick","default:stick","default:stick"},
{"default:stick","default:chest_locked", "default:diamond"},
{"default:stick","default:chest_locked", "default:diamondblock"},
{"default:stick","default:stick","default:stick"},
}
})
pchest.setpchest=function(pos,user)
local meta = minetest.get_meta(pos)
meta:set_string("owner", user:get_player_name())
meta:set_int("state", 0)
meta:get_inventory():set_size("main", 32)
meta:get_inventory():set_size("trans", 1)
meta:set_string("formspec",
"size[8,8]" ..
"list[context;main;0,0;8,4;]" ..
"list[context;trans;0,0;0,0;]" ..
"list[current_player;main;0,4.3;8,4;]" ..
"listring[current_player;main]" ..
"listring[current_name;main]" ..
default.gui_bg ..
default.gui_bg_img ..
default.gui_slots ..
default.get_hotbar_bg(0,4.3))
meta:set_string("infotext", "PChest by: " .. user:get_player_name())
local meta = minetest.get_meta(pos)
meta:set_string("owner", user:get_player_name())
meta:set_int("state", 0)
meta:get_inventory():set_size("main", 32)
meta:get_inventory():set_size("trans", 1)
meta:set_string("formspec",
"size[8,8]" ..
"list[context;main;0,0;8,4;]" ..
"list[context;trans;0,0;0,0;]" ..
"list[current_player;main;0,4.3;8,4;]" ..
"listring[current_player;main]" ..
"listring[current_name;main]")
meta:set_string("infotext", "PChest by: " .. user:get_player_name())
end
minetest.register_tool("hook:pchest", {
description = "Portable locked chest",
inventory_image = "hook_extras_chest3.png",
on_place = function(itemstack, user, pointed_thing)
if minetest.is_protected(pointed_thing.above,user:get_player_name()) or slingshot_def(pointed_thing.above,"walkable") then
return itemstack
end
local p=minetest.dir_to_facedir(user:get_look_dir())
local item=itemstack:to_table()
local meta=minetest.deserialize(item["metadata"])
minetest.set_node(pointed_thing.above, {name = "hook:pchest_node",param1="",param2=p})
pchest.setpchest(pointed_thing.above,user)
on_place = function(itemstack, user, pointed_thing)
if minetest.is_protected(pointed_thing.above,user:get_player_name()) or hook.slingshot_def(pointed_thing.above,"walkable") then
return itemstack
end
local p=minetest.dir_to_facedir(user:get_look_dir())
local item=itemstack:to_table()
local meta=minetest.deserialize(item["metadata"])
minetest.set_node(pointed_thing.above, {name = "hook:pchest_node",param1="",param2=p})
pchest.setpchest(pointed_thing.above,user)
minetest.sound_play("default_place_node_hard", {pos=pointed_thing.above, gain = 1.0, max_hear_distance = 5,})
if meta==nil then
itemstack:take_item()
return itemstack
end
local s=meta.stuff
local its=meta.stuff.split(meta.stuff,",",",")
local nmeta=minetest.get_meta(pointed_thing.above)
for i,it in pairs(its) do
if its~="" then
nmeta:get_inventory():set_stack("main",i, ItemStack(it))
end
end
minetest.sound_play("default_place_node_hard", {pos=pointed_thing.above, gain = 1.0, max_hear_distance = 5,})
if meta==nil then
itemstack:take_item()
return itemstack:take_item()
end,
return itemstack
end
local s=meta.stuff
local its=meta.stuff.split(meta.stuff,",",",")
local nmeta=minetest.get_meta(pointed_thing.above)
for i,it in pairs(its) do
if its~="" then
nmeta:get_inventory():set_stack("main",i, ItemStack(it))
end
end
itemstack:take_item()
return itemstack:take_item()
end
})
minetest.register_node("hook:pchest_node", {
description = "Portable locked chest",
tiles = {"hook_extras_chest2.png","hook_extras_chest2.png","hook_extras_chest1.png","hook_extras_chest1.png","hook_extras_chest1.png","hook_extras_chest3.png"},
@ -74,49 +64,48 @@ minetest.register_node("hook:pchest_node", {
drop="hook:pchest",
paramtype2 = "facedir",
tube = {insert_object = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local added = inv:add_item("main", stack)
--after_inventory_change(pos)
return added
end,
can_insert = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:room_for_item("main", stack)
end,
input_inventory = "main",
connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}},
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local added = inv:add_item("main", stack)
return added
end,
can_insert = function(pos, node, stack, direction)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:room_for_item("main", stack)
end,
input_inventory = "main",
connect_sides = {left = 1, right = 1, front = 1, back = 1, top = 1, bottom = 1}},
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local owner = minetest.get_meta(pos):get_string("owner")
if (stack:get_name()~="hook:pchest") and (owner==player:get_player_name() or owner=="") then
if owner == player:get_player_name() or owner == "" then
if minetest.deserialize(stack:get_metadata())~=nil then
minetest.chat_send_player(player:get_player_name(), "Warning: the meta (information that is saved in the item)")
minetest.chat_send_player(player:get_player_name(), "will be lost when pick up the chest")
minetest.chat_send_player(player:get_player_name(), "Not allowed to put in items with metadata")
return 0
end
return stack:get_count()
end
return 0
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
local owner = minetest.get_meta(pos):get_string("owner")
if owner==player:get_player_name() or owner=="" then
return stack:get_count()
end
return 0
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
local owner = minetest.get_meta(pos):get_string("owner")
if owner==player:get_player_name() or owner=="" then
return count
end
return 0
end,
can_dig = function(pos, player)
can_dig = function(pos, player)
local owner = minetest.get_meta(pos):get_string("owner")
return (owner=="" and minetest.get_meta(pos):get_inventory():is_empty("main"))
end,
on_punch = function(pos, node, player, pointed_thing)
on_punch = function(pos, node, player, pointed_thing)
if minetest.is_protected(pos,player:get_player_name()) then
return false
end
@ -140,5 +129,5 @@ on_punch = function(pos, node, player, pointed_thing)
minetest.set_node(pos, {name = "air"})
minetest.sound_play("default_dig_dig_immediate", {pos=pos, gain = 1.0, max_hear_distance = 5,})
end
end,
end
})

View File

@ -1,12 +1,11 @@
minetest.register_entity("hook:power",{
hp_max = 100,
physical = true,
weight = 0,
collisionbox = {-0.2,-0.2,-0.2, 0.2,0.2,0.2},
visual = "upright_sprite",
visual_size = {x=1, y=1},
textures = {"hook_hooking.png"},
spritediv = {x=1, y=1},
visual = "mesh",
mesh = "hook_hook.obj",
visual_size = {x=10, y=10},
textures = {"hook_rope.png"},
is_visible = true,
makes_footstep_sound = false,
automatic_rotate = false,
@ -25,25 +24,29 @@ on_activate=function(self, staticdata)
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
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,
end,
on_step= function(self, dtime)
self.timer2=self.timer2+dtime
local pos=self.object:get_pos()
local kill=0
if slingshot_def({x=pos.x+self.d.x,y=pos.y,z=pos.z+self.d.z},"walkable") and slingshot_def({x=pos.x+self.d.x,y=pos.y+1,z=pos.z+self.d.z},"walkable")==false
and is_hook(pos,self.uname) and is_hook({x=pos.x,y=pos.y+1,z=pos.z},self.uname) then
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 is_hook({x=pos.x,y=pos.y+1,z=pos.z},self.uname) then
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
@ -51,7 +54,11 @@ on_step= function(self, dtime)
end
self.user:get_inventory():remove_item("main", "hook:climb_rope_locked")
for i=0,20,1 do
if 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
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
@ -59,7 +66,7 @@ on_step= function(self, dtime)
self.object:remove()
return self
end
if is_hook({x=pos.x,y=pos.y+1,z=pos.z},self.uname) then
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
@ -67,7 +74,11 @@ on_step= function(self, dtime)
end
self.user:get_inventory():remove_item("main", "hook:climb_rope")
for i=0,20,1 do
if 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
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