From dfd1bfbd493487f40ea96172b5bd854874e8e96d Mon Sep 17 00:00:00 2001 From: JJ <3617814+joligario@users.noreply.github.com> Date: Sat, 4 May 2024 17:59:20 -0400 Subject: [PATCH] [Zone Instances] Handle routing to instances when using evac/succor (#4297) --- zone/client.cpp | 1 + zone/client.h | 1 + zone/zoning.cpp | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/zone/client.cpp b/zone/client.cpp index 40653d41a..0526f85eb 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -240,6 +240,7 @@ Client::Client(EQStreamInterface *ieqs) : Mob( runmode = false; linkdead_timer.Disable(); zonesummon_id = 0; + zonesummon_instance_id = 0; zonesummon_ignorerestrictions = 0; bZoning = false; m_lock_save_position = false; diff --git a/zone/client.h b/zone/client.h index 4a6548ffb..e072c2d55 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1951,6 +1951,7 @@ private: glm::vec4 m_ZoneSummonLocation; uint16 zonesummon_id; + uint8 zonesummon_instance_id; uint8 zonesummon_ignorerestrictions; ZoneMode zone_mode; diff --git a/zone/zoning.cpp b/zone/zoning.cpp index 449697def..aad72eac4 100644 --- a/zone/zoning.cpp +++ b/zone/zoning.cpp @@ -94,6 +94,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { case GMHiddenSummon: case ZoneSolicited: //we told the client to zone somewhere, so we know where they are going. target_zone_id = zonesummon_id; + target_instance_id = zonesummon_instance_id; break; case GateToBindPoint: case ZoneToBindPoint: @@ -126,6 +127,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) { // WildcardX 27 January 2008 if (zone_mode == EvacToSafeCoords && zonesummon_id) { target_zone_id = zonesummon_id; + target_instance_id = zonesummon_instance_id; } else { target_zone_id = zc->zoneID; } @@ -573,6 +575,7 @@ void Client::DoZoneSuccess(ZoneChange_Struct *zc, uint16 zone_id, uint32 instanc zone_mode = ZoneUnsolicited; m_ZoneSummonLocation = glm::vec4(); zonesummon_id = 0; + zonesummon_instance_id = 0; zonesummon_ignorerestrictions = 0; // this simply resets the zone shutdown timer @@ -959,6 +962,7 @@ void Client::ZonePC(uint32 zoneID, uint32 instance_id, float x, float y, float z // we hide the real zoneid we want to evac/succor to here zonesummon_id = zoneID; + zonesummon_instance_id = instance_id; outapp->priority = 6; FastQueuePacket(&outapp);