[C++] Céh név színezése helyezés alapján

Indította Distraught, 2018-05-08, 20:07:38

2018-05-08, 20:07:38 Utolsó szerkesztés: 2018-05-10, 00:20:29 Szerző: Distraught
Heyhooo emberek :D

fabtam11 írta ezt az ötletet a témámban és megtetszett, szóval megcsináltam.



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 :)

C++ programmer at Gameloft