Привет, xgm
Я недавний гость в jass'е, до этого работал в основном в гуи. Хотел я значит вставить в свою карту скилл из way of others, болотный щит
Описание: кастер на время превращается в щит на указанного юнита, повышающий броню и полностью защищающий от магического урона
Принцип: основу скилла сделал из защитной ауры банши, обеспечив защиту от маг урона. Для брони создаём дамми и накладываем баф на основе innerfire. Заносим в массивы кастера и цель, прячем кастера, ждём время действия щита, перемещаем кастера к цели и показываем его
Проблема: дамми исправно создаётся, но с кастером ровным счётом ничего не происходит. Написал вместо прятанья убить кастера, ноль реакции. Выносил действия с ним в отдельную функцию, убирал ожидания, убирал вообще все переменные, не помогло. Ломал голову часов 5, помогите люди добрые. Заранее спасибо
ЗЫ: знаю что нужна ещё как минимум проверка умрёт ли цель до конца щита, но сейчас пытаюсь заставить работать хотя бы это
Я недавний гость в jass'е, до этого работал в основном в гуи. Хотел я значит вставить в свою карту скилл из way of others, болотный щит
Описание: кастер на время превращается в щит на указанного юнита, повышающий броню и полностью защищающий от магического урона
Принцип: основу скилла сделал из защитной ауры банши, обеспечив защиту от маг урона. Для брони создаём дамми и накладываем баф на основе innerfire. Заносим в массивы кастера и цель, прячем кастера, ждём время действия щита, перемещаем кастера к цели и показываем его
Проблема: дамми исправно создаётся, но с кастером ровным счётом ничего не происходит. Написал вместо прятанья убить кастера, ноль реакции. Выносил действия с ним в отдельную функцию, убирал ожидания, убирал вообще все переменные, не помогло. Ломал голову часов 5, помогите люди добрые. Заранее спасибо
ЗЫ: знаю что нужна ещё как минимум проверка умрёт ли цель до конца щита, но сейчас пытаюсь заставить работать хотя бы это
собственно весь код
function Trig_Mana_shield_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A022' then
return true
endif
endfunction
function Fucking_Bog_Shield takes integer i, integer k returns nothing
local unit u_1
local unit u_2
set u_1 = udg_unit_1[i]
set u_2 = udg_unit_2[i]
call TriggerSleepAction( 0.10 )
set udg_unit_1[i] = u_1
call ShowUnitHide( udg_unit_1[i] )
set u_1 = udg_unit_1[i]
call TriggerSleepAction( 24.90 )
set udg_unit_1[i] = u_1
set udg_unit_2[i] = u_2
call SetUnitPositionLoc( udg_unit_1[i], GetUnitLoc(udg_unit_2[i]) )
call ShowUnitShow( udg_unit_1[i] )
set udg_unit_1[k] = udg_unit_1[i]
set udg_unit_2[k] = udg_unit_2[i]
set udg_i = udg_i - 1
endfunction
function Trig_Mana_shield_Actions takes nothing returns nothing
local integer i
local integer j
local integer k=0
call CreateNUnitsAtLoc( 1, 'e005', GetOwningPlayer(GetSpellAbilityUnit()), GetSpellTargetLoc(), bj_UNIT_FACING )
call UnitAddAbilityBJ( 'A01Y', GetLastCreatedUnit() )
call IssueTargetOrderBJ( GetLastCreatedUnit(), "innerfire", GetSpellTargetUnit() )
call UnitApplyTimedLifeBJ( 1.00, 'BTLF', GetLastCreatedUnit() )
set i = udg_i
set j = 1
loop
exitwhen j > i
if ( GetSpellAbilityUnit() == udg_unit_1[j] ) then
set k=j
else
endif
set j = j + 1
endloop
if ( k == 0 ) then
set i=i+1
set udg_i=i
set udg_unit_1[i] = GetSpellAbilityUnit()
set udg_unit_2[i] = GetSpellTargetUnit()
else
set i=k
endif
call Fucking_Bog_Shield(i,k)
endfunction
//===========================================================================
function InitTrig_Mana_shield takes nothing returns nothing
set gg_trg_Mana_shield = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Mana_shield, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Mana_shield, Condition( function Trig_Mana_shield_Conditions ) )
call TriggerAddAction( gg_trg_Mana_shield, function Trig_Mana_shield_Actions )
endfunction
Принятый ответ
Вобщем озарение как всегда пришло внезапно - понял что GetSpellAbilityUnit срабатывает на дамми и записывает в массив его, а не цель щита. Просто передвинул махинации с дамми в конец функции Actions. Всё отменно работает. Всем спасибо все свободны
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Во вторых - это делается без баффов, если вы планируйте маг имун, добовляйте юниту просто спеллбук с пассивным маг имунном и скиллом на доп. защиту.
Попробуйте почитать про хештаблицы и таймеры.
quq_CCCP, в данном случае можно и вейтом обойтись
и локалками
есть куча по дебильному способу с хэшом и написанная мной статья без хэша
или это сарказм?