Files
2021-10-24 15:36:18 -04:00

133 lines
4.9 KiB
Lua
Executable File

bandit_stifling_dagger = class({})
LinkLuaModifier( "modifier_phantom_assassin_stiflingdagger_caster", "modifiers/creatures/modifier_phantom_assassin_stiflingdagger_caster", LUA_MODIFIER_MOTION_NONE )
LinkLuaModifier( "modifier_phantom_assassin_stiflingdagger", "modifiers/creatures/modifier_phantom_assassin_stiflingdagger", LUA_MODIFIER_MOTION_NONE )
--------------------------------------------------------------------------------
function bandit_stifling_dagger:Precache( context )
PrecacheResource( "particle", "particles/creatures/bandit_captain/phantom_assassin_linear_dagger.vpcf", context )
end
--------------------------------------------------------------------------------
function bandit_stifling_dagger:OnAbilityPhaseStart()
if IsServer() then
local nRadius = 100
self.nPreviewFX = ParticleManager:CreateParticle( "particles/dark_moon/darkmoon_creep_warning.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetCaster() )
ParticleManager:SetParticleControlEnt( self.nPreviewFX, 0, self:GetCaster(), PATTACH_ABSORIGIN_FOLLOW, nil, self:GetCaster():GetOrigin(), true )
ParticleManager:SetParticleControl( self.nPreviewFX, 1, Vector( nRadius, nRadius, nRadius ) )
ParticleManager:SetParticleControl( self.nPreviewFX, 15, Vector( 255, 26, 26 ) )
EmitSoundOn( "Creature.StartCast", self:GetCaster() )
end
return true
end
--------------------------------------------------------------------------------
function bandit_stifling_dagger:OnAbilityPhaseInterrupted()
if IsServer() then
ParticleManager:DestroyParticle( self.nPreviewFX, false )
StopSoundOn( "Creature.StartCast", self:GetCaster() )
end
end
--------------------------------------------------------------------------------
function bandit_stifling_dagger:OnSpellStart()
if IsServer() then
ParticleManager:DestroyParticle( self.nPreviewFX, false )
StopSoundOn( "Creature.StartCast", self:GetCaster() )
end
self.duration = self:GetSpecialValueFor( "duration" )
self.dagger_speed = self:GetSpecialValueFor( "dagger_speed" )
self.dagger_offset = self:GetSpecialValueFor( "dagger_offset" )
self.dagger_count = self:GetSpecialValueFor( "dagger_count" )
self.dagger_rate = self:GetSpecialValueFor( "dagger_rate" )
self.dagger_range = self:GetSpecialValueFor( "dagger_range" )
self.vTargetLocation = self:GetCursorPosition()
self.flAccumulatedTime = 0.0
self.vDirection = self.vTargetLocation - self:GetCaster():GetOrigin()
self.nDaggersThrown = 0
local vDirection = self.vTargetLocation - self:GetCaster():GetOrigin()
vDirection.z = 0.0
vDirection = vDirection:Normalized()
self:ThrowDagger( vDirection )
end
--------------------------------------------------------------------------------
function bandit_stifling_dagger:OnChannelThink( flInterval )
self.flAccumulatedTime = self.flAccumulatedTime + flInterval
if self.flAccumulatedTime >= self.dagger_rate then
self.flAccumulatedTime = self.flAccumulatedTime - self.dagger_rate
local vOffset = RandomVector( self.dagger_offset )
vOffset.z = 0.0
local vDirection = ( self.vTargetLocation + vOffset ) - self:GetCaster():GetOrigin()
vDirection.z = 0.0
vDirection = vDirection:Normalized()
self:ThrowDagger( vDirection )
end
end
--------------------------------------------------------------------------------
function bandit_stifling_dagger:OnProjectileHit( hTarget, vLocation )
if hTarget ~= nil and ( not hTarget:IsInvulnerable() ) then
local kv = {}
self:GetCaster():AddNewModifier( self:GetCaster(), self, "modifier_phantom_assassin_stiflingdagger_caster", kv )
self:GetCaster():PerformAttack( hTarget, false, true, true, true, true, false, true )
self:GetCaster():RemoveModifierByName( "modifier_phantom_assassin_stiflingdagger_caster" )
local kv =
{
duration = self.duration,
}
hTarget:AddNewModifier( self:GetCaster(), self, "modifier_phantom_assassin_stiflingdagger", kv)
EmitSoundOn( "Dungeon.BanditDagger.Target", hTarget )
end
return true
end
--------------------------------------------------------------------------------
function bandit_stifling_dagger:ThrowDagger( vDirection )
local info =
{
EffectName = "particles/creatures/bandit_captain/phantom_assassin_linear_dagger.vpcf",
Ability = self,
vSpawnOrigin = self:GetCaster():GetOrigin(),
fStartRadius = 50.0,
fEndRadius = 50.0,
vVelocity = vDirection * self.dagger_speed,
fDistance = self.dagger_range,
Source = self:GetCaster(),
iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY,
iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
}
ProjectileManager:CreateLinearProjectile( info )
EmitSoundOn( "Dungeon.BanditDagger.Cast", self:GetCaster() )
self.nDaggersThrown = self.nDaggersThrown + 1
if self.nDaggersThrown >= self.dagger_count then
self:EndChannel( false )
else
self:GetCaster():StartGestureWithPlaybackRate( ACT_DOTA_CAST_ABILITY_1, 1.33 )
end
end
--------------------------------------------------------------------------------