[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:
hg 2021-04-27 19:53:56 -04:00 committed by GitHub
parent 4358e24dab
commit abf73947f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 267 additions and 266 deletions

View File

@ -13,6 +13,21 @@
class Database;
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
{
uint32_t zone_id = 0;

View File

@ -474,7 +474,7 @@ enum class DynamicZoneType
Quest
};
enum class ExpeditionMemberStatus : uint8_t
enum class DynamicZoneMemberStatus : uint8_t
{
Unknown = 0,
Online,

View File

@ -4861,30 +4861,31 @@ struct ExpeditionInviteResponse_Struct
/*079*/ uint8 unknown079; // padding garbage?
};
struct ExpeditionInfo_Struct
struct DynamicZoneInfo_Struct
{
/*000*/ uint32 client_id;
/*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;
/*016*/ char expedition_name[128];
/*016*/ char dz_name[128];
/*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)
/*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;
/*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;
/*004*/ uint32 unknown004;
@ -4907,7 +4908,7 @@ struct ExpeditionLockoutTimers_Struct
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
};
struct ExpeditionSetLeaderName_Struct
struct DynamicZoneLeaderName_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;

View File

@ -2,7 +2,7 @@
#include "repositories/expeditions_repository.h"
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
) :
m_id(id),
@ -23,20 +23,20 @@ void ExpeditionBase::LoadRepositoryResult(ExpeditionsRepository::ExpeditionWithL
m_max_players = entry.max_players;
m_add_replay_on_join = entry.add_replay_on_join;
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);
}
void ExpeditionBase::AddMemberFromRepositoryResult(
ExpeditionMembersRepository::MemberWithName&& entry)
{
auto status = ExpeditionMemberStatus::Unknown;
auto status = DynamicZoneMemberStatus::Unknown;
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);
}
@ -45,32 +45,32 @@ void ExpeditionBase::AddInternalMember(const ExpeditionMember& member)
void ExpeditionBase::RemoveInternalMember(uint32_t character_id)
{
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());
}
bool ExpeditionBase::HasMember(uint32_t character_id)
{
return std::any_of(m_members.begin(), m_members.end(), [&](const ExpeditionMember& member) {
return member.char_id == character_id;
return std::any_of(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
return member.id == character_id;
});
}
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);
});
}
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) {
return member.char_id == character_id;
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
return member.id == character_id;
});
ExpeditionMember member_data;
DynamicZoneMember member_data;
if (it != m_members.end())
{
member_data = *it;
@ -78,13 +78,13 @@ ExpeditionMember ExpeditionBase::GetMemberData(uint32_t character_id)
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);
});
ExpeditionMember member_data;
DynamicZoneMember member_data;
if (it != m_members.end())
{
member_data = *it;

View File

@ -1,28 +1,13 @@
#ifndef 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/expedition_members_repository.h"
#include <cstdint>
#include <string>
#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
{
public:
@ -33,16 +18,16 @@ public:
ExpeditionBase& operator=(ExpeditionBase&&) = default;
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 GetMaxPlayers() const { return m_max_players; }
uint32_t GetMemberCount() const { return static_cast<uint32_t>(m_members.size()); }
const std::string& GetName() const { return m_expedition_name; }
const std::string& GetLeaderName() const { return m_leader.name; }
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(); }
bool HasMember(const std::string& character_name);
bool HasMember(uint32_t character_id);
@ -55,10 +40,10 @@ public:
protected:
ExpeditionBase() = default;
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);
ExpeditionMember GetMemberData(const std::string& character_name);
DynamicZoneMember GetMemberData(uint32_t character_id);
DynamicZoneMember GetMemberData(const std::string& character_name);
uint32_t m_id = 0;
uint32_t m_min_players = 0;
@ -67,8 +52,8 @@ protected:
bool m_add_replay_on_join = true;
std::string m_uuid;
std::string m_expedition_name;
ExpeditionMember m_leader;
std::vector<ExpeditionMember> m_members;
DynamicZoneMember m_leader;
std::vector<DynamicZoneMember> m_members;
};
#endif

View File

@ -772,13 +772,13 @@ namespace RoF
ENCODE(OP_DzExpeditionInfo)
{
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
OUT(client_id);
OUT(assigned);
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));
FINISH_ENCODE();
@ -824,8 +824,8 @@ namespace RoF
ENCODE(OP_DzSetLeaderName)
{
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
OUT(client_id);
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
@ -835,7 +835,7 @@ namespace RoF
ENCODE(OP_DzMemberList)
{
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
SerializeBuffer buf;
buf.WriteUInt32(emu->client_id);
@ -843,7 +843,7 @@ namespace RoF
for (uint32 i = 0; i < emu->member_count; ++i)
{
buf.WriteString(emu->members[i].name);
buf.WriteUInt8(emu->members[i].expedition_status);
buf.WriteUInt8(emu->members[i].online_status);
}
__packet->size = buf.size();
@ -855,8 +855,8 @@ namespace RoF
ENCODE(OP_DzMemberListName)
{
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
OUT(client_id);
OUT(add_name);
@ -867,7 +867,7 @@ namespace RoF
ENCODE(OP_DzMemberListStatus)
{
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
if (emu->member_count == 1)
{
ENCODE_FORWARD(OP_DzMemberList);

View File

@ -821,13 +821,13 @@ namespace RoF2
ENCODE(OP_DzExpeditionInfo)
{
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
OUT(client_id);
OUT(assigned);
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));
FINISH_ENCODE();
@ -873,8 +873,8 @@ namespace RoF2
ENCODE(OP_DzSetLeaderName)
{
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
OUT(client_id);
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
@ -884,7 +884,7 @@ namespace RoF2
ENCODE(OP_DzMemberList)
{
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
SerializeBuffer buf;
buf.WriteUInt32(emu->client_id);
@ -892,7 +892,7 @@ namespace RoF2
for (uint32 i = 0; i < emu->member_count; ++i)
{
buf.WriteString(emu->members[i].name);
buf.WriteUInt8(emu->members[i].expedition_status);
buf.WriteUInt8(emu->members[i].online_status);
}
__packet->size = buf.size();
@ -904,8 +904,8 @@ namespace RoF2
ENCODE(OP_DzMemberListName)
{
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
OUT(client_id);
OUT(add_name);
@ -916,7 +916,7 @@ namespace RoF2
ENCODE(OP_DzMemberListStatus)
{
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
if (emu->member_count == 1)
{
ENCODE_FORWARD(OP_DzMemberList);

View File

@ -4908,31 +4908,31 @@ struct ExpeditionInviteResponse_Struct
/*079*/ uint8 unknown079; // padding garbage?
};
struct ExpeditionInfo_Struct
struct DynamicZoneInfo_Struct
{
/*000*/ uint32 client_id;
/*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;
/*016*/ char expedition_name[128];
/*016*/ char dz_name[128];
/*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*/ 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;
/*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;
/*004*/ uint32 unknown004;
@ -4955,7 +4955,7 @@ struct ExpeditionLockoutTimers_Struct
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
};
struct ExpeditionSetLeaderName_Struct
struct DynamicZoneLeaderName_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;

View File

@ -4841,30 +4841,30 @@ struct ExpeditionInviteResponse_Struct
/*079*/ uint8 unknown079; // padding garbage?
};
struct ExpeditionInfo_Struct
struct DynamicZoneInfo_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;
/*008*/ uint32 assigned; // padded bool
/*012*/ uint32 max_players;
/*016*/ char expedition_name[128];
/*016*/ char dz_name[128];
/*144*/ char leader_name[64];
};
struct ExpeditionMemberEntry_Struct
struct DynamicZoneMemberEntry_Struct
{
/*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;
/*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;
/*004*/ uint32 unknown004;
@ -4887,7 +4887,7 @@ struct ExpeditionLockoutTimers_Struct
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
};
struct ExpeditionSetLeaderName_Struct
struct DynamicZoneLeaderName_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;

View File

@ -545,13 +545,13 @@ namespace SoD
ENCODE(OP_DzExpeditionInfo)
{
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
OUT(client_id);
OUT(assigned);
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));
FINISH_ENCODE();
@ -597,8 +597,8 @@ namespace SoD
ENCODE(OP_DzSetLeaderName)
{
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
OUT(client_id);
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
@ -608,7 +608,7 @@ namespace SoD
ENCODE(OP_DzMemberList)
{
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
SerializeBuffer buf;
buf.WriteUInt32(emu->client_id);
@ -616,7 +616,7 @@ namespace SoD
for (uint32 i = 0; i < emu->member_count; ++i)
{
buf.WriteString(emu->members[i].name);
buf.WriteUInt8(emu->members[i].expedition_status);
buf.WriteUInt8(emu->members[i].online_status);
}
__packet->size = buf.size();
@ -628,8 +628,8 @@ namespace SoD
ENCODE(OP_DzMemberListName)
{
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
OUT(client_id);
OUT(add_name);
@ -640,7 +640,7 @@ namespace SoD
ENCODE(OP_DzMemberListStatus)
{
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
if (emu->member_count == 1)
{
ENCODE_FORWARD(OP_DzMemberList);

View File

@ -4196,30 +4196,30 @@ struct ExpeditionInviteResponse_Struct
/*079*/ uint8 unknown079; // padding garbage?
};
struct ExpeditionInfo_Struct
struct DynamicZoneInfo_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;
/*008*/ uint32 assigned; // padded bool
/*012*/ uint32 max_players;
/*016*/ char expedition_name[128];
/*016*/ char dz_name[128];
/*144*/ char leader_name[64];
};
struct ExpeditionMemberEntry_Struct
struct DynamicZoneMemberEntry_Struct
{
/*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;
/*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;
/*004*/ uint32 unknown004;
@ -4242,7 +4242,7 @@ struct ExpeditionLockoutTimers_Struct
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
};
struct ExpeditionSetLeaderName_Struct
struct DynamicZoneLeaderName_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;

View File

@ -533,13 +533,13 @@ namespace SoF
ENCODE(OP_DzExpeditionInfo)
{
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
OUT(client_id);
OUT(assigned);
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));
FINISH_ENCODE();
@ -585,8 +585,8 @@ namespace SoF
ENCODE(OP_DzSetLeaderName)
{
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
OUT(client_id);
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
@ -596,7 +596,7 @@ namespace SoF
ENCODE(OP_DzMemberList)
{
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
SerializeBuffer buf;
buf.WriteUInt32(emu->client_id);
@ -604,7 +604,7 @@ namespace SoF
for (uint32 i = 0; i < emu->member_count; ++i)
{
buf.WriteString(emu->members[i].name);
buf.WriteUInt8(emu->members[i].expedition_status);
buf.WriteUInt8(emu->members[i].online_status);
}
__packet->size = buf.size();
@ -616,8 +616,8 @@ namespace SoF
ENCODE(OP_DzMemberListName)
{
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
OUT(client_id);
OUT(add_name);
@ -628,7 +628,7 @@ namespace SoF
ENCODE(OP_DzMemberListStatus)
{
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
if (emu->member_count == 1)
{
ENCODE_FORWARD(OP_DzMemberList);

View File

@ -4112,29 +4112,29 @@ struct ExpeditionInviteResponse_Struct
/*075*/ uint8 unknown079; // padding/garbage?
};
struct ExpeditionInfo_Struct
struct DynamicZoneInfo_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 assigned; // padded bool
/*008*/ uint32 max_players;
/*012*/ char expedition_name[128];
/*012*/ char dz_name[128];
/*140*/ char leader_name[64];
};
struct ExpeditionMemberEntry_Struct
struct DynamicZoneMemberEntry_Struct
{
/*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;
/*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;
/*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];
};
struct ExpeditionSetLeaderName_Struct
struct DynamicZoneLeaderName_Struct
{
/*000*/ uint32 client_id;
/*004*/ char leader_name[64];

View File

@ -476,13 +476,13 @@ namespace Titanium
ENCODE(OP_DzExpeditionInfo)
{
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
OUT(client_id);
OUT(assigned);
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));
FINISH_ENCODE();
@ -528,8 +528,8 @@ namespace Titanium
ENCODE(OP_DzSetLeaderName)
{
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
OUT(client_id);
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
@ -539,7 +539,7 @@ namespace Titanium
ENCODE(OP_DzMemberList)
{
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
SerializeBuffer buf;
buf.WriteUInt32(emu->client_id);
@ -547,7 +547,7 @@ namespace Titanium
for (uint32 i = 0; i < emu->member_count; ++i)
{
buf.WriteString(emu->members[i].name);
buf.WriteUInt8(emu->members[i].expedition_status);
buf.WriteUInt8(emu->members[i].online_status);
}
__packet->size = buf.size();
@ -559,8 +559,8 @@ namespace Titanium
ENCODE(OP_DzMemberListName)
{
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
OUT(client_id);
OUT(add_name);
@ -571,7 +571,7 @@ namespace Titanium
ENCODE(OP_DzMemberListStatus)
{
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
if (emu->member_count == 1)
{
ENCODE_FORWARD(OP_DzMemberList);

View File

@ -3323,29 +3323,29 @@ struct ExpeditionInviteResponse_Struct
/*075*/ uint8 unknown079; // padding/garbage?
};
struct ExpeditionInfo_Struct
struct DynamicZoneInfo_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 assigned; // padded bool
/*008*/ uint32 max_players;
/*012*/ char expedition_name[128];
/*012*/ char dz_name[128];
/*140*/ char leader_name[64];
};
struct ExpeditionMemberEntry_Struct
struct DynamicZoneMemberEntry_Struct
{
/*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;
/*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;
/*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];
};
struct ExpeditionSetLeaderName_Struct
struct DynamicZoneLeaderName_Struct
{
/*000*/ uint32 client_id;
/*004*/ char leader_name[64];

View File

@ -675,13 +675,13 @@ namespace UF
ENCODE(OP_DzExpeditionInfo)
{
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneInfo_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneInfo_Struct, structs::DynamicZoneInfo_Struct);
OUT(client_id);
OUT(assigned);
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));
FINISH_ENCODE();
@ -727,8 +727,8 @@ namespace UF
ENCODE(OP_DzSetLeaderName)
{
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneLeaderName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneLeaderName_Struct, structs::DynamicZoneLeaderName_Struct);
OUT(client_id);
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
@ -738,7 +738,7 @@ namespace UF
ENCODE(OP_DzMemberList)
{
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
SETUP_VAR_ENCODE(DynamicZoneMemberList_Struct);
SerializeBuffer buf;
buf.WriteUInt32(emu->client_id);
@ -746,7 +746,7 @@ namespace UF
for (uint32 i = 0; i < emu->member_count; ++i)
{
buf.WriteString(emu->members[i].name);
buf.WriteUInt8(emu->members[i].expedition_status);
buf.WriteUInt8(emu->members[i].online_status);
}
__packet->size = buf.size();
@ -758,8 +758,8 @@ namespace UF
ENCODE(OP_DzMemberListName)
{
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
ENCODE_LENGTH_EXACT(DynamicZoneMemberListName_Struct);
SETUP_DIRECT_ENCODE(DynamicZoneMemberListName_Struct, structs::DynamicZoneMemberListName_Struct);
OUT(client_id);
OUT(add_name);
@ -770,7 +770,7 @@ namespace UF
ENCODE(OP_DzMemberListStatus)
{
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
auto emu = reinterpret_cast<DynamicZoneMemberList_Struct*>((*p)->pBuffer);
if (emu->member_count == 1)
{
ENCODE_FORWARD(OP_DzMemberList);

View File

@ -4277,30 +4277,30 @@ struct ExpeditionInviteResponse_Struct
/*079*/ uint8 unknown079; // padding garbage?
};
struct ExpeditionInfo_Struct
struct DynamicZoneInfo_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;
/*008*/ uint32 assigned; // padded bool
/*012*/ uint32 max_players;
/*016*/ char expedition_name[128];
/*016*/ char dz_name[128];
/*144*/ char leader_name[64];
};
struct ExpeditionMemberEntry_Struct
struct DynamicZoneMemberEntry_Struct
{
/*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;
/*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;
/*004*/ uint32 unknown004;
@ -4323,7 +4323,7 @@ struct ExpeditionLockoutTimers_Struct
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
};
struct ExpeditionSetLeaderName_Struct
struct DynamicZoneLeaderName_Struct
{
/*000*/ uint32 client_id;
/*004*/ uint32 unknown004;

View File

@ -48,7 +48,7 @@ void Expedition::RemoveMember(uint32_t character_id)
{
RemoveInternalMember(character_id);
if (character_id == m_leader.char_id)
if (character_id == m_leader.id)
{
ChooseNewLeader();
}
@ -64,9 +64,9 @@ void Expedition::ChooseNewLeader()
// 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
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const ExpeditionMember& member) {
if (member.char_id != m_leader.char_id) {
auto member_cle = client_list.FindCLEByCharacterID(member.char_id);
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
if (member.id != m_leader.id) {
auto member_cle = client_list.FindCLEByCharacterID(member.id);
return (member_cle && member_cle->GetOnline() == CLE_Status::InZone);
}
return false;
@ -76,7 +76,7 @@ void Expedition::ChooseNewLeader()
{
// no online members found, fallback to choosing any member
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))
@ -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;
}
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_dynamic_zone.SetLeaderName(m_leader.name);
SendZonesLeaderChanged();
@ -125,7 +125,7 @@ void Expedition::SendZonesLeaderChanged()
auto pack = std::make_unique<ServerPacket>(ServerOP_ExpeditionLeaderChanged, pack_size);
auto buf = reinterpret_cast<ServerExpeditionLeaderID_Struct*>(pack->pBuffer);
buf->expedition_id = GetID();
buf->leader_id = m_leader.char_id;
buf->leader_id = m_leader.id;
zoneserver_list.SendPacket(pack.get());
}

View File

@ -41,7 +41,7 @@ public:
void SendZonesExpeditionDeleted();
void SendZonesExpireWarning(uint32_t minutes_remaining);
void SetDynamicZone(DynamicZone&& dz);
bool SetNewLeader(const ExpeditionMember& member);
bool SetNewLeader(const DynamicZoneMember& member);
private:
void SendZonesLeaderChanged();

View File

@ -115,13 +115,13 @@ void ExpeditionState::CacheExpeditions(
}
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);
if (expedition)
{
if (remove) {
expedition->RemoveMember(member.char_id);
expedition->RemoveMember(member.id);
} else {
expedition->AddInternalMember(member);
}

View File

@ -30,7 +30,7 @@
extern class ExpeditionState expedition_state;
class Expedition;
struct ExpeditionMember;
struct DynamicZoneMember;
class ExpeditionState
{
@ -40,7 +40,7 @@ public:
void CacheAllFromDatabase();
Expedition* GetExpedition(uint32_t expedition_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 RemoveAllMembers(uint32_t expedition_id);

View File

@ -3401,7 +3401,7 @@ void Client::LinkDead()
Expedition* expedition = GetExpedition();
if (expedition)
{
expedition->SetMemberStatus(this, ExpeditionMemberStatus::LinkDead);
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::LinkDead);
}
// save_timer.Start(2500);
@ -9550,11 +9550,11 @@ void Client::UpdateExpeditionInfoAndLockouts()
if (expedition->GetDynamicZone().IsCurrentZoneDzInstance())
{
expedition->SyncCharacterLockouts(CharacterID(), m_expedition_lockouts);
expedition->SetMemberStatus(this, ExpeditionMemberStatus::InDynamicZone);
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::InDynamicZone);
}
else
{
expedition->SetMemberStatus(this, ExpeditionMemberStatus::Online);
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::Online);
}
}

View File

@ -183,7 +183,7 @@ bool Client::Process() {
Expedition* expedition = GetExpedition();
if (expedition)
{
expedition->SetMemberStatus(this, ExpeditionMemberStatus::Offline);
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::Offline);
}
return false; //delete client
@ -578,7 +578,7 @@ bool Client::Process() {
Expedition* expedition = GetExpedition();
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();
if (expedition && !bZoning)
{
expedition->SetMemberStatus(this, ExpeditionMemberStatus::Offline);
expedition->SetMemberStatus(this, DynamicZoneMemberStatus::Offline);
}
RemoveAllAuras();

View File

@ -50,7 +50,7 @@ const int32_t Expedition::EVENT_TIMER_ID = 1;
Expedition::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
) : ExpeditionBase(id, uuid, expedition_name, leader, min_players, max_players)
{
SetDynamicZone(std::move(dz));
@ -109,7 +109,7 @@ Expedition* Expedition::TryCreate(
expedition_uuid,
std::move(dynamiczone),
request.GetExpeditionName(),
ExpeditionMember{ request.GetLeaderID(), request.GetLeaderName() },
DynamicZoneMember{ request.GetLeaderID(), request.GetLeaderName() },
request.GetMinPlayers(),
request.GetMaxPlayers()
);
@ -264,7 +264,7 @@ void Expedition::SaveMembers(ExpeditionRequest& request)
std::vector<uint32_t> member_ids;
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);
@ -484,11 +484,11 @@ bool Expedition::RemoveMember(const std::string& remove_char_name)
return false;
}
ExpeditionDatabase::DeleteMember(m_id, member.char_id);
m_dynamiczone.RemoveCharacter(member.char_id);
ExpeditionDatabase::DeleteMember(m_id, member.id);
m_dynamiczone.RemoveCharacter(member.id);
ProcessMemberRemoved(member.name, member.char_id);
SendWorldMemberChanged(member.name, member.char_id, true);
ProcessMemberRemoved(member.name, member.id);
SendWorldMemberChanged(member.name, member.id, 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
ExpeditionDatabase::DeleteMember(m_id, member.char_id);
ExpeditionDatabase::DeleteMember(m_id, member.id);
ExpeditionDatabase::InsertMember(m_id, add_client->CharacterID());
m_dynamiczone.RemoveCharacter(member.char_id);
m_dynamiczone.RemoveCharacter(member.id);
m_dynamiczone.AddCharacter(add_client->CharacterID());
ProcessMemberRemoved(member.name, member.char_id);
ProcessMemberRemoved(member.name, member.id);
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)
{
@ -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
// 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);
}
}
}
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);
if (!member_data.IsValid())
@ -541,12 +541,12 @@ void Expedition::UpdateMemberStatus(uint32_t update_member_id, ExpeditionMemberS
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;
}
@ -561,12 +561,12 @@ void Expedition::UpdateMemberStatus(uint32_t update_member_id, ExpeditionMemberS
for (auto& member : m_members)
{
if (member.char_id == update_member_id)
if (member.id == update_member_id)
{
member.status = status;
}
Client* member_client = entity_list.GetClientByCharID(member.char_id);
Client* member_client = entity_list.GetClientByCharID(member.id);
if (member_client)
{
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
// 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)
{
@ -756,7 +756,7 @@ void Expedition::DzInviteResponse(Client* add_client, bool accepted, const std::
if (was_swap_invite)
{
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;
}
@ -808,7 +808,7 @@ bool Expedition::ConfirmLeaderCommand(Client* requester)
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());
return false;
@ -877,7 +877,7 @@ void Expedition::DzAddPlayer(
if (member_data.IsValid())
{
// 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());
}
@ -1054,12 +1054,12 @@ void Expedition::ProcessLeaderChanged(uint32_t new_leader_id)
auto outapp_leader = CreateLeaderNamePacket();
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)
{
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);
}
@ -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)
{
// 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)
{
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);
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);
Client* member_client = entity_list.GetClientByCharID(it->char_id);
Client* member_client = entity_list.GetClientByCharID(it->id);
if (member_client)
{
// all members receive the removed player name packet
@ -1175,7 +1175,7 @@ void Expedition::ProcessLockoutDuration(
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)
{
member_client->AddExpeditionLockoutDuration(m_expedition_name,
@ -1192,7 +1192,7 @@ void Expedition::ProcessLockoutDuration(
void Expedition::AddLockoutDurationClients(
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())
{
Client* client = client_iter.second;
@ -1228,7 +1228,7 @@ void Expedition::ProcessLockoutUpdate(
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 (!remove)
@ -1254,7 +1254,7 @@ void Expedition::ProcessLockoutUpdate(
void Expedition::AddLockoutClients(
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())
{
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
{
Client* member_client = entity_list.GetClientByCharID(member.char_id);
Client* member_client = entity_list.GetClientByCharID(member.id);
if (member_client)
{
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)
{
Client* member_client = entity_list.GetClientByCharID(member.char_id);
Client* member_client = entity_list.GetClientByCharID(member.id);
if (member_client)
{
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)
{
uint32_t outsize = sizeof(ExpeditionInfo_Struct);
uint32_t outsize = sizeof(DynamicZoneInfo_Struct);
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)
{
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));
info->max_players = m_max_players;
}
@ -1380,10 +1380,10 @@ std::unique_ptr<EQApplicationPacket> Expedition::CreateInvitePacket(
std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListPacket(bool clear)
{
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 outsize = sizeof(ExpeditionMemberList_Struct) + member_entries_size;
uint32_t member_entries_size = sizeof(DynamicZoneMemberEntry_Struct) * member_count;
uint32_t outsize = sizeof(DynamicZoneMemberList_Struct) + member_entries_size;
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;
@ -1392,7 +1392,7 @@ std::unique_ptr<EQApplicationPacket> Expedition::CreateMemberListPacket(bool cle
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));
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(
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 buf = reinterpret_cast<ExpeditionMemberListName_Struct*>(outapp->pBuffer);
auto buf = reinterpret_cast<DynamicZoneMemberListName_Struct*>(outapp->pBuffer);
buf->add_name = !remove_name;
strn0cpy(buf->name, name.c_str(), sizeof(buf->name));
return outapp;
}
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
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 buf = reinterpret_cast<ExpeditionMemberList_Struct*>(outapp->pBuffer);
auto buf = reinterpret_cast<DynamicZoneMemberList_Struct*>(outapp->pBuffer);
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));
entry->expedition_status = static_cast<uint8_t>(status);
entry->online_status = static_cast<uint8_t>(status);
return outapp;
}
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 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));
return outapp;
}
@ -1521,7 +1521,7 @@ void Expedition::SendWorldMemberChanged(const std::string& char_name, uint32_t c
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);
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);
if (expedition)
{
expedition->UpdateMemberStatus(buf->character_id, static_cast<ExpeditionMemberStatus>(buf->status));
expedition->UpdateMemberStatus(buf->character_id, static_cast<DynamicZoneMemberStatus>(buf->status));
}
}
break;
@ -1836,10 +1836,10 @@ void Expedition::HandleWorldMessage(ServerPacket* pack)
if (expedition)
{
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))
{
status = ExpeditionMemberStatus::InDynamicZone;
status = DynamicZoneMemberStatus::InDynamicZone;
}
expedition->UpdateMemberStatus(member->character_id, status);
}
@ -1922,7 +1922,7 @@ void Expedition::SendCompassUpdateToZoneMembers()
{
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)
{
member_client->SendDzCompassUpdate();
@ -2036,7 +2036,7 @@ void Expedition::SendMembersExpireWarning(uint32_t minutes_remaining)
auto outapp = CreateExpireWarningPacket(minutes_remaining);
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)
{
member_client->QueuePacket(outapp.get());

View File

@ -52,7 +52,7 @@ class Expedition : public ExpeditionBase
public:
Expedition() = default;
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);
@ -85,7 +85,7 @@ public:
bool AddMember(const std::string& add_char_name, uint32_t add_char_id);
void RemoveAllMembers(bool enable_removal_timers = true);
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);
bool IsLocked() const { return m_is_locked; }
@ -160,21 +160,21 @@ private:
void SendWorldLockoutUpdate(
const ExpeditionLockoutTimer& lockout, bool remove, bool members_only = false);
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,
const std::string& add_char_name, uint32_t add_char_id);
void SendWorldSettingChanged(uint16_t server_opcode, bool setting_value);
void SetDynamicZone(DynamicZone&& dz);
void TryAddClient(Client* add_client, const std::string& inviter_name,
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> CreateInfoPacket(bool clear = false);
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> 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();
DynamicZone m_dynamiczone { DynamicZoneType::Expedition };

View File

@ -174,7 +174,7 @@ void ExpeditionDatabase::DeleteCharacterLockout(
}
void ExpeditionDatabase::DeleteMembersLockout(
const std::vector<ExpeditionMember>& members,
const std::vector<DynamicZoneMember>& members,
const std::string& expedition_name, const std::string& event_name)
{
LogExpeditionsDetail("Deleting members lockout: [{}]:[{}]", expedition_name, event_name);
@ -182,7 +182,7 @@ void ExpeditionDatabase::DeleteMembersLockout(
std::string query_character_ids;
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())
@ -312,7 +312,7 @@ void ExpeditionDatabase::InsertCharacterLockouts(uint32_t character_id,
}
void ExpeditionDatabase::InsertMembersLockout(
const std::vector<ExpeditionMember>& members, const ExpeditionLockoutTimer& lockout)
const std::vector<DynamicZoneMember>& members, const ExpeditionLockoutTimer& lockout)
{
LogExpeditionsDetail(
"Inserting members lockout [{}]:[{}] with expire time [{}]",
@ -324,7 +324,7 @@ void ExpeditionDatabase::InsertMembersLockout(
{
fmt::format_to(std::back_inserter(insert_values),
"({}, FROM_UNIXTIME({}), {}, '{}', '{}', '{}'),",
member.char_id,
member.id,
lockout.GetExpireTime(),
lockout.GetDuration(),
lockout.GetExpeditionUUID(),
@ -431,7 +431,7 @@ void ExpeditionDatabase::InsertMember(uint32_t expedition_id, uint32_t character
}
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);
@ -440,7 +440,7 @@ void ExpeditionDatabase::InsertMembers(
{
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);
}
void ExpeditionDatabase::AddLockoutDuration(const std::vector<ExpeditionMember>& members,
void ExpeditionDatabase::AddLockoutDuration(const std::vector<DynamicZoneMember>& members,
const ExpeditionLockoutTimer& lockout, int seconds)
{
LogExpeditionsDetail(
@ -516,7 +516,7 @@ void ExpeditionDatabase::AddLockoutDuration(const std::vector<ExpeditionMember>&
{
fmt::format_to(std::back_inserter(insert_values),
"({}, FROM_UNIXTIME({}), {}, '{}', '{}', '{}'),",
member.char_id,
member.id,
lockout.GetExpireTime(),
lockout.GetDuration(),
lockout.GetExpeditionUUID(),

View File

@ -30,7 +30,7 @@
class Expedition;
class ExpeditionLockoutTimer;
struct ExpeditionMember;
struct DynamicZoneMember;
class MySQLRequestResult;
namespace ExpeditionDatabase
@ -48,23 +48,23 @@ namespace ExpeditionDatabase
void DeleteCharacterLockout(uint32_t character_id, const std::string& expedition_name,
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);
uint32_t GetExpeditionIDFromCharacterID(uint32_t character_id);
uint32_t GetMemberCount(uint32_t expedition_id);
bool HasMember(uint32_t expedition_id, uint32_t character_id);
void InsertCharacterLockouts(uint32_t character_id,
const std::vector<ExpeditionLockoutTimer>& lockouts);
void InsertMembersLockout(const std::vector<ExpeditionMember>& members,
void InsertMembersLockout(const std::vector<DynamicZoneMember>& members,
const ExpeditionLockoutTimer& lockout);
void InsertLockout(uint32_t expedition_id, const ExpeditionLockoutTimer& lockout);
void InsertLockouts(uint32_t expedition_id,
const std::unordered_map<std::string, ExpeditionLockoutTimer>& lockouts);
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 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);
};

View File

@ -221,7 +221,7 @@ bool ExpeditionRequest::CheckMembersForConflicts(const std::vector<std::string>&
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);
}

View File

@ -47,7 +47,7 @@ public:
const std::string& GetNotAllAddedMessage() const { return m_not_all_added_msg; }
uint32_t GetMinPlayers() const { return m_min_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; }
private:
@ -72,7 +72,7 @@ private:
std::string m_expedition_name;
std::string m_leader_name;
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;
};

View File

@ -115,7 +115,7 @@ luabind::object Lua_Expedition::GetMembers(lua_State* L) {
auto self = reinterpret_cast<NativeType*>(d_);
for (const auto& member : self->GetMembers())
{
lua_table[member.name] = member.char_id;
lua_table[member.name] = member.id;
}
}
return lua_table;

View File

@ -266,7 +266,7 @@ XS(XS_Expedition_GetMembers) {
for (const auto& member : members)
{
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));