Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
function TCondition takes nothing returns boolean
return GetDestructableTypeId(GetOrderTargetDestructable())==YOUR_DESTRUCTABLE_TYPE_ID
//Also you can check GetOrderTargetDestructable()==YOUR_DESTRUCTABLE
endfunction
function TActions takes nothing returns nothing
local unit u = GetTriggerUnit()
local destructable d = GetOrderTargetDestructable()
if (condition) then //Code to check if unit is allowed to attack the destructable if not then
call IssueInmediateOrder (u,"stop")
endif
set u = null //clean local var
set d = null
endfunction
function InitAttackedDestructableTrigger takes nothing returns nothing
local trigger DestructableTrigger = CreateTrigger( )
local integer index = 0
loop
exitwhen index> bj_MAX_PLAYER_SLOTS
call TriggerRegisterPlayerUnitEvent(DestructableTrigger, Player(index),EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, null )
set index = index + 1
endloop
call TriggerAddCondition(DestructableTrigger, Condition(function TCondition))
call TriggerAddAction(DestructableTrigger, function TActions)
set DestructableTrigger = null //local var clean
endfunction
call IssuePointOrder(u, "move", GetUnitX(u) + Cos(GetUnitFacing(u) * bj_DEGTORAD), GetUnitY(u) + Sin(GetUnitFacing(u) * bj_DEGTORAD))Does not work either. That is a 0.1+ delay.call TriggerSleepAction(0.0)
library TimerIndex uses TimerUtils
//*********************************************************************
//* TimerIndex 1.0
//* ----------
//*
//* This library creates a unique index for the TimerData of timerUtils.
//* A timer that is created with an index must also be released as an indexed timer.
//*
globals
integer udg_NextTimerIndex = 0
boolean array udg_TimerIndex_Occupied
endglobals
function ReleaseIndexedTimer takes timer t returns nothing
set udg_TimerIndex_Occupied[GetTimerData(t)] = false
call ReleaseTimer(t)
endfunction
function NewIndexedTimer takes nothing returns timer
loop
set udg_NextTimerIndex = udg_NextTimerIndex + 1
if udg_NextTimerIndex > 8190 then
set udg_NextTimerIndex = 1
endif
exitwhen not udg_TimerIndex_Occupied[udg_NextTimerIndex]
endloop
set udg_TimerIndex_Occupied[udg_NextTimerIndex] = true
return NewTimerEx(udg_NextTimerIndex)
endfunction
endlibrary
library DelayedOrder uses TimerIndex
globals
unit array udg_DelayedOrder_WhichUnit
integer array udg_DelayedOrder_OrderId
real array udg_DelayedOrder_TargetPoint_X
real array udg_DelayedOrder_TargetPoint_Y
widget array udg_DelayedOrder_TargetWidget
endglobals
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function IssueImmediateOrderByIdCallback takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetTimerData(t)
call ReleaseIndexedTimer(t)
call IssueImmediateOrderById(udg_DelayedOrder_WhichUnit[id], udg_DelayedOrder_OrderId[id])
set udg_DelayedOrder_WhichUnit[id] = null
set udg_DelayedOrder_OrderId[id] = 0
endfunction
function IssueImmediateOrderByIdDelayed takes unit whichUnit, integer order, real delay returns nothing
local timer t = NewIndexedTimer()
local integer id = GetTimerData(t)
set udg_DelayedOrder_WhichUnit[id] = whichUnit
set udg_DelayedOrder_OrderId[id] = order
call TimerStart(t, delay, false, function IssueImmediateOrderByIdCallback)
set t = null
endfunction
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function IssuePointOrderByIdCallback takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetTimerData(t)
call ReleaseIndexedTimer(t)
call IssuePointOrderById(udg_DelayedOrder_WhichUnit[id], udg_DelayedOrder_OrderId[id], udg_DelayedOrder_TargetPoint_X[id], udg_DelayedOrder_TargetPoint_Y[id])
set udg_DelayedOrder_WhichUnit[id] = null
set udg_DelayedOrder_OrderId[id] = 0
set udg_DelayedOrder_TargetPoint_X[id] = 0.
set udg_DelayedOrder_TargetPoint_Y[id] = 0.
endfunction
function IssuePointOrderByIdDelayed takes unit whichUnit, integer order, real x, real y, real delay returns nothing
local timer t = NewIndexedTimer()
local integer id = GetTimerData(t)
set udg_DelayedOrder_WhichUnit[id] = whichUnit
set udg_DelayedOrder_OrderId[id] = order
set udg_DelayedOrder_TargetPoint_X[id] = x
set udg_DelayedOrder_TargetPoint_Y[id] = y
call TimerStart(t, delay, false, function IssuePointOrderByIdCallback)
set t = null
endfunction
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function IssueTargetOrderByIdCallback takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetTimerData(t)
call ReleaseIndexedTimer(t)
call IssueTargetOrderById(udg_DelayedOrder_WhichUnit[id], udg_DelayedOrder_OrderId[id], udg_DelayedOrder_TargetWidget[id])
set udg_DelayedOrder_WhichUnit[id] = null
set udg_DelayedOrder_OrderId[id] = 0
set udg_DelayedOrder_TargetWidget[id] = null
endfunction
function IssueTargetOrderByIdDelayed takes unit whichUnit, integer order, widget targetWidget, real delay returns nothing
local timer t = NewIndexedTimer()
local integer id = GetTimerData(t)
set udg_DelayedOrder_WhichUnit[id] = whichUnit
set udg_DelayedOrder_OrderId[id] = order
set udg_DelayedOrder_TargetWidget[id] = targetWidget
call TimerStart(t, delay, false, function IssueTargetOrderByIdCallback)
set t = null
endfunction
endlibrary
IssueImmediateOrderByIdIssueImmediateOrderByIdDelayed(myUnit, myOrder)(myUnit, myOrder, 12.34)OrderId("stop") (where stop is your order string).globals
integer ORDER_STOP
integer ORDER_ATTACK
integer ORDER_MOVE
integer ORDER_SMART
endglobals
//===========================================================================
function InitTrig_OrderIds takes nothing returns nothing
set ORDER_STOP = OrderId("stop")
set ORDER_ATTACK = OrderId("attack")
set ORDER_MOVE = OrderId("move")
set ORDER_SMART = OrderId("smart")
endfunction
Does not work either. That is a 0.1+ delay.
