75 lines
No EOL
2.4 KiB
Text
75 lines
No EOL
2.4 KiB
Text
--' Ñõåìà: äåòåêòîð íà îïàñíóþ çîíó: ãðàíèöà óðîâíÿ.
|
|
--' dead_zone.ppe
|
|
|
|
local start_time = 0 --'Âðåìÿ, ñ êîòîðîãî íà÷èíàåòñÿ âîçðàñòàíèå èíòåíñèâíîñòè
|
|
local max_time = 100 --'Âðåìÿ, â êîòîðîå èíòåíñèâíîñòü ñòàíåò ìàêñèìàëüíîé
|
|
local threshold = 0.2 --'Ïîðîã, ñ êîòîðîãî íà÷èíàåòñÿ çàðàæåíèå
|
|
local idle_time = 10 --'Âðåìÿ ìåæäó õèòàìè. Â èãðîâûõ ñåêóíäàõ.
|
|
|
|
class "actor_detector"
|
|
function actor_detector:__init()
|
|
self.init_time = -1
|
|
end
|
|
function actor_detector:actor_enter()
|
|
--' Èãðîê ïîêèäàåò îïàñíóþ òåððèòîðèþ (âõîäèò â ðàçðåøåííóþ ãðàíèöó óðîâíÿ)
|
|
-- self.init_time = -1
|
|
-- level.remove_pp_effector(1001)
|
|
end
|
|
function actor_detector:actor_exit()
|
|
--' Èãðîê âõîäèò íà îïàñíóþ òåððèòîðèþ (ïîêèäàåò ðàçðåøåííóþ ãðàíèöó óðîâíÿ)
|
|
-- self.init_time = game.get_game_time()
|
|
|
|
-- level.add_pp_effector("dead_zone.ppe", 1001, true)
|
|
-- level.set_pp_effector_factor(1001, 0.01)
|
|
|
|
-- self.last_update_time = game.get_game_time()
|
|
end
|
|
function actor_detector:update()
|
|
--' Àïäåéòèì èãðîêà è óñòàíàâëèâàåì äåéñòâèÿ.
|
|
if self.init_time == -1 then
|
|
return
|
|
end
|
|
|
|
if game.get_game_time():diffSec(self.last_update_time) < idle_time then
|
|
return
|
|
end
|
|
self.last_update_time = game.get_game_time()
|
|
|
|
--' Â çàâèñèìîñòè îò âðåìåíè íàõîæäåíèÿ èãðîêà âíóòðè âîçðàñòàåò èíòåíñèâíîñòü.
|
|
--' Èíòåíñèâíîñòü âîçðàñòàåò îò 0 äî 1. Ïðè äîñòèæåíèè ïîðîãà íà÷èíàåò õèòîâàòü ðàäèàöèÿ.
|
|
local intence = math.min(1,math.max(0.01,game.get_game_time():diffSec(self.init_time)/(max_time - start_time)))
|
|
|
|
level.set_pp_effector_factor(1001, intence, 0.3)
|
|
|
|
printf("INTENCE %s", intence)
|
|
|
|
if intence > threshold then
|
|
local h = hit()
|
|
h.draftsman = db.actor
|
|
h.type = hit.radiation
|
|
h.power = 0.05
|
|
db.actor:hit(h)
|
|
end
|
|
end
|
|
function actor_detector:save(packet)
|
|
set_save_marker(packet, "save", false, "actor_detector")
|
|
if self.init_time == -1 then
|
|
packet:w_u8(0)
|
|
else
|
|
packet:w_u8(1)
|
|
utils.w_CTime(packet, self.init_time)
|
|
utils.w_CTime(packet, self.last_update_time)
|
|
end
|
|
set_save_marker(packet, "save", true, "actor_detector")
|
|
end
|
|
function actor_detector:load(packet)
|
|
set_save_marker(packet, "load", false, "actor_detector")
|
|
local flag = packet:r_u8()
|
|
if flag == 1 then
|
|
self.init_time = utils.r_CTime(packet)
|
|
self.last_update_time = utils.r_CTime(packet)
|
|
else
|
|
self.init_time = -1
|
|
end
|
|
set_save_marker(packet, "load", true, "actor_detector")
|
|
end |