До оптимизации
Code
function Trig_Everybody_Func001002002 takes nothing returns boolean
return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction
function Trig_Everybody_Func002Func001C takes nothing returns boolean
if ( not ( GetTerrainTypeBJ(GetUnitLoc(GetEnumUnit())) == 'Cpos' ) ) then
return false
endif
return true
endfunction
function Trig_Everybody_Func002Func002C takes nothing returns boolean
if ( not ( GetTerrainTypeBJ(GetUnitLoc(GetEnumUnit())) == 'Dlav' ) ) then
return false
endif
return true
endfunction
function Trig_Everybody_Func002Func003C takes nothing returns boolean
if ( not ( GetTerrainTypeBJ(GetUnitLoc(GetEnumUnit())) == udg_Ice ) ) then
return false
endif
return true
endfunction
function Trig_Everybody_Func002A takes nothing returns nothing
if ( Trig_Everybody_Func002Func001C() ) then
call CastSpell(GetEnumUnit(),GetEnumUnit(),'ANab',1,OrderId("acidbomb"))
else
endif
if ( Trig_Everybody_Func002Func002C() ) then
call CastSpell(GetEnumUnit(),GetEnumUnit(),'A00D',1,OrderId("acidbomb"))
else
endif
if ( Trig_Everybody_Func002Func003C() ) then
call CastSpell(GetEnumUnit(),GetEnumUnit(),'A00E',1,OrderId("acidbomb"))
else
endif
endfunction
function Trig_Everybody_Actions takes nothing returns nothing
set udg_Everybody = GetUnitsInRectMatching(GetPlayableMapRect(), Condition(function Trig_Everybody_Func001002002))
call ForGroupBJ( udg_Everybody, function Trig_Everybody_Func002A )
endfunction
//===========================================================================
function InitTrig_Everybody takes nothing returns nothing
set gg_trg_Everybody = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Everybody, 0.33 )
call TriggerAddAction( gg_trg_Everybody, function Trig_Everybody_Actions )
endfunction
и после
Code
function Trig_Everybody_f2 takes nothing returns boolean
return GetWidgetLife(FetFilterUnit())>0
endfunction
function Trig_Everybody_f1 takes nothing returns nothing
local unit u=GetEnumUnit()
local real X=GetUnitX(u)
local real Y=GetUnitY(u)
local integer tt=GetTerrainType(X,Y)
if (tt=='Cpos') then
call CastSpell(u,u,'ANab',1,OrderId("acidbomb"))
endif
if (tt=='Dlav') then
call CastSpell(u,u,'A00D',1,OrderId("acidbomb"))
endif
if (tt==udg_Ice) then
call CastSpell(u,u,'A00E',1,OrderId("acidbomb"))
endif
set u=null
endfunction
function Trig_Everybody_Actions takes nothing returns nothing
local group g=CreateGroup()
local boolexpr be=Condition(function Trig_Everybody_f2)
call GroupEnumUnitsInRect(g,GetPlayableMapRect(),be)
call DestroyBoolExpr(be)
set be=null
call ForGroup(g,function Trig_Everybody_f1)
call DestroyGroup(g)
set g=null
endfunction
//===========================================================================
function InitTrig_Everybody takes nothing returns nothing
set gg_trg_Everybody = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_Everybody, 0.33 )
call TriggerAddAction( gg_trg_Everybody, function Trig_Everybody_Actions )
endfunction