Я уже в душе не знаю как это сделать, ничего не сработало (setangles setforwardvertor etc) герои просто дёргается и сразу поварачивает обратно. В чём суть? Мой героя стреляет по кругу стрелами по очереди хочу чтобы при этом ещё и поворачивался в сторону выстрела. Вот код
function Dial( keys )
local caster = keys.caster
local ability = keys.ability
local ability_level = ability:GetLevel() - 1
-- Ability variables
local instances = ability:GetLevelSpecialValueFor("instances", ability_level)
local arrow_speed = ability:GetLevelSpecialValueFor("arrow_speed", ability_level)
local arrow_width = ability:GetLevelSpecialValueFor("arrow_width", ability_level)
local distance = ability:GetLevelSpecialValueFor("range", ability_level)
local channelTime = ability:GetChannelTime()
local particle_name = keys.particle_name
local startAttackSound = "Ability.Powershot"
local info =
{
Ability = keys.ability,
EffectName = particle_name,
iMoveSpeed = arrow_speed,
vSpawnOrigin = caster:GetAbsOrigin(),
fDistance = distance,
fStartRadius = arrow_width,
fEndRadius = arrow_width,
Source = caster,
bHasFrontalCone = false,
bReplaceExisting = false,
iUnitTargetTeam = ability:GetAbilityTargetTeam(),
iUnitTargetFlags = ability:GetAbilityTargetFlags(),
iUnitTargetType = ability:GetAbilityTargetType(),
fExpireTime = GameRules:GetGameTime() + 10.0,
bDeleteOnHit = false,
vVelocity = 0.0,
iMoveSpeed = 1000,
}
for i=instances,0,-1 do
Timers:CreateTimer(caster:GetPlayerOwnerID() .. 'RapidFireInterval' .. i, {
useGameTime = false,
endTime = (channelTime/instances) * i,
callback = function()
info.vVelocity = RotatePosition(Vector(0,0,0), QAngle(0,30*i,0), caster:GetForwardVector()) * info.iMoveSpeed
if ability:IsChanneling() then
StartAnimation(caster, {duration=0.5, activity=ACT_DOTA_ATTACK, rate=2.0})
StartSoundEvent(startAttackSound, caster)
projectile = ProjectileManager:CreateLinearProjectile(info)
end
end
})
end
end
local caster = keys.caster
local ability = keys.ability
local ability_level = ability:GetLevel() - 1
-- Ability variables
local instances = ability:GetLevelSpecialValueFor("instances", ability_level)
local arrow_speed = ability:GetLevelSpecialValueFor("arrow_speed", ability_level)
local arrow_width = ability:GetLevelSpecialValueFor("arrow_width", ability_level)
local distance = ability:GetLevelSpecialValueFor("range", ability_level)
local channelTime = ability:GetChannelTime()
local particle_name = keys.particle_name
local startAttackSound = "Ability.Powershot"
local info =
{
Ability = keys.ability,
EffectName = particle_name,
iMoveSpeed = arrow_speed,
vSpawnOrigin = caster:GetAbsOrigin(),
fDistance = distance,
fStartRadius = arrow_width,
fEndRadius = arrow_width,
Source = caster,
bHasFrontalCone = false,
bReplaceExisting = false,
iUnitTargetTeam = ability:GetAbilityTargetTeam(),
iUnitTargetFlags = ability:GetAbilityTargetFlags(),
iUnitTargetType = ability:GetAbilityTargetType(),
fExpireTime = GameRules:GetGameTime() + 10.0,
bDeleteOnHit = false,
vVelocity = 0.0,
iMoveSpeed = 1000,
}
for i=instances,0,-1 do
Timers:CreateTimer(caster:GetPlayerOwnerID() .. 'RapidFireInterval' .. i, {
useGameTime = false,
endTime = (channelTime/instances) * i,
callback = function()
info.vVelocity = RotatePosition(Vector(0,0,0), QAngle(0,30*i,0), caster:GetForwardVector()) * info.iMoveSpeed
if ability:IsChanneling() then
StartAnimation(caster, {duration=0.5, activity=ACT_DOTA_ATTACK, rate=2.0})
StartSoundEvent(startAttackSound, caster)
projectile = ProjectileManager:CreateLinearProjectile(info)
end
end
})
end
end
Последнее редактирование модератором: