// TELEPORT v0.04 (c) 2014 NeatPortal.com
// This script will check if all your cities are in the specified state, and do nothing if they are.
// Otherwise it will prepare and teleport cities as needed.
// Once all cities are in the right state the script with close the bot (allowing for clean restart by the director).
//
// Usage example: To teleport all cities to Tuscany run bot with these custom command line parameters:
// -runscript Teleport.txt -teleport tuscany
if Config.teleport == null goto finish
state = Config.teleport.toUpperCase()
if state == GetZoneName(city.fieldId).toUpperCase() goto finish
config wartown:2,comfort:1
recallall
sleep 30
// sort by reachTime, descending
label checkArmies
army = city.selfArmies.toArray().sortOn("reachTime", 18)[0]
if army == null goto teleport
secondsLeft = ceil(TimeDiff(army.reachTime) / 1000) // time left in seconds, rounded up
if secondsLeft > 0 echo "Waiting for armies to return for " + secondsLeft + " seconds"
if secondsLeft > 0 execute "sleep " + secondsLeft
if city.selfArmies.length > 0 say "Still have armies"
if city.selfArmies.length > 0 goto checkArmies
label teleport
try = 0
say "Trying to teleport " + city.name + " to " + state
sleep 10
label tryteleport
try = try + 1
execute "teleport " + state
if !$error goto finalcheck
if try >= 5 goto giveup
say "Can't teleport " + city.name + " to " + state + ", will retry in 5 minutes"
sleep 5:00
goto tryteleport
label finalcheck
x = 0
label checkCities
if GetZoneName(cities[x].cityManager.fieldId).toUpperCase() != state goto continue
x = x + 1
if x < cities.length goto checkCities
say "All cities are now in " + state + ", will close in 10 seconds"
sleep 10
// assuming the director will restart the bot
exit
label giveup
say "Can't teleport " + city.name + " to " + state
label continue
loadgoals
label finish
ScriptExamples