All orders have a priority of 0-4.
admit, hostile, etc.) are priority 0.
wait, are
priority 1.
move and fly are priority 2.
sail command is priority 4.
The order scheduler will first try to start all priority 1 orders. Only when no more priority 1 orders are ready to start will a priority 2 order be started.
In other words, the order scheduler will not start an order at a higher priority when an order may be started at a lower priority.
Orders at the same priority are resolved in location order. If two
units in a location are both waiting to start a move order, the first
unit in the location will go first.
The above description of order priorities may seem complicated, but the
intent is to let players ignore same-day synchronization issues in most
cases. Rather that needing wait to guarantee that give happens
before move, the lower priority of give makes this happen
naturally.
For example, consider three units stacked together, top, mid and bot:
top: move ec69
yew
mid: unstack
recruit
bot: recruit
These should be executed in the following order:
mid: unstack # unstack is prio-1 top: move ec69 # move is prio-2 mid: recruit # recruit is prio-3 [top and bot arrive at ec69] top: yew # yew is prio-3 bot: recruit # recruit is prio-3
The unstack happened first since it's a priority 1 command. The
move went second. When top and bot finished moving, there were
only priority three commands left, so they ran in location order.
[1] A zero time command is an order which always takes zero time. This does not include an order which may sometimes take zero time. For instance, unstack is always a zero time order. However, recruit is not, even though recruit may terminate immediately under some conditions.