local CONST = require 'config.const'
|
local Suspicion = require 'systems.suspicion'
|
local Assassin = require 'systems.assassination'
|
local Base = require 'profession.base'
|
|
Base.register('shadow_blade', function(unit, ability)
|
local facing = unit:get_facing()
|
local pos = unit:get_point()
|
|
local rad = math.rad(facing)
|
local dx, dy = math.cos(rad) * 5, math.sin(rad) * 5
|
local target_point = clicli.point.create(pos:get_x() + dx, pos:get_y() + dy)
|
|
unit:blink(target_point)
|
|
unit:add_state(CONST.STATE_INVISIBLE)
|
unit:set_transparent_when_invisible(true)
|
|
clicli.timer.wait(0.8, function()
|
unit:remove_state(CONST.STATE_INVISIBLE)
|
end)
|
|
local dash_area = clicli.area.create_circle_area(target_point, 2.0)
|
local units = dash_area:get_all_unit_in_area()
|
dash_area:remove()
|
|
for _, u in ipairs(units) do
|
if u ~= unit and u:is_alive() then
|
unit:damage({
|
target = u,
|
damage = 105,
|
type = CONST.DAMAGE_TYPE_ASSASSINATE,
|
no_miss = true,
|
})
|
if not u:is_alive() then
|
Assassin.on_kill(unit, u)
|
end
|
break
|
end
|
end
|
|
Suspicion.add(unit, 15)
|
end)
|
|
return Base
|