Решил я прикрутить дровке спелл ( в данном случае сплитшот медузы )
я зашел протестить, когда я атаковал юнита партикл и проджектайл атаки не показывался (спелл еще не вкачан) Когда я вкачивал и включал сплитшот то партикл выстрела и проджектайл стрелы летели только в дополнительные цели, но не в основную ( на которую райткликал )
Сам сплитшот исправно работает я хз почему так
Сам код сплитшота
я зашел протестить, когда я атаковал юнита партикл и проджектайл атаки не показывался (спелл еще не вкачан) Когда я вкачивал и включал сплитшот то партикл выстрела и проджектайл стрелы летели только в дополнительные цели, но не в основную ( на которую райткликал )
Сам сплитшот исправно работает я хз почему так
Сам код сплитшота
Код:
"medusa_split_shot_datadriven"
{
// General
//-------------------------------------------------------------------------------------------------------------
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_TOGGLE | DOTA_ABILITY_BEHAVIOR_IMMEDIATE"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_ALL"
"AbilityUnitTargetFlag" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
"AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES"
"AbilityTextureName" "medusa_split_shot"
// Precache
//-------------------------------------------------------------------------------------------------------------
"precache"
{
"soundfile" "soundevents/game_sounds_heroes/game_sounds_medusa.vsndevts"
"particle" "particles/econ/items/puck/puck_alliance_set/puck_dreamcoil_start_d_aproset.vpcf"
"particle" "particles/units/heroes/hero_drow/drow_base_attack.vpcf"
}
// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastPoint" "0.4 0.4 0.4 0.4"
// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"damage_modifier" "-20"
}
"02"
{
"var_type" "FIELD_INTEGER"
"damage_modifier_tooltip" "80"
}
"03"
{
"var_type" "FIELD_INTEGER"
"arrow_count" "1 2 3 4"
}
"04"
{
"var_type" "FIELD_INTEGER"
"total_arrow_count" "2 3 4 5"
}
"05"
{
"var_type" "FIELD_INTEGER"
"range" "700"
}
"06"
{
"var_type" "FIELD_INTEGER"
"projectile_speed" "1200"
}
}
"OnToggleOn"
{
"FireEffect"
{
"EffectName" "particles/econ/items/puck/puck_alliance_set/puck_dreamcoil_start_d_aproset.vpcf"
"EffectAttachType" "follow_origin"
"Target" "CASTER"
}
"ApplyModifier"
{
"ModifierName" "modifier_split_shot_datadriven"
"Target" "CASTER"
}
}
"OnToggleOff"
{
"FireEffect"
{
"EffectName" "particles/econ/items/puck/puck_alliance_set/puck_dreamcoil_start_d_aproset.vpcf"
"EffectAttachType" "follow_origin"
"Target" "CASTER"
}
"RemoveModifier"
{
"ModifierName" "modifier_split_shot_datadriven"
"Target"
{
"Center" "CASTER"
"Flags" "DOTA_UNIT_TARGET_FLAG_DEAD"
}
}
}
"OnProjectileHitUnit"
{
"DeleteOnHit" "1"
"FireSound"
{
"EffectName" "Hero_Medusa.AttackSplit"
"Target" "TARGET"
}
"RunScript"
{
"ScriptFile" "heroes/hero_medusa/split_shot.lua"
"Function" "SplitShotDamage"
}
}
"Modifiers"
{
"modifier_split_shot_datadriven"
{
"Passive" "0"
"IsHidden" "1"
"IsDebuff" "0"
"OnAttack"
{
"RunScript"
{
"ScriptFile" "heroes/hero_medusa/split_shot.lua"
"Function" "SplitShotLaunch"
"split_shot_projectile" "particles/units/heroes/hero_drow/drow_base_attack.vpcf"
}
}
"Properties"
{
"MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE" "%damage_modifier"
}
}
}
}
Lua:
--[[Author: Pizzalol
Date: 04.03.2015.
Creates additional attack projectiles for units within the specified radius around the caster]]
function SplitShotLaunch( keys )
local caster = keys.caster
local caster_location = caster:GetAbsOrigin()
local ability = keys.ability
local ability_level = ability:GetLevel() - 1
-- Targeting variables
local target_type = ability:GetAbilityTargetType()
local target_team = ability:GetAbilityTargetTeam()
local target_flags = ability:GetAbilityTargetFlags()
local attack_target = caster:GetAttackTarget()
-- Ability variables
local radius = ability:GetLevelSpecialValueFor("range", ability_level)
local max_targets = ability:GetLevelSpecialValueFor("arrow_count", ability_level)
local projectile_speed = ability:GetLevelSpecialValueFor("projectile_speed", ability_level)
local split_shot_projectile = keys.split_shot_projectile
local split_shot_targets = FindUnitsInRadius(caster:GetTeam(), caster_location, nil, radius, target_team, target_type, target_flags, FIND_CLOSEST, false)
-- Create projectiles for units that are not the casters current attack target
for _,v in pairs(split_shot_targets) do
if v ~= attack_target then
local projectile_info =
{
EffectName = split_shot_projectile,
Ability = ability,
vSpawnOrigin = caster_location,
Target = v,
Source = caster,
bHasFrontalCone = false,
iMoveSpeed = projectile_speed,
bReplaceExisting = false,
bProvidesVision = false
}
ProjectileManager:CreateTrackingProjectile(projectile_info)
max_targets = max_targets - 1
end
-- If we reached the maximum amount of targets then break the loop
if max_targets == 0 then break end
end
end
-- Apply the auto attack damage to the hit unit
function SplitShotDamage( keys )
local caster = keys.caster
local target = keys.target
local ability = keys.ability
local damage_table = {}
damage_table.attacker = caster
damage_table.victim = target
damage_table.damage_type = ability:GetAbilityDamageType()
damage_table.damage = caster:GetAttackDamage()
ApplyDamage(damage_table)
end