From 6f3dc5119aa91201090ac0d57b31791a9e4101ec Mon Sep 17 00:00:00 2001 From: Emagi Date: Fri, 20 Jun 2025 09:30:49 -0400 Subject: [PATCH] Avoid transporters triggering repeatedly after a destination is selected --- source/WorldServer/client.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/source/WorldServer/client.cpp b/source/WorldServer/client.cpp index 8e59062..82b351f 100644 --- a/source/WorldServer/client.cpp +++ b/source/WorldServer/client.cpp @@ -3862,7 +3862,9 @@ bool Client::Process(bool zone_process) { player_pos_changed = false; - GetCurrentZone()->CheckTransporters(this); + // avoid a glitch where we keep triggering this over and over again in succession after transporter is selected + if(!IsReloadingZone() && !IsZoning()) + GetCurrentZone()->CheckTransporters(this); if (GetPlayer()->GetRegionMap()) { @@ -4894,8 +4896,21 @@ bool Client::GotoSpawn(const char* search_name, bool forceTarget) { void Client::MoveInZone(float x, float y, float z, float h) { SetReloadingZone(true); + GetPlayer()->SetX(x); + GetPlayer()->SetY(y); + GetPlayer()->SetZ(z); + GetPlayer()->SetHeading(h); + + GetPlayer()->SetSpawnOrigX(x); + GetPlayer()->SetSpawnOrigY(y); + GetPlayer()->SetSpawnOrigZ(z); + GetPlayer()->SetSpawnOrigHeading(h); SetZoningCoords(x,y,z,h); + EQ2Packet* pack = GetPlayer()->Move(x, y, z, GetVersion()); + if(pack) + QueuePacket(pack); + PacketStruct* packet = configReader.getStruct("WS_TeleportWithinZone", GetVersion()); if (packet) {