Update
parent
158c5d2910
commit
2f3a2b1019
|
@ -56,7 +56,6 @@ director.spawn_list = {
|
|||
director.intensity = 0.5
|
||||
director.cooldown_timer = 3
|
||||
|
||||
local world_timer = 0
|
||||
local spawn_timers = {}
|
||||
local last_average_health = 1.0
|
||||
local last_mob_count = 0
|
||||
|
@ -91,8 +90,6 @@ function director:on_interval()
|
|||
spawn_timers[k] = v - self.call_interval
|
||||
end
|
||||
end
|
||||
|
||||
world_timer = world_timer + self.call_interval
|
||||
end
|
||||
|
||||
function director:spawn_monsters()
|
||||
|
@ -239,7 +236,7 @@ end
|
|||
|
||||
function director:get_day_count()
|
||||
local time_speed = minetest.setting_get("time_speed")
|
||||
return math.floor(world_timer * time_speed / 86400)
|
||||
return math.floor(minetest.get_gametime() * time_speed / 86400)
|
||||
end
|
||||
|
||||
local last_call_time = 0
|
||||
|
@ -257,7 +254,6 @@ function director:save()
|
|||
intensity = self.intensity,
|
||||
cooldown_timer = self.cooldown_timer,
|
||||
spawn_timers = spawn_timers,
|
||||
world_timer = world_timer,
|
||||
last_average_health = last_average_health,
|
||||
last_mob_count = last_mob_count,
|
||||
}
|
||||
|
@ -272,7 +268,6 @@ function director:load()
|
|||
self.intensity = data.intensity
|
||||
self.cooldown_timer = data.cooldown_timer
|
||||
spawn_timers = data.spawn_timers
|
||||
world_timer = data.world_timer
|
||||
last_average_health = data.last_average_health
|
||||
last_mob_count = data.last_mob_count
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
defense = {}
|
||||
defense.debug = true
|
||||
defense.debug = false
|
||||
|
||||
local modpath = minetest.get_modpath("defense")
|
||||
local function dofile2(file)
|
||||
|
|
|
@ -121,7 +121,7 @@ function mobs.default_prototype:hunt()
|
|||
if nearest.player then
|
||||
local nearest_pos = nearest.player:getpos()
|
||||
local dir = vector.direction(nearest_pos, self.object:getpos())
|
||||
local r = math.max(0, self.attack_range - 0.3)
|
||||
local r = math.max(0, self.attack_range - 0.5)
|
||||
self.destination = vector.add(nearest_pos, vector.multiply(dir, r))
|
||||
if nearest.distance <= self.attack_range then
|
||||
self:do_attack(nearest.player)
|
||||
|
@ -239,7 +239,7 @@ function mobs.move_method:air(dtime, destination)
|
|||
local t
|
||||
local v = self.object:getvelocity()
|
||||
if vector.length(v) < self.move_speed * 1.5 then
|
||||
t = math.pow(0.3, dtime)
|
||||
t = math.pow(0.1, dtime)
|
||||
else
|
||||
t = math.pow(0.9, dtime)
|
||||
speed = speed * 0.9
|
||||
|
|
|
@ -17,35 +17,64 @@ defense.mobs.register_mob("defense:paniki", {
|
|||
movement = "air",
|
||||
move_speed = 16,
|
||||
attack_damage = 1,
|
||||
attack_range = 1.5,
|
||||
attack_range = 1.2,
|
||||
attack_interval = 0.8,
|
||||
|
||||
rank = 0,
|
||||
leader = nil,
|
||||
last_hp = 3,
|
||||
flee_timer = 0,
|
||||
|
||||
on_activate = function(self, staticdata)
|
||||
defense.mobs.default_prototype.on_activate(self, staticdata)
|
||||
self.rank = math.random()
|
||||
minetest.after(1, function()
|
||||
local pos = self.object:getpos()
|
||||
local radius = 4
|
||||
local greatest_paniki = self
|
||||
local greatest_rank = self.rank
|
||||
for _,o in pairs(minetest.get_objects_inside_radius(pos, radius)) do
|
||||
if self.object ~= o then
|
||||
local e = o:get_luaentity()
|
||||
if e and e.name == self.name then
|
||||
if greatest_rank < e.rank then
|
||||
greatest_paniki = e
|
||||
greatest_rank = e.rank
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
self.leader = greatest_paniki
|
||||
end)
|
||||
end,
|
||||
|
||||
on_step = function(self, dtime)
|
||||
defense.mobs.default_prototype.on_step(self, dtime)
|
||||
if self.flee_timer > 0 then
|
||||
if self.flee_timer > 0 or (self.leader and self.leader.flee_timer > 0) then
|
||||
local nearest = self:find_nearest_player()
|
||||
local pos = self.object:getpos()
|
||||
local delta = vector.subtract(pos, nearest.player:getpos())
|
||||
local x = delta.x
|
||||
delta.x = delta.x - delta.z * 0.4
|
||||
delta.z = delta.z + x * 0.4
|
||||
self.destination = vector.add(pos, delta)
|
||||
if vector.length(delta) <= self.attack_range then
|
||||
self:hunt()
|
||||
if self.flee_timer > 0 then
|
||||
self.flee_timer = self.flee_timer - dtime
|
||||
end
|
||||
self.flee_timer = self.flee_timer - dtime
|
||||
else
|
||||
self:hunt()
|
||||
if self.object:get_hp() < self.last_hp then
|
||||
self.flee_timer = math.random() * 2 / (self.object:get_hp() + 1)
|
||||
self.last_hp = self.object:get_hp()
|
||||
self.flee_timer = 0.5 + math.random() / (self.object:get_hp() + 1)
|
||||
end
|
||||
self.last_hp = self.object:get_hp()
|
||||
end
|
||||
end,
|
||||
|
||||
attack = function(self, obj)
|
||||
defense.mobs.default_prototype.attack(self, obj)
|
||||
self.object:set_hp(self.object:get_hp() + 1)
|
||||
self.flee_timer = 0.1
|
||||
if self.object:get_hp() < self.hp_max then
|
||||
self.object:set_hp(self.object:get_hp() + 1)
|
||||
end
|
||||
self.flee_timer = 0.5 + math.random()
|
||||
end,
|
||||
})
|
Loading…
Reference in New Issue