Load dz from cache on client switchlist reply

This commit is contained in:
hg 2020-09-21 18:56:44 -04:00
parent 76b5803f83
commit c45840173e
3 changed files with 16 additions and 6 deletions

View File

@ -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)

View File

@ -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();

View File

@ -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);