From b5cf0fdc7895bfd70a01c3d78fcd9911a014a046 Mon Sep 17 00:00:00 2001 From: AiTechEye <40591179+AiTechEye@users.noreply.github.com> Date: Mon, 29 Apr 2019 22:38:11 +0200 Subject: [PATCH] improve the code & + model back --- init.lua | 264 +++++++++--------- models/hook_hook.obj | 627 +++++++++++++++++++++++++++++++++++++++++++ pchest.lua | 131 +++++---- project.lua | 43 +-- 4 files changed, 852 insertions(+), 213 deletions(-) create mode 100644 models/hook_hook.obj diff --git a/init.lua b/init.lua index e15c3d9..fc5e071 100644 --- a/init.lua +++ b/init.lua @@ -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",""}, } -}) +}) \ No newline at end of file diff --git a/models/hook_hook.obj b/models/hook_hook.obj new file mode 100644 index 0000000..254d1cf --- /dev/null +++ b/models/hook_hook.obj @@ -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 diff --git a/pchest.lua b/pchest.lua index e55b582..34cd166 100644 --- a/pchest.lua +++ b/pchest.lua @@ -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 }) \ No newline at end of file diff --git a/project.lua b/project.lua index dcecc68..335f71c 100644 --- a/project.lua +++ b/project.lua @@ -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