summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api.lua108
-rw-r--r--readme.MD1
2 files changed, 77 insertions, 32 deletions
diff --git a/api.lua b/api.lua
index a38bd49..971e112 100644
--- a/api.lua
+++ b/api.lua
@@ -1,8 +1,9 @@
--- Mobs Api (12th May 2017)
+-- Mobs Api (27th May 2017)
mobs = {}
mobs.mod = "redo"
+mobs.version = "20170527"
-- Intllib
@@ -316,13 +317,60 @@ function update_tag(self)
end
+-- drop items
+function item_drop(self, cooked)
+
+ local obj, ent, item, num
+ local pos = self.object:getpos()
+
+ self.drops = self.drops or {} -- nil check
+
+ for n = 1, #self.drops do
+
+ if random(1, self.drops[n].chance) == 1 then
+
+ num = random(self.drops[n].min, self.drops[n].max)
+ item = self.drops[n].name
+
+ -- cook items when true
+ if cooked then
+
+ local output = minetest.get_craft_result({
+ method = "cooking", width = 1, items = {item}})
+
+ if output and output.item and not output.item:is_empty() then
+ item = output.item:get_name()
+ end
+ end
+
+ -- add item if it exists
+ obj = minetest.add_item(pos, ItemStack(item .. " " .. num))
+ ent = obj:get_luaentity()
+
+ if ent then
+
+ obj:setvelocity({
+ x = random(-10, 10) / 9,
+ y = 6,
+ z = random(-10, 10) / 9,
+ })
+ else
+ obj:remove() -- item does not exist
+ end
+ end
+ end
+
+ self.drops = {}
+end
+
+
-- check if mob is dead or only hurt
-function check_for_death(self)
+function check_for_death(self, cause)
-- has health actually changed?
- if self.health == self.old_health then
- return
- end
+-- if self.health == self.old_health then
+-- return
+-- end
self.old_health = self.health
@@ -352,28 +400,10 @@ function check_for_death(self)
return false
end
- -- drop items when dead
- local obj
- local pos = self.object:getpos()
- self.drops = self.drops or {} -- nil check
-
- for n = 1, #self.drops do
-
- if random(1, self.drops[n].chance) == 1 then
-
- obj = minetest.add_item(pos,
- ItemStack(self.drops[n].name .. " "
- .. random(self.drops[n].min, self.drops[n].max)))
-
- if obj then
-
- obj:setvelocity({
- x = random(-10, 10) / 9,
- y = 6,
- z = random(-10, 10) / 9,
- })
- end
- end
+ if cause == "lava" then
+ item_drop(self, true)
+ else
+ item_drop(self, nil)
end
mob_sound(self, self.sounds.death)
@@ -511,6 +541,8 @@ do_env_damage = function(self)
self.health = self.health - self.light_damage
effect(pos, 5, "tnt_smoke.png")
+
+ if check_for_death(self, "light") then return end
end
-- what is mob standing in?
@@ -539,6 +571,8 @@ do_env_damage = function(self)
effect(pos, 5, "bubble.png", nil, nil, 1, nil)
+ if check_for_death(self, "water") then return end
+
-- lava or fire
elseif self.lava_damage ~= 0
and (nodef.groups.lava
@@ -549,6 +583,8 @@ do_env_damage = function(self)
effect(pos, 5, "fire_basic_flame.png", nil, nil, 1, nil)
+ if check_for_death(self, "lava") then return end
+
-- damage_per_second node check
-- elseif minetest.registered_nodes[self.standing_in].damage_per_second ~= 0 then
@@ -560,7 +596,7 @@ do_env_damage = function(self)
end
end
- check_for_death(self)
+ check_for_death(self, "")
end
@@ -1835,6 +1871,8 @@ local do_states = function(self, dtime)
vec.z = vec.z * (v / amount)
obj:setvelocity(vec)
+ else
+ obj:remove() -- arrow entity does not exist
end
end
end
@@ -1893,7 +1931,7 @@ local falling = function(self, pos)
effect(pos, 5, "tnt_smoke.png", 1, 2, 2, nil)
- if check_for_death(self) then
+ if check_for_death(self, "fall") then
return
end
end
@@ -2017,9 +2055,15 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
-- do damage
self.health = self.health - floor(damage)
- -- exit here if dead
- if check_for_death(self) then
- return
+ -- exit here if dead, special item check
+ if weapon:get_name() == "mobs:pick_lava" then
+ if check_for_death(self, "lava") then
+ return
+ end
+ else
+ if check_for_death(self, "hit") then
+ return
+ end
end
--[[ add healthy afterglow when hit (can cause hit lag with larger textures)
diff --git a/readme.MD b/readme.MD
index 7eae007..45c83e2 100644
--- a/readme.MD
+++ b/readme.MD
@@ -22,6 +22,7 @@ Lucky Blocks: 9
Changelog:
+- 1.36- Death check added, if mob dies in fire/lava/with lava pick then drops are cooked
- 1.35- Added owner_loyal flag for owned mobs to attack player enemies, also fixed group_attack
- 1.34- Added function to fly mob using directional movement (thanks D00Med for flying code)
- 1.33- Added functions to mount ride mobs (mobs.attach, mobs.detach, mobs.drive) many thanks to Blert2112