mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-21 06:28:22 +00:00
Only delete empty expeditions when the dz is empty
Zones are no longer able to delete expeditions. World now tracks empty expeditions in cache and only deletes them when it detects an expedition's dynamic zone instance has no more clients inside. This fixes an exploit where lockouts couldn't be applied to expeditions after all members were removed because zones were deleting the expedition immediately. Clients still inside the dz were able to complete events before being kicked from the instance while not having an expedition. Expeditions are no longer purged from database in the world purge instance timer to avoid a possible race with this new system
This commit is contained in:
@@ -44,11 +44,9 @@ namespace ExpeditionDatabase
|
||||
MySQLRequestResult LoadCharacterLockouts(uint32_t character_id, const std::string& expedition_name);
|
||||
MySQLRequestResult LoadExpeditionMembers(uint32_t expedition_id);
|
||||
MySQLRequestResult LoadValidationData(const std::string& character_names_query, const std::string& expedition_name);
|
||||
void DeleteAllMembers(uint32_t expedition_id);
|
||||
void DeleteAllCharacterLockouts(uint32_t character_id);
|
||||
void DeleteAllCharacterLockouts(uint32_t character_id, const std::string& expedition_name);
|
||||
void DeleteCharacterLockout(uint32_t character_id, const std::string& expedition_name, const std::string& event_name);
|
||||
void DeleteExpedition(uint32_t expedition_id);
|
||||
void DeleteLockout(uint32_t expedition_id, const std::string& event_name);
|
||||
void DeleteMembersLockout(
|
||||
const std::vector<ExpeditionMember>& members, const std::string& expedition_name, const std::string& event_name);
|
||||
@@ -69,6 +67,7 @@ namespace ExpeditionDatabase
|
||||
void UpdateLeaderID(uint32_t expedition_id, uint32_t leader_id);
|
||||
void UpdateLockState(uint32_t expedition_id, bool is_locked);
|
||||
void UpdateMemberRemoved(uint32_t expedition_id, uint32_t character_id);
|
||||
void UpdateAllMembersRemoved(uint32_t expedition_id);
|
||||
void UpdateReplayLockoutOnJoin(uint32_t expedition_id, bool add_on_join);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user