Files
2HUCardTDGame/aghanim_singleplayer/scripts/vscripts/modifiers/modifier_sled_penguin_passive.lua
2021-10-24 15:36:18 -04:00

118 lines
3.1 KiB
Lua
Executable File

modifier_sled_penguin_passive = class({})
----------------------------------------------------------------------------------
function modifier_sled_penguin_passive:IsHidden()
return true
end
----------------------------------------------------------------------------------
function modifier_sled_penguin_passive:IsPurgable()
return false
end
----------------------------------------------------------------------------------
function modifier_sled_penguin_passive:OnCreated( kv )
if IsServer() then
self.hPlayerEnt = nil
self.bRideComplete = false
self.bRideStarted = false
end
end
----------------------------------------------------------------------------------
function modifier_sled_penguin_passive:DeclareFunctions()
local funcs =
{
MODIFIER_EVENT_ON_ORDER,
}
return funcs
end
----------------------------------------------------------------------------------
function modifier_sled_penguin_passive:CheckState()
local state =
{
[MODIFIER_STATE_NO_HEALTH_BAR] = true,
}
return state
end
-----------------------------------------------------------------------
function modifier_sled_penguin_passive:OnOrder( params )
if IsServer() then
local hOrderedUnit = params.unit
local hTargetUnit = params.target
local nOrderType = params.order_type
if nOrderType ~= DOTA_UNIT_ORDER_MOVE_TO_TARGET then
return
end
if hTargetUnit == nil or hTargetUnit ~= self:GetParent() then
return
end
if hOrderedUnit ~= nil and hOrderedUnit:IsRealHero() and hOrderedUnit:GetTeamNumber() == DOTA_TEAM_GOODGUYS and hTargetUnit:GetOwnerEntity() == hOrderedUnit then
self.hPlayerEnt = hOrderedUnit
self:StartIntervalThink( 0.25 )
return
end
self:StartIntervalThink( -1 )
end
return 0
end
-----------------------------------------------------------------------
function modifier_sled_penguin_passive:OnDestroy()
if IsServer() then
if self.hPlayerEnt ~= nil and self.hPlayerEnt:IsNull() == false then
self.hPlayerEnt:RemoveModifierByName( "modifier_sled_penguin_movement" )
end
UTIL_Remove( self:GetParent() )
end
return 0
end
-----------------------------------------------------------------------
function modifier_sled_penguin_passive:OnIntervalThink()
if IsServer() then
if self.hPlayerEnt ~= nil then
local flTalkDistance = 250.0
if flTalkDistance >= ( self.hPlayerEnt:GetOrigin() - self:GetParent():GetOrigin() ):Length2D() then
if GameRules.Aghanim ~= nil and self.bRideStarted == false then
self.hPlayerEnt:Interrupt()
self:StartIntervalThink( -1 )
self.bRideStarted = true
EmitSoundOn( "SledPenguin.PlayerHopOn", self:GetParent() )
self:GetParent():AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sled_penguin_movement", {} )
self.hPlayerEnt:AddNewModifier( self:GetParent(), self:GetAbility(), "modifier_sled_penguin_movement", {} )
if self:GetParent().Encounter ~= nil then
self:GetParent().Encounter:OnPlayerRidePenguin( self.hPlayerEnt:GetPlayerOwnerID(), self:GetParent() )
end
end
end
end
end
end
---------------------------------------------------------------------------