Проблема со способностью

fiCeVitka

Пользователь
21 Авг 2014
48
0
Делаю скилл, как 3 способность у ск, только урон наносится в зависимости от силы героя.
Часть кода
Код:
    "Modifiers"
		{  
			"modifier_pudge_skill4_buff"
			{
				"IsHidden"				"1"
				"Passive"				"1"
				
				"OnAttack"
				{
					"ApplyModifier"
					{
						"ModifierName"	"modifier_pudge_skill4"
						"Target" 		"TARGET"
						"Duration"		"%duration"
					}
				}
      }


			"modifier_pudge_skill4"
			{
				"IsHidden"				"0"
				"IsDebuff"				"1"
				
				"OnDeath"
				{
					"ActOnTargets"
					{
						"Target"
						{
							"Center" 	"UNIT"
							"Radius" 	"%radius"
							"Teams" 	"DOTA_UNIT_TARGET_TEAM_ENEMY"
							"Types" 	"DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
						}
					
						"Action"  
						{
							"RunScript"
							{
								"ScriptFile"	"abilities/butcher.lua"
								"Function"		"Ult"
								"Percent"    "%percent"
								"Damage"    "%damage"
							}
						}
					}
				}
      }
Lua
Код:
function Ult( keys )
	local caster = keys.Caster
	local target = keys.TARGET
	local perc = keys.Percent
	local dmg = keys.Damage
	ApplyDamage({victim = target, attacker = caster, damage = dmg+caster:GetStrength()*perc*0.01, damage_type = DAMAGE_TYPE_MAGICAL}) 
end

Ошибка в том, что игра не видит кастера.
Код:
[ W VScript       ]: Script Runtime Error: ...ota_addons\moomoo\scripts\vscripts\abilities\butcher.lua:6: attempt to index local 'caster' (a nil value)
 
Последнее редактирование модератором:

Slavko

Продвинутый
22 Июн 2015
224
4
Даже если бы OnDeath выдавало убийцу - дамаг юнитам вокруг наносился бы от того, кто юнита убил, и это не обязательно должен быть пудж
 

Slavko

Продвинутый
22 Июн 2015
224
4
Как вариант - в луа скрипте кастера заносить какEntities:FindByName("npc_dota_hero_pudge"). Но в таком случае может ыть конфликт, если на карте 2 пуджа будет
 
Последнее редактирование модератором:

Slavko

Продвинутый
22 Июн 2015
224
4
Или вот еще:
Когда модификатор присваиваешь - запускай там же скрипт. В функции делай таймер с 0.03 ретурном. В нем делай if not target:IsAlive() then.. и там дамаг наносишь и ретурнишь таймеру nil. Надеюсь на мысль натолкнул.
P.S. Короче блок OnDeath в модификаторе убираешь и делаешь OnCreated, и оттуда запускаешь функцию с таймером. Плюс не забудь сделать проверку перед дамагом - есть ли модификатор у юнита еще или пропал уже.
 

Se7eN

Друзья CG
22 Ноя 2014
334
18
Отдебажь таблицу keys на OnDeath

надеюсь найдешь и мертвеца и убиватора
 

doter.ua

Продвинутый
17 Авг 2014
280
5
fiCeVitka, Не уверен что трабл в этом, но укажи таргет "Кастер" в ранскрипте.
 
Последнее редактирование модератором:

fiCeVitka

Пользователь
21 Авг 2014
48
0
doter.ua, пробовал, не помогает, ладно, пока оставлю этот костыль, но потом надо будет что-нибудь придумать
Slavko написал(а):
Как вариант - в луа скрипте кастера заносить какEntities:FindByName("npc_dota_hero_pudge"). Но в таком случае может ыть конфликт, если на карте 2 пуджа будет
 
Последнее редактирование модератором:

Slavko

Продвинутый
22 Июн 2015
224
4
fiCeVitka, попробуй с таймером. Должно работать как часы, в общем-то
 
Реклама: