function Trig_g_Func003A takes nothing returns nothing set e = AddSpecialEffectLoc(GetUnitLoc(GetEnumUnit()), "Abilities\\Spells\\Undead\\DarkRitual\\DarkRitualTarget.mdl") set e = null endfunction
function Trig_g_Conditions takes nothing returns boolean if ( GetSpellAbilityId() == 'AOcl' ) then endif endfunction
local unit u set u = GetSpellTargetUnit local real r = 256 local location Point = GetUnitLoc(u) local group g = GetUnitsInRangeOfLocMatching(r, Point, Condition(function Trig_g_Func003001002003))) == true ) ) then local boolean wantDestroy = bj_wantDestroyGroup set bj_wantDestroyGroup = false call ForGroup(g, Trig_g_Func003A) set u = null set Point = null
endfunction
//=========================================================================== function InitTrig_g takes nothing returns nothing set gg_trg_g = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_g, EVENT_PLAYER_UNIT_SPELL_CAST ) call TriggerAddCondition( gg_trg_g, Condition( function Trig_g_Conditions ) ) call TriggerAddAction( gg_trg_g, function Trig_g_Actions ) endfunction
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
Сообщение отредактировал H_A_PK - Вторник, 05 Января 2010, 05:44:34
function Trig_g_Func003A takes nothing returns nothing set e = AddSpecialEffectLoc(GetUnitLoc(GetEnumUnit()), "Abilities\\Spells\\Undead\\DarkRitual\\DarkRitualTarget.mdl") set e = null endfunction
А где объявление этой самой переменной? Так надо:
Code
function Trig_g_Func003A takes nothing returns nothing local effect e = AddSpecialEffectLoc(GetUnitLoc(GetEnumUnit()), "Abilities\\Spells\\Undead\\DarkRitual\\DarkRitualTarget.mdl") set e = null endfunction
local unit u set u = GetSpellTargetUnit local real r = 256 local location Point = GetUnitLoc(u) local group g = GetUnitsInRangeOfLocMatching(r, Point, Condition(function Trig_g_Func003001002003))) == true ) ) then local boolean wantDestroy = bj_wantDestroyGroup set bj_wantDestroyGroup = false call ForGroup(g, Trig_g_Func003A) set u = null set Point = null
endfunction
Объявление переменныех должно быть в начале функции. Плюс ошибочка:
Code
functions Trig_g_Actions takes nothing returns nothig local unit u = GetSpellTargetUnit() local real r = 256 local location Point = GetUnitLoc(u) local group g = GetUnitsInRangeOfLocMatching(r, Point, Condition(function Trig_g_Func003001002003))) == true ) ) then local boolean wantDestroy = bj_wantDestroyGroup set bj_wantDestroyGroup = false call ForGroup(g, Trig_g_Func003A) set u = null set Point = null set g = null endfunction
Function Trig_g_Func003001002003 takes nothing returns nothing return (короч: совбодающий)!= u endfunction
Откуда взялся u? =) Не забывай, что локальные переменные действуют только в пределах одной функции. Передавать между функциями можно глобалками, хеш-таблицами (насчёт этого пока не заморачивайся) или объявлять их.
[DUОS], тут, можно ещё дать советы оптимизации циклов, пример: "Циклы с триггеров на джазз переводятся некорректно "
Quote (|DUОS|)
exitwhen i > 7
Если бы, это было с триггера переведено, то там бы было так:
Code
exitwhen TriggerblablablaFunc252352
Тоесть, в начале триггера создалась бы функция TriggerblablablaFunc252352 для проверки i > 7 Её нужно удалить а exitwhen TriggerblablablaFunc252352 заменить на exitwhen i > 7
Ну а в целом статья неплохая)
ФЕНИКС ЧО
Сообщение отредактировал subaku - Понедельник, 25 Января 2010, 17:02:08
Подскажите, пожалуйста, как раскрывается "ForGroupBJ". А то из-за моего бреда карта вылетает после загрузки.
Code
set filter = Condition(function Trig_Trigger_001_Conditions) set g = CreateGroup() call GroupEnumUnitsInRangeOfLoc(g, p0, 500., filter) call DestroyBoolExpr(filter) set filter = null call ForGroup(g, function Trig_Trigger_001_Actions) call DestroyGroup(g) set g = null
Добавлено (29-10-2010, 15:18) --------------------------------------------- Наконец-то добрался до этой работы. Purge Lighting Однако эффекты не всегда создаются, на ком нужно.