/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Delayed Order Snippet
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function IssueOrderCallback takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit whichUnit = LoadUnitHandle(udg_DelayedOrder_Hashtable, id, 0)
local integer orderType = LoadInteger(udg_DelayedOrder_Hashtable, id, 1)
local string order = LoadStr(udg_DelayedOrder_Hashtable, id, 2)
local widget targetWidget
local location targetLocation
local integer unitTypeId
if orderType == udg_DelayedOrder_TypeTarget then
set targetWidget = LoadWidgetHandle(udg_DelayedOrder_Hashtable, id, 3)
call IssueTargetOrder(whichUnit, order, targetWidget)
set targetWidget = null
elseif orderType == udg_DelayedOrder_TypePointTarget then
set targetLocation = LoadLocationHandle(udg_DelayedOrder_Hashtable, id, 3)
call IssuePointOrder(whichUnit, order, GetLocationX(targetLocation), GetLocationY(targetLocation))
call RemoveLocation(targetLocation)
set targetLocation = null
elseif orderType == udg_DelayedOrder_TypeTrain then
set unitTypeId = LoadInteger(udg_DelayedOrder_Hashtable, id, 3)
call IssueImmediateOrderById(whichUnit, unitTypeId)
elseif orderType == udg_DelayedOrder_TypeNoTarget then
call IssueImmediateOrder(whichUnit, order)
endif
call FlushChildHashtable(udg_DelayedOrder_Hashtable, id)
call DestroyTimer(t)
set t = null
set whichUnit = null
endfunction
function IssueTargetOrderDelayed takes unit whichUnit, string order, widget targetWidget, real delay returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call TimerStart(t, delay, false, function IssueOrderCallback)
call SaveUnitHandle(udg_DelayedOrder_Hashtable, id, 0, whichUnit)
call SaveInteger(udg_DelayedOrder_Hashtable, id, 1, udg_DelayedOrder_TypeTarget)
call SaveStr(udg_DelayedOrder_Hashtable, id, 2, order)
call SaveWidgetHandle(udg_DelayedOrder_Hashtable, id, 3, targetWidget)
set t = null
endfunction
function IssuePointOrderDelayed takes unit whichUnit, string order, location targetLocation, real delay returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call TimerStart(t, delay, false, function IssueOrderCallback)
call SaveUnitHandle(udg_DelayedOrder_Hashtable, id, 0, whichUnit)
call SaveInteger(udg_DelayedOrder_Hashtable, id, 1, udg_DelayedOrder_TypePointTarget)
call SaveStr(udg_DelayedOrder_Hashtable, id, 2, order)
call SaveLocationHandle(udg_DelayedOrder_Hashtable, id, 3, targetLocation)
set t = null
endfunction
function IssueTrainOrderDelayed takes unit whichUnit, integer unitTypeId, real delay returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call TimerStart(t, delay, false, function IssueOrderCallback)
call SaveUnitHandle(udg_DelayedOrder_Hashtable, id, 0, whichUnit)
call SaveInteger(udg_DelayedOrder_Hashtable, id, 1, udg_DelayedOrder_TypeNoTarget)
call SaveInteger(udg_DelayedOrder_Hashtable, id, 3, unitTypeId)
set t = null
endfunction
function IssueImmediateOrderDelayed takes unit whichUnit, string order, real delay returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call TimerStart(t, delay, false, function IssueOrderCallback)
call SaveUnitHandle(udg_DelayedOrder_Hashtable, id, 0, whichUnit)
call SaveInteger(udg_DelayedOrder_Hashtable, id, 1, udg_DelayedOrder_TypeNoTarget)
call SaveStr(udg_DelayedOrder_Hashtable, id, 2, order)
set t = null
endfunction
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// End Delayed Order Snippet
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////