Updated replace function with new tables

master
TenPlus1 2017-03-07 11:50:15 +00:00
parent c1c17a6849
commit 1fbf0ff331
2 changed files with 38 additions and 18 deletions

47
api.lua
View File

@ -1,5 +1,5 @@
-- Mobs Api (6th March 2017) -- Mobs Api (7th March 2017)
mobs = {} mobs = {}
mobs.mod = "redo" mobs.mod = "redo"
@ -850,28 +850,41 @@ end
-- find and replace what mob is looking for (grass, wheat etc.) -- find and replace what mob is looking for (grass, wheat etc.)
function replace(self, pos) function replace(self, pos)
if self.replace_rate if not self.replace_rate
and self.child == false or not self.replace_what
and random(1, self.replace_rate) == 1 then or self.child == true
or self.object:getvelocity().y ~= 0
or random(1, self.replace_rate) > 1 then
return
end
local pos = self.object:getpos() local what, with, y_offset
pos.y = pos.y + self.replace_offset if type(self.replace_what[1]) == "table" then
local num = random(#self.replace_what)
what = self.replace_what[num][1] or ""
with = self.replace_what[num][2] or ""
y_offset = self.replace_what[num][3] or 0
else
what = self.replace_what
with = self.replace_with or ""
y_offset = self.replace_offset or 0
end
pos.y = pos.y + y_offset
if #minetest.find_nodes_in_area(pos, pos, what) > 0 then
-- print ("replace node = ".. minetest.get_node(pos).name, pos.y) -- print ("replace node = ".. minetest.get_node(pos).name, pos.y)
if self.replace_what minetest.set_node(pos, {name = with})
and self.replace_with
and self.object:getvelocity().y == 0
and #minetest.find_nodes_in_area(pos, pos, self.replace_what) > 0 then
minetest.set_node(pos, {name = self.replace_with}) -- when cow/sheep eats grass, replace wool and milk
if self.gotten == true then
-- when cow/sheep eats grass, replace wool and milk self.gotten = false
if self.gotten == true then self.object:set_properties(self)
self.gotten = false
self.object:set_properties(self)
end
end end
end end
end end

View File

@ -1,5 +1,5 @@
MOB API (6th March 2017) MOB API (7th March 2017)
The mob api is a function that can be called on by other mods to add new animals or monsters into minetest. The mob api is a function that can be called on by other mods to add new animals or monsters into minetest.
@ -102,11 +102,18 @@ This functions registers a new mob as a Minetest entity.
'jump' sound when jumping 'jump' sound when jumping
'explode' sound when exploding 'explode' sound when exploding
'distance' maximum distance sounds are heard from (default is 10) 'distance' maximum distance sounds are heard from (default is 10)
Mobs can look for specific nodes as they walk and replace them to mimic eating
'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"} 'replace_what' group if items to replace e.g. {"farming:wheat_8", "farming:carrot_8"}
'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg" 'replace_with' replace with what e.g. "air" or in chickens case "mobs:egg"
'replace_rate' how random should the replace rate be (typically 10) 'replace_rate' how random should the replace rate be (typically 10)
'replace_offset' +/- value to check specific node to replace 'replace_offset' +/- value to check specific node to replace
The 'replace_what' has been updated to use tables for what, with and y_offset e.g.
replace_what = { {"group:grass", "air", 0}, {"default:dirt_with_grass", "default:dirt", -1} }
Mob animation comes in three parts, start_frame, end_frame and frame_speed which Mob animation comes in three parts, start_frame, end_frame and frame_speed which
can be added to the mob definition under pre-defined mob animation names like: can be added to the mob definition under pre-defined mob animation names like: