Add DynamicZone class for expedition instancing

Add DynamicZone sql table schema

Add DynamicZones logging category

Modify CreateExpedition to take DynamicZone and ExpeditionRequest objects

Implement DynamicZone compass, safereturn, and zone-in coordinates.

Implement live-like DynamicZone instance kick timer for removed members

Implement updating multiple client compasses (supports existing quest compass)

fix: Send client compass update after entering zones to clear existing compass

Implement Client::MovePCDynamicZone to invoke DynamicZoneSwitchListWnd
when entering a zone where client has multiple dynamic zones assigned

Implement OP_DzChooseZoneReply handling

Add Lua api methods for expedition's associated dynamic zone

Add #dz list gm command to list current DynamicZone instances from database
This commit is contained in:
hg
2020-04-18 14:11:28 -04:00
parent f74605d339
commit 8eef2ae089
35 changed files with 1416 additions and 185 deletions
+4 -5
View File
@@ -38,10 +38,8 @@ struct ExpeditionRequestConflict
};
ExpeditionRequest::ExpeditionRequest(
Client* requester, std::string expedition_name, uint32_t min_players,
uint32_t max_players, bool has_replay_timer
std::string expedition_name, uint32_t min_players, uint32_t max_players, bool has_replay_timer
) :
m_requester(requester),
m_expedition_name(expedition_name),
m_min_players(min_players),
m_max_players(max_players),
@@ -49,8 +47,9 @@ ExpeditionRequest::ExpeditionRequest(
{
}
bool ExpeditionRequest::Validate()
bool ExpeditionRequest::Validate(Client* requester)
{
m_requester = requester;
if (!m_requester)
{
return false;
@@ -353,7 +352,7 @@ bool ExpeditionRequest::IsPlayerCountValidated(uint32_t member_count)
bool requirements_met = true;
auto bypass_status = RuleI(Expedition, MinStatusToBypassPlayerCountRequirements);
auto gm_bypass = (m_requester->GetGM() && m_requester->Admin() >= bypass_status);
auto gm_bypass = (m_requester && m_requester->GetGM() && m_requester->Admin() >= bypass_status);
if (!gm_bypass && (member_count < m_min_players || member_count > m_max_players))
{