Hi all,
Here is my final code for that :
Code: Select all
<Events>
<OnOrdersCompleted>
(block (timeWait nextWaypoint waypointsList message)
; Log beginning of event
(setq message (cat "Ship " (objGetName gSource) " : Entering OnOrdersCompleted event"))
(dbgLog message)
; Test if ship is docked
(if (objGetData gSource "notFirstTime")
(block Nil
; Ship is docked : we wait quite a long time
(setq timeWait 200)
; Send message to player
(setq message (cat "Ship " (objGetName gSource) " : not the first time OnOrdersCompleted is played"))
(dbgLog message)
)
(block Nil
; Ship is not docked : we wait for just a few ticks
(setq timeWait 5)
; Send message to player
(setq message (cat "Ship " (objGetName gSource) " : first time OnOrdersCompleted is played"))
(dbgLog message)
)
)
; Set first time flag
(objSetData gSource "notFirstTime" True)
; Activate timer for next orders
(sysAddObjTimerEvent timeWait gSource "OnTimerSetNextWaypoint")
; Log another message with timeWait value
(setq message (cat "Ship " (objGetName gSource) " : setting timer to " timeWait " ticks"))
(dbgLog message)
; Log end of event
(setq message (cat "Ship " (objGetName gSource) " : Exiting OnOrdersCompleted event"))
(dbgLog message)
)
</OnOrdersCompleted>
<OnTimerSetNextWaypoint>
(block (nextWaypoint waypointsList message)
; Log beginning of event
(setq message (cat "Ship " (objGetName gSource) " : Entering OnTimerSetNextWaypoint event"))
(dbgLog message)
; Find next waypoint
(setq waypointList (sysFindObject gSource "t:parkingOrbit"))
(setq nextWayPoint (random waypointList))
; Send message to player
(setq message (cat "Ship " (objGetName gSource) " : going to " (objGetName nextWaypoint)))
(objSendMessage gPlayerShip gSource message)
(dbgLog message)
; Set new orders
(shpCancelOrders gSource)
(shpOrderDock gSource nextWaypoint)
; Log end of event
(setq message (cat "Ship " (objGetName gSource) " : Exiting OnTimerSetNextWaypoint event"))
(dbgLog message)
)
</OnTimerSetNextWaypoint>
</Events>
My problem was that the OnOrdersCompleted event is also fired just after OnCreate.
So I settled on not using OnCreate and instead creating a test :
- If it is the first time OnOrdersCompleted is fired, then we wait only 5 ticks to set a destination before default behavior (go to nearest gate and gate out) takes over,
- Else we wait 200 ticks to stay docked a little while before selecting another destination.
This way I'll be able to build some traffic in my systems ! See you for next episode ^-^