diff --git a/dChatServer/ChatPacketHandler.cpp b/dChatServer/ChatPacketHandler.cpp index de0b395f..f1970fc6 100644 --- a/dChatServer/ChatPacketHandler.cpp +++ b/dChatServer/ChatPacketHandler.cpp @@ -602,6 +602,19 @@ void ChatPacketHandler::HandleTeamInvite(Packet* packet) { SendTeamInvite(other, player); LOG("Got team invite: %llu -> %s", playerID, invitedPlayer.GetAsString().c_str()); + + bool failed = false; + for (const auto& ignore : other.ignoredPlayers) { + if (ignore.playerId == player.playerID) { + failed = true; + break; + } + } + + ChatPackets::TeamInviteInitialResponse response{}; + response.inviteFailedToSend = failed; + response.playerName = invitedPlayer.string; + ChatPackets::SendRoutedMsg(response, playerID, player.worldServerSysAddr); } void ChatPacketHandler::HandleTeamInviteResponse(Packet* packet) { @@ -615,7 +628,7 @@ void ChatPacketHandler::HandleTeamInviteResponse(Packet* packet) { LWOOBJID leaderID = LWOOBJID_EMPTY; inStream.Read(leaderID); - LOG("Accepted invite: %llu -> %llu (%d)", playerID, leaderID, declined); + LOG("Invite reponse received: %llu -> %llu (%d)", playerID, leaderID, declined); if (declined) { return; diff --git a/dNet/ChatPackets.cpp b/dNet/ChatPackets.cpp index 19375426..d1707e8e 100644 --- a/dNet/ChatPackets.cpp +++ b/dNet/ChatPackets.cpp @@ -132,3 +132,19 @@ bool ChatPackets::AchievementNotify::Deserialize(RakNet::BitStream& bitstream) { return true; } + +void ChatPackets::TeamInviteInitialResponse::Serialize(RakNet::BitStream& bitstream) const { + bitstream.Write(inviteFailedToSend); + bitstream.Write(playerName); +} + +void ChatPackets::SendRoutedMsg(const LUBitStream& msg, const LWOOBJID targetID, const SystemAddress& sysAddr) { + CBITSTREAM; + BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT, MessageType::Chat::WORLD_ROUTE_PACKET); + bitStream.Write(targetID); + + // Now write the actual packet + msg.WriteHeader(bitStream); + msg.Serialize(bitStream); + Game::server->Send(bitStream, sysAddr, sysAddr == UNASSIGNED_SYSTEM_ADDRESS); +} diff --git a/dNet/ChatPackets.h b/dNet/ChatPackets.h index b435ecab..a0cfbc9a 100644 --- a/dNet/ChatPackets.h +++ b/dNet/ChatPackets.h @@ -46,9 +46,19 @@ namespace ChatPackets { bool Deserialize(RakNet::BitStream& bitstream) override; }; + struct TeamInviteInitialResponse : public LUBitStream { + bool inviteFailedToSend{}; + LUWString playerName{}; + TeamInviteInitialResponse() : LUBitStream(eConnectionType::CLIENT, MessageType::Client::TEAM_INVITE_INITIAL_RESPONSE) {} + + void Serialize(RakNet::BitStream& bitstream) const override; + // No Deserialize needed on our end + }; + void SendChatMessage(const SystemAddress& sysAddr, char chatChannel, const std::string& senderName, LWOOBJID playerObjectID, bool senderMythran, const std::u16string& message); void SendSystemMessage(const SystemAddress& sysAddr, const std::u16string& message, bool broadcast = false); void SendMessageFail(const SystemAddress& sysAddr); + void SendRoutedMsg(const LUBitStream& msg, const LWOOBJID targetID, const SystemAddress& sysAddr); }; #endif // CHATPACKETS_H