159 lines
6.4 KiB
Lua
159 lines
6.4 KiB
Lua
local ____lualib = require("lualib_bundle")
|
|
local __TS__Class = ____lualib.__TS__Class
|
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
local __TS__Decorate = ____lualib.__TS__Decorate
|
|
local ____exports = {}
|
|
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
|
|
local BaseAbility = ____dota_ts_adapter.BaseAbility
|
|
local BaseModifier = ____dota_ts_adapter.BaseModifier
|
|
local registerAbility = ____dota_ts_adapter.registerAbility
|
|
local registerModifier = ____dota_ts_adapter.registerModifier
|
|
____exports.kaban_rofl_ability = __TS__Class()
|
|
local kaban_rofl_ability = ____exports.kaban_rofl_ability
|
|
kaban_rofl_ability.name = "kaban_rofl_ability"
|
|
kaban_rofl_ability.____file_path = "scripts/vscripts/abilities/creep/kaban_rofl_ability.lua"
|
|
__TS__ClassExtends(kaban_rofl_ability, BaseAbility)
|
|
function kaban_rofl_ability.prototype.GetIntrinsicModifierName(self)
|
|
return "modifier_kaban_rofl_ability"
|
|
end
|
|
kaban_rofl_ability = __TS__Decorate(
|
|
kaban_rofl_ability,
|
|
kaban_rofl_ability,
|
|
{registerAbility(nil)},
|
|
{kind = "class", name = "kaban_rofl_ability"}
|
|
)
|
|
____exports.kaban_rofl_ability = kaban_rofl_ability
|
|
____exports.modifier_kaban_rofl_ability = __TS__Class()
|
|
local modifier_kaban_rofl_ability = ____exports.modifier_kaban_rofl_ability
|
|
modifier_kaban_rofl_ability.name = "modifier_kaban_rofl_ability"
|
|
modifier_kaban_rofl_ability.____file_path = "scripts/vscripts/abilities/creep/kaban_rofl_ability.lua"
|
|
__TS__ClassExtends(modifier_kaban_rofl_ability, BaseModifier)
|
|
function modifier_kaban_rofl_ability.prototype.IsHidden(self)
|
|
return true
|
|
end
|
|
function modifier_kaban_rofl_ability.prototype.OnCreated(self, params)
|
|
Timers:CreateTimer(
|
|
30,
|
|
function()
|
|
UTIL_Remove(self:GetParent())
|
|
end
|
|
)
|
|
end
|
|
function modifier_kaban_rofl_ability.prototype.DeclareFunctions(self)
|
|
return {MODIFIER_EVENT_ON_TAKEDAMAGE, MODIFIER_PROPERTY_MIN_HEALTH}
|
|
end
|
|
function modifier_kaban_rofl_ability.prototype.CheckState(self)
|
|
return {[MODIFIER_STATE_NO_HEALTH_BAR] = true}
|
|
end
|
|
function modifier_kaban_rofl_ability.prototype.GetMinHealth(self)
|
|
return 1
|
|
end
|
|
function modifier_kaban_rofl_ability.prototype.OnTakeDamage(self, event)
|
|
if not IsServer() then
|
|
return
|
|
end
|
|
if event.attacker ~= self:GetParent():GetOwner() then
|
|
return
|
|
end
|
|
if event.unit ~= self:GetParent() then
|
|
return
|
|
end
|
|
local parent = self:GetParent()
|
|
local parentPos = parent:GetAbsOrigin()
|
|
local attacker = event.attacker
|
|
local hasEasterEgg = self:GetParent():HasModifier("modifier_easter_egg_dropped")
|
|
if not hasEasterEgg and RandomFloat(0, 100) <= 2 then
|
|
local easterEgg = CreateItem("item_easter_egg", nil, nil)
|
|
if easterEgg then
|
|
local physicalItem = CreateItemOnPositionForLaunch(parentPos, easterEgg)
|
|
if physicalItem ~= nil then
|
|
local randomAngle = RandomFloat(0, 2 * math.pi)
|
|
local randomDistance = RandomFloat(100, 500)
|
|
local randomX = parentPos.x + randomDistance * math.cos(randomAngle)
|
|
local randomY = parentPos.y + randomDistance * math.sin(randomAngle)
|
|
local randomPos = Vector(randomX, randomY, parentPos.z)
|
|
local dropRadius = RandomFloat(50, 100)
|
|
easterEgg:LaunchLootInitialHeight(
|
|
false,
|
|
0,
|
|
150,
|
|
0.5,
|
|
randomPos + RandomVector(dropRadius)
|
|
)
|
|
self:GetParent():AddNewModifier(
|
|
self:GetParent(),
|
|
getModifierSourceAbility(
|
|
nil,
|
|
self:GetParent()
|
|
),
|
|
"modifier_easter_egg_dropped",
|
|
{}
|
|
)
|
|
end
|
|
end
|
|
elseif RandomFloat(0, 100) <= 20 then
|
|
local item = CreateItem("item_candy", nil, nil)
|
|
if item then
|
|
local physicalItem = CreateItemOnPositionForLaunch(parentPos, item)
|
|
if physicalItem ~= nil then
|
|
local randomAngle = RandomFloat(0, 2 * math.pi)
|
|
local randomDistance = RandomFloat(100, 500)
|
|
local randomX = parentPos.x + randomDistance * math.cos(randomAngle)
|
|
local randomY = parentPos.y + randomDistance * math.sin(randomAngle)
|
|
local randomPos = Vector(randomX, randomY, parentPos.z)
|
|
local dropRadius = RandomFloat(50, 100)
|
|
item:LaunchLootInitialHeight(
|
|
false,
|
|
0,
|
|
150,
|
|
0.5,
|
|
randomPos + RandomVector(dropRadius)
|
|
)
|
|
Timers:CreateTimer(
|
|
30,
|
|
function()
|
|
if IsValidEntity(physicalItem) then
|
|
UTIL_Remove(physicalItem)
|
|
end
|
|
end
|
|
)
|
|
end
|
|
end
|
|
end
|
|
if attacker and attacker:IsAlive() then
|
|
self:MakeUnitFlee(parent, attacker)
|
|
end
|
|
end
|
|
function modifier_kaban_rofl_ability.prototype.MakeUnitFlee(self, fleeingUnit, fromUnit)
|
|
local fleeingPos = fleeingUnit:GetAbsOrigin()
|
|
local fromPos = fromUnit:GetAbsOrigin()
|
|
local directionX = fleeingPos.x - fromPos.x
|
|
local directionY = fleeingPos.y - fromPos.y
|
|
local distance = math.sqrt(directionX * directionX + directionY * directionY)
|
|
if distance > 0 then
|
|
local normalizedX = directionX / distance
|
|
local normalizedY = directionY / distance
|
|
local fleeDistance = math.min(800, distance * 2)
|
|
local fleeX = fleeingPos.x + normalizedX * fleeDistance
|
|
local fleeY = fleeingPos.y + normalizedY * fleeDistance
|
|
local fleePos = Vector(fleeX, fleeY, fleeingPos.z)
|
|
local groundHeight = GetGroundHeight(fleePos, nil)
|
|
local validPos = Vector(fleeX, fleeY, groundHeight)
|
|
fleeingUnit:MoveToPosition(toVectorWS(nil, validPos))
|
|
fleeingUnit:AddNewModifier(
|
|
fleeingUnit,
|
|
getModifierSourceAbility(nil, fleeingUnit),
|
|
"modifier_phased",
|
|
{duration = 2}
|
|
)
|
|
end
|
|
end
|
|
modifier_kaban_rofl_ability = __TS__Decorate(
|
|
modifier_kaban_rofl_ability,
|
|
modifier_kaban_rofl_ability,
|
|
{registerModifier(nil)},
|
|
{kind = "class", name = "modifier_kaban_rofl_ability"}
|
|
)
|
|
____exports.modifier_kaban_rofl_ability = modifier_kaban_rofl_ability
|
|
return ____exports
|