- 14 Июл 2015
- 103
- 17
npc_ability_custom.txt
addon_russian
в функцию Precache
vscripts/abilities/mirana_piercing_arrow.lua
Код:
"mirana_piercing_arrow"
{
// General
//-------------------------------------------------------------------------------------------------------------
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_DIRECTIONAL | DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO"
"FightRecapLevel" "1"
"BaseClass" "ability_lua"
"AbilityTextureName" "mirana_arrow"
"ScriptFile" "abilities/mirana_piercing_arrow"
"LevelsBetweenUpgrades" "2"
"RequiredLevel" "1"
"MaxLevel" "4"
// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastRange" "3000"
"AbilityCastPoint" "0.5"
// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "17"
"AbilityDuration" "3.11"
// Cost
//-------------------------------------------------------------------------------------------------------------
"AbilityManaCost" "100"
// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"range" "3000"
}
"02"
{
"var_type" "FIELD_INTEGER"
"speed" "857"
}
"03"
{
"var_type" "FIELD_INTEGER"
"radius" "115"
}
"04"
{
"var_type" "FIELD_INTEGER"
"add_damage" "140"
}
"05"
{
"var_type" "FIELD_INTEGER"
"damage" "50 140 230 320"
}
"06"
{
"var_type" "FIELD_FLOAT"
"min_duration" "0.01"
}
"07"
{
"var_type" "FIELD_FLOAT"
"duration" "5"
}
"08"
{
"var_type" "FIELD_INTEGER"
"maxup" "1500"
}
}
}
Код:
"DOTA_Tooltip_ability_mirana_piercing_arrow" "Пронзающая стрела"
"DOTA_Tooltip_ability_mirana_piercing_arrow_Description" "Пронзающая стрела"
"DOTA_Tooltip_ability_mirana_piercing_arrow_maxup" "Макс. увел. урона/стана:"
"DOTA_Tooltip_ability_mirana_piercing_arrow_damage" "Урон:"
"DOTA_Tooltip_ability_mirana_piercing_arrow_add_damage" "Макс. доп. урон:"
"DOTA_Tooltip_ability_mirana_piercing_arrow_min_duration" "Мин. стан:"
"DOTA_Tooltip_ability_mirana_piercing_arrow_duration" "Макс. стан:"
Код:
PrecacheResource( "particle_folder", "particles/units/heroes/hero_mirana", context )
PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_mirana.vsndevts", context )
Код:
mirana_piercing_arrow = class({})
LinkLuaModifier( "modifier_mirana_piercing_arrow", "abilities/mirana_piercing_arrow", LUA_MODIFIER_MOTION_NONE )
function mirana_piercing_arrow:OnSpellStart()
self.range = self:GetSpecialValueFor( "range" )
self.speed = self:GetSpecialValueFor( "speed" )
self.radius = self:GetSpecialValueFor( "radius" )
self.damage = self:GetSpecialValueFor( "damage" )
self.adddmg = self:GetSpecialValueFor( "add_damage" )
self.duration = self:GetSpecialValueFor( "duration" )
self.mindur = self:GetSpecialValueFor( "min_duration" )
self.maxup = self:GetSpecialValueFor( "maxup" )
EmitSoundOn( "Hero_Mirana.ArrowCast", self:GetCaster() )
local point = self:GetCursorPosition()
local direction = point - self:GetCaster():GetOrigin()
direction.z = 0.0
direction = direction:Normalized()
self.heropos = self:GetCaster():GetOrigin()
local info = {
EffectName = "particles/units/heroes/hero_mirana/mirana_spell_arrow.vpcf",
Ability = self,
vSpawnOrigin = self:GetCaster():GetOrigin(),
fStartRadius = self.radius,
fEndRadius = self.radius,
vVelocity = direction * self.speed,
fDistance = self.range,
Source = self:GetCaster(),
iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY,
iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
}
ProjectileManager:CreateLinearProjectile( info )
local info1 = {
EffectName = "particles/units/heroes/hero_mirana/mirana_spell_arrow_trail.vpcf",
Ability = self,
vSpawnOrigin = self:GetCaster():GetOrigin(),
fStartRadius = 0,
fEndRadius = 0,
vVelocity = direction * self.speed,
fDistance = self.range,
Source = self:GetCaster(),
iUnitTargetTeam = nil,
iUnitTargetType = nil,
}
ProjectileManager:CreateLinearProjectile( info1 )
local info2 = {
EffectName = "particles/units/heroes/hero_mirana/mirana_spell_arrow_fx.vpcf",
Ability = self,
vSpawnOrigin = self:GetCaster():GetOrigin(),
fStartRadius = 0,
fEndRadius = 0,
vVelocity = direction * self.speed,
fDistance = self.range,
Source = self:GetCaster(),
iUnitTargetTeam = nil,
iUnitTargetType = nil,
}
ProjectileManager:CreateLinearProjectile( info2 )
EmitSoundOn( "Hero_Mirana.Arrow", self:GetCaster() )
end
function mirana_piercing_arrow:OnProjectileHit( target, location )
if target ~= nil and not target:IsMagicImmune() and not target:IsInvulnerable() then
local dist = #(location - self.heropos) / self.maxup
if dist > 1 then dist = 1 end
if not target:IsHero() and not target:IsAncient() then
target:ForceKill( false )
else
local damage = {
victim = target,
attacker = self:GetCaster(),
damage = self.damage + self.adddmg * dist,
damage_type = DAMAGE_TYPE_MAGICAL,
ability = self
}
ApplyDamage( damage )
end
target:AddNewModifier( self:GetCaster(), self, "modifier_mirana_piercing_arrow", { duration = ( self.duration - self.mindur ) * dist + self.mindur } )
EmitSoundOn( "Hero_Mirana.ArrowImpact", target )
local direction = location - self:GetCaster():GetOrigin()
direction.z = 0.0
direction = direction:Normalized()
end
return false
end
modifier_mirana_piercing_arrow = class({})
function modifier_mirana_piercing_arrow:IsHidden()
return false
end
function modifier_mirana_piercing_arrow:IsPurgable()
return true
end
function modifier_mirana_piercing_arrow:IsDebuff()
return true
end
function modifier_mirana_piercing_arrow:IsStunDebuff()
return true
end
function modifier_mirana_piercing_arrow:GetEffectName()
return "particles/generic_gameplay/generic_stunned.vpcf"
end
function modifier_mirana_piercing_arrow:CheckState()
return { [MODIFIER_STATE_STUNNED] = true }
end
function modifier_mirana_piercing_arrow:GetEffectAttachType()
return PATTACH_OVERHEAD_FOLLOW
end
function modifier_mirana_piercing_arrow:DeclareFunctions()
return { MODIFIER_PROPERTY_OVERRIDE_ANIMATION }
end
function modifier_mirana_piercing_arrow:GetOverrideAnimation( params )
return ACT_DOTA_DISABLED
end
Последнее редактирование модератором: