Я пытаюсь работать с локальными переменными, но у меня не получается объявить их правильно. Куда мне их впихнуть? Если я объявляю их в основной программе, компилятор ругается на функции (логично, ведь они не знают переменных). Суть состоит в том, чтобы "Буран" был без канала со стороны Архимага. Есть ли что-то вроде "forward" для того, чтобы описать функцию после того, как написал название?
function Trig_Cast_Func012001 takes nothing returns boolean
return ( GetUnitTypeId(GetSpellAbilityUnit()) == 'Hamg' )
endfunction
function Trig_Cast_Func012002 takes nothing returns boolean
return ( GetSpellAbilityId() == 'A003' )
endfunction
function Trig_Cast_Conditions takes nothing returns boolean
if ( not GetBooleanAnd( Trig_Cast_Func012001(), Trig_Cast_Func012002() ) ) then
return false
endif
return true
endfunction
function Trig_Cast_Func005Func001Func001C takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A003', unit) == 3 ) ) then
return false
endif
return true
endfunction
function Trig_Cast_Func005Func001C takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A003', unit) == 2 ) ) then
return false
endif
return true
endfunction
function Trig_Cast_Func005C takes nothing returns boolean
if ( not ( GetUnitAbilityLevelSwapped('A003', unit) == 1 ) ) then
return false
endif
return true
endfunction
function Trig_Cast_Actions takes nothing returns nothing
local unit archmage = GetSpellAbilityUnit()
local location point = GetSpellTargetLoc()
if ( Trig_Cast_Func005C() ) then
call CreateNUnitsAtLoc( 1, 'e000', GetOwningPlayer(archmage), GetUnitLoc(archmage), GetUnitFacing(archmage) )
else
if ( Trig_Cast_Func005Func001C() ) then
call CreateNUnitsAtLoc( 1, 'e001', GetOwningPlayer(archmage), GetUnitLoc(archmage), GetUnitFacing(archmage) )
else
if ( Trig_Cast_Func005Func001Func001C() ) then
call CreateNUnitsAtLoc( 1, 'e002', GetOwningPlayer(archmage), GetUnitLoc(archmage), GetUnitFacing(archmage) )
else
return
endif
endif
endif
local unit blizzard = GetLastCreatedUnit()
call IssuePointOrderLoc( blizzard, "blizzard", point )
call UnitApplyTimedLifeBJ( 3.00, 'BTLF', blizzard )
endfunction
//===========================================================================
function InitTrig_Cast takes nothing returns nothing
set gg_trg_Cast = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Cast, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Cast, Condition( function Trig_Cast_Conditions ) )
call TriggerAddAction( gg_trg_Cast, function Trig_Cast_Actions )
endfunction
Принятый ответ
- Все локалки должны объявляться в начале функции (у тебя local unit blizzard = GetLastCreatedUnit() вообще где-то в конце, объявляй в начале, а потом при создании юнита задавай).
- Если в функции function Trig_Cast_Func005C и других подобных unit - это локалка, объявленная в другой, то так делать нельзя. Используй глобалку или перестраивай ифзенэлс.
- Ну и утечек, необнулений хватает (н-р, точка кастера тоже должна задаваться в переменную и обнуляться).
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Naadir