diff --git a/zone/expedition.cpp b/zone/expedition.cpp index b9e54a9ea..cc88b8c70 100644 --- a/zone/expedition.cpp +++ b/zone/expedition.cpp @@ -2238,7 +2238,7 @@ void Expedition::SendMembersExpireWarning(uint32_t minutes_remaining) void Expedition::SyncCharacterLockouts( uint32_t character_id, std::vector& client_lockouts) { - // adds missing event lockouts to client for this expedition and replaces + // adds missing event lockouts to client for this expedition and updates // client timers that are both shorter and from another expedition BenchTimer benchmark; @@ -2265,9 +2265,10 @@ void Expedition::SyncCharacterLockouts( else if (client_lockout_iter->GetSecondsRemaining() < lockout.GetSecondsRemaining() && client_lockout_iter->GetExpeditionUUID() != m_uuid) { + // only update lockout timer not uuid so loot event apis still work modified = true; - client_lockouts.erase(client_lockout_iter); - client_lockouts.emplace_back(lockout); // replaced existing + client_lockout_iter->SetDuration(lockout.GetDuration()); + client_lockout_iter->SetExpireTime(lockout.GetExpireTime()); } } diff --git a/zone/expedition_lockout_timer.h b/zone/expedition_lockout_timer.h index d0fa4476b..62c5e4705 100644 --- a/zone/expedition_lockout_timer.h +++ b/zone/expedition_lockout_timer.h @@ -60,6 +60,8 @@ public: bool IsSameLockout(const ExpeditionLockoutTimer& compare_lockout) const; bool IsSameLockout(const std::string& expedition_name, const std::string& event_name) const; void Reset() { m_expire_time = std::chrono::system_clock::now() + m_duration; } + void SetDuration(uint32_t seconds) { m_duration = std::chrono::seconds(seconds); } + void SetExpireTime(uint64_t expire_time) { m_expire_time = std::chrono::system_clock::from_time_t(expire_time); } void SetUUID(const std::string& uuid) { m_expedition_uuid = uuid; } private: