no crashes
This commit is contained in:
Aaron Kimbre
2023-11-21 14:16:56 -06:00
parent e5f62e870b
commit a4bf11502f
17 changed files with 286 additions and 94 deletions

View File

@@ -18,6 +18,7 @@
#include "eChatInternalMessageType.h"
#include "eClientMessageType.h"
#include "eGameMessageType.h"
#include "eGuildLeaveReason.h"
extern PlayerContainer playerContainer;
@@ -676,8 +677,25 @@ void ChatPacketHandler::HandleGuildLeave(Packet* packet){
CINSTREAM_SKIP_HEADER;
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
LOG("HandleGuildLeave %llu", playerID);
auto* player = playerContainer.GetPlayerData(playerID);
if (!player) return;
auto guild_id = Database::Get()->GetMembersGuild(playerID);
Database::Get()->DeleteGuildMember(player->playerID);
auto members = Database::Get()->GetGuildMembers(guild_id);
if (members.empty()) Database::Get()->DeleteGuild(guild_id);
// Send the removal, need to send this to all players in guild TODO
CBITSTREAM;
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(player->playerID);
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GUILD_REMOVE_PLAYER);
bitStream.Write(eGuildLeaveReason::LEFT);
bitStream.Write(LUWString(player->playerName));
bitStream.Write(player->playerID);
SystemAddress sysAddr = player->sysAddr;
SEND_PACKET;
}
void ChatPacketHandler::HandleGuildGetAll(Packet* packet){
@@ -685,7 +703,42 @@ void ChatPacketHandler::HandleGuildGetAll(Packet* packet){
LWOOBJID playerID = LWOOBJID_EMPTY;
inStream.Read(playerID);
LOG("HandleGuildGetAll %llu", playerID);
auto player = playerContainer.GetPlayerData(playerID);
if (!player) return;
auto guild_id = Database::Get()->GetMembersGuild(player->playerID);
if (!guild_id) return;
auto guild = Database::Get()->GetGuild(guild_id);
if (!guild) return;
auto members = Database::Get()->GetGuildMembers(guild_id);
CBITSTREAM;
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CHAT_INTERNAL, eChatInternalMessageType::ROUTE_TO_PLAYER);
bitStream.Write(playerID);
//portion that will get routed:
BitStreamUtils::WriteHeader(bitStream, eConnectionType::CLIENT, eClientMessageType::GUILD_DATA);
bitStream.Write0();
bitStream.Write(LUWString(guild->name, 31));
bitStream.Write(LUWString("test1", 11));
bitStream.Write(LUWString("test2", 11));
bitStream.Write<uint32_t>(69);
bitStream.Write<uint32_t>(0);
bitStream.Write<uint32_t>(1);
bitStream.Write<uint8_t>(0);
bitStream.Write<uint8_t>(members.size());
//Member data
bitStream.Write1();
bitStream.Write1();
bitStream.Write<uint16_t>(1200);
bitStream.Write<uint16_t>(1);
bitStream.Write<uint16_t>(1);
bitStream.Write<uint16_t>(1);
bitStream.Write<uint32_t>(1);
bitStream.Write(LUWString(player->playerName, 25));
bitStream.Write<uint8_t>(0); //???
SystemAddress sysAddr = packet->systemAddress;
SEND_PACKET;
}
void ChatPacketHandler::SendTeamInvite(PlayerData* receiver, PlayerData* sender) {

View File

@@ -19,6 +19,7 @@
#include "eChatMessageType.h"
#include "eChatInternalMessageType.h"
#include "eWorldMessageType.h"
#include "PacketUtils.h"
#include "Game.h"
@@ -293,10 +294,16 @@ void HandlePacket(Packet* packet) {
// Guild messages
case eChatMessageType::GUILD_CREATE:
PacketUtils::SavePacket("GUILD_CREATE", (const char*) packet->data, packet->length);
LOG("GUILD_CREATE");
break;
case eChatMessageType::GUILD_INVITE:
PacketUtils::SavePacket("GUILD_INVITE", (const char*) packet->data, packet->length);
break;
case eChatMessageType::GUILD_INVITE_RESPONSE:
PacketUtils::SavePacket("GUILD_INVITE_RESPONSE", (const char*) packet->data, packet->length);
LOG("GUILD_INVITE_RESPONSE");
break;
@@ -305,14 +312,17 @@ void HandlePacket(Packet* packet) {
break;
case eChatMessageType::GUILD_KICK:
PacketUtils::SavePacket("GUILD_KICK", (const char*) packet->data, packet->length);
LOG("GUILD_KICK");
break;
case eChatMessageType::GUILD_GET_STATUS:
PacketUtils::SavePacket("GUILD_GET_STATUS", (const char*) packet->data, packet->length);
LOG("GUILD_GET_STATUS");
break;
case eChatMessageType::GUILD_GET_ALL:
PacketUtils::SavePacket("GUILD_GET_ALL", (const char*) packet->data, packet->length);
LOG("GUILD_GET_ALL");
ChatPacketHandler::HandleGuildGetAll(packet);
break;