globals
group MyStack = CreateGroup()
endglobals
function AddToStack takes unit u returns nothing
call GroupAddUnit(MyStack,u)
endfunction
function RemoveFromStack takes unit u returns nothing
call GroupRemoveUnit(MyStack,u)
endfunction
function Anti_Stuck_Doing takes nothing returns nothing
if (GetUnitCurrentOrder(GetEnumUnit())!= OrderId("move")) then
call IssuePointOrder(GetEnumUnit(), "move", GetRectCenterX(udg_AS_Region[GetUnitUserData(GetEnumUnit())]) , GetRectCenterY(udg_AS_Region[GetUnitUserData(GetEnumUnit())]) )
endif
endfunction
function Anti_Stuck_Actions takes nothing returns nothing
call ForGroup(MyStack, function Anti_Stuck_Doing)
endfunction
//===========================================================================
function InitTrig_Anti_Stuck takes nothing returns nothing
set gg_trg_Anti_Stuck = CreateTrigger()
call TriggerRegisterTimerExpireEvent(gg_trg_Anti_Stuck, udg_AS_Timer)
call TriggerAddAction(gg_trg_Anti_Stuck, function Anti_Stuck_Actions)
endfunction
Вот небольшая оптимизация твоей системы. Когда созадётся юнит запускай функций AddToStack, когда юнит умирает, или ты его желаешь удалить из карты - RemoveFromStack.Добавлено (16 Августа 2012, 16:11:52)
---------------------------------------------
Хватит офк, таймера в 0.5 секунд, если и будут стопориться, то уже не так заметно как сейчас.
У тебя были три ошибки.
1. Ты постоянно баловался хендлами.
2. Сами по себе конструкции - грузные.
3. У тебя знак равенства == move -> а значит если юнит встанет, когда либо, то медный таз твоей системе.