Ошибка с Projectile

Статус
В этой теме нельзя размещать новые ответы.

fiCeVitka

Пользователь
21 Авг 2014
48
0
У меня есть скилл, в котором выбирается союзный юнит и в него летит Projectile. Потом нужно отловить этого юнита в Lua, вроде просто, но почему-то выдает ошибку, что переменная пуста.
Код:
 "OnSpellStart"
    {
    	"TrackingProjectile"
    	{
    		"Target"      	"TARGET"
    		"EffectName"		"particles/units/heroes/hero_treant/treant_leech_seed_projectile.vpcf"
    		"Dodgeable"			"0"
    		"ProvidesVision"	"1"
    		"VisionRadius"		"200"
    		"MoveSpeed"    	"400"
    		"SourceAttachment"	"DOTA_PROJECTILE_ATTACHMENT_ATTACK_1"
    	}    	
    }
    "OnProjectileHitUnit"
    {
    	"DeleteOnHit"	"1"
    	"RunScript"
    	{
    		"ScriptFile"	"abilities/treant.lua"
    		"Function"		"Seed"
    		"Target"    "TARGET"
    		"Heal"     "%heal"
    		"Radius"    "%radius"
    	}
    }

Lua
Код:
function Seed( keys )
	local caster = keys.CASTER
	local target = keys.Target
	local heal = keys.Heal
	local radius = keys.Radius
	Print(caster.. ','.. target..','..heal..','..radius )
end

Ошибка
Код:
Script Runtime Error: ...dota_addons\moomoo\scripts\vscripts\abilities\treant.lua:8: attempt to concatenate local 'target' (a nil value)
 
Последнее редактирование модератором:

MeowHellYeah

Пользователь
4 Июл 2015
66
0
fiCeVitka, ошибка в 8 строке файла treant.lua. Какая из них восьмая?
 

Se7eN

Друзья CG
22 Ноя 2014
334
18
Что надо сделать этим спеллом?

Ты скажи, я тебе напишу скрипт. У тебя там фигня полная
 

fiCeVitka

Пользователь
21 Авг 2014
48
0
MeowHellYeah, все, решил, там ошибка в другом была, я перед функцией глобальной переменной присваивал значение
 

fiCeVitka

Пользователь
21 Авг 2014
48
0
Se7eN, нет.
Еще такой вопрос. В противников вокруг тоже должен полететь эффект. Но не получается нормально указать вектор противника.
Код:
local enemies = FindUnitsInRadius( DOTA_TEAM_GOODGUYS, target:GetOrigin(), target, radius, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC, 0, 0, false )
    for _,unit in pairs(enemies) do
      local info = 
     {
       Target = unit,
       Source = target,
       Ability = caster:GetAbilityByIndex(0),  
       EffectName = "particles/units/heroes/hero_treant/treant_leech_seed_projectile.vpcf",
       vSpawnOrigin = target:GetAbsOrigin(),
       fDistance = 600,
       fStartRadius = 64,
       fEndRadius = 64,
       bHasFrontalCone = false,
       bReplaceExisting = false,
       iUnitTargetTeam = DOTA_UNIT_TARGET_TEAM_ENEMY,
       iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_NONE,
       iUnitTargetType = DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC,
       fExpireTime = GameRules:GetGameTime() + 10.0,
       bDeleteOnHit = true,
       vVelocity = unit:GetBaseVelocity() * 400,
       bProvidesVision = true,
       iVisionRadius = 200,
       iVisionTeamNumber = target:GetTeamNumber()
     }
     projectile = ProjectileManager:CreateLinearProjectile(info)
    end
Вся проблема в том, что урон наносится противникам сзади героя, все это из-за вектора
Код:
 vVelocity = unit:GetBaseVelocity() * 400
 
Последнее редактирование модератором:

Se7eN

Друзья CG
22 Ноя 2014
334
18
так ты не ошибайся когда используешь)) и всё будет хорошо) уверяю)
 

fiCeVitka

Пользователь
21 Авг 2014
48
0
Se7eN,
Код:
[ W General       ]: ERROR: CreateLinearProjectile() called with non-zero vertical velocity! Projectile velocity must be two-dimensional.
Ошибка, с вектором все-таки проблемы
Может я чего-нибудь не понимаю? Можешь код написать?
 

Se7eN

Друзья CG
22 Ноя 2014
334
18
Код:
local projectile_info = 
			{
				EffectName = split_shot_projectile,
				Ability = ability,
				vSpawnOrigin = caster_location,
				Target = v,
				Source = caster,
				bHasFrontalCone = false,
				iMoveSpeed = projectile_speed,
				bReplaceExisting = false,
				bProvidesVision = true
			}
			ProjectileManager:CreateTrackingProjectile(projectile_info)
 

Se7eN

Друзья CG
22 Ноя 2014
334
18
Код:
 "OnProjectileHitUnit"
  {
   "DeleteOnHit" "1"
 
   "RunScript"
   {
    "ScriptFile" "abilities.lua"
    "Function"  "SplitShotDamage"
   }
  }

Там уже дальше разберешься
 
Последнее редактирование модератором:

MeowHellYeah

Пользователь
4 Июл 2015
66
0
Ты вызываешь снаряд с ненулевой вертикальной скоростью, а требуют двумерный вектор. Вместо того вектора, который ты отдаёшь (скажем, vec1), поклади Vector(vec1.x, vec1.y, 0).
Код:
--Было
Velocity = vec1
--Стало
Velocity = Vector(vec1.x, vec1.y, 0)
 

fiCeVitka

Пользователь
21 Авг 2014
48
0
Se7eN, вот это я ошибку допустил) Вместо Tracking брал Linear. Спасибо за помощь
 
Статус
В этой теме нельзя размещать новые ответы.
Реклама: