I have done this before in UOSteam with escorts specifically. There are several text commands, one I think is `location`. They will then state where they would like to go that are super helpful.
What I did was I had several runebooks with the escort locations all marked. I would recall to a known location where escorts spawned, clear my journal, ask where they'd like to go, and then do the command to accept. I would then loop through the names of the locations and had them saved in a list correlating with the list of runebook rune slots where I had the info marked. I would then gate travel using the correct rune, get my money, and double-click to get back to safety (because some of the locations are to dungeons, best not to stick around).
The way to fully automate this is to then have your character wait the necessary timeout to grab another escort, have them say the command again, and, if you do not get a response back, move on to the next location in a runebook full of escort locations.
Your script will look something like this:
```
initialize lists and variables
while not dead or overweight and have necessary reagents:
for each spot in escort runebook:
recall to escort location
while asking location returns a message signifying that an escortable NPC is within range,
accept escort
parse location to travel
cast gate travel and select correct rune in escort location runebook
double-click moongate at relative x 0, y 0
pause for escort timeout (You could instead have the character macro something else during this time or craft)
```
The one part that will be tricky is banking unless you want to have a check to see whether you have a certain amount of gold or you are below a threshold on the reagents to know when to bank or if you are in a specific part of your rotation in your escorts book where it's close enough to a bank to use it.
This is doable in EasyUO, UOSteam, UOOrion, and the Stealth client. I think Razor wouldn't be able to handle it without some pretty clever workarounds.