Heyhooo emberek :D
fabtam11 írta ezt az ötletet a témámban és megtetszett, szóval megcsináltam.
(https://i.imgur.com/J3vZu4R.jpg)
Akkor lássunk hozzá.
Kezdjük a szerver résszel, ott kell kevesebbet dolgoznunk.
Nyisd meg a char.cpp -t és keress rá az alábbi függvényre:
void CHARACTER::SendGuildName(CGuild* pGuild)
Írd felül:
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.guildRank = CGuildManager::instance().GetRank(pGuild);
desc->Packet(&pack, sizeof(pack));
}
Nyissuk meg a packet.h -t és keress rá:
typedef struct packet_guild_name_t
Írd felül ezt a struktúrát az alábbival:
typedef struct packet_guild_name_t
{
BYTE header;
WORD size;
BYTE subheader;
DWORD guildID;
char guildName[GUILD_NAME_MAX_LEN];
int guildRank;
} TPacketGCGuildName;
Fordítsd le a game fájlt.
Most jön a kliens oldal.
UserinterFace-ben fogunk csak dolgozni.
PythonGuild.h-ban keress rá:
typedef std::map<DWORD, std::string> TGuildNameMap;
Írd át:
typedef std::map<DWORD, GuildNameRank> TGuildNameMap;
Ezután tedd ezt elé:
struct GuildNameRank
{
std::string name;
int rank;
};
Most keress rá:
void RegisterGuildName(DWORD dwID, const char * c_szName);
Írd át:
void RegisterGuildName(DWORD dwID, const char * c_szName, int rank);
Nyisd meg a PythonGuild.cpp-t és keress rá a RegisterGuildName függvényre.
Írd felül a függvényt:
void CPythonGuild::RegisterGuildName(DWORD dwID, const char * c_szName, int rank)
{
GuildNameRank gnr;
gnr.name = std::string(c_szName);
gnr.rank = rank;
m_GuildNameMap.insert(make_pair(dwID, gnr));
}
Most keress rá a GetGuildName függvényre.
Írd felül a függvényt:
bool CPythonGuild::GetGuildName(DWORD dwID, std::string * pstrGuildName)
{
if (m_GuildNameMap.end() == m_GuildNameMap.find(dwID))
return false;
switch (m_GuildNameMap[dwID].rank)
{
case 1:
*pstrGuildName = "|cffFFC125" + m_GuildNameMap[dwID].name + "|r";
break;
case 2:
*pstrGuildName = "|cff888888" + m_GuildNameMap[dwID].name + "|r";
break;
case 3:
*pstrGuildName = "|cffCD661D" + m_GuildNameMap[dwID].name + "|r";
break;
default:
*pstrGuildName = m_GuildNameMap[dwID].name;
break;
}
return true;
}
Most nyisd meg a PythonNetworkStreamPhaseGame.cpp -t és keress rá:
case GUILD_SUBHEADER_GC_GUILD_NAME:
Írd felül ez az ágat:
case GUILD_SUBHEADER_GC_GUILD_NAME:
{
DWORD dwID;
char szGuildName[GUILD_NAME_MAX_LEN+1];
int guildRank;
int iPacketSize = int(GuildPacket.size) - sizeof(GuildPacket);
int nItemSize = sizeof(dwID) + GUILD_NAME_MAX_LEN + sizeof(guildRank);
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(guildRank), &guildRank))
return false;
szGuildName[GUILD_NAME_MAX_LEN] = 0;
//Tracef(" >> GulidName [%d : %s]\n", dwID, szGuildName);
CPythonGuild::Instance().RegisterGuildName(dwID, szGuildName, guildRank);
iPacketSize -= nItemSize;
}
break;
}
Fordítsd le az indítót.
Kész is vagyunk :)