char.cpp: void CHARACTER::SendGuildName(CGuild* pGuild) { if (NULL == pGuild) return; DESC* desc = GetDesc(); if (NULL == desc) return; if (m_known_guild.find(pGuild->GetID()) != m_known_guild.end()) return; m_known_guild.insert(pGuild->GetID()); TPacketGCGuildName pack; memset(&pack, 0x00, sizeof(pack)); pack.header = HEADER_GC_GUILD; pack.subheader = GUILD_SUBHEADER_GC_GUILD_NAME; pack.size = sizeof(TPacketGCGuildName); pack.guildID = pGuild->GetID(); memcpy(pack.guildName, pGuild->GetName(), GUILD_NAME_MAX_LEN); pack.guildLevel = pGuild->GetLevel(); desc->Packet(&pack, sizeof(pack)); } packet.h: typedef struct packet_guild_name_t { BYTE header; WORD size; BYTE subheader; DWORD guildID; char guildName[GUILD_NAME_MAX_LEN]; int guildLevel; } TPacketGCGuildName; PythonGuild.h: struct GuildNameLevel { std::string name; int level; }; typedef std::map TGuildNameMap; void RegisterGuildName(DWORD dwID, const char * c_szName, int level); PythonGuild.cpp: void CPythonGuild::RegisterGuildName(DWORD dwID, const char * c_szName, int level) { GuildNameLevel gnr; gnr.name = std::string(c_szName); gnr.level = level; m_GuildNameMap.insert(make_pair(dwID, gnr)); } bool CPythonGuild::GetGuildName(DWORD dwID, std::string * pstrGuildName) { if (m_GuildNameMap.end() == m_GuildNameMap.find(dwID)) return false; int guildLevel = m_GuildNameMap[dwID].level; if (guildLevel >= 10) { *pstrGuildName = "|cffFFC125" + m_GuildNameMap[dwID].name + "|r"; } else if (guildLevel >= 5) { *pstrGuildName = "|cff888888" + m_GuildNameMap[dwID].name + "|r"; } else if (guildLevel > 0) { *pstrGuildName = "|cffCD661D" + m_GuildNameMap[dwID].name + "|r"; } else { *pstrGuildName = m_GuildNameMap[dwID].name; } return true; } PythonNetworkStreamPhaseGame.cpp : case GUILD_SUBHEADER_GC_GUILD_NAME: { DWORD dwID; char szGuildName[GUILD_NAME_MAX_LEN + 1]; int guildLevel; int iPacketSize = int(GuildPacket.size) - sizeof(GuildPacket); int nItemSize = sizeof(dwID) + GUILD_NAME_MAX_LEN + sizeof(guildLevel); assert(iPacketSize % nItemSize == 0 && "GUILD_SUBHEADER_GC_GUILD_NAME"); for (; iPacketSize > 0;) { if (!Recv(sizeof(dwID), &dwID)) return false; if (!Recv(GUILD_NAME_MAX_LEN, &szGuildName)) return false; if (!Recv(sizeof(guildLevel), &guildLevel)) return false; szGuildName[GUILD_NAME_MAX_LEN] = 0; CPythonGuild::Instance().RegisterGuildName(dwID, szGuildName, guildLevel); iPacketSize -= nItemSize; } break; }