На данный момент похоже это единственное решение. Меняй скорость, давай стан и будет что то похожее. Ну и анимацию прикрутить надо будет ручками.Никто не в курсе, как осуществить рывок персонажа, подобно рывку магнуса (magnataur_skewer), без разрушений деревьев? Какие для подобных рывков используют функции?
А разница с точки зрения игрока?Да вот я и гляжу на похожие штуки. Можно замудрить LinearProjectile, и потом просто в конечную точку персонажа кинуть, но это не рывок, а тот же ком тускара, земляного эмбера или же полет шторма.
болл лайтинг я примерно знаю как сделать.
если не ошибусь сейчас, то и магнуса рывок можно сделать по типу PolarProjective из редактора варика 3.
То есть SetAbsOrigin() но сдвигаем мы его по фэйсингу (в сторону куда смотрит) и настолько близко, что даже почти не заметно как он двигается. Но двигаем мы его каждые 0.05 сек, поэтому кажется что он двигается плавно)
В баребонс была помоему библиотека) или попробуй в датадривене функцию толчка покрутить, может получится)
не отказывайся от своих идей. пробуй пока не получится.
если не поможет, сделай по типу "нажал - побежал"
имеется ввиду когда герой райткликает на позицию, убираешь ограничение на мувемент спид, даешь 700, и заставляешь туда бежать. уверяю смотреться будет очень эффектно)
а говорил, что мой гайд само собой разумеющееся))
spurt_with_a_knife = class({})
function spurt_with_a_knife:OnSpellStart()
StartSoundEvent("Hero_Axe.BerserkersCall.Start", self:GetCaster())
local caster = self:GetCaster()
local step = 100
local direction = caster:GetForwardVector()
local StartPosition = caster:GetAbsOrigin()
local NextPosition = StartPosition + direction * step
local id1 = ParticleManager:CreateParticle("particles/units/heroes/hero_magnataur/magnataur_skewer_rocks.vpcf", PATTACH_ABSORIGIN, caster)
Timers:CreateTimer(1,function()
ParticleManager:DestroyParticle(id1, false)
return nil
end)
Timers:CreateTimer(0.05,function()
local id2 = ParticleManager:CreateParticle("particles/units/heroes/hero_magnataur/magnataur_skewer_dust_b.vpcf", PATTACH_ABSORIGIN, caster)
Timers:CreateTimer(0.5,function()
ParticleManager:DestroyParticle(id2, false)
return nil
end)
local units = FindUnitsInRadius( caster:GetTeamNumber(), NextPosition, caster, 100, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false )
if units[ 1 ] then
StartSoundEvent("Hero_BountyHunter.Jinada", units[ 1 ])
local damage = {
victim = units[ 1 ],
attacker = self:GetCaster(),
damage = 20,
damage_type = DAMAGE_TYPE_PHYSICAL,
ability = this,
}
ApplyDamage( damage )
local id3 = ParticleManager:CreateParticle("particles/units/heroes/hero_life_stealer/life_stealer_infest_emerge_blood04.vpcf", PATTACH_ABSORIGIN, units[ 1 ])
Timers:CreateTimer(2,function()
ParticleManager:DestroyParticle(id3, false)
return nil
end)
return nil
elseif GridNav:IsNearbyTree( NextPosition, 50, true ) then
StartSoundEvent("Hero_Sven.IronWill", caster)
return nil
else
caster:SetAbsOrigin(NextPosition)
NextPosition = StartPosition + direction * step
end
step = step+100
if step < 1000 then
return 0.05
else
return nil
end
end)
end
---------------------------------spells-------------------------------
PrecacheResource("particle", "particles/units/heroes/hero_magnataur/magnataur_skewer_dust_b.vpcf", context) --spurt with knife
PrecacheResource("particle", "particles/units/heroes/hero_magnataur/magnataur_skewer_rocks.vpcf", context) --spurt with knife
PrecacheResource("particle", "particles/units/heroes/hero_life_stealer/life_stealer_infest_emerge_blood04.vpcf", context) --blood
-------------------------------sounds--------------------------------
PrecacheResource("soundfile", "soundevents/game_sounds_heroes/game_sounds_windrunner.vsndevts", context)
PrecacheResource("soundfile", "soundevents/game_sounds_heroes/game_sounds_sven.vsndevts", context)
PrecacheResource("soundfile", "soundevents/game_sounds_heroes/game_sounds_axe.vsndevts", context)