В общем, есть абилка
, которая при событии OnSpellStart вызывает функцию, в которой создается снаряд с помощью CreateLinearProjectile().
Я так понимаю, чтобы отслеживались события OnProjectileFinish и OnProjectileHitUnit, нужно в поле Ability передать абилку, в которой эти события описаны? Вот без этой строчки Ability = keys.ability есть только анимация. С ней же не работает ничего. Никак не могу разобраться в чем проблема. Может есть способ эти события в луа отлавливать? Помогите плз.
Код:
"bomb_toss"
{
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_POINT | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE"
"AbilityTextureName" "alchemist_unstable_concoction_throw"
"MaxLevel" "1"
"AbilityCastPoint" "0.5"
"AbilityCastRange" "GLOBAL"
"AbilityCooldown" "0.0"
"AbilityManaCost" "0"
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"distance" "600"
}
}
"OnSpellStart"
{
"RunScript"
{
"ScriptFile" "scripts/vscripts/abilities.lua"
"Function" "CreateBombProjectile"
"Target" "POINT"
"Distance" "%distance"
"EffectName" "particles/units/heroes/hero_batrider/batrider_flamebreak.vpcf"
}
"RunScript"
{
"ScriptFile" "scripts/vscripts/abilities.lua"
"Function" "RemoveBomb"
}
}
"OnProjectileFinish"
{
"RunScript"
{
"ScriptFile" "scripts/vscripts/abilities.lua"
"Function" "DropBomb"
"Target" "POINT"
}
}
"OnProjectileHitUnit"
{
"DeleteOnHit" "1"
"RunScript"
{
"ScriptFile" "scripts/vscripts/abilities.lua"
"Function" "BombHit"
"Target" "TARGET"
}
}
}
Код:
function CreateBombProjectile( keys )
local caster = keys.caster
local point = keys.target_points[1]:Length2D()
local str = caster:GetStrength()
local distance = keys.Distance + str*50
local length = point - caster:GetAbsOrigin():Length2D()
if (length > distance) then
length = distance
end
local info =
{
Ability = keys.ability,
EffectName = keys.EffectName,
vSpawnOrigin = caster:GetAbsOrigin(),
fDistance = length,
fStartRadius = 64,
fEndRadius = 64,
Source = caster,
bHasFrontalCone = false,
bReplaceExisting = false,
iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_BOTH,
iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_INVULNERABLE,
iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BUILDING,
fExpireTime = GameRules:GetGameTime() + 10.0,
bDeleteOnHit = true,
vVelocity = caster:GetForwardVector() * 1000,
bProvidesVision = true,
iVisionRadius = 400,
iVisionTeamNumber = DOTA_TEAM_GOODGUYS + DOTA_TEAM_BADGUYS
}
ProjectileManager:CreateLinearProjectile(info)
end
Последнее редактирование модератором: