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 BaseItem = ____dota_ts_adapter.BaseItem local BaseModifier = ____dota_ts_adapter.BaseModifier local registerAbility = ____dota_ts_adapter.registerAbility local registerModifier = ____dota_ts_adapter.registerModifier ____exports.item_easter_egg = __TS__Class() local item_easter_egg = ____exports.item_easter_egg item_easter_egg.name = "item_easter_egg" item_easter_egg.____file_path = "scripts/vscripts/items/util_items/item_easter_egg.lua" __TS__ClassExtends(item_easter_egg, BaseItem) function item_easter_egg.prototype.OnSpellStart(self) if not IsServer() then return end local caster = self:GetCaster() caster:AddNewModifier(caster, self, "modifier_orbiting_wisp", {duration = 60}) self:RemoveSelf() end item_easter_egg = __TS__Decorate( item_easter_egg, item_easter_egg, {registerAbility(nil)}, {kind = "class", name = "item_easter_egg"} ) ____exports.item_easter_egg = item_easter_egg ____exports.modifier_orbiting_wisp = __TS__Class() local modifier_orbiting_wisp = ____exports.modifier_orbiting_wisp modifier_orbiting_wisp.name = "modifier_orbiting_wisp" modifier_orbiting_wisp.____file_path = "scripts/vscripts/items/util_items/item_easter_egg.lua" __TS__ClassExtends(modifier_orbiting_wisp, BaseModifier) function modifier_orbiting_wisp.prototype.____constructor(self, ...) BaseModifier.prototype.____constructor(self, ...) self.interval = 0.03 self.rotation = 0 self.rotateDelta = 0 self.rotateRadius = 200 self.revolution = 2 self.baseFacing = Vector(0, 1, 0) self.relativePos = Vector(0, 0, 0) self.position = Vector(0, 0, 0) self.facing = Vector(0, 0, 0) self.zero = Vector(0, 0, 0) end function modifier_orbiting_wisp.prototype.GetTexture(self) return "util_items/eggs" end function modifier_orbiting_wisp.prototype.OnCreated(self) if not IsServer() then return end local parent = self:GetParent() self.rotateDelta = 360 / self.revolution * self.interval self.relativePos = Vector(-self.rotateRadius, 0, 100) local origin = parent:GetAbsOrigin() self.position = Vector(origin.x + self.relativePos.x, origin.y + self.relativePos.y, origin.z + self.relativePos.z) self.rotation = 0 self.facing = self.baseFacing self.wisp = CreateUnitByName( "npc_dota_golden_fish", self.position, true, parent, parent:GetOwner(), parent:GetTeamNumber() ) if self.wisp ~= nil then self.wisp:SetForwardVector(self.facing) self.wisp:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_wisp_orbiting", {} ) self.wisp:AddNewModifier( self:GetCaster(), self:GetAbility(), "modifier_wisp_attack", {duration = 60} ) end self:StartIntervalThink(self.interval) end function modifier_orbiting_wisp.prototype.OnIntervalThink(self) if not IsServer() or not self.wisp then return end local parent = self:GetParent() self.rotation = self.rotation + self.rotateDelta local origin = parent:GetAbsOrigin() local targetPos = Vector(origin.x + self.relativePos.x, origin.y + self.relativePos.y, origin.z + self.relativePos.z) local rotatedPos = rotatePositionYaw(nil, origin, -self.rotation, targetPos) self.position = rotatedPos self.facing = rotatePositionYaw(nil, self.zero, -self.rotation, self.baseFacing) self.wisp:SetAbsOrigin(self.position) self.wisp:SetForwardVector(self.facing) end function modifier_orbiting_wisp.prototype.OnDestroy(self) if IsClient() then return end if self.wisp then UTIL_Remove(self.wisp) end end modifier_orbiting_wisp = __TS__Decorate( modifier_orbiting_wisp, modifier_orbiting_wisp, {registerModifier(nil)}, {kind = "class", name = "modifier_orbiting_wisp"} ) ____exports.modifier_orbiting_wisp = modifier_orbiting_wisp ____exports.modifier_wisp_orbiting = __TS__Class() local modifier_wisp_orbiting = ____exports.modifier_wisp_orbiting modifier_wisp_orbiting.name = "modifier_wisp_orbiting" modifier_wisp_orbiting.____file_path = "scripts/vscripts/items/util_items/item_easter_egg.lua" __TS__ClassExtends(modifier_wisp_orbiting, BaseModifier) function modifier_wisp_orbiting.prototype.IsHidden(self) return true end function modifier_wisp_orbiting.prototype.GetEffectName(self) return "particles/econ/items/lifestealer/lifestealer_immortal_backbone_gold/lifestealer_immortal_backbone_gold_rage.vpcf" end function modifier_wisp_orbiting.prototype.GetEffectAttachType(self) return PATTACH_OVERHEAD_FOLLOW end function modifier_wisp_orbiting.prototype.CheckState(self) return { [MODIFIER_STATE_INVULNERABLE] = true, [MODIFIER_STATE_UNSELECTABLE] = true, [MODIFIER_STATE_UNTARGETABLE] = true, [MODIFIER_STATE_OUT_OF_GAME] = true, [MODIFIER_STATE_NO_HEALTH_BAR] = true } end modifier_wisp_orbiting = __TS__Decorate( modifier_wisp_orbiting, modifier_wisp_orbiting, {registerModifier(nil)}, {kind = "class", name = "modifier_wisp_orbiting"} ) ____exports.modifier_wisp_orbiting = modifier_wisp_orbiting ____exports.modifier_wisp_attack = __TS__Class() local modifier_wisp_attack = ____exports.modifier_wisp_attack modifier_wisp_attack.name = "modifier_wisp_attack" modifier_wisp_attack.____file_path = "scripts/vscripts/items/util_items/item_easter_egg.lua" __TS__ClassExtends(modifier_wisp_attack, BaseModifier) function modifier_wisp_attack.prototype.____constructor(self, ...) BaseModifier.prototype.____constructor(self, ...) self.interval = 0.33 end function modifier_wisp_attack.prototype.IsHidden(self) return false end function modifier_wisp_attack.prototype.IsPurgable(self) return false end function modifier_wisp_attack.prototype.OnCreated(self) if not IsServer() then return end self:StartIntervalThink(self.interval) end function modifier_wisp_attack.prototype.OnIntervalThink(self) if not IsServer() then return end local parent = self:GetParent() local caster = self:GetCaster() if not caster then return end if RandomFloat(0, 100) <= 50 then self:CreateGoldBag(parent:GetAbsOrigin()) end end function modifier_wisp_attack.prototype.CreateGoldBag(self, position) local goldBag = CreateItem("item_bag_of_gold", nil, nil) if goldBag then local physicalItem = CreateItemOnPositionForLaunch(position, goldBag) if physicalItem ~= nil then local randomAngle = RandomFloat(0, 2 * math.pi) local randomDistance = RandomFloat(50, 200) local randomX = position.x + randomDistance * math.cos(randomAngle) local randomY = position.y + randomDistance * math.sin(randomAngle) local randomPos = Vector(randomX, randomY, position.z) goldBag:LaunchLootInitialHeight( false, 0, 100, 0.5, randomPos ) Timers:CreateTimer( 15, function() if IsValidEntity(physicalItem) then UTIL_Remove(physicalItem) end end ) end end end modifier_wisp_attack = __TS__Decorate( modifier_wisp_attack, modifier_wisp_attack, {registerModifier(nil)}, {kind = "class", name = "modifier_wisp_attack"} ) ____exports.modifier_wisp_attack = modifier_wisp_attack return ____exports