From f1476077bd4c57d6efd19edf2da2b39a8f965d12 Mon Sep 17 00:00:00 2001 From: TenPlus1 Date: Fri, 7 Sep 2018 14:59:22 +0100 Subject: [PATCH] added light damage _min and _max values, also igniter check for lava damage --- api.lua | 61 ++++++++++++++++++++++++------------------------------- api.txt | 8 +++++--- readme.MD | 1 + 3 files changed, 33 insertions(+), 37 deletions(-) diff --git a/api.lua b/api.lua index f628cde..83c4d5e 100644 --- a/api.lua +++ b/api.lua @@ -6,7 +6,7 @@ local use_cmi = minetest.global_exists("cmi") mobs = { mod = "redo", - version = "20180905", + version = "20180907", intllib = S, invis = minetest.global_exists("invisibility") and invisibility or {}, } @@ -431,7 +431,7 @@ end -- check if mob is dead or only hurt -local check_for_death = function(self, cause, cmi_cause) +local check_for_death = function(self, cmi_cause) -- has health actually changed? if self.health == self.old_health and self.health > 0 then @@ -598,31 +598,21 @@ local do_env_damage = function(self) return end - -- is mob light sensative :) - if self.light_damage ~= 0 --- and pos.y > 0 --- and self.time_of_day > 0.2 --- and self.time_of_day < 0.8 - and (minetest.get_node_light(pos) or 0) > 12 then + -- is mob light sensative, or scared of the dark :P + if self.light_damage ~= 0 then - self.health = self.health - self.light_damage + local light = minetest.get_node_light(pos) or 0 - effect(pos, 5, "tnt_smoke.png") + if light >= self.light_damage_min + and light <= self.light_damage_max then - if check_for_death(self, "light", {type = "light"}) then return end + self.health = self.health - self.light_damage + + effect(pos, 5, "tnt_smoke.png") + + if check_for_death(self, {type = "light"}) then return end + end end ---[[ - local y_level = self.collisionbox[2] - - if self.child then - y_level = self.collisionbox[2] * 0.5 - end - - -- what is mob standing in? - pos.y = pos.y + y_level + 0.25 -- foot level - self.standing_in = node_ok(pos, "air").name --- print ("standing in " .. self.standing_in) -]] local nodef = minetest.registered_nodes[self.standing_in] @@ -638,15 +628,16 @@ local do_env_damage = function(self) effect(pos, 5, "bubble.png", nil, nil, 1, nil) - if check_for_death(self, "water", {type = "environment", + if check_for_death(self, {type = "environment", pos = pos, node = self.standing_in}) then return end end - -- lava or fire + -- lava or fire or ignition source elseif self.lava_damage - and (nodef.groups.lava - or self.standing_in == node_fire - or self.standing_in == node_permanent_flame) then + and nodef.groups.igniter then +-- and (nodef.groups.lava +-- or self.standing_in == node_fire +-- or self.standing_in == node_permanent_flame) then if self.lava_damage ~= 0 then @@ -654,7 +645,7 @@ local do_env_damage = function(self) effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil) - if check_for_death(self, "lava", {type = "environment", + if check_for_death(self, {type = "environment", pos = pos, node = self.standing_in, hot = true}) then return end end @@ -665,7 +656,7 @@ local do_env_damage = function(self) effect(pos, 5, "tnt_smoke.png") - if check_for_death(self, "dps", {type = "environment", + if check_for_death(self, {type = "environment", pos = pos, node = self.standing_in}) then return end end --[[ @@ -677,11 +668,11 @@ local do_env_damage = function(self) self.health = self.health - self.suffocation - if check_for_death(self, "suffocation", {type = "environment", + if check_for_death(self, {type = "environment", pos = pos, node = self.standing_in}) then return end end ]] - check_for_death(self, "", {type = "unknown"}) + check_for_death(self, {type = "unknown"}) end @@ -2275,7 +2266,7 @@ local falling = function(self, pos) effect(pos, 5, "tnt_smoke.png", 1, 2, 2, nil) - if check_for_death(self, "fall", {type = "fall"}) then + if check_for_death(self, {type = "fall"}) then return end end @@ -2445,7 +2436,7 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir) local hot = tool_capabilities and tool_capabilities.damage_groups and tool_capabilities.damage_groups.fire - if check_for_death(self, "hit", {type = "punch", + if check_for_death(self, {type = "punch", puncher = hitter, hot = hot}) then return end @@ -2982,6 +2973,8 @@ minetest.register_entity(name, { run_velocity = def.run_velocity or 2, damage = max(0, (def.damage or 0) * difficulty), light_damage = def.light_damage or 0, + light_damage_min = def.light_damage_min or 14, + light_damage_max = def.light_damage_max or 15, water_damage = def.water_damage or 0, lava_damage = def.lava_damage or 0, suffocation = def.suffocation or 2, diff --git a/api.txt b/api.txt index 4ac5d49..17beba5 100644 --- a/api.txt +++ b/api.txt @@ -57,9 +57,11 @@ functions needed for the mob to work properly which contains the following: 'water_damage' holds the damage per second infliced to mobs when standing in water. 'lava_damage' holds the damage per second inflicted to mobs when standing - in lava or fire. - 'light_damage' holds the damage per second inflicted to mobs when it's too - bright (above 13 light). + in lava or fire or an ignition source. + 'light_damage' holds the damage per second inflicted to mobs when light + level is between the min and max values below + 'light_damage_min' minimum light value when mob is affected (default: 14) + 'light_damage_max' maximum light value when mob is affected (default: 15) 'suffocation' when true causes mobs to suffocate inside solid blocks. 'floats' when set to 1 mob will float in water, 0 has them sink. 'follow' mobs follow player when holding any of the items which appear diff --git a/readme.MD b/readme.MD index 6fa49f9..5066d82 100644 --- a/readme.MD +++ b/readme.MD @@ -23,6 +23,7 @@ Lucky Blocks: 9 Changelog: +- 1.47- Mob damage changes, min and max light level for damage added, ignition sources checked for lava damage - 1.46- Mobs only drop rare items when killed by player (drops.min = 0 makes them rare), code tweak, pathfinding no longer sees through walkable nodes - 1.45- Added Fence Top to add on top of any fence to stop mobs escaping, new line_of_sight tweaked by Astrobe - 1.44- Added ToolRanks support for swords when attacking mobs