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