Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 41 additions & 23 deletions dChatServer/ChatPacketHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,9 @@ void ChatPacketHandler::SendTeamInvite(const PlayerData& receiver, const PlayerD
SEND_PACKET;
}

void ChatPacketHandler::SendTeamInviteConfirm(const PlayerData& receiver, bool bLeaderIsFreeTrial, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, uint8_t ucResponseCode, std::u16string wsLeaderName) {
void ChatPacketHandler::SendTeamInviteConfirm(const PlayerData& receiver, TeamData* team, uint8_t responseCode) {
if(!team) return;

CBITSTREAM;
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(receiver.playerID);
Expand All @@ -719,26 +721,35 @@ void ChatPacketHandler::SendTeamInviteConfirm(const PlayerData& receiver, bool b

bitStream.Write(receiver.playerID);
bitStream.Write(eGameMessageType::TEAM_INVITE_CONFIRM);

bitStream.Write(bLeaderIsFreeTrial);
bitStream.Write(i64LeaderID);
bitStream.Write(i64LeaderZoneID);
bitStream.Write<uint32_t>(0); // BinaryBuffe, no clue what's in here
bitStream.Write(ucLootFlag);
bitStream.Write(ucNumOfOtherPlayers);
bitStream.Write(ucResponseCode);
const auto& leader = Game::playerContainer.GetPlayerData(team->leaderID);

bitStream.Write(leader.isFTP);
bitStream.Write(team->leaderID);
bitStream.Write(leader.zoneID);
bitStream.Write<uint32_t>((team->memberIDs.size() - 1) * ((sizeof(int16_t) * 33) + sizeof(LWOOBJID) + sizeof(LWOZONEID)));
for (const auto memberid: team->memberIDs){
if (memberid == team->leaderID) continue;
const auto& member = Game::playerContainer.GetPlayerData(memberid);
bitStream.Write(LUWString(member.playerName));
bitStream.Write(memberid);
bitStream.Write(member.zoneID);
}
bitStream.Write(team->lootFlag);
bitStream.Write(team->memberIDs.size());
bitStream.Write(responseCode);
const std::u16string wsLeaderName = GeneralUtils::UTF8ToUTF16(leader.playerName);
bitStream.Write<uint32_t>(wsLeaderName.size());
for (const auto character : wsLeaderName) {
bitStream.Write(character);
}
bitStream.Write(wsLeaderName);

SystemAddress sysAddr = receiver.sysAddr;
SEND_PACKET;
}

void ChatPacketHandler::SendTeamStatus(const PlayerData& receiver, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, std::u16string wsLeaderName) {
void ChatPacketHandler::SendTeamStatus(const PlayerData& receiver, TeamData* team) {
if(!team) return;

CBITSTREAM;
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, eChatMessageType::WORLD_ROUTE_PACKET);
bitStream.Write(receiver.playerID);

//portion that will get routed:
Expand All @@ -747,16 +758,23 @@ void ChatPacketHandler::SendTeamStatus(const PlayerData& receiver, LWOOBJID i64L
bitStream.Write(receiver.playerID);
bitStream.Write(eGameMessageType::TEAM_GET_STATUS_RESPONSE);

bitStream.Write(i64LeaderID);
bitStream.Write(i64LeaderZoneID);
bitStream.Write<uint32_t>(0); // BinaryBuffe, no clue what's in here
bitStream.Write(ucLootFlag);
bitStream.Write(ucNumOfOtherPlayers);
bitStream.Write(team->leaderID);
const auto& leader = Game::playerContainer.GetPlayerData(team->leaderID);

bitStream.Write(leader.zoneID);
bitStream.Write<uint32_t>((team->memberIDs.size() - 1) * ((sizeof(int16_t) * 33) + sizeof(LWOOBJID) + sizeof(LWOZONEID)));
for (const auto memberid: team->memberIDs){
if (memberid == team->leaderID) continue;
const auto& member = Game::playerContainer.GetPlayerData(memberid);
bitStream.Write(LUWString(member.playerName));
bitStream.Write(memberid);
bitStream.Write(member.zoneID);
}
bitStream.Write(team->lootFlag);
bitStream.Write(team->memberIDs.size());
const std::u16string wsLeaderName = GeneralUtils::UTF8ToUTF16(leader.playerName);
bitStream.Write<uint32_t>(wsLeaderName.size());
for (const auto character : wsLeaderName) {
bitStream.Write(character);
}

bitStream.Write(wsLeaderName);
SystemAddress sysAddr = receiver.sysAddr;
SEND_PACKET;
}
Expand Down
5 changes: 3 additions & 2 deletions dChatServer/ChatPacketHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "BitStream.h"

struct PlayerData;
struct TeamData;

enum class eAddFriendResponseType : uint8_t;

Expand Down Expand Up @@ -64,8 +65,8 @@ namespace ChatPacketHandler {
void HandleTeamStatusRequest(Packet* packet);

void SendTeamInvite(const PlayerData& receiver, const PlayerData& sender);
void SendTeamInviteConfirm(const PlayerData& receiver, bool bLeaderIsFreeTrial, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, uint8_t ucResponseCode, std::u16string wsLeaderName);
void SendTeamStatus(const PlayerData& receiver, LWOOBJID i64LeaderID, LWOZONEID i64LeaderZoneID, uint8_t ucLootFlag, uint8_t ucNumOfOtherPlayers, std::u16string wsLeaderName);
void SendTeamInviteConfirm(const PlayerData& receiver, TeamData* team, uint8_t responseCode);
void SendTeamStatus(const PlayerData& receiver, TeamData* team);
void SendTeamSetLeader(const PlayerData& receiver, LWOOBJID i64PlayerID);
void SendTeamAddPlayer(const PlayerData& receiver, bool bIsFreeTrial, bool bLocal, bool bNoLootOnDeath, LWOOBJID i64PlayerID, std::u16string wsPlayerName, LWOZONEID zoneID);
void SendTeamRemovePlayer(const PlayerData& receiver, bool bDisband, bool bIsKicked, bool bIsLeaving, bool bLocal, LWOOBJID i64LeaderID, LWOOBJID i64PlayerID, std::u16string wsPlayerName);
Expand Down
4 changes: 2 additions & 2 deletions dChatServer/PlayerContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ void PlayerContainer::AddMember(TeamData* team, LWOOBJID playerID) {
const auto leaderName = GeneralUtils::UTF8ToUTF16(leader.playerName);
const auto memberName = GeneralUtils::UTF8ToUTF16(member.playerName);

ChatPacketHandler::SendTeamInviteConfirm(member, false, leader.playerID, leader.zoneID, team->lootFlag, 0, 0, leaderName);
ChatPacketHandler::SendTeamInviteConfirm(member, team, 0);

if (!team->local) {
ChatPacketHandler::SendTeamSetLeader(member, leader.playerID);
Expand Down Expand Up @@ -343,7 +343,7 @@ void PlayerContainer::TeamStatusUpdate(TeamData* team) {
if (!otherMember) continue;

if (!team->local) {
ChatPacketHandler::SendTeamStatus(otherMember, team->leaderID, leader.zoneID, team->lootFlag, 0, leaderName);
ChatPacketHandler::SendTeamStatus(otherMember, team);
}
}

Expand Down