Gemini said
This is a classic "ghosting" sync issue that crops up in UltimaLive, especially with custom map configurations. When you use perfectly aligned X/Y coordinates for teleports, you’re essentially hitting a race condition in the UltimaLive protocol.
The system is designed to stream blocks based on your location, but because the coordinates haven't changed, the client-side proxy sometimes fails to realize the
Map ID has shifted before it requests the next set of visual blocks. It thinks, "I'm at X,Y; I already have the data for X,Y," and serves you the cached Map 0 tiles while your character is technically standing on Map 1.
Here is a breakdown of why this happens and how you can try to kick it into gear.
Why the
The [updateBlock command typically tells the server to push a fresh version of a block to the client. However, if the client’s UltimaLive proxy is convinced it is still looking at Map 0, it will interpret that incoming data through the lens of Map 0. If the hashes match or the "Map Change" packet was delayed/dropped by the proxy, the client simply ignores the update because it doesn't see a conflict.
Potential Fixes & Workarounds
1. The "Nudge" Technique (Most Reliable)
While I know you want the maps perfectly aligned, the most stable fix for this engine quirk is to offset your teleporter destination by just
one tile (e.g., if Map 0 is 1000,1000, set Map 1 to 1001,1000).
- This forces the client to calculate a new block position.
- It triggers a "Movement" update alongside the "Map Change," which usually clears the UltimaLive buffer more effectively.
2. Clear the Client-Side Cache
Sometimes the local UltimaLive cache gets "sticky" with specific block hashes.
- Close your client.
- Navigate to your UO folder and look for the UltimaLive folder (usually where your Map0.mul or .uop files are being redirected).
- Delete the cache files therein. This forces the client to re-request every block from the server upon login.
3. Script-Side "Double Tap"
If you are using a custom script for the teleporter, try adding a tiny delay or a double-update packet. In your OnMoveOver or teleport logic:
- Send the player to the new Map/Location.
- Explicitly call player.Send(new MapChange(player)).
- (Optional) Force a "Location" update packet immediately after.
4. Check the
Ensure that your UltimaLive server-side configuration explicitly defines the boundaries for both Map 0 and Map 1. If there is any overlap in the defined "Live" regions or if Map 1 isn't fully registered in the UltimaLiveSettings, the hashing logic can default to the primary map.
If this is happening consistently at a specific world-build location, it might be worth checking if there's a corrupted static item in that specific block on Map 1 that's causing the stream to hang.