Скрипт способности The Swarm, Weaver

Slavko

Продвинутый
22 Июн 2015
224
4
Escapists Harmony,от души отрываю, кинул в ЛС. Скрипт в луа требует подключенных таймеров от barebones
 

Slavko

Продвинутый
22 Июн 2015
224
4
Escapists Harmony, ой. Чего-то скиллы перепутал. Swarm'a нету у меня пока.
 

Escapists Harmony

Активный
4 Июл 2015
70
0
Se7en сказал, что его крайне сложно воссоздать. Он предложил сделать LinearProjectile и при "OnProjectileHitUnit" создавать юнита который реагирует на движение цели. Но как сделать чтобы снаряд летел дальше и цеплял остальных целей тоже на своем ходу? Прочел про multiple tragets, но не знаю, будет ли это работать?
 
Последнее редактирование модератором:

fiCeVitka

Пользователь
21 Авг 2014
48
0
Escapists Harmony, вот как сделать так, чтобы дальше летели, но насколько я помню, они не удаляются там
Код:
"OnProjectileHitUnit"
{
  "DeleteOnHit"  "0"
 
}
 
Последнее редактирование модератором:

Escapists Harmony

Активный
4 Июл 2015
70
0
Взял абилку лины, дал ей в скрипте функцию на создание юнита с моделькой паразита во время столкновения и функцию изменения положения этого юнита во время движения цели.

Datadriven
"OnProjectileHitUnit"
{
"DeleteOnHit" "0"
"Damage"
{
"Target" "TARGET"
"Type" "DAMAGE_TYPE_MAGICAL"
"Damage" "%AbilityDamage"
}

"RunScript"
{
"ScriptFile" "heroes/hero_lina/dragon.lua"
"Function" "create_swarm"
"Target" "TARGET"
}

"ApplyModifier"
{
"Target" "TARGET"
"ModifierName" "modifier_swarm"
}
}

"Modifiers"
{
"modifier_swarm"
{
"OnUnitMoved"
{
"RunScript"
{
"ScriptFile" "heroes/hero_lina/dragon.lua"
"Function" "attach_swarm"
"Target" "TARGET"
}
}
}
}
}

Lua скрипт:
function create_swarm( keys )
local caster = keys.caster
local target = keys.target
local location = target:GetAbsOrigin()
local ability = keys.ability
local dummy = CreateUnitByName( "npc_swarm", location, false, caster, caster, caster:GetTeamNumber() )
end

function attach_swarm( keys )
local caster = keys.caster
local target = keys.target
local location = target:GetAbsOrigin()
local ability = keys.ability
caster:SetAbsOrigin( location )
end
Функция attach_swarm не работает - пишет в консоли [ W VScript ]: Script Runtime Error: ...s_survivors\scripts\vscripts\heroes\hero_lina\dragon.lua:12: attempt to index local 'target' (a nil value)

Почему возвращает цель nil, как это можно исправить?
 
Последнее редактирование модератором:

fiCeVitka

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

Escapists Harmony

Активный
4 Июл 2015
70
0
Кажется понял. Но прошу уточнить - вторую убрать вообще и модифаер с ним, и двигать червя основываясь на переменной и все это в первой и единственной функции. Таймер должен двигать червя каждые 0.1 секунду, и убить его спустя например 10 секунд.
 

Escapists Harmony

Активный
4 Июл 2015
70
0
У меня две проблемы. :)
1) Я не знаю кого указать в target при "ApplyModifier" и "OnUnitMoved". В любом случае, даже если правильно указать - второй RunScript во время события "OnUnitMoved" по идеи должен запускать функцию повторно со всеми вытекающими последствиями - созданием нового червя рядом с таргетом.

"OnProjectileHitUnit"
{
"DeleteOnHit" "0"
"Damage"
{
"Target" "TARGET"
"Type" "DAMAGE_TYPE_MAGICAL"
"Damage" "%AbilityDamage"
}

"RunScript"
{
"ScriptFile" "heroes/hero_lina/dragon.lua"
"Function" "create_swarm"
"Target" "TARGET"
}

"ApplyModifier"
{
"Target" "TARGET"
"ModifierName" "modifier_swarm"
}
}

"Modifiers"
{
"modifier_swarm"
{
"OnUnitMoved"
{
"RunScript"
{
"ScriptFile" "heroes/hero_lina/dragon.lua"
"Function" "create_swarm"
"Target" "TARGET"
}
}
}
}

2) простой вопрос, но как сделать чтобы таймер запустился ограниченное кол-во раз. Например, чтобы дамми двигался в соответствии с таргетом, таймер запускается сразу, проверяет каждые 0.1 секунды положение таргета и двигает дамми соответственно таргету, и через 7 секунд убивает дамми и перестает проверять положение. "Я сделяль" но не до конца, поправьте пожалуйста:

function create_swarm( keys )
local caster = keys.caster
local target = keys.target
local location = target:GetAbsOrigin()
local ability = keys.ability
local dummy = CreateUnitByName( "npc_swarm", location, false, caster, caster, caster:GetTeamNumber() )
Timers:CreateTimer( function()
local location = target:GetAbsOrigin()
dummy:SetAbsOrigin( location )
Timers:CreateTimer( 7, function()
dummy:ForceKill( true )
return nil
end
)
return 0.1
end
)
end
 
Последнее редактирование модератором:

Slavko

Продвинутый
22 Июн 2015
224
4
Escapists Harmony, 2)
Код:
GREG = 0 -- глобальная переменная
GREG_MAX = 7 -- тож

Timers:CreateTimer(0.1, function()
 GREG = GREG + 1
 [тут код]
 if GREG < GREG_MAX then
  return 0.1
 else
  [тут убиваешь]
  return nil
 end
end)
 
Последнее редактирование модератором:

Escapists Harmony

Активный
4 Июл 2015
70
0
Пожалуйста остудите свой пыл к этому пользователю. **Пошел остужать** ???

PS. Большое спасибо! Есть идеи, как решить первую?
 

Escapists Harmony

Активный
4 Июл 2015
70
0
Вопрос по таймеру. Щас подумал, а разве ваш пример не будет запускать таймер 7 раз, мне нужно чтобы он запускался в течении 7 секунд с интервалом 0.1 сек. Значит мне нужно сделать GREG_MAX = 70.
 
Реклама: