[Zone] Implement zone player count sharding (#4536)

* [Zone] Implement zone player count sharding

* Update client.cpp

* Update database_instances.cpp

* You must request a shard change from the zone you are currently in.

* // zone sharding

* You cannot request a shard change while in combat.

* Query adjustment

* Use safe coords

* Changes

* Fixes to instance query

* Push

* Push

* Final push

* Update client.cpp

* Update eq_packet_structs.h

* Remove pick menu

* Comment

* Update character_data_repository.h

* Update zoning.cpp

---------

Co-authored-by: Kinglykrab <kinglykrab@gmail.com>
This commit is contained in:
Chris Miles
2025-01-08 17:41:16 -06:00
committed by GitHub
parent 15684567cf
commit c82f1b9afc
22 changed files with 443 additions and 22 deletions
+17
View File
@@ -339,6 +339,7 @@ void MapOpcodes()
ConnectedOpcodes[OP_PlayerStateAdd] = &Client::Handle_OP_PlayerStateAdd;
ConnectedOpcodes[OP_PlayerStateRemove] = &Client::Handle_OP_PlayerStateRemove;
ConnectedOpcodes[OP_PickPocket] = &Client::Handle_OP_PickPocket;
ConnectedOpcodes[OP_PickZone] = &Client::Handle_OP_PickZone;
ConnectedOpcodes[OP_PopupResponse] = &Client::Handle_OP_PopupResponse;
ConnectedOpcodes[OP_PotionBelt] = &Client::Handle_OP_PotionBelt;
ConnectedOpcodes[OP_PurchaseLeadershipAA] = &Client::Handle_OP_PurchaseLeadershipAA;
@@ -941,6 +942,11 @@ void Client::CompleteConnect()
ShowDevToolsMenu();
}
auto z = GetZone(GetZoneID(), GetInstanceVersion());
if (z && z->shard_at_player_count > 0 && !RuleB(Zone, ZoneShardQuestMenuOnly)) {
ShowZoneShardMenu();
}
// shared tasks memberlist
if (RuleB(TaskSystem, EnableTaskSystem) && GetTaskState()->HasActiveSharedTask()) {
@@ -11839,6 +11845,17 @@ void Client::Handle_OP_PickPocket(const EQApplicationPacket *app)
SendPickPocketResponse(victim, 0, PickPocketFailed);
}
void Client::Handle_OP_PickZone(const EQApplicationPacket *app)
{
if (app->size != sizeof(PickZone_Struct)) {
LogDebug("Size mismatch in OP_PickZone expected [{}] got [{}]", sizeof(PickZone_Struct), app->size);
DumpPacket(app);
return;
}
// handle
}
void Client::Handle_OP_PopupResponse(const EQApplicationPacket *app)
{