From e34707c226316f2e17e78b3d9d96800e382fbd63 Mon Sep 17 00:00:00 2001 From: sruon Date: Tue, 18 Mar 2025 03:22:32 -0600 Subject: [PATCH] messageType support over IPC --- src/common/ipc_structs.h | 61 ++++++++++++++++++---------------- src/map/ipc_client.cpp | 10 +++--- src/map/lua/lua_baseentity.cpp | 48 ++++++++++++-------------- 3 files changed, 59 insertions(+), 60 deletions(-) diff --git a/src/common/ipc_structs.h b/src/common/ipc_structs.h index f7de3ceb5b3..e057be80524 100644 --- a/src/common/ipc_structs.h +++ b/src/common/ipc_structs.h @@ -72,22 +72,24 @@ namespace ipc struct ChatMessageParty { - uint32 partyId{}; - uint32 senderId{}; - std::string senderName{}; - std::string message{}; - uint16 zoneId{}; - uint8 gmLevel{}; + uint32 partyId{}; + uint32 senderId{}; + std::string senderName{}; + std::string message{}; + uint16 zoneId{}; + uint8 gmLevel{}; + CHAT_MESSAGE_TYPE messageType{ MESSAGE_PARTY }; }; struct ChatMessageAlliance { - uint32 allianceId{}; - uint32 senderId{}; - std::string senderName{}; - std::string message{}; - uint16 zoneId{}; - uint8 gmLevel{}; + uint32 allianceId{}; + uint32 senderId{}; + std::string senderName{}; + std::string message{}; + uint16 zoneId{}; + uint8 gmLevel{}; + CHAT_MESSAGE_TYPE messageType{ MESSAGE_PARTY }; }; struct ChatMessageLinkshell @@ -102,30 +104,33 @@ namespace ipc struct ChatMessageUnity { - uint32 unityLeaderId{}; - uint32 senderId{}; - std::string senderName{}; - std::string message{}; - uint16 zoneId{}; - uint8 gmLevel{}; + uint32 unityLeaderId{}; + uint32 senderId{}; + std::string senderName{}; + std::string message{}; + uint16 zoneId{}; + uint8 gmLevel{}; + CHAT_MESSAGE_TYPE messageType{ MESSAGE_UNITY }; }; struct ChatMessageYell { - uint32 senderId{}; - std::string senderName{}; - std::string message{}; - uint16 zoneId{}; - uint8 gmLevel{}; + uint32 senderId{}; + std::string senderName{}; + std::string message{}; + uint16 zoneId{}; + uint8 gmLevel{}; + CHAT_MESSAGE_TYPE messageType{ MESSAGE_YELL }; }; struct ChatMessageServerMessage { - uint32 senderId{}; - std::string senderName{}; - std::string message{}; - uint16 zoneId{}; - uint8 gmLevel{}; + uint32 senderId{}; + std::string senderName{}; + std::string message{}; + uint16 zoneId{}; + uint8 gmLevel{}; + CHAT_MESSAGE_TYPE messageType{ MESSAGE_SYSTEM_1 }; }; struct ChatMessageCustom diff --git a/src/map/ipc_client.cpp b/src/map/ipc_client.cpp index 1c92dc38f39..b61333f197d 100644 --- a/src/map/ipc_client.cpp +++ b/src/map/ipc_client.cpp @@ -233,7 +233,7 @@ void IPCClient::handleMessage_ChatMessageParty(const IPP& ipp, const ipc::ChatMe }); if (PParty) { - PParty->PushPacket(message.senderId, 0, std::make_unique(message.senderName, message.zoneId, MESSAGE_PARTY, message.message, message.gmLevel)); + PParty->PushPacket(message.senderId, 0, std::make_unique(message.senderName, message.zoneId, message.messageType, message.message, message.gmLevel)); } // clang-format on } @@ -268,7 +268,7 @@ void IPCClient::handleMessage_ChatMessageAlliance(const IPP& ipp, const ipc::Cha { for (const auto& currentParty : PAlliance->partyList) { - currentParty->PushPacket(message.senderId, 0, std::make_unique(message.senderName, message.zoneId, MESSAGE_PARTY, message.message, message.gmLevel)); + currentParty->PushPacket(message.senderId, 0, std::make_unique(message.senderName, message.zoneId, message.messageType, message.message, message.gmLevel)); } } // clang-format on @@ -291,7 +291,7 @@ void IPCClient::handleMessage_ChatMessageUnity(const IPP& ipp, const ipc::ChatMe if (CUnityChat* PUnityChat = unitychat::GetUnityChat(message.unityLeaderId)) { - PUnityChat->PushPacket(message.senderId, std::make_unique(message.senderName, message.zoneId, MESSAGE_UNITY, message.message, message.gmLevel)); + PUnityChat->PushPacket(message.senderId, std::make_unique(message.senderName, message.zoneId, message.messageType, message.message, message.gmLevel)); } } @@ -309,7 +309,7 @@ void IPCClient::handleMessage_ChatMessageYell(const IPP& ipp, const ipc::ChatMes // Don't push to sender if (PChar->id != message.senderId) { - PChar->pushPacket(std::make_unique(message.senderName, message.zoneId, MESSAGE_YELL, message.message, message.gmLevel)); + PChar->pushPacket(std::make_unique(message.senderName, message.zoneId, message.messageType, message.message, message.gmLevel)); } }); } @@ -326,7 +326,7 @@ void IPCClient::handleMessage_ChatMessageServerMessage(const IPP& ipp, const ipc { PZone->ForEachChar([&](CCharEntity* PChar) { - PChar->pushPacket(std::make_unique(message.senderName, message.zoneId, MESSAGE_SYSTEM_1, message.message, message.gmLevel)); + PChar->pushPacket(std::make_unique(message.senderName, message.zoneId, message.messageType, message.message, message.gmLevel)); }); }); // clang-format on diff --git a/src/map/lua/lua_baseentity.cpp b/src/map/lua/lua_baseentity.cpp index d9309742043..6153143ff06 100644 --- a/src/map/lua/lua_baseentity.cpp +++ b/src/map/lua/lua_baseentity.cpp @@ -346,70 +346,64 @@ void CLuaBaseEntity::printToArea(std::string const& message, sol::object const& if (messageRange == MESSAGE_AREA_SYSTEM) { - // TODO: Support messageLook - message::send(ipc::ChatMessageServerMessage{ - .senderId = PChar->id, - .senderName = name, - .message = message, + .senderId = PChar->id, + .senderName = name, + .message = message, + .messageType = messageLook, }); } else if (messageRange == MESSAGE_AREA_SAY) { - PChar->loc.zone->PushPacket(PChar, CHAR_INRANGE, std::make_unique(PChar, messageLook, message, name)); PChar->loc.zone->PushPacket(PChar, CHAR_INRANGE_SELF, std::make_unique(PChar, messageLook, message, name)); } else if (messageRange == MESSAGE_AREA_SHOUT) { PChar->loc.zone->PushPacket(PChar, CHAR_INSHOUT, std::make_unique(PChar, messageLook, message, name)); - PChar->loc.zone->PushPacket(PChar, CHAR_INRANGE_SELF, std::make_unique(PChar, messageLook, message, name)); + PChar->pushPacket(std::make_unique(PChar, messageLook, message, name)); } else if (messageRange == MESSAGE_AREA_PARTY) { - if (PChar->PParty->m_PAlliance) + if (PChar->PParty && PChar->PParty->m_PAlliance) { - // TODO: Support messageLook - message::send(ipc::ChatMessageAlliance{ - .allianceId = PChar->PParty->m_PAlliance->m_AllianceID, - .senderId = PChar->id, - .senderName = name, - .message = message, + .allianceId = PChar->PParty->m_PAlliance->m_AllianceID, + .senderId = PChar->id, + .senderName = name, + .message = message, + .messageType = messageLook, }); } else if (PChar->PParty) { - // TODO: Support messageLook - message::send(ipc::ChatMessageParty{ - .partyId = PChar->PParty->GetPartyID(), - .senderId = PChar->id, - .senderName = name, - .message = message, + .partyId = PChar->PParty->GetPartyID(), + .senderId = PChar->id, + .senderName = name, + .message = message, + .messageType = messageLook, }); } } else if (messageRange == MESSAGE_AREA_YELL) { - // TODO: Support messageLook - message::send(ipc::ChatMessageYell{ - .senderId = PChar->id, - .senderName = name, - .message = message, + .senderId = PChar->id, + .senderName = name, + .message = message, + .messageType = messageLook, }); PChar->loc.zone->PushPacket(PChar, CHAR_INRANGE_SELF, std::make_unique(PChar, messageLook, message, name)); } else if (messageRange == MESSAGE_AREA_UNITY) { - // TODO: Support messageLook - message::send(ipc::ChatMessageUnity{ .unityLeaderId = PChar->id, .senderId = PChar->id, .senderName = name, .message = message, + .messageType = messageLook, }); PChar->loc.zone->PushPacket(PChar, CHAR_INRANGE_SELF, std::make_unique(PChar, messageLook, message, name));