CustomGames.ru - Dota 2 пользовательские игры

[Готовый скрипт] Пронзающая стрела мираны

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 00zveroboi

  • 50
  • Мощь: 0
npc_ability_custom.txt
Спойлер
Код
"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"
}
}
}
[свернуть]
addon_russian
Спойлер
Код
"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" "Макс. стан:"
[свернуть]
в функцию Precache
Спойлер
Код
PrecacheResource( "particle_folder", "particles/units/heroes/hero_mirana", context )
PrecacheResource( "soundfile", "soundevents/game_sounds_heroes/game_sounds_mirana.vsndevts", context )
[свернуть]
vscripts/abilities/mirana_piercing_arrow.lua
Спойлер
Код
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
[свернуть]
« Последнее редактирование: 17-08-2017, 02:14:43 от 00zveroboi »

Оффлайн Илья

  • Супермодератор
  • 2142
  • Мощь: 21
Re: Пронзающая стрела мираны
« Ответ #1 : 16-08-2017, 09:31:53 »
Это вопрос или что?

Оффлайн I_Explorer

  • Продвинутый
  • 234
  • Мощь: 4
Re: Пронзающая стрела мираны
« Ответ #2 : 16-08-2017, 10:20:39 »
Это вопрос или что?
Наверно это минигайд, мб кому-то пригодится :D
Мой недо-мод для ДотА2 - steamcommunity.com/...ils/?id=765024602

Оффлайн 00zveroboi

  • 50
  • Мощь: 0
Re: Пронзающая стрела мираны
« Ответ #3 : 16-08-2017, 17:49:22 »
Наверно это минигайд, мб кому-то пригодится :D
Так и есть, но не гайд, а просто скилл, не описано ничего

Оффлайн TopKun

  • 44
  • Мощь: 0
  • оп мизантроп
Re: Пронзающая стрела мираны
« Ответ #4 : 16-08-2017, 19:06:28 »
Так и есть, но не гайд, а просто скилл, не описано ничего
Так есть же специальный топик для этого, не?

Оффлайн 00zveroboi

  • 50
  • Мощь: 0
Re: Пронзающая стрела мираны
« Ответ #5 : 17-08-2017, 02:10:36 »
Так есть же специальный топик для этого, не?
Этот раздел форума представляет скрипты, так почему же скрипт должен находиться в другом месте?)

Оффлайн TopKun

  • 44
  • Мощь: 0
  • оп мизантроп
Этот раздел форума представляет скрипты, так почему же скрипт должен находиться в другом месте?)
Ну здесь обычно вопросы по коду задают, а вот в наработках кидают уже готовые скрипты