summaryrefslogtreecommitdiff
path: root/peaceful_npc/npc/npc_dwarf.lua
diff options
context:
space:
mode:
Diffstat (limited to 'peaceful_npc/npc/npc_dwarf.lua')
-rw-r--r--peaceful_npc/npc/npc_dwarf.lua345
1 files changed, 0 insertions, 345 deletions
diff --git a/peaceful_npc/npc/npc_dwarf.lua b/peaceful_npc/npc/npc_dwarf.lua
deleted file mode 100644
index c3841a1..0000000
--- a/peaceful_npc/npc/npc_dwarf.lua
+++ /dev/null
@@ -1,345 +0,0 @@
--- NPC max walk speed
-walk_limit = 1
---npc just walking around
-chillaxin_speed = .5
--- Player animation speed
-animation_speed = 15
-
--- Player animation blending
--- Note: This is currently broken due to a bug in Irrlicht, leave at 0
-animation_blend = 0
-
--- Default player appearance
-default_model_dwarf = "character.b3d"
-available_npc_textures_dwarf = {
- dwarf_texture_1 = {"dwarf_commoner.png"},
- dwarf_texture_2 = {"dwarf_girl.png"},
- dwarf_texture_3 = {"dwarf_king.png"},
- dwarf_texture_4 = {"dwarf_warrior.png"}
-}
-
--- Frame ranges for each player model
-function npc_get_animations_dwarf(model)
- if model == "character.b3d" then
- return {
- stand_START = 0,
- stand_END = 79,
- sit_START = 81,
- sit_END = 160,
- lay_START = 162,
- lay_END = 166,
- walk_START = 168,
- walk_END = 187,
- mine_START = 189,
- mine_END = 198,
- walk_mine_START = 200,
- walk_mine_END = 219
- }
- end
-end
-
-local npc_model = {}
-local npc_anim = {}
-local npc_sneak = {}
-local ANIM_STAND = 1
-local ANIM_SIT = 2
-local ANIM_LAY = 3
-local ANIM_WALK = 4
-local ANIM_WALK_MINE = 5
-local ANIM_MINE = 6
-
-function npc_update_visuals_dwarf(self)
- --local name = get_player_name()
- visual = default_model_dwarf
- npc_anim = 0 -- Animation will be set further below immediately
- --npc_sneak[name] = false
- prop = {
- mesh = default_model_dwarf,
- textures = default_textures,
- textures = available_npc_textures_dwarf["dwarf_texture_"..math.random(1,4)],
- visual_size = {x=.5, y=.5, z=.5},
- }
- self.object:set_properties(prop)
-end
-
-NPC_ENTITY_DWARF = {
- physical = true,
- lightsource = 5,
- collisionbox = {-0.15,-0.5,-0.15, 0.15,0.4,0.15},
- visual = "mesh",
- mesh = "character.b3d",
- textures = {"character.png"},
- npc_anim = 0,
- timer = 0,
- turn_timer = 0,
- vec = 0,
- yaw = 0,
- yawwer = 0,
- state = 1,
- jump_timer = 0,
- door_timer = 0,
- attacker = "",
- attacking_timer = 0
-}
-
-NPC_ENTITY_DWARF.on_activate = function(self)
- npc_update_visuals_dwarf(self)
- self.anim = npc_get_animations_dwarf(visual)
- self.object:set_animation({x=self.anim.stand_START,y=self.anim.stand_END}, animation_speed_mod, animation_blend)
- self.npc_anim = ANIM_STAND
- self.object:setacceleration({x=0,y=-10,z=0})
- self.state = 1
- self.object:set_hp(75)
-end
-
-NPC_ENTITY_DWARF.on_punch = function(self, puncher)
- for _,object in ipairs(minetest.get_objects_inside_radius(self.object:getpos(), 5)) do
- if not object:is_player() then
- if object:get_luaentity().name == "peaceful_npc:npc_dwarf" then
- object:get_luaentity().state = 3
- object:get_luaentity().attacker = puncher:get_player_name()
- end
- end
- end
-
- if self.state ~= 3 then
- self.state = 3
- self.attacker = puncher:get_player_name()
- end
-
- if self.object:get_hp() == 0 then
- local obj = minetest.add_item(self.object:getpos(), "default:stone_with_mese 12")
- end
-end
-
-NPC_ENTITY_DWARF.on_step = function(self, dtime)
- self.timer = self.timer + 0.01
- self.turn_timer = self.turn_timer + 0.01
- self.jump_timer = self.jump_timer + 0.01
- self.door_timer = self.door_timer + 0.01
- self.attacking_timer = self.attacking_timer + 0.01
-
- local current_pos = self.object:getpos()
- local current_node = minetest.get_node(current_pos)
- if self.time_passed == nil then
- self.time_passed = 0
- end
-
- self.time_passed = self.time_passed + dtime
-
- if self.time_passed >= 15 then
- self.object:remove()
- else
- if current_node.name == "default:water_source" or
- current_node.name == "default:water_flowing" or
- current_node.name == "default:lava_source" or
- current_node.name == "default:lava_flowing"
- then
- self.time_passed = self.time_passed + dtime
- else
- self.time_passed = 0
- end
-end
-
- --collision detection prealpha
- --[[
- for _,object in ipairs(minetest.get_objects_inside_radius(self.object:getpos(), 2)) do
- if object:is_player() then
- compare1 = object:getpos()
- compare2 = self.object:getpos()
- newx = compare2.x - compare1.x
- newz = compare2.z - compare1.z
- print(newx)
- print(newz)
- self.object:setacceleration({x=newx,y=self.object:getacceleration().y,z=newz})
- elseif not object:is_player() then
- if object:get_luaentity().name == "peaceful_npc:npc" then
- print("moo")
- end
- end
- end
- ]]--
-
- --set npc to hostile in night, and revert npc back to peaceful in daylight
- if minetest.get_timeofday() >= 0 and minetest.get_timeofday() < 0.25 and self.state ~= 4 then
- self.state = 4
- elseif minetest.get_timeofday() > 0.25 and self.state == 4 then
- self.state = 1
- end
- --if mob is not in attack or hostile mode, set mob to walking or standing
- if self.state < 3 then
- if self.timer > math.random(1,20) then
- self.state = math.random(1,2)
- self.timer = 0
- end
- end
- --STANDING
- if self.state == 1 then
- self.yawwer = true
- for _,object in ipairs(minetest.get_objects_inside_radius(self.object:getpos(), 3)) do
- if object:is_player() then
- self.yawwer = false
- NPC = self.object:getpos()
- PLAYER = object:getpos()
- self.vec = {x=PLAYER.x-NPC.x, y=PLAYER.y-NPC.y, z=PLAYER.z-NPC.z}
- self.yaw = math.atan(self.vec.z/self.vec.x)+math.pi^2
- if PLAYER.x > NPC.x then
- self.yaw = self.yaw + math.pi
- end
- self.yaw = self.yaw - 2
- self.object:setyaw(self.yaw)
- end
- end
-
- if self.turn_timer > math.random(1,4) and yawwer == true then
- self.yaw = 360 * math.random()
- self.object:setyaw(self.yaw)
- self.turn_timer = 0
- end
- self.object:setvelocity({x=0,y=self.object:getvelocity().y,z=0})
- if self.npc_anim ~= ANIM_STAND then
- self.anim = npc_get_animations_dwarf(visual)
- self.object:set_animation({x=self.anim.stand_START,y=self.anim.stand_END}, animation_speed_mod, animation_blend)
- self.npc_anim = ANIM_STAND
- end
- end
- --WALKING
- if self.state == 2 then
- if self.present_timer == 1 then
- minetest.add_item(self.object:getpos(),"default:coal_lump")
- self.present_timer = 0
- end
- if self.direction ~= nil then
- self.object:setvelocity({x=self.direction.x*chillaxin_speed,y=self.object:getvelocity().y,z=self.direction.z*chillaxin_speed})
- end
- if self.turn_timer > math.random(1,4) then
- self.yaw = 360 * math.random()
- self.object:setyaw(self.yaw)
- self.turn_timer = 0
- self.direction = {x = math.sin(self.yaw)*-1, y = -10, z = math.cos(self.yaw)}
- --self.object:setvelocity({x=self.direction.x,y=self.object:getvelocity().y,z=direction.z})
- --self.object:setacceleration(self.direction)
- end
- if self.npc_anim ~= ANIM_WALK then
- self.anim = npc_get_animations_dwarf(visual)
- self.object:set_animation({x=self.anim.walk_START,y=self.anim.walk_END}, animation_speed_mod, animation_blend)
- self.npc_anim = ANIM_WALK
- end
- --open a door [alpha]
- if self.direction ~= nil then
- if self.door_timer > 2 then
- local is_a_door = minetest.get_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y,z=self.object:getpos().z + self.direction.z}).name
- if is_a_door == "doors:door_wood_t_1" then
- minetest.punch_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y-1,z=self.object:getpos().z + self.direction.z})
- self.door_timer = 0
- end
- local is_in_door = minetest.get_node(self.object:getpos()).name
- if is_in_door == "doors:door_wood_t_1" then
- minetest.punch_node(self.object:getpos())
- end
- end
- end
- --jump
- if self.direction ~= nil then
- if self.jump_timer > 0.3 then
- if minetest.get_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y-1,z=self.object:getpos().z + self.direction.z}).name ~= "air" then
- self.object:setvelocity({x=self.object:getvelocity().x,y=2.5,z=self.object:getvelocity().z})
- self.jump_timer = 0
- end
- end
- end
- end
- --WANDERING CONSTANTLY AT NIGHT
- if self.state == 4 then
- if self.npc_anim ~= ANIM_WALK then
- self.anim = npc_get_animations_dwarf(visual)
- self.object:set_animation({x=self.anim.walk_START,y=self.anim.walk_END}, animation_speed_mod, animation_blend)
- self.npc_anim = ANIM_WALK
- end
- for _,object in ipairs(minetest.get_objects_inside_radius(self.object:getpos(), 12)) do
- if object:is_player() then
- if object:get_hp() > 0 then
- NPC = self.object:getpos()
- PLAYER = object:getpos()
- self.vec = {x=PLAYER.x-NPC.x, y=PLAYER.y-NPC.y, z=PLAYER.z-NPC.z}
- self.yaw = math.atan(self.vec.z/self.vec.x)+math.pi^2
- if PLAYER.x > NPC.x then
- self.yaw = self.yaw + math.pi
- end
- self.yaw = self.yaw - 2
- self.object:setyaw(self.yaw)
- self.direction = {x = math.sin(self.yaw)*-1, y = 0, z = math.cos(self.yaw)}
- if self.direction ~= nil then
- self.object:setvelocity({x=self.direction.x*2.5,y=self.object:getvelocity().y,z=self.direction.z*2.5})
- end
- --jump over obstacles
- if self.jump_timer > 0.3 then
- if minetest.get_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y-1,z=self.object:getpos().z + self.direction.z}).name ~= "air" then
- self.object:setvelocity({x=self.object:getvelocity().x,y=5,z=self.object:getvelocity().z})
- self.jump_timer = 0
- end
- end
- if self.direction ~= nil then
- if self.door_timer > 2 then
- local is_a_door = minetest.get_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y,z=self.object:getpos().z + self.direction.z}).name
- if is_a_door == "doors:door_wood_t_1" then
- minetest.punch_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y-1,z=self.object:getpos().z + self.direction.z})
- self.door_timer = 0
- end
- local is_in_door = minetest.get_node(self.object:getpos()).name
- if is_in_door == "doors:door_wood_t_1" then
- minetest.punch_node(self.object:getpos())
- end
- end
- end
- --return
- end
- elseif not object:is_player() then
- self.state = 1
- self.attacker = ""
- end
- end
- if self.direction ~= nil then
- self.object:setvelocity({x=self.direction.x,y=self.object:getvelocity().y,z=self.direction.z})
- end
- if self.turn_timer > math.random(1,4) then
- self.yaw = 360 * math.random()
- self.object:setyaw(self.yaw)
- self.turn_timer = 0
- self.direction = {x = math.sin(self.yaw)*-1, y = -10, z = math.cos(self.yaw)}
- end
- if self.npc_anim ~= ANIM_WALK then
- self.anim = npc_get_animations_dwarf(visual)
- self.object:set_animation({x=self.anim.walk_START,y=self.anim.walk_END}, animation_speed_mod, animation_blend)
- self.npc_anim = ANIM_WALK
- end
- --open a door [alpha]
- if self.direction ~= nil then
- if self.door_timer > 2 then
- local is_a_door = minetest.get_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y,z=self.object:getpos().z + self.direction.z}).name
- if is_a_door == "doors:door_wood_t_1" then
- --print("door")
- minetest.punch_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y-1,z=self.object:getpos().z + self.direction.z})
- self.door_timer = 0
- end
- local is_in_door = minetest.get_node(self.object:getpos()).name
- --print(dump(is_in_door))
- if is_in_door == "doors:door_wood_t_1" then
- minetest.punch_node(self.object:getpos())
- end
- end
- end
- --jump
- if self.direction ~= nil then
- if self.jump_timer > 0.3 then
- --print(dump(minetest.get_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y-1,z=self.object:getpos().z + self.direction.z})))
- if minetest.get_node({x=self.object:getpos().x + self.direction.x,y=self.object:getpos().y-1,z=self.object:getpos().z + self.direction.z}).name ~= "air" then
- self.object:setvelocity({x=self.object:getvelocity().x,y=5,z=self.object:getvelocity().z})
- self.jump_timer = 0
- end
- end
- end
- end
-end
-
-minetest.register_entity("peaceful_npc:npc_dwarf", NPC_ENTITY_DWARF)