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

CreateLinearProjectile

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

Оффлайн Instagib

  • 18
  • Мощь: 0
CreateLinearProjectile
« : 05-09-2014, 22:21:46 »
В общем, есть абилка
Спойлер
Код
"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"
}
}
}
[свернуть]
, которая при событии OnSpellStart вызывает функцию, в которой создается снаряд с помощью CreateLinearProjectile().
Спойлер
Код
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
[свернуть]
Я так понимаю, чтобы отслеживались события OnProjectileFinish и OnProjectileHitUnit, нужно в поле Ability передать абилку, в которой эти события описаны? Вот без этой строчки Ability = keys.ability есть только анимация. С ней же не работает ничего. Никак не могу разобраться в чем проблема. Может есть способ эти события в луа отлавливать? Помогите плз.

Оффлайн doter.ua

  • Друзья CG
  • 272
  • Мощь: 1
Re: CreateLinearProjectile
« Ответ #1 : 06-09-2014, 10:47:02 »
Instagib, Я projectile  еще не использовал, посмотри примеры у других, мб поможет. 
github.com/search...e+extension%3Alua
гайды
сурпрайз mthfckr :D

[свернуть]

Оффлайн Instagib

  • 18
  • Мощь: 0
Re: CreateLinearProjectile
« Ответ #2 : 06-09-2014, 14:54:53 »
Instagib, Я projectile  еще не использовал, посмотри примеры у других, мб поможет.
github.com/search...e+extension%3Alua
В том то и дело, что я там уже смотрел, и толком ничего не нашел, чтобы помогло =\ Везде есть эта строчка, а у меня не работает. Параметры то, передаваемые в функцию одинаковые. Значит что-то с самой абилкой не так, а что никак не пойму. Это провал ):

Оффлайн doter.ua

  • Друзья CG
  • 272
  • Мощь: 1
Re: CreateLinearProjectile
« Ответ #3 : 06-09-2014, 17:37:30 »
Instagib, указывай вручную Ability = ABILITY_название
гайды
сурпрайз mthfckr :D

[свернуть]

Оффлайн Instagib

  • 18
  • Мощь: 0
Re: CreateLinearProjectile
« Ответ #4 : 06-09-2014, 20:10:19 »
Короче дело в векторах.Сделал так vSpawnOrigin = Vector(0, 0, 393) (393 потому что хг), и он начал летать из центра карты. Осталось это пофиксить.

Оффлайн Instagib

  • 18
  • Мощь: 0
Re: CreateLinearProjectile
« Ответ #5 : 07-09-2014, 10:10:15 »
Почему-то projectile не хотел спавниться на месте кастера. Сместил точку спавна vSpawnOrigin = caster:GetOrigin() + caster:GetForwardVector() * 100 и все заработало (: