mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-26 19:21:28 +00:00
Load dz from cache on client switchlist reply
This commit is contained in:
parent
76b5803f83
commit
c45840173e
@ -5653,14 +5653,17 @@ void Client::Handle_OP_DzChooseZoneReply(const EQApplicationPacket *app)
|
||||
return;
|
||||
}
|
||||
|
||||
DynamicZone dz = DynamicZone::LoadDzFromDatabase(dzmsg->dz_instance_id);
|
||||
DynamicZoneLocation loc = dz.GetZoneInLocation();
|
||||
ZoneMode zone_mode = ZoneMode::ZoneToSafeCoords;
|
||||
if (dz.HasZoneInLocation())
|
||||
auto client_dzs = GetDynamicZones();
|
||||
auto it = std::find_if(client_dzs.begin(), client_dzs.end(), [&](const DynamicZoneInfo dz_info) {
|
||||
return dz_info.dynamic_zone.IsSameDz(dzmsg->dz_zone_id, dzmsg->dz_instance_id);
|
||||
});
|
||||
|
||||
if (it != client_dzs.end())
|
||||
{
|
||||
zone_mode = ZoneMode::ZoneSolicited;
|
||||
DynamicZoneLocation loc = it->dynamic_zone.GetZoneInLocation();
|
||||
ZoneMode zone_mode = it->dynamic_zone.HasZoneInLocation() ? ZoneMode::ZoneSolicited : ZoneMode::ZoneToSafeCoords;
|
||||
MovePC(dzmsg->dz_zone_id, dzmsg->dz_instance_id, loc.x, loc.y, loc.z, loc.heading, 0, zone_mode);
|
||||
}
|
||||
MovePC(dzmsg->dz_zone_id, dzmsg->dz_instance_id, loc.x, loc.y, loc.z, loc.heading, 0, zone_mode);
|
||||
}
|
||||
|
||||
void Client::Handle_OP_DzExpeditionInviteResponse(const EQApplicationPacket *app)
|
||||
|
||||
@ -513,6 +513,11 @@ bool DynamicZone::IsInstanceID(uint32_t instance_id) const
|
||||
return (GetInstanceID() != 0 && GetInstanceID() == instance_id);
|
||||
}
|
||||
|
||||
bool DynamicZone::IsSameDz(uint32_t zone_id, uint32_t instance_id) const
|
||||
{
|
||||
return zone_id == m_zone_id && instance_id == m_instance_id;
|
||||
}
|
||||
|
||||
uint32_t DynamicZone::GetSecondsRemaining() const
|
||||
{
|
||||
auto now = std::chrono::system_clock::now();
|
||||
|
||||
@ -71,6 +71,7 @@ public:
|
||||
uint16_t GetInstanceID() const { return static_cast<uint16_t>(m_instance_id); };
|
||||
uint32_t GetSecondsRemaining() const;
|
||||
uint16_t GetZoneID() const { return static_cast<uint16_t>(m_zone_id); };
|
||||
uint32_t GetZoneIndex() const { return (m_instance_id << 16) | (m_zone_id & 0xffff); }
|
||||
uint32_t GetZoneVersion() const { return m_version; };
|
||||
DynamicZoneType GetType() const { return m_type; }
|
||||
DynamicZoneLocation GetCompassLocation() const { return m_compass; }
|
||||
@ -83,6 +84,7 @@ public:
|
||||
bool IsCurrentZoneDzInstance() const;
|
||||
bool IsInstanceID(uint32_t instance_id) const;
|
||||
bool IsValid() const { return m_instance_id != 0; }
|
||||
bool IsSameDz(uint32_t zone_id, uint32_t instance_id) const;
|
||||
void LoadFromDatabase(uint32_t instance_id);
|
||||
void RemoveAllCharacters(bool enable_removal_timers = true);
|
||||
void RemoveCharacter(uint32_t character_id);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user