#include "Contents/ClientMessenger.h" #include "Contents/PartyMemberEffects.h" // OFFSET: 0x00DDFFE0 // FUNCTION: fn_23451 std::int32_t ClientMessenger::MemberColor(int index) { switch (index) { case 0: return -16108936; case 1: return -16746376; case 2: return -16777216; case 3: case 15: return -8912896; case 4: return -16746496; case 5: return -8882176; case 6: return -8912776; case 7: return -8900096; case 8: return -8882056; case 9: return -16777096; case 10: return -16764366; case 11: return -13500416; case 12: return -16764416; case 13: return -13487616; case 14: return -13500366; default: return -13487566; } } // OFFSET: 0x00DD6F10 // FUNCTION: fn_23281 void ClientMessenger::AddFriend(MessengerMember& member) { int index = 0; for (MessengerMember& existing : this->friends) { if (existing.name == member.name) { member.color = MemberColor(index); existing = member; } ++index; } // Original updates every name match, then still appends a new entry. member.color = MemberColor(index); this->friends.push_back(member); } // OFFSET: 0x00DD70B0 // FUNCTION: fn_23283 void ClientMessenger::AddPartyMember(MessengerMember& member, PartyMemberEffects& effects) { if (member.map.size() > 4) { member.map.resize(member.map.size() - 3); member.map.append("rsw", 3); } int index = 0; for (MessengerMember& existing : this->party) { if (existing.name == member.name) { member.color = MemberColor(index); existing = member; return; } ++index; } member.color = MemberColor(index); this->party.push_back(member); if (effects.Enabled()) { effects.EnsurePartyEffect(member.accountId); } } // OFFSET: 0x00DD87E0 // FUNCTION: fn_23312 void ClientMessenger::ClearFriends() { this->friends.clear(); } // OFFSET: 0x00DDF8A0 // FUNCTION: fn_23427 int ClientMessenger::FriendCount() const { return static_cast(this->friends.size()); } // OFFSET: 0x00DDF9D0 // FUNCTION: fn_23436 int ClientMessenger::PartyCount() const { return static_cast(this->party.size()); } // OFFSET: 0x00DDFA20 // FUNCTION: fn_23441 int ClientMessenger::OnlinePartyCount() const { int count = 0; for (const MessengerMember& member : this->party) { if (member.offline == 0) { ++count; } } return count; } // OFFSET: 0x00DDCC30 // FUNCTION: fn_23372 MessengerMember ClientMessenger::FriendAt(int index) const { int position = 0; for (const MessengerMember& member : this->friends) { if (position == index) { return member; } ++position; } return MessengerMember(0); } // OFFSET: 0x00DE0500 // FUNCTION: fn_23455 MessengerMember ClientMessenger::PartyAt(int index) const { int position = 0; for (const MessengerMember& member : this->party) { if (position == index) { return member; } ++position; } return MessengerMember(0); } // OFFSET: 0x00DE00D0 // FUNCTION: fn_23452 MessengerMember ClientMessenger::PartyByAccount(std::uint32_t accountId) const { for (const MessengerMember& member : this->party) { if (member.accountId == accountId) { return member; } } return MessengerMember(0); } // OFFSET: 0x00DE01C0 // FUNCTION: fn_23453 MessengerMember ClientMessenger::PartyByCharacter(std::uint32_t characterId) const { for (const MessengerMember& member : this->party) { if (member.characterId == characterId) { return member; } } return MessengerMember(0); } // OFFSET: 0x00DE03E0 // FUNCTION: fn_23454 MessengerMember ClientMessenger::PartyByName(const char* name) const { for (const MessengerMember& member : this->party) { if (member.name == name) { return member; } } return MessengerMember(0); } // OFFSET: 0x00DD8000 // FUNCTION: fn_23301 void ClientMessenger::SetPartyDead(std::uint32_t accountId, int dead) { for (MessengerMember& member : this->party) { if (member.accountId == accountId) { member.dead = dead; return; } } } // OFFSET: 0x00DD8030 // FUNCTION: fn_23302 void ClientMessenger::SetPartyJobLevel(std::uint32_t accountId, std::uint16_t job, std::uint16_t level) { for (MessengerMember& member : this->party) { if (member.accountId == accountId) { member.job = job; member.level = level; return; } } } // OFFSET: 0x00DD8070 // FUNCTION: fn_23303 void ClientMessenger::SetPartyLeader(std::uint32_t accountId, int leader) { for (MessengerMember& member : this->party) { if (member.accountId == accountId) { member.leader = leader; return; } } }