mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-14 19:51:29 +00:00
[Dynamic Zones] Rename dynamic zone structs (#1327)
* Rename dz member id field The name of the struct is enough to make this implicit * Rename dz member enum and struct Rename ExpeditionMember to DynamicZoneMember Rename ExpeditionMemberStatus to DynamicZoneMemberStatus * Rename dz window packet structs This makes it more clear the window may be used by any dynamic zone system not just expeditions (live missions fill the window when player doesn't have an active expedition). * Rename dz window packet fields
This commit is contained in:
parent
4358e24dab
commit
abf73947f4
@ -13,6 +13,21 @@
|
|||||||
class Database;
|
class Database;
|
||||||
class ServerPacket;
|
class ServerPacket;
|
||||||
|
|
||||||
|
struct DynamicZoneMember
|
||||||
|
{
|
||||||
|
uint32_t id = 0;
|
||||||
|
std::string name;
|
||||||
|
DynamicZoneMemberStatus status = DynamicZoneMemberStatus::Online;
|
||||||
|
|
||||||
|
DynamicZoneMember() = default;
|
||||||
|
DynamicZoneMember(uint32_t id, std::string name_)
|
||||||
|
: id(id), name{std::move(name_)} {}
|
||||||
|
DynamicZoneMember(uint32_t id, std::string name_, DynamicZoneMemberStatus status_)
|
||||||
|
: id(id), name{std::move(name_)}, status(status_) {}
|
||||||
|
|
||||||
|
bool IsValid() const { return id != 0 && !name.empty(); }
|
||||||
|
};
|
||||||
|
|
||||||
struct DynamicZoneLocation
|
struct DynamicZoneLocation
|
||||||
{
|
{
|
||||||
uint32_t zone_id = 0;
|
uint32_t zone_id = 0;
|
||||||
|
|||||||
@ -474,7 +474,7 @@ enum class DynamicZoneType
|
|||||||
Quest
|
Quest
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class ExpeditionMemberStatus : uint8_t
|
enum class DynamicZoneMemberStatus : uint8_t
|
||||||
{
|
{
|
||||||
Unknown = 0,
|
Unknown = 0,
|
||||||
Online,
|
Online,
|
||||||
|
|||||||
@ -4861,30 +4861,31 @@ struct ExpeditionInviteResponse_Struct
|
|||||||
/*079*/ uint8 unknown079; // padding garbage?
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct DynamicZoneInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004; // added after titanium
|
/*004*/ uint32 unknown004; // added after titanium
|
||||||
/*008*/ uint32 assigned; // padded bool, 0: not in expedition (clear data), 1: in expedition
|
/*008*/ uint32 assigned; // padded bool, 0: clear info, 1: fill window info
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char dz_name[128];
|
||||||
/*144*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
|
//*208*/ uint32 dz_type; // only in newer clients, if not 1 (expedition type) window does not auto show when dz info assigned
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char name[64]; // variable length, null terminated, max 0x40 (64)
|
/*000*/ char name[64]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*064*/ uint8 expedition_status; // 0: unknown, 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
/*064*/ uint8 online_status; // 0: unknown, 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneMemberList_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 member_count;
|
/*004*/ uint32 member_count;
|
||||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
/*008*/ DynamicZoneMemberEntry_Struct members[0]; // variable length
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberListName_Struct
|
struct DynamicZoneMemberListName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
@ -4907,7 +4908,7 @@ struct ExpeditionLockoutTimers_Struct
|
|||||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionSetLeaderName_Struct
|
struct DynamicZoneLeaderName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
#include "repositories/expeditions_repository.h"
|
#include "repositories/expeditions_repository.h"
|
||||||
|
|
||||||
ExpeditionBase::ExpeditionBase(uint32_t id, const std::string& uuid,
|
ExpeditionBase::ExpeditionBase(uint32_t id, const std::string& uuid,
|
||||||
const std::string& expedition_name, const ExpeditionMember& leader,
|
const std::string& expedition_name, const DynamicZoneMember& leader,
|
||||||
uint32_t min_players, uint32_t max_players
|
uint32_t min_players, uint32_t max_players
|
||||||
) :
|
) :
|
||||||
m_id(id),
|
m_id(id),
|
||||||
@ -23,20 +23,20 @@ void ExpeditionBase::LoadRepositoryResult(ExpeditionsRepository::ExpeditionWithL
|
|||||||
m_max_players = entry.max_players;
|
m_max_players = entry.max_players;
|
||||||
m_add_replay_on_join = entry.add_replay_on_join;
|
m_add_replay_on_join = entry.add_replay_on_join;
|
||||||
m_is_locked = entry.is_locked;
|
m_is_locked = entry.is_locked;
|
||||||
m_leader.char_id = entry.leader_id;
|
m_leader.id = entry.leader_id;
|
||||||
m_leader.name = std::move(entry.leader_name);
|
m_leader.name = std::move(entry.leader_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpeditionBase::AddMemberFromRepositoryResult(
|
void ExpeditionBase::AddMemberFromRepositoryResult(
|
||||||
ExpeditionMembersRepository::MemberWithName&& entry)
|
ExpeditionMembersRepository::MemberWithName&& entry)
|
||||||
{
|
{
|
||||||
auto status = ExpeditionMemberStatus::Unknown;
|
auto status = DynamicZoneMemberStatus::Unknown;
|
||||||
AddInternalMember({ entry.character_id, std::move(entry.character_name), status });
|
AddInternalMember({ entry.character_id, std::move(entry.character_name), status });
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpeditionBase::AddInternalMember(const ExpeditionMember& member)
|
void ExpeditionBase::AddInternalMember(const DynamicZoneMember& member)
|
||||||
{
|
{
|
||||||
if (!HasMember(member.char_id))
|
if (!HasMember(member.id))
|
||||||
{
|
{
|
||||||
m_members.emplace_back(member);
|
m_members.emplace_back(member);
|
||||||
}
|
}
|
||||||
@ -45,32 +45,32 @@ void ExpeditionBase::AddInternalMember(const ExpeditionMember& member)
|
|||||||
void ExpeditionBase::RemoveInternalMember(uint32_t character_id)
|
void ExpeditionBase::RemoveInternalMember(uint32_t character_id)
|
||||||
{
|
{
|
||||||
m_members.erase(std::remove_if(m_members.begin(), m_members.end(),
|
m_members.erase(std::remove_if(m_members.begin(), m_members.end(),
|
||||||
[&](const ExpeditionMember& member) { return member.char_id == character_id; }
|
[&](const DynamicZoneMember& member) { return member.id == character_id; }
|
||||||
), m_members.end());
|
), m_members.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ExpeditionBase::HasMember(uint32_t character_id)
|
bool ExpeditionBase::HasMember(uint32_t character_id)
|
||||||
{
|
{
|
||||||
return std::any_of(m_members.begin(), m_members.end(), [&](const ExpeditionMember& member) {
|
return std::any_of(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
|
||||||
return member.char_id == character_id;
|
return member.id == character_id;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExpeditionBase::HasMember(const std::string& character_name)
|
bool ExpeditionBase::HasMember(const std::string& character_name)
|
||||||
{
|
{
|
||||||
return std::any_of(m_members.begin(), m_members.end(), [&](const ExpeditionMember& member) {
|
return std::any_of(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
|
||||||
return (strcasecmp(member.name.c_str(), character_name.c_str()) == 0);
|
return (strcasecmp(member.name.c_str(), character_name.c_str()) == 0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpeditionMember ExpeditionBase::GetMemberData(uint32_t character_id)
|
DynamicZoneMember ExpeditionBase::GetMemberData(uint32_t character_id)
|
||||||
{
|
{
|
||||||
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const ExpeditionMember& member) {
|
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
|
||||||
return member.char_id == character_id;
|
return member.id == character_id;
|
||||||
});
|
});
|
||||||
|
|
||||||
ExpeditionMember member_data;
|
DynamicZoneMember member_data;
|
||||||
if (it != m_members.end())
|
if (it != m_members.end())
|
||||||
{
|
{
|
||||||
member_data = *it;
|
member_data = *it;
|
||||||
@ -78,13 +78,13 @@ ExpeditionMember ExpeditionBase::GetMemberData(uint32_t character_id)
|
|||||||
return member_data;
|
return member_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpeditionMember ExpeditionBase::GetMemberData(const std::string& character_name)
|
DynamicZoneMember ExpeditionBase::GetMemberData(const std::string& character_name)
|
||||||
{
|
{
|
||||||
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const ExpeditionMember& member) {
|
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
|
||||||
return (strcasecmp(member.name.c_str(), character_name.c_str()) == 0);
|
return (strcasecmp(member.name.c_str(), character_name.c_str()) == 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
ExpeditionMember member_data;
|
DynamicZoneMember member_data;
|
||||||
if (it != m_members.end())
|
if (it != m_members.end())
|
||||||
{
|
{
|
||||||
member_data = *it;
|
member_data = *it;
|
||||||
|
|||||||
@ -1,28 +1,13 @@
|
|||||||
#ifndef COMMON_EXPEDITION_BASE_H
|
#ifndef COMMON_EXPEDITION_BASE_H
|
||||||
#define COMMON_EXPEDITION_BASE_H
|
#define COMMON_EXPEDITION_BASE_H
|
||||||
|
|
||||||
#include "eq_constants.h"
|
#include "dynamic_zone_base.h"
|
||||||
#include "repositories/expeditions_repository.h"
|
#include "repositories/expeditions_repository.h"
|
||||||
#include "repositories/expedition_members_repository.h"
|
#include "repositories/expedition_members_repository.h"
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
struct ExpeditionMember
|
|
||||||
{
|
|
||||||
uint32_t char_id = 0;
|
|
||||||
std::string name;
|
|
||||||
ExpeditionMemberStatus status = ExpeditionMemberStatus::Online;
|
|
||||||
|
|
||||||
ExpeditionMember() = default;
|
|
||||||
ExpeditionMember(uint32_t id, const std::string& name_)
|
|
||||||
: char_id(id), name(name_) {}
|
|
||||||
ExpeditionMember(uint32_t id, const std::string& name_, ExpeditionMemberStatus status_)
|
|
||||||
: char_id(id), name(name_), status(status_) {}
|
|
||||||
|
|
||||||
bool IsValid() const { return char_id != 0 && !name.empty(); }
|
|
||||||
};
|
|
||||||
|
|
||||||
class ExpeditionBase
|
class ExpeditionBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -33,16 +18,16 @@ public:
|
|||||||
ExpeditionBase& operator=(ExpeditionBase&&) = default;
|
ExpeditionBase& operator=(ExpeditionBase&&) = default;
|
||||||
|
|
||||||
uint32_t GetID() const { return m_id; }
|
uint32_t GetID() const { return m_id; }
|
||||||
uint32_t GetLeaderID() const { return m_leader.char_id; }
|
uint32_t GetLeaderID() const { return m_leader.id; }
|
||||||
uint32_t GetMinPlayers() const { return m_min_players; }
|
uint32_t GetMinPlayers() const { return m_min_players; }
|
||||||
uint32_t GetMaxPlayers() const { return m_max_players; }
|
uint32_t GetMaxPlayers() const { return m_max_players; }
|
||||||
uint32_t GetMemberCount() const { return static_cast<uint32_t>(m_members.size()); }
|
uint32_t GetMemberCount() const { return static_cast<uint32_t>(m_members.size()); }
|
||||||
const std::string& GetName() const { return m_expedition_name; }
|
const std::string& GetName() const { return m_expedition_name; }
|
||||||
const std::string& GetLeaderName() const { return m_leader.name; }
|
const std::string& GetLeaderName() const { return m_leader.name; }
|
||||||
const std::string& GetUUID() const { return m_uuid; }
|
const std::string& GetUUID() const { return m_uuid; }
|
||||||
const std::vector<ExpeditionMember>& GetMembers() const { return m_members; }
|
const std::vector<DynamicZoneMember>& GetMembers() const { return m_members; }
|
||||||
|
|
||||||
void AddInternalMember(const ExpeditionMember& member);
|
void AddInternalMember(const DynamicZoneMember& member);
|
||||||
void ClearInternalMembers() { m_members.clear(); }
|
void ClearInternalMembers() { m_members.clear(); }
|
||||||
bool HasMember(const std::string& character_name);
|
bool HasMember(const std::string& character_name);
|
||||||
bool HasMember(uint32_t character_id);
|
bool HasMember(uint32_t character_id);
|
||||||
@ -55,10 +40,10 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
ExpeditionBase() = default;
|
ExpeditionBase() = default;
|
||||||
ExpeditionBase(uint32_t id, const std::string& uuid, const std::string& expedition_name,
|
ExpeditionBase(uint32_t id, const std::string& uuid, const std::string& expedition_name,
|
||||||
const ExpeditionMember& leader, uint32_t min_players, uint32_t max_players);
|
const DynamicZoneMember& leader, uint32_t min_players, uint32_t max_players);
|
||||||
|
|
||||||
ExpeditionMember GetMemberData(uint32_t character_id);
|
DynamicZoneMember GetMemberData(uint32_t character_id);
|
||||||
ExpeditionMember GetMemberData(const std::string& character_name);
|
DynamicZoneMember GetMemberData(const std::string& character_name);
|
||||||
|
|
||||||
uint32_t m_id = 0;
|
uint32_t m_id = 0;
|
||||||
uint32_t m_min_players = 0;
|
uint32_t m_min_players = 0;
|
||||||
@ -67,8 +52,8 @@ protected:
|
|||||||
bool m_add_replay_on_join = true;
|
bool m_add_replay_on_join = true;
|
||||||
std::string m_uuid;
|
std::string m_uuid;
|
||||||
std::string m_expedition_name;
|
std::string m_expedition_name;
|
||||||
ExpeditionMember m_leader;
|
DynamicZoneMember m_leader;
|
||||||
std::vector<ExpeditionMember> m_members;
|
std::vector<DynamicZoneMember> m_members;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -772,13 +772,13 @@ namespace RoF
|
|||||||
|
|
||||||
ENCODE(OP_DzExpeditionInfo)
|
ENCODE(OP_DzExpeditionInfo)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(assigned);
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
strn0cpy(eq->dz_name, emu->dz_name, sizeof(eq->dz_name));
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
@ -824,8 +824,8 @@ namespace RoF
|
|||||||
|
|
||||||
ENCODE(OP_DzSetLeaderName)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
@ -835,7 +835,7 @@ namespace RoF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberList)
|
ENCODE(OP_DzMemberList)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
|
||||||
|
|
||||||
SerializeBuffer buf;
|
SerializeBuffer buf;
|
||||||
buf.WriteUInt32(emu->client_id);
|
buf.WriteUInt32(emu->client_id);
|
||||||
@ -843,7 +843,7 @@ namespace RoF
|
|||||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||||
{
|
{
|
||||||
buf.WriteString(emu->members[i].name);
|
buf.WriteString(emu->members[i].name);
|
||||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
buf.WriteUInt8(emu->members[i].online_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = buf.size();
|
__packet->size = buf.size();
|
||||||
@ -855,8 +855,8 @@ namespace RoF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListName)
|
ENCODE(OP_DzMemberListName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(add_name);
|
OUT(add_name);
|
||||||
@ -867,7 +867,7 @@ namespace RoF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListStatus)
|
ENCODE(OP_DzMemberListStatus)
|
||||||
{
|
{
|
||||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
|
||||||
if (emu->member_count == 1)
|
if (emu->member_count == 1)
|
||||||
{
|
{
|
||||||
ENCODE_FORWARD(OP_DzMemberList);
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
|||||||
@ -821,13 +821,13 @@ namespace RoF2
|
|||||||
|
|
||||||
ENCODE(OP_DzExpeditionInfo)
|
ENCODE(OP_DzExpeditionInfo)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(assigned);
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
strn0cpy(eq->dz_name, emu->dz_name, sizeof(eq->dz_name));
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
@ -873,8 +873,8 @@ namespace RoF2
|
|||||||
|
|
||||||
ENCODE(OP_DzSetLeaderName)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
@ -884,7 +884,7 @@ namespace RoF2
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberList)
|
ENCODE(OP_DzMemberList)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
|
||||||
|
|
||||||
SerializeBuffer buf;
|
SerializeBuffer buf;
|
||||||
buf.WriteUInt32(emu->client_id);
|
buf.WriteUInt32(emu->client_id);
|
||||||
@ -892,7 +892,7 @@ namespace RoF2
|
|||||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||||
{
|
{
|
||||||
buf.WriteString(emu->members[i].name);
|
buf.WriteString(emu->members[i].name);
|
||||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
buf.WriteUInt8(emu->members[i].online_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = buf.size();
|
__packet->size = buf.size();
|
||||||
@ -904,8 +904,8 @@ namespace RoF2
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListName)
|
ENCODE(OP_DzMemberListName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(add_name);
|
OUT(add_name);
|
||||||
@ -916,7 +916,7 @@ namespace RoF2
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListStatus)
|
ENCODE(OP_DzMemberListStatus)
|
||||||
{
|
{
|
||||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
|
||||||
if (emu->member_count == 1)
|
if (emu->member_count == 1)
|
||||||
{
|
{
|
||||||
ENCODE_FORWARD(OP_DzMemberList);
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
|||||||
@ -4908,31 +4908,31 @@ struct ExpeditionInviteResponse_Struct
|
|||||||
/*079*/ uint8 unknown079; // padding garbage?
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct DynamicZoneInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 assigned; // padded bool, 0: not in expedition (clear data), 1: in expedition
|
/*008*/ uint32 assigned; // padded bool, 0: clear info, 1: fill window info
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char dz_name[128];
|
||||||
/*144*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
//*208*/ uint32 unknown208; // live sends 01 00 00 00 here but client doesn't read it
|
//*208*/ uint32 dz_type; // only in newer clients, if not 1 (expedition type) window does not auto show when dz info assigned
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
/*000*/ uint8 online_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneMemberList_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 member_count; // number of players in window
|
/*004*/ uint32 member_count; // number of players in window
|
||||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
/*008*/ DynamicZoneMemberEntry_Struct members[0]; // variable length
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberListName_Struct
|
struct DynamicZoneMemberListName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
@ -4955,7 +4955,7 @@ struct ExpeditionLockoutTimers_Struct
|
|||||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionSetLeaderName_Struct
|
struct DynamicZoneLeaderName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
|
|||||||
@ -4841,30 +4841,30 @@ struct ExpeditionInviteResponse_Struct
|
|||||||
/*079*/ uint8 unknown079; // padding garbage?
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct DynamicZoneInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 assigned; // padded bool
|
/*008*/ uint32 assigned; // padded bool
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char dz_name[128];
|
||||||
/*144*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
/*000*/ uint8 online_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneMemberList_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 member_count; // number of players in window
|
/*004*/ uint32 member_count; // number of players in window
|
||||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
/*008*/ DynamicZoneMemberEntry_Struct members[0]; // variable length
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberListName_Struct
|
struct DynamicZoneMemberListName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
@ -4887,7 +4887,7 @@ struct ExpeditionLockoutTimers_Struct
|
|||||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionSetLeaderName_Struct
|
struct DynamicZoneLeaderName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
|
|||||||
@ -545,13 +545,13 @@ namespace SoD
|
|||||||
|
|
||||||
ENCODE(OP_DzExpeditionInfo)
|
ENCODE(OP_DzExpeditionInfo)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(assigned);
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
strn0cpy(eq->dz_name, emu->dz_name, sizeof(eq->dz_name));
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
@ -597,8 +597,8 @@ namespace SoD
|
|||||||
|
|
||||||
ENCODE(OP_DzSetLeaderName)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
@ -608,7 +608,7 @@ namespace SoD
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberList)
|
ENCODE(OP_DzMemberList)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
|
||||||
|
|
||||||
SerializeBuffer buf;
|
SerializeBuffer buf;
|
||||||
buf.WriteUInt32(emu->client_id);
|
buf.WriteUInt32(emu->client_id);
|
||||||
@ -616,7 +616,7 @@ namespace SoD
|
|||||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||||
{
|
{
|
||||||
buf.WriteString(emu->members[i].name);
|
buf.WriteString(emu->members[i].name);
|
||||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
buf.WriteUInt8(emu->members[i].online_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = buf.size();
|
__packet->size = buf.size();
|
||||||
@ -628,8 +628,8 @@ namespace SoD
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListName)
|
ENCODE(OP_DzMemberListName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(add_name);
|
OUT(add_name);
|
||||||
@ -640,7 +640,7 @@ namespace SoD
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListStatus)
|
ENCODE(OP_DzMemberListStatus)
|
||||||
{
|
{
|
||||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
|
||||||
if (emu->member_count == 1)
|
if (emu->member_count == 1)
|
||||||
{
|
{
|
||||||
ENCODE_FORWARD(OP_DzMemberList);
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
|||||||
@ -4196,30 +4196,30 @@ struct ExpeditionInviteResponse_Struct
|
|||||||
/*079*/ uint8 unknown079; // padding garbage?
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct DynamicZoneInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 assigned; // padded bool
|
/*008*/ uint32 assigned; // padded bool
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char dz_name[128];
|
||||||
/*144*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
/*000*/ uint8 online_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneMemberList_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 member_count; // number of players in window
|
/*004*/ uint32 member_count; // number of players in window
|
||||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
/*008*/ DynamicZoneMemberEntry_Struct members[0]; // variable length
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberListName_Struct
|
struct DynamicZoneMemberListName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
@ -4242,7 +4242,7 @@ struct ExpeditionLockoutTimers_Struct
|
|||||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionSetLeaderName_Struct
|
struct DynamicZoneLeaderName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
|
|||||||
@ -533,13 +533,13 @@ namespace SoF
|
|||||||
|
|
||||||
ENCODE(OP_DzExpeditionInfo)
|
ENCODE(OP_DzExpeditionInfo)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(assigned);
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
strn0cpy(eq->dz_name, emu->dz_name, sizeof(eq->dz_name));
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
@ -585,8 +585,8 @@ namespace SoF
|
|||||||
|
|
||||||
ENCODE(OP_DzSetLeaderName)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
@ -596,7 +596,7 @@ namespace SoF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberList)
|
ENCODE(OP_DzMemberList)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
|
||||||
|
|
||||||
SerializeBuffer buf;
|
SerializeBuffer buf;
|
||||||
buf.WriteUInt32(emu->client_id);
|
buf.WriteUInt32(emu->client_id);
|
||||||
@ -604,7 +604,7 @@ namespace SoF
|
|||||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||||
{
|
{
|
||||||
buf.WriteString(emu->members[i].name);
|
buf.WriteString(emu->members[i].name);
|
||||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
buf.WriteUInt8(emu->members[i].online_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = buf.size();
|
__packet->size = buf.size();
|
||||||
@ -616,8 +616,8 @@ namespace SoF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListName)
|
ENCODE(OP_DzMemberListName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(add_name);
|
OUT(add_name);
|
||||||
@ -628,7 +628,7 @@ namespace SoF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListStatus)
|
ENCODE(OP_DzMemberListStatus)
|
||||||
{
|
{
|
||||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
|
||||||
if (emu->member_count == 1)
|
if (emu->member_count == 1)
|
||||||
{
|
{
|
||||||
ENCODE_FORWARD(OP_DzMemberList);
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
|||||||
@ -4112,29 +4112,29 @@ struct ExpeditionInviteResponse_Struct
|
|||||||
/*075*/ uint8 unknown079; // padding/garbage?
|
/*075*/ uint8 unknown079; // padding/garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct DynamicZoneInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 assigned; // padded bool
|
/*004*/ uint32 assigned; // padded bool
|
||||||
/*008*/ uint32 max_players;
|
/*008*/ uint32 max_players;
|
||||||
/*012*/ char expedition_name[128];
|
/*012*/ char dz_name[128];
|
||||||
/*140*/ char leader_name[64];
|
/*140*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
/*000*/ uint8 online_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneMemberList_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 member_count;
|
/*004*/ uint32 member_count;
|
||||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
/*008*/ DynamicZoneMemberEntry_Struct members[0]; // variable length
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberListName_Struct
|
struct DynamicZoneMemberListName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
/*004*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
@ -4156,7 +4156,7 @@ struct ExpeditionLockoutTimers_Struct
|
|||||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionSetLeaderName_Struct
|
struct DynamicZoneLeaderName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ char leader_name[64];
|
/*004*/ char leader_name[64];
|
||||||
|
|||||||
@ -476,13 +476,13 @@ namespace Titanium
|
|||||||
|
|
||||||
ENCODE(OP_DzExpeditionInfo)
|
ENCODE(OP_DzExpeditionInfo)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(assigned);
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
strn0cpy(eq->dz_name, emu->dz_name, sizeof(eq->dz_name));
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
@ -528,8 +528,8 @@ namespace Titanium
|
|||||||
|
|
||||||
ENCODE(OP_DzSetLeaderName)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
@ -539,7 +539,7 @@ namespace Titanium
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberList)
|
ENCODE(OP_DzMemberList)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
|
||||||
|
|
||||||
SerializeBuffer buf;
|
SerializeBuffer buf;
|
||||||
buf.WriteUInt32(emu->client_id);
|
buf.WriteUInt32(emu->client_id);
|
||||||
@ -547,7 +547,7 @@ namespace Titanium
|
|||||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||||
{
|
{
|
||||||
buf.WriteString(emu->members[i].name);
|
buf.WriteString(emu->members[i].name);
|
||||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
buf.WriteUInt8(emu->members[i].online_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = buf.size();
|
__packet->size = buf.size();
|
||||||
@ -559,8 +559,8 @@ namespace Titanium
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListName)
|
ENCODE(OP_DzMemberListName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(add_name);
|
OUT(add_name);
|
||||||
@ -571,7 +571,7 @@ namespace Titanium
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListStatus)
|
ENCODE(OP_DzMemberListStatus)
|
||||||
{
|
{
|
||||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
|
||||||
if (emu->member_count == 1)
|
if (emu->member_count == 1)
|
||||||
{
|
{
|
||||||
ENCODE_FORWARD(OP_DzMemberList);
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
|||||||
@ -3323,29 +3323,29 @@ struct ExpeditionInviteResponse_Struct
|
|||||||
/*075*/ uint8 unknown079; // padding/garbage?
|
/*075*/ uint8 unknown079; // padding/garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct DynamicZoneInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 assigned; // padded bool
|
/*004*/ uint32 assigned; // padded bool
|
||||||
/*008*/ uint32 max_players;
|
/*008*/ uint32 max_players;
|
||||||
/*012*/ char expedition_name[128];
|
/*012*/ char dz_name[128];
|
||||||
/*140*/ char leader_name[64];
|
/*140*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
/*000*/ uint8 online_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneMemberList_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 member_count;
|
/*004*/ uint32 member_count;
|
||||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
/*008*/ DynamicZoneMemberEntry_Struct members[0]; // variable length
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberListName_Struct
|
struct DynamicZoneMemberListName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
/*004*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||||
@ -3367,7 +3367,7 @@ struct ExpeditionLockoutTimers_Struct
|
|||||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionSetLeaderName_Struct
|
struct DynamicZoneLeaderName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ char leader_name[64];
|
/*004*/ char leader_name[64];
|
||||||
|
|||||||
@ -675,13 +675,13 @@ namespace UF
|
|||||||
|
|
||||||
ENCODE(OP_DzExpeditionInfo)
|
ENCODE(OP_DzExpeditionInfo)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(assigned);
|
OUT(assigned);
|
||||||
OUT(max_players);
|
OUT(max_players);
|
||||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
strn0cpy(eq->dz_name, emu->dz_name, sizeof(eq->dz_name));
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
|
|
||||||
FINISH_ENCODE();
|
FINISH_ENCODE();
|
||||||
@ -727,8 +727,8 @@ namespace UF
|
|||||||
|
|
||||||
ENCODE(OP_DzSetLeaderName)
|
ENCODE(OP_DzSetLeaderName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||||
@ -738,7 +738,7 @@ namespace UF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberList)
|
ENCODE(OP_DzMemberList)
|
||||||
{
|
{
|
||||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
|
||||||
|
|
||||||
SerializeBuffer buf;
|
SerializeBuffer buf;
|
||||||
buf.WriteUInt32(emu->client_id);
|
buf.WriteUInt32(emu->client_id);
|
||||||
@ -746,7 +746,7 @@ namespace UF
|
|||||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||||
{
|
{
|
||||||
buf.WriteString(emu->members[i].name);
|
buf.WriteString(emu->members[i].name);
|
||||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
buf.WriteUInt8(emu->members[i].online_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
__packet->size = buf.size();
|
__packet->size = buf.size();
|
||||||
@ -758,8 +758,8 @@ namespace UF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListName)
|
ENCODE(OP_DzMemberListName)
|
||||||
{
|
{
|
||||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
|
||||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
|
||||||
|
|
||||||
OUT(client_id);
|
OUT(client_id);
|
||||||
OUT(add_name);
|
OUT(add_name);
|
||||||
@ -770,7 +770,7 @@ namespace UF
|
|||||||
|
|
||||||
ENCODE(OP_DzMemberListStatus)
|
ENCODE(OP_DzMemberListStatus)
|
||||||
{
|
{
|
||||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
|
||||||
if (emu->member_count == 1)
|
if (emu->member_count == 1)
|
||||||
{
|
{
|
||||||
ENCODE_FORWARD(OP_DzMemberList);
|
ENCODE_FORWARD(OP_DzMemberList);
|
||||||
|
|||||||
@ -4277,30 +4277,30 @@ struct ExpeditionInviteResponse_Struct
|
|||||||
/*079*/ uint8 unknown079; // padding garbage?
|
/*079*/ uint8 unknown079; // padding garbage?
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionInfo_Struct
|
struct DynamicZoneInfo_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
/*008*/ uint32 assigned; // padded bool
|
/*008*/ uint32 assigned; // padded bool
|
||||||
/*012*/ uint32 max_players;
|
/*012*/ uint32 max_players;
|
||||||
/*016*/ char expedition_name[128];
|
/*016*/ char dz_name[128];
|
||||||
/*144*/ char leader_name[64];
|
/*144*/ char leader_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberEntry_Struct
|
struct DynamicZoneMemberEntry_Struct
|
||||||
{
|
{
|
||||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
/*000*/ uint8 online_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberList_Struct
|
struct DynamicZoneMemberList_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 member_count; // number of players in window
|
/*004*/ uint32 member_count; // number of players in window
|
||||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
/*008*/ DynamicZoneMemberEntry_Struct members[0]; // variable length
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionMemberListName_Struct
|
struct DynamicZoneMemberListName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
@ -4323,7 +4323,7 @@ struct ExpeditionLockoutTimers_Struct
|
|||||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ExpeditionSetLeaderName_Struct
|
struct DynamicZoneLeaderName_Struct
|
||||||
{
|
{
|
||||||
/*000*/ uint32 client_id;
|
/*000*/ uint32 client_id;
|
||||||
/*004*/ uint32 unknown004;
|
/*004*/ uint32 unknown004;
|
||||||
|
|||||||
@ -48,7 +48,7 @@ void Expedition::RemoveMember(uint32_t character_id)
|
|||||||
{
|
{
|
||||||
RemoveInternalMember(character_id);
|
RemoveInternalMember(character_id);
|
||||||
|
|
||||||
if (character_id == m_leader.char_id)
|
if (character_id == m_leader.id)
|
||||||
{
|
{
|
||||||
ChooseNewLeader();
|
ChooseNewLeader();
|
||||||
}
|
}
|
||||||
@ -64,9 +64,9 @@ void Expedition::ChooseNewLeader()
|
|||||||
|
|
||||||
// we don't track expedition member status in world so may choose a linkdead member
|
// we don't track expedition member status in world so may choose a linkdead member
|
||||||
// this is fine since it will trigger another change when that member goes offline
|
// this is fine since it will trigger another change when that member goes offline
|
||||||
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const ExpeditionMember& member) {
|
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
|
||||||
if (member.char_id != m_leader.char_id) {
|
if (member.id != m_leader.id) {
|
||||||
auto member_cle = client_list.FindCLEByCharacterID(member.char_id);
|
auto member_cle = client_list.FindCLEByCharacterID(member.id);
|
||||||
return (member_cle && member_cle->GetOnline() == CLE_Status::InZone);
|
return (member_cle && member_cle->GetOnline() == CLE_Status::InZone);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -76,7 +76,7 @@ void Expedition::ChooseNewLeader()
|
|||||||
{
|
{
|
||||||
// no online members found, fallback to choosing any member
|
// no online members found, fallback to choosing any member
|
||||||
it = std::find_if(m_members.begin(), m_members.end(),
|
it = std::find_if(m_members.begin(), m_members.end(),
|
||||||
[&](const ExpeditionMember& member) { return (member.char_id != m_leader.char_id); });
|
[&](const DynamicZoneMember& member) { return (member.id != m_leader.id); });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (it != m_members.end() && SetNewLeader(*it))
|
if (it != m_members.end() && SetNewLeader(*it))
|
||||||
@ -85,15 +85,15 @@ void Expedition::ChooseNewLeader()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Expedition::SetNewLeader(const ExpeditionMember& member)
|
bool Expedition::SetNewLeader(const DynamicZoneMember& member)
|
||||||
{
|
{
|
||||||
if (!HasMember(member.char_id))
|
if (!HasMember(member.id))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogExpeditionsModerate("Replacing [{}] leader [{}] with [{}]", m_id, m_leader.name, member.name);
|
LogExpeditionsModerate("Replacing [{}] leader [{}] with [{}]", m_id, m_leader.name, member.name);
|
||||||
ExpeditionDatabase::UpdateLeaderID(m_id, member.char_id);
|
ExpeditionDatabase::UpdateLeaderID(m_id, member.id);
|
||||||
m_leader = member;
|
m_leader = member;
|
||||||
m_dynamic_zone.SetLeaderName(m_leader.name);
|
m_dynamic_zone.SetLeaderName(m_leader.name);
|
||||||
SendZonesLeaderChanged();
|
SendZonesLeaderChanged();
|
||||||
@ -125,7 +125,7 @@ void Expedition::SendZonesLeaderChanged()
|
|||||||
auto pack = std::make_unique<ServerPacket>(ServerOP_ExpeditionLeaderChanged, pack_size);
|
auto pack = std::make_unique<ServerPacket>(ServerOP_ExpeditionLeaderChanged, pack_size);
|
||||||
auto buf = reinterpret_cast<ServerExpeditionLeaderID_Struct*>(pack->pBuffer);
|
auto buf = reinterpret_cast<ServerExpeditionLeaderID_Struct*>(pack->pBuffer);
|
||||||
buf->expedition_id = GetID();
|
buf->expedition_id = GetID();
|
||||||
buf->leader_id = m_leader.char_id;
|
buf->leader_id = m_leader.id;
|
||||||
zoneserver_list.SendPacket(pack.get());
|
zoneserver_list.SendPacket(pack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,7 @@ public:
|
|||||||
void SendZonesExpeditionDeleted();
|
void SendZonesExpeditionDeleted();
|
||||||
void SendZonesExpireWarning(uint32_t minutes_remaining);
|
void SendZonesExpireWarning(uint32_t minutes_remaining);
|
||||||
void SetDynamicZone(DynamicZone&& dz);
|
void SetDynamicZone(DynamicZone&& dz);
|
||||||
bool SetNewLeader(const ExpeditionMember& member);
|
bool SetNewLeader(const DynamicZoneMember& member);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SendZonesLeaderChanged();
|
void SendZonesLeaderChanged();
|
||||||
|
|||||||
@ -115,13 +115,13 @@ void ExpeditionState::CacheExpeditions(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ExpeditionState::MemberChange(
|
void ExpeditionState::MemberChange(
|
||||||
uint32_t expedition_id, const ExpeditionMember& member, bool remove)
|
uint32_t expedition_id, const DynamicZoneMember& member, bool remove)
|
||||||
{
|
{
|
||||||
auto expedition = GetExpedition(expedition_id);
|
auto expedition = GetExpedition(expedition_id);
|
||||||
if (expedition)
|
if (expedition)
|
||||||
{
|
{
|
||||||
if (remove) {
|
if (remove) {
|
||||||
expedition->RemoveMember(member.char_id);
|
expedition->RemoveMember(member.id);
|
||||||
} else {
|
} else {
|
||||||
expedition->AddInternalMember(member);
|
expedition->AddInternalMember(member);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
extern class ExpeditionState expedition_state;
|
extern class ExpeditionState expedition_state;
|
||||||
|
|
||||||
class Expedition;
|
class Expedition;
|
||||||
struct ExpeditionMember;
|
struct DynamicZoneMember;
|
||||||
|
|
||||||
class ExpeditionState
|
class ExpeditionState
|
||||||
{
|
{
|
||||||
@ -40,7 +40,7 @@ public:
|
|||||||
void CacheAllFromDatabase();
|
void CacheAllFromDatabase();
|
||||||
Expedition* GetExpedition(uint32_t expedition_id);
|
Expedition* GetExpedition(uint32_t expedition_id);
|
||||||
Expedition* GetExpeditionByDynamicZoneID(uint32_t dz_id);
|
Expedition* GetExpeditionByDynamicZoneID(uint32_t dz_id);
|
||||||
void MemberChange(uint32_t expedition_id, const ExpeditionMember& member, bool remove);
|
void MemberChange(uint32_t expedition_id, const DynamicZoneMember& member, bool remove);
|
||||||
void Process();
|
void Process();
|
||||||
void RemoveAllMembers(uint32_t expedition_id);
|
void RemoveAllMembers(uint32_t expedition_id);
|
||||||
|
|
||||||
|
|||||||
@ -3401,7 +3401,7 @@ void Client::LinkDead()
|
|||||||
Expedition* expedition = GetExpedition();
|
Expedition* expedition = GetExpedition();
|
||||||
if (expedition)
|
if (expedition)
|
||||||
{
|
{
|
||||||
expedition->SetMemberStatus(this, ExpeditionMemberStatus::LinkDead);
|
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::LinkDead);
|
||||||
}
|
}
|
||||||
|
|
||||||
// save_timer.Start(2500);
|
// save_timer.Start(2500);
|
||||||
@ -9550,11 +9550,11 @@ void Client::UpdateExpeditionInfoAndLockouts()
|
|||||||
if (expedition->GetDynamicZone().IsCurrentZoneDzInstance())
|
if (expedition->GetDynamicZone().IsCurrentZoneDzInstance())
|
||||||
{
|
{
|
||||||
expedition->SyncCharacterLockouts(CharacterID(), m_expedition_lockouts);
|
expedition->SyncCharacterLockouts(CharacterID(), m_expedition_lockouts);
|
||||||
expedition->SetMemberStatus(this, ExpeditionMemberStatus::InDynamicZone);
|
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::InDynamicZone);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
expedition->SetMemberStatus(this, ExpeditionMemberStatus::Online);
|
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::Online);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -183,7 +183,7 @@ bool Client::Process() {
|
|||||||
Expedition* expedition = GetExpedition();
|
Expedition* expedition = GetExpedition();
|
||||||
if (expedition)
|
if (expedition)
|
||||||
{
|
{
|
||||||
expedition->SetMemberStatus(this, ExpeditionMemberStatus::Offline);
|
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::Offline);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; //delete client
|
return false; //delete client
|
||||||
@ -578,7 +578,7 @@ bool Client::Process() {
|
|||||||
Expedition* expedition = GetExpedition();
|
Expedition* expedition = GetExpedition();
|
||||||
if (expedition)
|
if (expedition)
|
||||||
{
|
{
|
||||||
expedition->SetMemberStatus(this, ExpeditionMemberStatus::LinkDead);
|
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::LinkDead);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -714,7 +714,7 @@ void Client::OnDisconnect(bool hard_disconnect) {
|
|||||||
Expedition* expedition = GetExpedition();
|
Expedition* expedition = GetExpedition();
|
||||||
if (expedition && !bZoning)
|
if (expedition && !bZoning)
|
||||||
{
|
{
|
||||||
expedition->SetMemberStatus(this, ExpeditionMemberStatus::Offline);
|
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::Offline);
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveAllAuras();
|
RemoveAllAuras();
|
||||||
|
|||||||
@ -50,7 +50,7 @@ const int32_t Expedition::EVENT_TIMER_ID = 1;
|
|||||||
|
|
||||||
Expedition::Expedition(
|
Expedition::Expedition(
|
||||||
uint32_t id, const std::string& uuid, DynamicZone&& dz, const std::string& expedition_name,
|
uint32_t id, const std::string& uuid, DynamicZone&& dz, const std::string& expedition_name,
|
||||||
const ExpeditionMember& leader, uint32_t min_players, uint32_t max_players
|
const DynamicZoneMember& leader, uint32_t min_players, uint32_t max_players
|
||||||
) : ExpeditionBase(id, uuid, expedition_name, leader, min_players, max_players)
|
) : ExpeditionBase(id, uuid, expedition_name, leader, min_players, max_players)
|
||||||
{
|
{
|
||||||
SetDynamicZone(std::move(dz));
|
SetDynamicZone(std::move(dz));
|
||||||
@ -109,7 +109,7 @@ Expedition* Expedition::TryCreate(
|
|||||||
expedition_uuid,
|
expedition_uuid,
|
||||||
std::move(dynamiczone),
|
std::move(dynamiczone),
|
||||||
request.GetExpeditionName(),
|
request.GetExpeditionName(),
|
||||||
ExpeditionMember{ request.GetLeaderID(), request.GetLeaderName() },
|
DynamicZoneMember{ request.GetLeaderID(), request.GetLeaderName() },
|
||||||
request.GetMinPlayers(),
|
request.GetMinPlayers(),
|
||||||
request.GetMaxPlayers()
|
request.GetMaxPlayers()
|
||||||
);
|
);
|
||||||
@ -264,7 +264,7 @@ void Expedition::SaveMembers(ExpeditionRequest& request)
|
|||||||
std::vector<uint32_t> member_ids;
|
std::vector<uint32_t> member_ids;
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
member_ids.emplace_back(member.char_id);
|
member_ids.emplace_back(member.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpeditionDatabase::InsertMembers(m_id, m_members);
|
ExpeditionDatabase::InsertMembers(m_id, m_members);
|
||||||
@ -484,11 +484,11 @@ bool Expedition::RemoveMember(const std::string& remove_char_name)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExpeditionDatabase::DeleteMember(m_id, member.char_id);
|
ExpeditionDatabase::DeleteMember(m_id, member.id);
|
||||||
m_dynamiczone.RemoveCharacter(member.char_id);
|
m_dynamiczone.RemoveCharacter(member.id);
|
||||||
|
|
||||||
ProcessMemberRemoved(member.name, member.char_id);
|
ProcessMemberRemoved(member.name, member.id);
|
||||||
SendWorldMemberChanged(member.name, member.char_id, true);
|
SendWorldMemberChanged(member.name, member.id, true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -507,17 +507,17 @@ void Expedition::SwapMember(Client* add_client, const std::string& remove_char_n
|
|||||||
}
|
}
|
||||||
|
|
||||||
// make remove and add atomic to avoid racing with separate world messages
|
// make remove and add atomic to avoid racing with separate world messages
|
||||||
ExpeditionDatabase::DeleteMember(m_id, member.char_id);
|
ExpeditionDatabase::DeleteMember(m_id, member.id);
|
||||||
ExpeditionDatabase::InsertMember(m_id, add_client->CharacterID());
|
ExpeditionDatabase::InsertMember(m_id, add_client->CharacterID());
|
||||||
m_dynamiczone.RemoveCharacter(member.char_id);
|
m_dynamiczone.RemoveCharacter(member.id);
|
||||||
m_dynamiczone.AddCharacter(add_client->CharacterID());
|
m_dynamiczone.AddCharacter(add_client->CharacterID());
|
||||||
|
|
||||||
ProcessMemberRemoved(member.name, member.char_id);
|
ProcessMemberRemoved(member.name, member.id);
|
||||||
ProcessMemberAdded(add_client->GetName(), add_client->CharacterID());
|
ProcessMemberAdded(add_client->GetName(), add_client->CharacterID());
|
||||||
SendWorldMemberSwapped(member.name, member.char_id, add_client->GetName(), add_client->CharacterID());
|
SendWorldMemberSwapped(member.name, member.id, add_client->GetName(), add_client->CharacterID());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Expedition::SetMemberStatus(Client* client, ExpeditionMemberStatus status)
|
void Expedition::SetMemberStatus(Client* client, DynamicZoneMemberStatus status)
|
||||||
{
|
{
|
||||||
if (client)
|
if (client)
|
||||||
{
|
{
|
||||||
@ -526,14 +526,14 @@ void Expedition::SetMemberStatus(Client* client, ExpeditionMemberStatus status)
|
|||||||
|
|
||||||
// world could detect this itself but it'd have to process member status updates
|
// world could detect this itself but it'd have to process member status updates
|
||||||
// a member coming online will trigger a leader change if all members were offline
|
// a member coming online will trigger a leader change if all members were offline
|
||||||
if (m_leader.status == ExpeditionMemberStatus::Offline)
|
if (m_leader.status == DynamicZoneMemberStatus::Offline)
|
||||||
{
|
{
|
||||||
SendWorldExpeditionUpdate(ServerOP_ExpeditionChooseNewLeader);
|
SendWorldExpeditionUpdate(ServerOP_ExpeditionChooseNewLeader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Expedition::UpdateMemberStatus(uint32_t update_member_id, ExpeditionMemberStatus status)
|
void Expedition::UpdateMemberStatus(uint32_t update_member_id, DynamicZoneMemberStatus status)
|
||||||
{
|
{
|
||||||
auto member_data = GetMemberData(update_member_id);
|
auto member_data = GetMemberData(update_member_id);
|
||||||
if (!member_data.IsValid())
|
if (!member_data.IsValid())
|
||||||
@ -541,12 +541,12 @@ void Expedition::UpdateMemberStatus(uint32_t update_member_id, ExpeditionMemberS
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == ExpeditionMemberStatus::InDynamicZone && !RuleB(Expedition, EnableInDynamicZoneStatus))
|
if (status == DynamicZoneMemberStatus::InDynamicZone && !RuleB(Expedition, EnableInDynamicZoneStatus))
|
||||||
{
|
{
|
||||||
status = ExpeditionMemberStatus::Online;
|
status = DynamicZoneMemberStatus::Online;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update_member_id == m_leader.char_id)
|
if (update_member_id == m_leader.id)
|
||||||
{
|
{
|
||||||
m_leader.status = status;
|
m_leader.status = status;
|
||||||
}
|
}
|
||||||
@ -561,12 +561,12 @@ void Expedition::UpdateMemberStatus(uint32_t update_member_id, ExpeditionMemberS
|
|||||||
|
|
||||||
for (auto& member : m_members)
|
for (auto& member : m_members)
|
||||||
{
|
{
|
||||||
if (member.char_id == update_member_id)
|
if (member.id == update_member_id)
|
||||||
{
|
{
|
||||||
member.status = status;
|
member.status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
member_client->QueuePacket(outapp_member_status.get());
|
member_client->QueuePacket(outapp_member_status.get());
|
||||||
@ -732,7 +732,7 @@ void Expedition::DzInviteResponse(Client* add_client, bool accepted, const std::
|
|||||||
|
|
||||||
// a null leader_client is handled by SendLeaderMessage fallbacks
|
// a null leader_client is handled by SendLeaderMessage fallbacks
|
||||||
// note current leader receives invite reply messages (if leader changed)
|
// note current leader receives invite reply messages (if leader changed)
|
||||||
Client* leader_client = entity_list.GetClientByCharID(m_leader.char_id);
|
Client* leader_client = entity_list.GetClientByCharID(m_leader.id);
|
||||||
|
|
||||||
if (!accepted)
|
if (!accepted)
|
||||||
{
|
{
|
||||||
@ -756,7 +756,7 @@ void Expedition::DzInviteResponse(Client* add_client, bool accepted, const std::
|
|||||||
if (was_swap_invite)
|
if (was_swap_invite)
|
||||||
{
|
{
|
||||||
auto swap_member = GetMemberData(swap_remove_name);
|
auto swap_member = GetMemberData(swap_remove_name);
|
||||||
if (!swap_member.IsValid() || !ExpeditionDatabase::HasMember(m_id, swap_member.char_id))
|
if (!swap_member.IsValid() || !ExpeditionDatabase::HasMember(m_id, swap_member.id))
|
||||||
{
|
{
|
||||||
has_conflicts = true;
|
has_conflicts = true;
|
||||||
}
|
}
|
||||||
@ -808,7 +808,7 @@ bool Expedition::ConfirmLeaderCommand(Client* requester)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_leader.char_id != requester->CharacterID())
|
if (m_leader.id != requester->CharacterID())
|
||||||
{
|
{
|
||||||
requester->MessageString(Chat::System, EXPEDITION_NOT_LEADER, m_leader.name.c_str());
|
requester->MessageString(Chat::System, EXPEDITION_NOT_LEADER, m_leader.name.c_str());
|
||||||
return false;
|
return false;
|
||||||
@ -877,7 +877,7 @@ void Expedition::DzAddPlayer(
|
|||||||
if (member_data.IsValid())
|
if (member_data.IsValid())
|
||||||
{
|
{
|
||||||
// live prioritizes offline message before already a member message
|
// live prioritizes offline message before already a member message
|
||||||
if (member_data.status == ExpeditionMemberStatus::Offline)
|
if (member_data.status == DynamicZoneMemberStatus::Offline)
|
||||||
{
|
{
|
||||||
requester->MessageString(Chat::Red, DZADD_NOT_ONLINE, add_char_name.c_str());
|
requester->MessageString(Chat::Red, DZADD_NOT_ONLINE, add_char_name.c_str());
|
||||||
}
|
}
|
||||||
@ -1054,12 +1054,12 @@ void Expedition::ProcessLeaderChanged(uint32_t new_leader_id)
|
|||||||
auto outapp_leader = CreateLeaderNamePacket();
|
auto outapp_leader = CreateLeaderNamePacket();
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
member_client->QueuePacket(outapp_leader.get());
|
member_client->QueuePacket(outapp_leader.get());
|
||||||
|
|
||||||
if (member.char_id == new_leader_id && RuleB(Expedition, AlwaysNotifyNewLeaderOnChange))
|
if (member.id == new_leader_id && RuleB(Expedition, AlwaysNotifyNewLeaderOnChange))
|
||||||
{
|
{
|
||||||
member_client->MessageString(Chat::Yellow, DZMAKELEADER_YOU);
|
member_client->MessageString(Chat::Yellow, DZMAKELEADER_YOU);
|
||||||
}
|
}
|
||||||
@ -1096,13 +1096,13 @@ void Expedition::ProcessMakeLeader(Client* old_leader_client, Client* new_leader
|
|||||||
void Expedition::ProcessMemberAdded(const std::string& char_name, uint32_t added_char_id)
|
void Expedition::ProcessMemberAdded(const std::string& char_name, uint32_t added_char_id)
|
||||||
{
|
{
|
||||||
// adds the member to this expedition and notifies both leader and new member
|
// adds the member to this expedition and notifies both leader and new member
|
||||||
Client* leader_client = entity_list.GetClientByCharID(m_leader.char_id);
|
Client* leader_client = entity_list.GetClientByCharID(m_leader.id);
|
||||||
if (leader_client)
|
if (leader_client)
|
||||||
{
|
{
|
||||||
leader_client->MessageString(Chat::Yellow, EXPEDITION_MEMBER_ADDED, char_name.c_str(), m_expedition_name.c_str());
|
leader_client->MessageString(Chat::Yellow, EXPEDITION_MEMBER_ADDED, char_name.c_str(), m_expedition_name.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
AddInternalMember({ added_char_id, char_name, ExpeditionMemberStatus::Online });
|
AddInternalMember({ added_char_id, char_name, DynamicZoneMemberStatus::Online });
|
||||||
|
|
||||||
Client* member_client = entity_list.GetClientByCharID(added_char_id);
|
Client* member_client = entity_list.GetClientByCharID(added_char_id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
@ -1129,7 +1129,7 @@ void Expedition::ProcessMemberRemoved(const std::string& removed_char_name, uint
|
|||||||
{
|
{
|
||||||
bool is_removed = (it->name == removed_char_name);
|
bool is_removed = (it->name == removed_char_name);
|
||||||
|
|
||||||
Client* member_client = entity_list.GetClientByCharID(it->char_id);
|
Client* member_client = entity_list.GetClientByCharID(it->id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
// all members receive the removed player name packet
|
// all members receive the removed player name packet
|
||||||
@ -1175,7 +1175,7 @@ void Expedition::ProcessLockoutDuration(
|
|||||||
|
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
member_client->AddExpeditionLockoutDuration(m_expedition_name,
|
member_client->AddExpeditionLockoutDuration(m_expedition_name,
|
||||||
@ -1192,7 +1192,7 @@ void Expedition::ProcessLockoutDuration(
|
|||||||
void Expedition::AddLockoutDurationClients(
|
void Expedition::AddLockoutDurationClients(
|
||||||
const ExpeditionLockoutTimer& lockout, int seconds, uint32_t exclude_id)
|
const ExpeditionLockoutTimer& lockout, int seconds, uint32_t exclude_id)
|
||||||
{
|
{
|
||||||
std::vector<ExpeditionMember> lockout_clients;
|
std::vector<DynamicZoneMember> lockout_clients;
|
||||||
for (const auto& client_iter : entity_list.GetClientList())
|
for (const auto& client_iter : entity_list.GetClientList())
|
||||||
{
|
{
|
||||||
Client* client = client_iter.second;
|
Client* client = client_iter.second;
|
||||||
@ -1228,7 +1228,7 @@ void Expedition::ProcessLockoutUpdate(
|
|||||||
|
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
if (!remove)
|
if (!remove)
|
||||||
@ -1254,7 +1254,7 @@ void Expedition::ProcessLockoutUpdate(
|
|||||||
void Expedition::AddLockoutClients(
|
void Expedition::AddLockoutClients(
|
||||||
const ExpeditionLockoutTimer& lockout, uint32_t exclude_expedition_id)
|
const ExpeditionLockoutTimer& lockout, uint32_t exclude_expedition_id)
|
||||||
{
|
{
|
||||||
std::vector<ExpeditionMember> lockout_clients;
|
std::vector<DynamicZoneMember> lockout_clients;
|
||||||
for (const auto& client_iter : entity_list.GetClientList())
|
for (const auto& client_iter : entity_list.GetClientList())
|
||||||
{
|
{
|
||||||
Client* client = client_iter.second;
|
Client* client = client_iter.second;
|
||||||
@ -1283,7 +1283,7 @@ void Expedition::SendNewMemberAddedToZoneMembers(const std::string& added_name)
|
|||||||
{
|
{
|
||||||
if (member.name != added_name) // new member already updated
|
if (member.name != added_name) // new member already updated
|
||||||
{
|
{
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
member_client->QueuePacket(outapp_members.get());
|
member_client->QueuePacket(outapp_members.get());
|
||||||
@ -1301,7 +1301,7 @@ void Expedition::SendUpdatesToZoneMembers(bool clear, bool message_on_clear)
|
|||||||
|
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
member_client->SetExpeditionID(clear ? 0 : GetID());
|
member_client->SetExpeditionID(clear ? 0 : GetID());
|
||||||
@ -1349,13 +1349,13 @@ std::unique_ptr<EQApplicationPacket> Expedition::CreateExpireWarningPacket(uint3
|
|||||||
|
|
||||||
std::unique_ptr<EQApplicationPacket> Expedition::CreateInfoPacket(bool clear)
|
std::unique_ptr<EQApplicationPacket> Expedition::CreateInfoPacket(bool clear)
|
||||||
{
|
{
|
||||||
uint32_t outsize = sizeof(ExpeditionInfo_Struct);
|
uint32_t outsize = sizeof(DynamicZoneInfo_Struct);
|
||||||
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzExpeditionInfo, outsize);
|
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzExpeditionInfo, outsize);
|
||||||
auto info = reinterpret_cast<ExpeditionInfo_Struct*>(outapp->pBuffer);
|
auto info = reinterpret_cast<DynamicZoneInfo_Struct*>(outapp->pBuffer);
|
||||||
if (!clear)
|
if (!clear)
|
||||||
{
|
{
|
||||||
info->assigned = true;
|
info->assigned = true;
|
||||||
strn0cpy(info->expedition_name, m_expedition_name.c_str(), sizeof(info->expedition_name));
|
strn0cpy(info->dz_name, m_expedition_name.c_str(), sizeof(info->dz_name));
|
||||||
strn0cpy(info->leader_name, m_leader.name.c_str(), sizeof(info->leader_name));
|
strn0cpy(info->leader_name, m_leader.name.c_str(), sizeof(info->leader_name));
|
||||||
info->max_players = m_max_players;
|
info->max_players = m_max_players;
|
||||||
}
|
}
|
||||||
@ -1380,10 +1380,10 @@ std::unique_ptr<EQApplicationPacket> Expedition::CreateInvitePacket(
|
|||||||
std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListPacket(bool clear)
|
std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListPacket(bool clear)
|
||||||
{
|
{
|
||||||
uint32_t member_count = clear ? 0 : static_cast<uint32_t>(m_members.size());
|
uint32_t member_count = clear ? 0 : static_cast<uint32_t>(m_members.size());
|
||||||
uint32_t member_entries_size = sizeof(ExpeditionMemberEntry_Struct) * member_count;
|
uint32_t member_entries_size = sizeof(DynamicZoneMemberEntry_Struct) * member_count;
|
||||||
uint32_t outsize = sizeof(ExpeditionMemberList_Struct) + member_entries_size;
|
uint32_t outsize = sizeof(DynamicZoneMemberList_Struct) + member_entries_size;
|
||||||
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzMemberList, outsize);
|
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzMemberList, outsize);
|
||||||
auto buf = reinterpret_cast<ExpeditionMemberList_Struct*>(outapp->pBuffer);
|
auto buf = reinterpret_cast<DynamicZoneMemberList_Struct*>(outapp->pBuffer);
|
||||||
|
|
||||||
buf->member_count = member_count;
|
buf->member_count = member_count;
|
||||||
|
|
||||||
@ -1392,7 +1392,7 @@ std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListPacket(bool cle
|
|||||||
for (auto i = 0; i < m_members.size(); ++i)
|
for (auto i = 0; i < m_members.size(); ++i)
|
||||||
{
|
{
|
||||||
strn0cpy(buf->members[i].name, m_members[i].name.c_str(), sizeof(buf->members[i].name));
|
strn0cpy(buf->members[i].name, m_members[i].name.c_str(), sizeof(buf->members[i].name));
|
||||||
buf->members[i].expedition_status = static_cast<uint8_t>(m_members[i].status);
|
buf->members[i].online_status = static_cast<uint8_t>(m_members[i].status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1402,35 +1402,35 @@ std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListPacket(bool cle
|
|||||||
std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListNamePacket(
|
std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListNamePacket(
|
||||||
const std::string& name, bool remove_name)
|
const std::string& name, bool remove_name)
|
||||||
{
|
{
|
||||||
uint32_t outsize = sizeof(ExpeditionMemberListName_Struct);
|
uint32_t outsize = sizeof(DynamicZoneMemberListName_Struct);
|
||||||
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzMemberListName, outsize);
|
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzMemberListName, outsize);
|
||||||
auto buf = reinterpret_cast<ExpeditionMemberListName_Struct*>(outapp->pBuffer);
|
auto buf = reinterpret_cast<DynamicZoneMemberListName_Struct*>(outapp->pBuffer);
|
||||||
buf->add_name = !remove_name;
|
buf->add_name = !remove_name;
|
||||||
strn0cpy(buf->name, name.c_str(), sizeof(buf->name));
|
strn0cpy(buf->name, name.c_str(), sizeof(buf->name));
|
||||||
return outapp;
|
return outapp;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListStatusPacket(
|
std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListStatusPacket(
|
||||||
const std::string& name, ExpeditionMemberStatus status)
|
const std::string& name, DynamicZoneMemberStatus status)
|
||||||
{
|
{
|
||||||
// member list status uses member list struct with a single entry
|
// member list status uses member list struct with a single entry
|
||||||
uint32_t outsize = sizeof(ExpeditionMemberList_Struct) + sizeof(ExpeditionMemberEntry_Struct);
|
uint32_t outsize = sizeof(DynamicZoneMemberList_Struct) + sizeof(DynamicZoneMemberEntry_Struct);
|
||||||
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzMemberListStatus, outsize);
|
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzMemberListStatus, outsize);
|
||||||
auto buf = reinterpret_cast<ExpeditionMemberList_Struct*>(outapp->pBuffer);
|
auto buf = reinterpret_cast<DynamicZoneMemberList_Struct*>(outapp->pBuffer);
|
||||||
buf->member_count = 1;
|
buf->member_count = 1;
|
||||||
|
|
||||||
auto entry = reinterpret_cast<ExpeditionMemberEntry_Struct*>(buf->members);
|
auto entry = static_cast<DynamicZoneMemberEntry_Struct*>(buf->members);
|
||||||
strn0cpy(entry->name, name.c_str(), sizeof(entry->name));
|
strn0cpy(entry->name, name.c_str(), sizeof(entry->name));
|
||||||
entry->expedition_status = static_cast<uint8_t>(status);
|
entry->online_status = static_cast<uint8_t>(status);
|
||||||
|
|
||||||
return outapp;
|
return outapp;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<EQApplicationPacket> Expedition::CreateLeaderNamePacket()
|
std::unique_ptr<EQApplicationPacket> Expedition::CreateLeaderNamePacket()
|
||||||
{
|
{
|
||||||
uint32_t outsize = sizeof(ExpeditionSetLeaderName_Struct);
|
uint32_t outsize = sizeof(DynamicZoneLeaderName_Struct);
|
||||||
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzSetLeaderName, outsize);
|
auto outapp = std::make_unique<EQApplicationPacket>(OP_DzSetLeaderName, outsize);
|
||||||
auto buf = reinterpret_cast<ExpeditionSetLeaderName_Struct*>(outapp->pBuffer);
|
auto buf = reinterpret_cast<DynamicZoneLeaderName_Struct*>(outapp->pBuffer);
|
||||||
strn0cpy(buf->leader_name, m_leader.name.c_str(), sizeof(buf->leader_name));
|
strn0cpy(buf->leader_name, m_leader.name.c_str(), sizeof(buf->leader_name));
|
||||||
return outapp;
|
return outapp;
|
||||||
}
|
}
|
||||||
@ -1521,7 +1521,7 @@ void Expedition::SendWorldMemberChanged(const std::string& char_name, uint32_t c
|
|||||||
worldserver.SendPacket(pack.get());
|
worldserver.SendPacket(pack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Expedition::SendWorldMemberStatus(uint32_t character_id, ExpeditionMemberStatus status)
|
void Expedition::SendWorldMemberStatus(uint32_t character_id, DynamicZoneMemberStatus status)
|
||||||
{
|
{
|
||||||
uint32_t pack_size = sizeof(ServerExpeditionMemberStatus_Struct);
|
uint32_t pack_size = sizeof(ServerExpeditionMemberStatus_Struct);
|
||||||
auto pack = std::make_unique<ServerPacket>(ServerOP_ExpeditionMemberStatus, pack_size);
|
auto pack = std::make_unique<ServerPacket>(ServerOP_ExpeditionMemberStatus, pack_size);
|
||||||
@ -1794,7 +1794,7 @@ void Expedition::HandleWorldMessage(ServerPacket* pack)
|
|||||||
auto expedition = Expedition::FindCachedExpeditionByID(buf->expedition_id);
|
auto expedition = Expedition::FindCachedExpeditionByID(buf->expedition_id);
|
||||||
if (expedition)
|
if (expedition)
|
||||||
{
|
{
|
||||||
expedition->UpdateMemberStatus(buf->character_id, static_cast<ExpeditionMemberStatus>(buf->status));
|
expedition->UpdateMemberStatus(buf->character_id, static_cast<DynamicZoneMemberStatus>(buf->status));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1836,10 +1836,10 @@ void Expedition::HandleWorldMessage(ServerPacket* pack)
|
|||||||
if (expedition)
|
if (expedition)
|
||||||
{
|
{
|
||||||
auto is_online = member->character_online;
|
auto is_online = member->character_online;
|
||||||
auto status = is_online ? ExpeditionMemberStatus::Online : ExpeditionMemberStatus::Offline;
|
auto status = is_online ? DynamicZoneMemberStatus::Online : DynamicZoneMemberStatus::Offline;
|
||||||
if (is_online && expedition->GetDynamicZone().IsInstanceID(member->character_instance_id))
|
if (is_online && expedition->GetDynamicZone().IsInstanceID(member->character_instance_id))
|
||||||
{
|
{
|
||||||
status = ExpeditionMemberStatus::InDynamicZone;
|
status = DynamicZoneMemberStatus::InDynamicZone;
|
||||||
}
|
}
|
||||||
expedition->UpdateMemberStatus(member->character_id, status);
|
expedition->UpdateMemberStatus(member->character_id, status);
|
||||||
}
|
}
|
||||||
@ -1922,7 +1922,7 @@ void Expedition::SendCompassUpdateToZoneMembers()
|
|||||||
{
|
{
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
member_client->SendDzCompassUpdate();
|
member_client->SendDzCompassUpdate();
|
||||||
@ -2036,7 +2036,7 @@ void Expedition::SendMembersExpireWarning(uint32_t minutes_remaining)
|
|||||||
auto outapp = CreateExpireWarningPacket(minutes_remaining);
|
auto outapp = CreateExpireWarningPacket(minutes_remaining);
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
Client* member_client = entity_list.GetClientByCharID(member.char_id);
|
Client* member_client = entity_list.GetClientByCharID(member.id);
|
||||||
if (member_client)
|
if (member_client)
|
||||||
{
|
{
|
||||||
member_client->QueuePacket(outapp.get());
|
member_client->QueuePacket(outapp.get());
|
||||||
|
|||||||
@ -52,7 +52,7 @@ class Expedition : public ExpeditionBase
|
|||||||
public:
|
public:
|
||||||
Expedition() = default;
|
Expedition() = default;
|
||||||
Expedition(uint32_t id, const std::string& uuid, DynamicZone&& dz, const std::string& expedition_name,
|
Expedition(uint32_t id, const std::string& uuid, DynamicZone&& dz, const std::string& expedition_name,
|
||||||
const ExpeditionMember& leader, uint32_t min_players, uint32_t max_players);
|
const DynamicZoneMember& leader, uint32_t min_players, uint32_t max_players);
|
||||||
|
|
||||||
static Expedition* TryCreate(Client* requester, DynamicZone& dynamiczone, ExpeditionRequest& request);
|
static Expedition* TryCreate(Client* requester, DynamicZone& dynamiczone, ExpeditionRequest& request);
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ public:
|
|||||||
bool AddMember(const std::string& add_char_name, uint32_t add_char_id);
|
bool AddMember(const std::string& add_char_name, uint32_t add_char_id);
|
||||||
void RemoveAllMembers(bool enable_removal_timers = true);
|
void RemoveAllMembers(bool enable_removal_timers = true);
|
||||||
bool RemoveMember(const std::string& remove_char_name);
|
bool RemoveMember(const std::string& remove_char_name);
|
||||||
void SetMemberStatus(Client* client, ExpeditionMemberStatus status);
|
void SetMemberStatus(Client* client, DynamicZoneMemberStatus status);
|
||||||
void SwapMember(Client* add_client, const std::string& remove_char_name);
|
void SwapMember(Client* add_client, const std::string& remove_char_name);
|
||||||
|
|
||||||
bool IsLocked() const { return m_is_locked; }
|
bool IsLocked() const { return m_is_locked; }
|
||||||
@ -160,21 +160,21 @@ private:
|
|||||||
void SendWorldLockoutUpdate(
|
void SendWorldLockoutUpdate(
|
||||||
const ExpeditionLockoutTimer& lockout, bool remove, bool members_only = false);
|
const ExpeditionLockoutTimer& lockout, bool remove, bool members_only = false);
|
||||||
void SendWorldMemberChanged(const std::string& char_name, uint32_t char_id, bool remove);
|
void SendWorldMemberChanged(const std::string& char_name, uint32_t char_id, bool remove);
|
||||||
void SendWorldMemberStatus(uint32_t character_id, ExpeditionMemberStatus status);
|
void SendWorldMemberStatus(uint32_t character_id, DynamicZoneMemberStatus status);
|
||||||
void SendWorldMemberSwapped(const std::string& remove_char_name, uint32_t remove_char_id,
|
void SendWorldMemberSwapped(const std::string& remove_char_name, uint32_t remove_char_id,
|
||||||
const std::string& add_char_name, uint32_t add_char_id);
|
const std::string& add_char_name, uint32_t add_char_id);
|
||||||
void SendWorldSettingChanged(uint16_t server_opcode, bool setting_value);
|
void SendWorldSettingChanged(uint16_t server_opcode, bool setting_value);
|
||||||
void SetDynamicZone(DynamicZone&& dz);
|
void SetDynamicZone(DynamicZone&& dz);
|
||||||
void TryAddClient(Client* add_client, const std::string& inviter_name,
|
void TryAddClient(Client* add_client, const std::string& inviter_name,
|
||||||
const std::string& swap_remove_name, Client* leader_client = nullptr);
|
const std::string& swap_remove_name, Client* leader_client = nullptr);
|
||||||
void UpdateMemberStatus(uint32_t update_character_id, ExpeditionMemberStatus status);
|
void UpdateMemberStatus(uint32_t update_character_id, DynamicZoneMemberStatus status);
|
||||||
|
|
||||||
std::unique_ptr<EQApplicationPacket> CreateExpireWarningPacket(uint32_t minutes_remaining);
|
std::unique_ptr<EQApplicationPacket> CreateExpireWarningPacket(uint32_t minutes_remaining);
|
||||||
std::unique_ptr<EQApplicationPacket> CreateInfoPacket(bool clear = false);
|
std::unique_ptr<EQApplicationPacket> CreateInfoPacket(bool clear = false);
|
||||||
std::unique_ptr<EQApplicationPacket> CreateInvitePacket(const std::string& inviter_name, const std::string& swap_remove_name);
|
std::unique_ptr<EQApplicationPacket> CreateInvitePacket(const std::string& inviter_name, const std::string& swap_remove_name);
|
||||||
std::unique_ptr<EQApplicationPacket> CreateMemberListPacket(bool clear = false);
|
std::unique_ptr<EQApplicationPacket> CreateMemberListPacket(bool clear = false);
|
||||||
std::unique_ptr<EQApplicationPacket> CreateMemberListNamePacket(const std::string& name, bool remove_name);
|
std::unique_ptr<EQApplicationPacket> CreateMemberListNamePacket(const std::string& name, bool remove_name);
|
||||||
std::unique_ptr<EQApplicationPacket> CreateMemberListStatusPacket(const std::string& name, ExpeditionMemberStatus status);
|
std::unique_ptr<EQApplicationPacket> CreateMemberListStatusPacket(const std::string& name, DynamicZoneMemberStatus status);
|
||||||
std::unique_ptr<EQApplicationPacket> CreateLeaderNamePacket();
|
std::unique_ptr<EQApplicationPacket> CreateLeaderNamePacket();
|
||||||
|
|
||||||
DynamicZone m_dynamiczone { DynamicZoneType::Expedition };
|
DynamicZone m_dynamiczone { DynamicZoneType::Expedition };
|
||||||
|
|||||||
@ -174,7 +174,7 @@ void ExpeditionDatabase::DeleteCharacterLockout(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ExpeditionDatabase::DeleteMembersLockout(
|
void ExpeditionDatabase::DeleteMembersLockout(
|
||||||
const std::vector<ExpeditionMember>& members,
|
const std::vector<DynamicZoneMember>& members,
|
||||||
const std::string& expedition_name, const std::string& event_name)
|
const std::string& expedition_name, const std::string& event_name)
|
||||||
{
|
{
|
||||||
LogExpeditionsDetail("Deleting members lockout: [{}]:[{}]", expedition_name, event_name);
|
LogExpeditionsDetail("Deleting members lockout: [{}]:[{}]", expedition_name, event_name);
|
||||||
@ -182,7 +182,7 @@ void ExpeditionDatabase::DeleteMembersLockout(
|
|||||||
std::string query_character_ids;
|
std::string query_character_ids;
|
||||||
for (const auto& member : members)
|
for (const auto& member : members)
|
||||||
{
|
{
|
||||||
fmt::format_to(std::back_inserter(query_character_ids), "{},", member.char_id);
|
fmt::format_to(std::back_inserter(query_character_ids), "{},", member.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!query_character_ids.empty())
|
if (!query_character_ids.empty())
|
||||||
@ -312,7 +312,7 @@ void ExpeditionDatabase::InsertCharacterLockouts(uint32_t character_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ExpeditionDatabase::InsertMembersLockout(
|
void ExpeditionDatabase::InsertMembersLockout(
|
||||||
const std::vector<ExpeditionMember>& members, const ExpeditionLockoutTimer& lockout)
|
const std::vector<DynamicZoneMember>& members, const ExpeditionLockoutTimer& lockout)
|
||||||
{
|
{
|
||||||
LogExpeditionsDetail(
|
LogExpeditionsDetail(
|
||||||
"Inserting members lockout [{}]:[{}] with expire time [{}]",
|
"Inserting members lockout [{}]:[{}] with expire time [{}]",
|
||||||
@ -324,7 +324,7 @@ void ExpeditionDatabase::InsertMembersLockout(
|
|||||||
{
|
{
|
||||||
fmt::format_to(std::back_inserter(insert_values),
|
fmt::format_to(std::back_inserter(insert_values),
|
||||||
"({}, FROM_UNIXTIME({}), {}, '{}', '{}', '{}'),",
|
"({}, FROM_UNIXTIME({}), {}, '{}', '{}', '{}'),",
|
||||||
member.char_id,
|
member.id,
|
||||||
lockout.GetExpireTime(),
|
lockout.GetExpireTime(),
|
||||||
lockout.GetDuration(),
|
lockout.GetDuration(),
|
||||||
lockout.GetExpeditionUUID(),
|
lockout.GetExpeditionUUID(),
|
||||||
@ -431,7 +431,7 @@ void ExpeditionDatabase::InsertMember(uint32_t expedition_id, uint32_t character
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ExpeditionDatabase::InsertMembers(
|
void ExpeditionDatabase::InsertMembers(
|
||||||
uint32_t expedition_id, const std::vector<ExpeditionMember>& members)
|
uint32_t expedition_id, const std::vector<DynamicZoneMember>& members)
|
||||||
{
|
{
|
||||||
LogExpeditionsDetail("Inserting characters into expedition [{}]", expedition_id);
|
LogExpeditionsDetail("Inserting characters into expedition [{}]", expedition_id);
|
||||||
|
|
||||||
@ -440,7 +440,7 @@ void ExpeditionDatabase::InsertMembers(
|
|||||||
{
|
{
|
||||||
fmt::format_to(std::back_inserter(insert_values),
|
fmt::format_to(std::back_inserter(insert_values),
|
||||||
"({}, {}),",
|
"({}, {}),",
|
||||||
expedition_id, member.char_id
|
expedition_id, member.id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -504,7 +504,7 @@ void ExpeditionDatabase::UpdateReplayLockoutOnJoin(uint32_t expedition_id, bool
|
|||||||
database.QueryDatabase(query);
|
database.QueryDatabase(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExpeditionDatabase::AddLockoutDuration(const std::vector<ExpeditionMember>& members,
|
void ExpeditionDatabase::AddLockoutDuration(const std::vector<DynamicZoneMember>& members,
|
||||||
const ExpeditionLockoutTimer& lockout, int seconds)
|
const ExpeditionLockoutTimer& lockout, int seconds)
|
||||||
{
|
{
|
||||||
LogExpeditionsDetail(
|
LogExpeditionsDetail(
|
||||||
@ -516,7 +516,7 @@ void ExpeditionDatabase::AddLockoutDuration(const std::vector<ExpeditionMember>&
|
|||||||
{
|
{
|
||||||
fmt::format_to(std::back_inserter(insert_values),
|
fmt::format_to(std::back_inserter(insert_values),
|
||||||
"({}, FROM_UNIXTIME({}), {}, '{}', '{}', '{}'),",
|
"({}, FROM_UNIXTIME({}), {}, '{}', '{}', '{}'),",
|
||||||
member.char_id,
|
member.id,
|
||||||
lockout.GetExpireTime(),
|
lockout.GetExpireTime(),
|
||||||
lockout.GetDuration(),
|
lockout.GetDuration(),
|
||||||
lockout.GetExpeditionUUID(),
|
lockout.GetExpeditionUUID(),
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
class Expedition;
|
class Expedition;
|
||||||
class ExpeditionLockoutTimer;
|
class ExpeditionLockoutTimer;
|
||||||
struct ExpeditionMember;
|
struct DynamicZoneMember;
|
||||||
class MySQLRequestResult;
|
class MySQLRequestResult;
|
||||||
|
|
||||||
namespace ExpeditionDatabase
|
namespace ExpeditionDatabase
|
||||||
@ -48,23 +48,23 @@ namespace ExpeditionDatabase
|
|||||||
void DeleteCharacterLockout(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);
|
const std::string& event_name);
|
||||||
void DeleteLockout(uint32_t expedition_id, const std::string& event_name);
|
void DeleteLockout(uint32_t expedition_id, const std::string& event_name);
|
||||||
void DeleteMembersLockout(const std::vector<ExpeditionMember>& members,
|
void DeleteMembersLockout(const std::vector<DynamicZoneMember>& members,
|
||||||
const std::string& expedition_name, const std::string& event_name);
|
const std::string& expedition_name, const std::string& event_name);
|
||||||
uint32_t GetExpeditionIDFromCharacterID(uint32_t character_id);
|
uint32_t GetExpeditionIDFromCharacterID(uint32_t character_id);
|
||||||
uint32_t GetMemberCount(uint32_t expedition_id);
|
uint32_t GetMemberCount(uint32_t expedition_id);
|
||||||
bool HasMember(uint32_t expedition_id, uint32_t character_id);
|
bool HasMember(uint32_t expedition_id, uint32_t character_id);
|
||||||
void InsertCharacterLockouts(uint32_t character_id,
|
void InsertCharacterLockouts(uint32_t character_id,
|
||||||
const std::vector<ExpeditionLockoutTimer>& lockouts);
|
const std::vector<ExpeditionLockoutTimer>& lockouts);
|
||||||
void InsertMembersLockout(const std::vector<ExpeditionMember>& members,
|
void InsertMembersLockout(const std::vector<DynamicZoneMember>& members,
|
||||||
const ExpeditionLockoutTimer& lockout);
|
const ExpeditionLockoutTimer& lockout);
|
||||||
void InsertLockout(uint32_t expedition_id, const ExpeditionLockoutTimer& lockout);
|
void InsertLockout(uint32_t expedition_id, const ExpeditionLockoutTimer& lockout);
|
||||||
void InsertLockouts(uint32_t expedition_id,
|
void InsertLockouts(uint32_t expedition_id,
|
||||||
const std::unordered_map<std::string, ExpeditionLockoutTimer>& lockouts);
|
const std::unordered_map<std::string, ExpeditionLockoutTimer>& lockouts);
|
||||||
void InsertMember(uint32_t expedition_id, uint32_t character_id);
|
void InsertMember(uint32_t expedition_id, uint32_t character_id);
|
||||||
void InsertMembers(uint32_t expedition_id, const std::vector<ExpeditionMember>& members);
|
void InsertMembers(uint32_t expedition_id, const std::vector<DynamicZoneMember>& members);
|
||||||
void UpdateLockState(uint32_t expedition_id, bool is_locked);
|
void UpdateLockState(uint32_t expedition_id, bool is_locked);
|
||||||
void UpdateReplayLockoutOnJoin(uint32_t expedition_id, bool add_on_join);
|
void UpdateReplayLockoutOnJoin(uint32_t expedition_id, bool add_on_join);
|
||||||
void AddLockoutDuration(const std::vector<ExpeditionMember>& members,
|
void AddLockoutDuration(const std::vector<DynamicZoneMember>& members,
|
||||||
const ExpeditionLockoutTimer& lockout, int seconds);
|
const ExpeditionLockoutTimer& lockout, int seconds);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -221,7 +221,7 @@ bool ExpeditionRequest::CheckMembersForConflicts(const std::vector<std::string>&
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_members.emplace_back(character.id, character.name, ExpeditionMemberStatus::Online);
|
m_members.emplace_back(character.id, character.name, DynamicZoneMemberStatus::Online);
|
||||||
character_ids.emplace_back(character.id);
|
character_ids.emplace_back(character.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ public:
|
|||||||
const std::string& GetNotAllAddedMessage() const { return m_not_all_added_msg; }
|
const std::string& GetNotAllAddedMessage() const { return m_not_all_added_msg; }
|
||||||
uint32_t GetMinPlayers() const { return m_min_players; }
|
uint32_t GetMinPlayers() const { return m_min_players; }
|
||||||
uint32_t GetMaxPlayers() const { return m_max_players; }
|
uint32_t GetMaxPlayers() const { return m_max_players; }
|
||||||
std::vector<ExpeditionMember> GetMembers() const { return m_members; }
|
std::vector<DynamicZoneMember> GetMembers() const { return m_members; }
|
||||||
std::unordered_map<std::string, ExpeditionLockoutTimer> GetLockouts() const { return m_lockouts; }
|
std::unordered_map<std::string, ExpeditionLockoutTimer> GetLockouts() const { return m_lockouts; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -72,7 +72,7 @@ private:
|
|||||||
std::string m_expedition_name;
|
std::string m_expedition_name;
|
||||||
std::string m_leader_name;
|
std::string m_leader_name;
|
||||||
std::string m_not_all_added_msg;
|
std::string m_not_all_added_msg;
|
||||||
std::vector<ExpeditionMember> m_members;
|
std::vector<DynamicZoneMember> m_members;
|
||||||
std::unordered_map<std::string, ExpeditionLockoutTimer> m_lockouts;
|
std::unordered_map<std::string, ExpeditionLockoutTimer> m_lockouts;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -115,7 +115,7 @@ luabind::object Lua_Expedition::GetMembers(lua_State* L) {
|
|||||||
auto self = reinterpret_cast<NativeType*>(d_);
|
auto self = reinterpret_cast<NativeType*>(d_);
|
||||||
for (const auto& member : self->GetMembers())
|
for (const auto& member : self->GetMembers())
|
||||||
{
|
{
|
||||||
lua_table[member.name] = member.char_id;
|
lua_table[member.name] = member.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lua_table;
|
return lua_table;
|
||||||
|
|||||||
@ -266,7 +266,7 @@ XS(XS_Expedition_GetMembers) {
|
|||||||
for (const auto& member : members)
|
for (const auto& member : members)
|
||||||
{
|
{
|
||||||
hv_store(hash, member.name.c_str(), static_cast<uint32_t>(member.name.size()),
|
hv_store(hash, member.name.c_str(), static_cast<uint32_t>(member.name.size()),
|
||||||
newSVuv(member.char_id), 0);
|
newSVuv(member.id), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ST(0) = sv_2mortal(newRV_noinc((SV*)hash));
|
ST(0) = sv_2mortal(newRV_noinc((SV*)hash));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user