1 local vector,minetest,math = vector,minetest,math
3 mobs.create_data_handling_functions = function(def,mob_register)
4 mob_register.get_staticdata = function(self)
5 if self.deactivating == false then
6 global_mob_amount = global_mob_amount + 1
7 --print("Mob Spawned. Current Mobs: "..global_mob_amount)
8 elseif self.deactivating == true then
9 minetest.after(0, function()
10 if not self.object:get_luaentity() then
11 global_mob_amount = global_mob_amount - 1
12 --print("Mob Deactivated. Current Mobs: "..global_mob_amount)
17 return minetest.serialize({
21 hostile = self.hostile,
22 hostile_timer = self.hostile_timer,
23 death_animation_timer = self.death_animation_timer,
25 tnt_timer = self.tnt_timer,
26 tnt_tick_timer = self.tnt_tick_timer,
27 tnt_mod_state = self.tnt_mod_state,
28 punch_timer = self.punch_timer,
29 projectile_timer = self.projectile_timer,
31 scared_timer = self.scared_timer,
32 c_mob_data = self.c_mob_data,
33 on_fire = self.on_fire,
38 mob_register.on_activate = function(self, staticdata, dtime_s)
39 self.object:set_armor_groups({immortal = 1})
40 --self.object:set_velocity({x = math.random(-5,5), y = 5, z = math.random(-5,5)})
41 self.object:set_acceleration(def.gravity)
42 if string.sub(staticdata, 1, string.len("return")) == "return" then
43 local data = minetest.deserialize(staticdata)
44 if data and type(data) == "table" then
45 --self.range = data.range
47 self.hunger = data.hunger
48 self.hostile = data.hostile
49 self.hostile_timer = data.hostile_timer
50 self.death_animation_timer = data.death_animation_timer
52 self.tnt_timer = data.tnt_timer
53 self.tnt_tick_timer = data.tnt_tick_timer
54 self.tnt_mod_state = data.tnt_mod_state
55 self.punch_timer = data.punch_timer
56 self.projectile_timer = data.projectile_timer
57 self.scared = data.scared
58 self.scared_timer = data.scared_timer
59 self.c_mob_data = data.c_mob_data
60 self.on_fire = data.on_fire
65 self.object:set_animation(def.standing_frame, 0, 0, true)
66 self.current_animation = 0
67 self.object:set_hp(self.hp)
68 self.direction = vector.new(math.random()*math.random(-1,1),0,math.random()*math.random(-1,1))
72 if self.head_bone then
73 self.object:set_bone_position(self.head_bone, self.head_position_correction, vector.new(0,0,0))
76 self.object:set_armor_groups({immortal = 1})
78 if self.custom_on_activate then
79 self.custom_on_activate(self)
82 if self.on_fire == true then
83 start_fire(self.object)
86 --use this to handle the global mob table
87 minetest.after(0,function()
88 self.deactivating = true
92 --this is the info on the mob
93 mob_register.debug_nametag = function(self,dtime)
94 --we're doing this to the child because the nametage breaks the
95 --animation on the mob's body
97 --we add in items we want to see in this list
98 local debug_items = {"hostile","hostile_timer"}
100 for _,item in pairs(debug_items) do
101 if self[item] ~= nil then
102 text = text..item..": "..tostring(self[item]).."\n"
105 self.object:set_nametag_attributes({