QoL: Server-Side mark broadcast P2P

This commit is contained in:
rtw1x1
2026-01-21 18:31:58 +00:00
parent 7f2c842f6d
commit 7c615a7a84
9 changed files with 110 additions and 39 deletions

View File

@@ -27,6 +27,7 @@
#include "log.h"
#include "horsename_manager.h"
#include "MarkManager.h"
#include "p2p.h"
static void _send_bonus_info(LPCHARACTER ch)
{
@@ -931,27 +932,22 @@ void CInputLogin::GuildMarkUpload(LPDESC d, const char* c_pData)
else
markID = rkMarkMgr.SaveMark(p->gid, p->image);
// Broadcast mark update to all connected game clients
// Broadcast mark update to all game cores via P2P, which will then broadcast to their clients
if (markID != CGuildMarkManager::INVALID_MARK_ID)
{
WORD imgIdx = static_cast<WORD>(markID / CGuildMarkImage::MARK_TOTAL_COUNT);
TPacketGCMarkUpdate packet;
packet.header = HEADER_GC_MARK_UPDATE;
packet.guildID = p->gid;
packet.imgIdx = imgIdx;
// Send P2P packet to all other game cores
TPacketGGMarkUpdate p2pPacket;
p2pPacket.bHeader = HEADER_GG_MARK_UPDATE;
p2pPacket.dwGuildID = p->gid;
p2pPacket.wImgIdx = imgIdx;
P2P_MANAGER::instance().Send(&p2pPacket, sizeof(p2pPacket));
const DESC_MANAGER::DESC_SET & c_set_desc = DESC_MANAGER::instance().GetClientSet();
for (DESC_MANAGER::DESC_SET::const_iterator it = c_set_desc.begin(); it != c_set_desc.end(); ++it)
{
LPDESC pkDesc = *it;
if (pkDesc && pkDesc->GetCharacter())
{
pkDesc->Packet(&packet, sizeof(packet));
}
}
// Also broadcast to clients connected to this core (mark server) using the same logic
BroadcastGuildMarkUpdate(p->gid, imgIdx);
sys_log(0, "MARK_SERVER: GuildMarkUpload: Broadcast mark update for guild %u, imgIdx %u", p->gid, imgIdx);
sys_log(0, "MARK_SERVER: GuildMarkUpload: Broadcast mark update for guild %u, imgIdx %u via P2P", p->gid, imgIdx);
}
}