Arata cati jucatori ONLINE sunt pe server, direct din joc - sub harta mini-map!
Acest mic sistema rata numarul total de playeri on, dar si cati sunt in fiecare regat.
Aveti mai jos tutorial full care merge 100%
*Poze / Video:
*Link download / Code:
I. Client Source -> UseInterface -> PythonNetworkStreamCommand.cpp
Deschidem PythonNetworkStreamCommand.cpp si cautam:
Code:
else if (!strcmpi(szCmd, "gift"))
{
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "Gift_Show", Py_BuildValue("()"));
}
II. Server Source -> game/src/desc_manager.cpp
Deschidem game/src/desc_manager.cpp si cautam:
Code:
class FuncWho
{
public:
int iTotalCount;
int aiEmpireUserCount[EMPIRE_MAX_NUM];
FuncWho()
{
iTotalCount = 0;
memset(aiEmpireUserCount, 0, sizeof(aiEmpireUserCount));
}
void operator() (LPDESC d)
{
if (d->GetCharacter())
{
++iTotalCount;
++aiEmpireUserCount[d->GetEmpire()];
}
}
};
III. Server Source -> game/src/p2p.cpp
Deschidem game/src/p2p.cpp si cautam functia:
Code:
void P2P_MANAGER::Login(LPDESC d, const TPacketGGLogin * p)Code:
void P2P_MANAGER::Login(LPDESC d, const TPacketGGLogin * p)
{
CCI* pkCCI = Find(p->szName);
bool UpdateP2P = false;
if (NULL == pkCCI)
{
UpdateP2P = true;
pkCCI = M2_NEW CCI;
if (false == LC_IsBrazil())
strlcpy(pkCCI->szName, p->szName, sizeof(pkCCI->szName));
else
trim_and_lower(p->szName, pkCCI->szName, sizeof(pkCCI->szName));
pkCCI->dwPID = p->dwPID;
pkCCI->bEmpire = p->bEmpire;
if (p->bChannel == g_bChannel)
{
if (pkCCI->bEmpire < EMPIRE_MAX_NUM)
{
++m_aiEmpireUserCount[pkCCI->bEmpire];
}
else
{
sys_err("LOGIN_EMPIRE_ERROR: %d >= MAX(%d)", pkCCI->bEmpire, EMPIRE_MAX_NUM);
}
}
m_map_pkCCI.insert(std::make_pair(pkCCI->szName, pkCCI));
m_map_dwPID_pkCCI.insert(std::make_pair(pkCCI->dwPID, pkCCI));
}
pkCCI->lMapIndex = p->lMapIndex;
pkCCI->pkDesc = d;
pkCCI->bChannel = p->bChannel;
sys_log(0, "P2P: Login %s", pkCCI->szName);
CGuildManager::instance().P2PLoginMember(pkCCI->dwPID);
CPartyManager::instance().P2PLogin(pkCCI->dwPID, pkCCI->szName);
// CCI°¡ »ý¼º½Ã¿¡¸¸ ¸Þ½ÅÀú¸¦ ¾÷µ¥ÀÌÆ®ÇÏ¸é µÈ´Ù.
if (UpdateP2P) {
std::string name(pkCCI->szName);
MessengerManager::instance().P2PLogin(name);
}
}
Tot in game/src/p2p.cpp cautam functia:
Code:
void P2P_MANAGER::Logout(CCI * pkCCI)Code:
void P2P_MANAGER::Logout(CCI * pkCCI)
{
if (pkCCI->bChannel == g_bChannel)
{
if (pkCCI->bEmpire < EMPIRE_MAX_NUM)
{
--m_aiEmpireUserCount[pkCCI->bEmpire];
if (m_aiEmpireUserCount[pkCCI->bEmpire] < 0)
{
sys_err("m_aiEmpireUserCount[%d] < 0", pkCCI->bEmpire);
}
}
else
{
sys_err("LOGOUT_EMPIRE_ERROR: %d >= MAX(%d)", pkCCI->bEmpire, EMPIRE_MAX_NUM);
}
}
IV. Server Source -> game/src/main.cpp
Deschidem game/src/main.cpp si cautam:
Code:
if (!(pulse % (passes_per_sec * 5 + 2)))
{
ITEM_MANAGER::instance().Update();
DESC_MANAGER::instance().UpdateLocalUserCount();
}
V. Client -> locale/locale_game.txt
Deschidem locale/locale_game.txt si adaugam:
VI. Client -> root/game.py
Deschidem root/game.py si cautam:
Code:
def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
self.interface.UpdateCubeInfo(gold, itemVnum, count)
VII. Client -> root/uiminimap.py
Deschidem root/uiminimap.py si cautam:
Code:
self.serverInfo = self.GetChild("ServerInfo")Tot in root/uiminimap.py cautam:
Code:
def UpdateObserverCount(self, observerCount):
if observerCount>0:
self.observerCount.Show()
elif observerCount<=0:
self.observerCount.Hide()
self.observerCount.SetText(localeInfo.MINIMAP_OBSERVER_COUNT % observerCount)
VIII. Client -> uiscript/minimap.py
Deschidem uiscript/minimap.py si cautam:
Code:
## ServerInfo
{
"name" : "ServerInfo",
"type" : "text",
"text_horizontal_align" : "center",
"outline" : 1,
"x" : 67,
"y" : 165,
"text" : "",
},
Explicatie:
Acest sistem afiseaza sub minimap numarul total de jucatori online, plus distributia lor pe regate:
- total
- Chunjo
- Shinsoo
- Jinno
La final:
- Compilam sursa serverului.
- Compilam binarul clientului.
- Impachetam fisierele root/uiscript/locale la loc.


la acest mesaj și conținutul se va afișa automat.

