From fb51ab05ea2ccc2073e6e4225f9c6095e7f54ff8 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Thu, 17 Dec 2020 09:22:34 -0600 Subject: [PATCH 1/2] Enable basic mob despawning. --- mods/ENTITIES/mcl_mobs/api.lua | 70 ++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index a6f0fd09..3d8e2b52 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -67,7 +67,7 @@ local disable_blood = minetest.settings:get_bool("mobs_disable_blood") local mobs_drop_items = minetest.settings:get_bool("mobs_drop_items") ~= false local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false local spawn_protected = minetest.settings:get_bool("mobs_spawn_protected") ~= false -local remove_far = false +local remove_far = true local difficulty = tonumber(minetest.settings:get("mob_difficulty")) or 1.0 local show_health = false local max_per_block = tonumber(minetest.settings:get("max_objects_per_block") or 64) @@ -3113,6 +3113,7 @@ end -- get entity staticdata local mob_staticdata = function(self) +--[[ -- remove mob when out of range unless tamed if remove_far and self.can_despawn @@ -3125,7 +3126,7 @@ local mob_staticdata = function(self) return ""-- nil end - +--]] self.remove_ok = true self.attack = nil self.following = nil @@ -3334,37 +3335,6 @@ local mob_step = function(self, dtime) update_tag(self) end - -- Despawning: when lifetimer expires, remove mob - if remove_far - and self.can_despawn == true - and ((not self.nametag) or (self.nametag == "")) then - - -- TODO: Finish up implementation of despawning rules - - self.lifetimer = self.lifetimer - dtime - - if self.lifetimer <= 0 then - - -- only despawn away from player - local objs = minetest.get_objects_inside_radius(pos, 32) - - for n = 1, #objs do - - if objs[n]:is_player() then - - self.lifetimer = 20 - - return - end - end - - minetest.log("action", "Mob "..name.." despawns in mob_step at "..minetest.pos_to_string(pos)) - self.object:remove() - - return - end - end - if self.state == "die" then return end @@ -3548,6 +3518,40 @@ local mob_step = function(self, dtime) set_animation(self, "stand") end + -- Despawning: when lifetimer expires, remove mob + if remove_far + and self.can_despawn == true + and ((not self.nametag) or (self.nametag == "")) then + + self.lifetimer = self.lifetimer - dtime + if self.lifetimer <= 10 then + + -- only despawn away from player + local far_objs = minetest.get_objects_inside_radius(pos, 48) + for n = 1, #far_objs do + + if far_objs[n]:is_player() then + + local close_objs = minetest.get_objects_inside_radius(pos, 16) + for n = 1, #close_objs do + if close_objs[n]:is_player() then + self.lifetimer = 20 + else + if math.random(1,10) <= 3 then + minetest.log("action", "Mob "..self.name.." despawns in mob_step at "..minetest.pos_to_string(pos)) + self.object:remove() + return + end + end + end + else + minetest.log("action", "Mob "..self.name.." despawns in mob_step at "..minetest.pos_to_string(pos)) + self.object:remove() + return + end + end + end + end end From cb3fa6cd0912cd74f7b4f4cd138ad5ccca312285 Mon Sep 17 00:00:00 2001 From: MysticTempest Date: Thu, 17 Dec 2020 16:07:20 -0600 Subject: [PATCH 2/2] Fix magma cubes and zombies not taking damage from hands; and adjust magma cube armors to their proper values. --- mods/ENTITIES/mcl_mobs/api.lua | 6 +++--- mods/ENTITIES/mobs_mc/slime+magma_cube.lua | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 3d8e2b52..596843ac 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -2964,8 +2964,8 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) local die = false - -- only play hit sound and show blood effects if damage is 1 or over - if damage >= 1 then + -- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately. + if damage >= 0.1 then -- weapon sounds if weapon:get_definition().sounds ~= nil then @@ -2986,7 +2986,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) damage_effect(self, damage) -- do damage - self.health = self.health - floor(damage) + self.health = self.health - damage -- skip future functions if dead, except alerting others if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then diff --git a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua index ddf925bb..74373393 100644 --- a/mods/ENTITIES/mobs_mc/slime+magma_cube.lua +++ b/mods/ENTITIES/mobs_mc/slime+magma_cube.lua @@ -185,7 +185,7 @@ local magma_cube_big = { run_velocity = 4, damage = 6, reach = 3, - armor = 40, + armor = 53, drops = { {name = mobs_mc.items.magma_cream, chance = 4, @@ -240,7 +240,7 @@ magma_cube_small.run_velocity = 2.6 magma_cube_small.jump_height = 6 magma_cube_small.damage = 4 magma_cube_small.reach = 2.75 -magma_cube_small.armor = 70 +magma_cube_small.armor = 66 magma_cube_small.spawn_small_alternative = "mobs_mc:magma_cube_tiny" magma_cube_small.on_die = spawn_children_on_die("mobs_mc:magma_cube_tiny", 4, 0.6, 1.0) mobs:register_mob("mobs_mc:magma_cube_small", magma_cube_small) @@ -260,7 +260,7 @@ magma_cube_tiny.run_velocity = 1.02 magma_cube_tiny.jump_height = 4 magma_cube_tiny.damage = 3 magma_cube_tiny.reach = 2.5 -magma_cube_tiny.armor = 85 +magma_cube_tiny.armor = 50 magma_cube_tiny.drops = {} magma_cube_tiny.spawn_small_alternative = nil magma_cube_tiny.on_die = nil