Files
Dota-Zombie-Invasion/scripts/vscripts/items/util_items/item_easter_egg.lua
T
2026-05-29 15:11:31 +07:00

217 lines
7.7 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 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