X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=mods%2Fmob%2Fapi%2Fdata_handling.lua;h=ac36fa4531ee75209e533c36a627b0ab6471537f;hb=f0ed02f964af90ef2472e98dc99a2b7ac57c9472;hp=dfd281f02d1f0acb54f0b7ebb41e381b3f9ca45f;hpb=6482ca1a7810591cfa7cccaba6ac1a3d1dd9946f;p=Crafter.git diff --git a/mods/mob/api/data_handling.lua b/mods/mob/api/data_handling.lua index dfd281f..ac36fa4 100644 --- a/mods/mob/api/data_handling.lua +++ b/mods/mob/api/data_handling.lua @@ -1,78 +1,105 @@ -- mobs.create_data_handling_functions = function(def,mob_register) - mob_register.get_staticdata = function(self) - return minetest.serialize({ - --range = self.range, - hp = self.hp, - hunger = self.hunger, - hostile = self.hostile, - hostile_timer = self.hostile_timer, - death_animation_timer = self.death_animation_timer, - dead = self.dead - }) - end + mob_register.get_staticdata = function(self) + if self.deactivating == false then + global_mob_amount = global_mob_amount + 1 + print("Mob Spawned. Current Mobs: "..global_mob_amount) + elseif self.deactivating == true then + minetest.after(0, function() + if not self.object:get_luaentity() then + global_mob_amount = global_mob_amount - 1 + print("Mob Deactivated. Current Mobs: "..global_mob_amount) + end + end) + end + return minetest.serialize({ + --range = self.range, + hp = self.hp, + hunger = self.hunger, + hostile = self.hostile, + hostile_timer = self.hostile_timer, + death_animation_timer = self.death_animation_timer, + dead = self.dead, + tnt_timer = self.tnt_timer, + tnt_tick_timer = self.tnt_tick_timer, + tnt_mod_state = self.tnt_mod_state, + punch_timer = self.punch_timer, + projectile_timer = self.projectile_timer, + scared = self.scared, + scared_timer = self.scared_timer, + c_mob_data = self.c_mob_data, + }) + end - mob_register.on_activate = function(self, staticdata, dtime_s) - global_mob_amount = global_mob_amount + 1 - print("Mobs Spawned. Current Mobs: "..global_mob_amount) - self.object:set_armor_groups({immortal = 1}) - --self.object:set_velocity({x = math.random(-5,5), y = 5, z = math.random(-5,5)}) - self.object:set_acceleration(def.gravity) - if string.sub(staticdata, 1, string.len("return")) == "return" then - local data = minetest.deserialize(staticdata) - if data and type(data) == "table" then - --self.range = data.range - self.hp = data.hp - self.hunger = data.hunger - self.hostile = data.hostile - self.hostile_timer = data.hostile_timer - self.death_animation_timer = data.death_animation_timer - self.dead = data.dead - end - end - - --set up mob - self.object:set_animation(def.standing_frame, 0, 0, true) - self.current_animation = 0 - self.object:set_hp(self.hp) - self.direction = vector.new(math.random()*math.random(-1,1),0,math.random()*math.random(-1,1)) - - - --set the head up - if def.has_head == true then - local head = minetest.add_entity(self.object:get_pos(), "mob:head"..def.mobname) - if head then - self.child = head - self.child:get_luaentity().parent = self.object - self.child:set_attach(self.object, "", self.head_mount, vector.new(0,0,0)) - self.head_rotation = vector.new(0,0,0) - self.child:set_animation({x=90,y=90}, 15, 0, true) - end - end - self.is_mob = true - self.object:set_armor_groups({immortal = 1}) - --self.object:set_yaw(math.pi*math.random(-1,1)*math.random()) - end - --this is the info on the mob - mob_register.debug_nametag = function(self,dtime) - --we're doing this to the child because the nametage breaks the - --animation on the mob's body - if self.child then - --we add in items we want to see in this list - local debug_items = {"hostile_timer","hostile"} - local text = "" - for _,item in pairs(debug_items) do - if self[item] ~= nil then - text = text..item..": "..tostring(self[item]).."\n" - end - end - self.child:set_nametag_attributes({ - color = "white", - text = text - }) - end - end - return(mob_register) + mob_register.on_activate = function(self, staticdata, dtime_s) + self.object:set_armor_groups({immortal = 1}) + --self.object:set_velocity({x = math.random(-5,5), y = 5, z = math.random(-5,5)}) + self.object:set_acceleration(def.gravity) + if string.sub(staticdata, 1, string.len("return")) == "return" then + local data = minetest.deserialize(staticdata) + if data and type(data) == "table" then + --self.range = data.range + self.hp = data.hp + self.hunger = data.hunger + self.hostile = data.hostile + self.hostile_timer = data.hostile_timer + self.death_animation_timer = data.death_animation_timer + self.dead = data.dead + self.tnt_timer = data.tnt_timer + self.tnt_tick_timer = data.tnt_tick_timer + self.tnt_mod_state = data.tnt_mod_state + self.punch_timer = data.punch_timer + self.projectile_timer = data.projectile_timer + self.scared = data.scared + self.scared_timer = data.scared_timer + self.c_mob_data = data.c_mob_data + end + end + + --set up mob + self.object:set_animation(def.standing_frame, 0, 0, true) + self.current_animation = 0 + self.object:set_hp(self.hp) + self.direction = vector.new(math.random()*math.random(-1,1),0,math.random()*math.random(-1,1)) + + + --set the head up + if self.head_bone then + self.object:set_bone_position(self.head_bone, self.head_position_correction, vector.new(0,0,0)) + end + self.is_mob = true + self.object:set_armor_groups({immortal = 1}) + + if self.custom_on_activate then + self.custom_on_activate(self) + end + --self.object:set_yaw(math.pi*math.random(-1,1)*math.random()) + + --use this to handle the global mob table + minetest.after(0,function() + self.deactivating = true + end) + end + + --this is the info on the mob + mob_register.debug_nametag = function(self,dtime) + --we're doing this to the child because the nametage breaks the + --animation on the mob's body + + --we add in items we want to see in this list + local debug_items = {"hostile","hostile_timer"} + local text = "" + for _,item in pairs(debug_items) do + if self[item] ~= nil then + text = text..item..": "..tostring(self[item]).."\n" + end + end + self.object:set_nametag_attributes({ + color = "white", + text = text + }) + end + return(mob_register) end