local CONST = require 'config.const'
|
local Suspicion = require 'systems.suspicion'
|
local Base = require 'profession.base'
|
|
local trap_count = {}
|
|
Base.register('surgeon', function(unit, ability)
|
local pid = unit:get_owner():get_id()
|
trap_count[pid] = trap_count[pid] or 0
|
if trap_count[pid] >= 2 then return end
|
|
local pos = unit:get_point()
|
local trap_area = clicli.area.create_circle_area(pos, 1.5)
|
trap_area:add_tag('trap')
|
trap_count[pid] = trap_count[pid] + 1
|
|
Suspicion.add(unit, 5)
|
|
clicli.timer.loop(0.5, function(timer, count)
|
if count > 180 then
|
trap_area:remove()
|
timer:remove()
|
trap_count[pid] = math.max(0, (trap_count[pid] or 1) - 1)
|
return
|
end
|
|
local trapped_units = trap_area:get_all_unit_in_area()
|
for _, u in ipairs(trapped_units) do
|
if u:has_tag('player_controlled') and u ~= unit and u:is_alive() then
|
u:add_state(CONST.STATE_IMMOBILE)
|
u:add_buff({ key = CONST.BUFF_TRAP_ROOT, time = 2.0 })
|
clicli.timer.wait(2.0, function()
|
u:remove_state(CONST.STATE_IMMOBILE)
|
end)
|
|
trap_area:remove()
|
timer:remove()
|
trap_count[pid] = math.max(0, (trap_count[pid] or 1) - 1)
|
return
|
end
|
end
|
end, '陷阱检测')
|
end)
|
|
return Base
|