QoL: Server-Side mark broadcast

This commit is contained in:
rtw1x1
2026-01-21 08:34:42 +00:00
parent a09aa42640
commit 7f2c842f6d
2 changed files with 34 additions and 1 deletions

View File

@@ -924,10 +924,35 @@ void CInputLogin::GuildMarkUpload(LPDESC d, const char* c_pData)
if (*((DWORD *) p->image + iPixel) != 0x00000000)
isEmpty = false;
DWORD markID = CGuildMarkManager::INVALID_MARK_ID;
if (isEmpty)
rkMarkMgr.DeleteMark(p->gid);
else
rkMarkMgr.SaveMark(p->gid, p->image);
markID = rkMarkMgr.SaveMark(p->gid, p->image);
// Broadcast mark update to all connected game 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;
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));
}
}
sys_log(0, "MARK_SERVER: GuildMarkUpload: Broadcast mark update for guild %u, imgIdx %u", p->gid, imgIdx);
}
}
void CInputLogin::GuildMarkIDXList(LPDESC d, const char* c_pData)

View File

@@ -212,6 +212,7 @@ enum
HEADER_GC_MARK_BLOCK = 100,
HEADER_GC_MARK_IDXLIST = 102,
HEADER_GC_MARK_UPDATE = 103,
HEADER_GC_TIME = 106,
HEADER_GC_CHANGE_NAME = 107,
@@ -1814,6 +1815,13 @@ typedef struct packet_mark_block
// 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음
} TPacketGCMarkBlock;
typedef struct packet_mark_update
{
uint8_t header;
uint32_t guildID;
uint16_t imgIdx;
} TPacketGCMarkUpdate;
typedef struct command_symbol_upload
{
uint8_t header;