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