summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api.lua89
1 files changed, 44 insertions, 45 deletions
diff --git a/api.lua b/api.lua
index 588ed9c..bce5c32 100644
--- a/api.lua
+++ b/api.lua
@@ -1,5 +1,5 @@
--- Mobs Api (29th May 2016)
+-- Mobs Api (5th June 2016)
mobs = {}
mobs.mod = "redo"
@@ -275,20 +275,20 @@ function check_for_death(self)
local obj
local pos = self.object:getpos()
- for _,drop in pairs(self.drops) do
+ for n = 1, #self.drops do
- if math.random(1, drop.chance) == 1 then
+ if math.random(1, self.drops[n].chance) == 1 then
obj = minetest.add_item(pos,
- ItemStack(drop.name .. " "
- .. math.random(drop.min, drop.max)))
+ ItemStack(self.drops[n].name .. " "
+ .. math.random(self.drops[n].min, self.drops[n].max)))
if obj then
obj:setvelocity({
- x = math.random(-1, 1),
- y = 6,
- z = math.random(-1, 1)
+ x = math.random(-10, 10) / 9,
+ y = 5,
+ z = math.random(-10, 10) / 9,
})
end
end
@@ -522,21 +522,21 @@ function entity_physics(pos, radius)
local objs = minetest.get_objects_inside_radius(pos, radius)
local obj_pos, dist
- for _, obj in pairs(objs) do
+ for n = 1, #objs do
- obj_pos = obj:getpos()
+ obj_pos = objs[n]:getpos()
dist = math.max(1, get_distance(pos, obj_pos))
local damage = math.floor((4 / dist) * radius)
- local ent = obj:get_luaentity()
+ local ent = objs[n]:get_luaentity()
- if obj:is_player() then
- obj:set_hp(obj:get_hp() - damage)
+ if objs[n]:is_player() then
+ objs[n]:set_hp(objs[n]:get_hp() - damage)
else --if ent.health then
- obj:punch(obj, 1.0, {
+ objs[n]:punch(objs[n], 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = damage},
}, nil)
@@ -622,13 +622,13 @@ local function breed(self)
effect({x = pos.x, y = pos.y + 1, z = pos.z}, 4, "heart.png")
- local ents = minetest.get_objects_inside_radius(pos, 3)
+ local objs = minetest.get_objects_inside_radius(pos, 3)
local num = 0
local ent = nil
- for i, obj in pairs(ents) do
+ for n = 1, #objs do
- ent = obj:get_luaentity()
+ ent = objs[n]:get_luaentity()
-- check for same animal with different colour
local canmate = false
@@ -918,15 +918,16 @@ local monster_attack = function(self)
local p, sp, dist
local player, type, obj, min_player = nil, nil, nil, nil
local min_dist = self.view_range + 1
+ local objs = minetest.get_objects_inside_radius(s, self.view_range)
- for _,oir in pairs(minetest.get_objects_inside_radius(s, self.view_range)) do
+ for n = 1, #objs do
- if oir:is_player() then
+ if objs[n]:is_player() then
- player = oir
+ player = objs[n]
type = "player"
else
- obj = oir:get_luaentity()
+ obj = objs[n]:get_luaentity()
if obj then
player = obj.object
@@ -979,10 +980,11 @@ local npc_attack = function(self)
local s = self.object:getpos()
local min_dist = self.view_range + 1
local obj, min_player = nil, nil
+ local objs = minetest.get_objects_inside_radius(s, self.view_range)
- for _, oir in pairs(minetest.get_objects_inside_radius(s, self.view_range)) do
+ for n = 1, #objs do
- obj = oir:get_luaentity()
+ obj = objs[n]:get_luaentity()
if obj
and obj.type == "monster" then
@@ -1013,16 +1015,13 @@ local follow_flop = function(self)
and self.state ~= "attack"
and self.state ~= "runaway" then
- local s, p, dist
+ local s = self.object:getpos()
+ local players = minetest.get_connected_players()
- for _,player in pairs(minetest.get_connected_players()) do
+ for n = 1, #players do
- s = self.object:getpos()
- p = player:getpos()
- dist = get_distance(p, s)
-
- if dist < self.view_range then
- self.following = player
+ if get_distance(players[n]:getpos(), s) < self.view_range then
+ self.following = players[n]
break
end
end
@@ -1171,12 +1170,12 @@ local do_states = function(self, dtime)
if self.type == "npc" then
- local o = minetest.get_objects_inside_radius(self.object:getpos(), 3)
+ local objs = minetest.get_objects_inside_radius(s, 3)
- for _,o in pairs(o) do
+ for n = 1, #objs do
- if o:is_player() then
- lp = o:getpos()
+ if objs[n]:is_player() then
+ lp = objs[n]:getpos()
break
end
end
@@ -1792,12 +1791,11 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
end
-- check for tool immunity or special damage
- for _, no in pairs(self.immune_to) do
-
- if no[1] == weapon:get_name() then
+ for n = 1, #self.immune_to do
- damage = no[2] or 0
+ if self.immune_to[n][1] == weapon:get_name() then
+ damage = self.immune_to[n][2] or 0
break
end
end
@@ -1924,11 +1922,12 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
do_attack(self, hitter)
-- alert others to the attack
+ local objs = minetest.get_objects_inside_radius(hitter:getpos(), self.view_range)
local obj = nil
- for _, oir in pairs(minetest.get_objects_inside_radius(hitter:getpos(), 5)) do
+ for n = 1, #objs do
- obj = oir:get_luaentity()
+ obj = objs[n]:get_luaentity()
if obj then
@@ -2059,9 +2058,9 @@ local mob_step = function(self, dtime)
-- only despawn away from player
local objs = minetest.get_objects_inside_radius(pos, 15)
- for _,oir in pairs(objs) do
+ for n = 1, #objs do
- if oir:is_player() then
+ if objs[n]:is_player() then
self.lifetimer = 20
@@ -2373,9 +2372,9 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light,
-- only spawn away from player
local objs = minetest.get_objects_inside_radius(pos, 10)
- for _,oir in pairs(objs) do
+ for n = 1, #objs do
- if oir:is_player() then
+ if objs[n]:is_player() then
return
end
end