Aller au contenu

Nouveau membre ?! Pense à te présenter pour accéder au contenu du forum !

New member ?! Introduce yourself to get access to the forum !

Messages recommandés

Bonjour à tous,

 

Je viens vous faire parvenir ce système qui permet de voir les joueurs en ligne de votre serveur via un compteur.

 

171526Sans-titre.jpg

 

Sommaire :

 

  • Sources client
  • Sources Serveur
  • Python

 

I°/Sources client

Révélation

 

  • 1-Rendez vous dans le fichier PythonNetworkStreamCommand.cpp dans UserInterface.
  • 2- Cherchez cette fonction :
	else if (!strcmpi(szCmd, "gift"))
	{
		PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "Gift_Show", Py_BuildValue("()")); 	
	}
  • 3-Ajoutez en dessous de celle-ci :
	//JOUEURS EN LIGNE
	else if (!strcmpi(szCmd, "black"))
	{
		UINT black = atoi(TokenVector[1].c_str()); //toplam
		UINT sari = atoi(TokenVector[2].c_str());
		UINT kirmizi = atoi(TokenVector[3].c_str());
		UINT mavi = atoi(TokenVector[4].c_str());
		//elleme
		PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "oyuncu_black", Py_BuildValue("(iiii)", black, sari, kirmizi, mavi));
	}

 

Sauvegardez et compilez !

 

 

 

II°/Sources Serveur

Révélation

 

  • 1-Rendez-vous dans le fichier desc_manager.cpp
  • 2-Cherchez cette fonction :
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()];
			}
		}
};
  • 3-Remplacez la par :
class FuncWho
{
	public:
		int iTotalCount;
		int aiEmpireUserCount[EMPIRE_MAX_NUM];
		int toplam;
		int * Bayrak;
		int asdasdas;

		FuncWho()
		{
			iTotalCount = 0;
			memset(aiEmpireUserCount, 0, sizeof(aiEmpireUserCount));
		}

		void operator() (LPDESC d)
		{
			if (d->GetCharacter())
			{
				++iTotalCount;
				++aiEmpireUserCount[d->GetEmpire()];
				/**
				getusercount'dan getirmeseydim sadece bir kisi,
				icin guncellenecekti.Digerleri guncellenmeyecekti.
				Tecrubeyle sabit.
				*/
				DESC_MANAGER::instance().GetUserCount(toplam, &Bayrak, asdasdas);
				d->ChatPacket(CHAT_TYPE_COMMAND, "black %d %d %d %d", toplam, Bayrak[2], Bayrak[1], Bayrak[3]);
			}
		}
};
  • 4-Rendez vous dans le fichier p2p.cpp
  • 5-Cherchez la fonction :
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);
	}
}
  • 6-Remplacez la par :
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 (pkCCI->bEmpire < EMPIRE_MAX_NUM)
		{
			LPCHARACTER ch;
			++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);
	}
}
  • 7-Cherchez ensuite la fonction : 
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);
		}
	}

 

  • 8-Remplacez la par : 
void P2P_MANAGER::Logout(CCI * pkCCI)
{
		if (pkCCI->bEmpire < EMPIRE_MAX_NUM)
		{
			LPCHARACTER ch;
			--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);
		}

	std::string name(pkCCI->szName);

	CGuildManager::instance().P2PLogoutMember(pkCCI->dwPID);
	CPartyManager::instance().P2PLogout(pkCCI->dwPID);
	MessengerManager::instance().P2PLogout(name);
	marriage::CManager::instance().Logout(pkCCI->dwPID);
	m_map_pkCCI.erase(name);
	m_map_dwPID_pkCCI.erase(pkCCI->dwPID);
	M2_DELETE(pkCCI);
}
  • 9-Rendez vous dans le fichier main.cpp
  • 10-Cherchez la fonction :
	if (!(pulse % (passes_per_sec * 5 + 2)))
	{
		ITEM_MANAGER::instance().Update();
		DESC_MANAGER::instance().UpdateLocalUserCount();
	}
  • 11-Remplacez par :
	if (!(pulse % (passes_per_sec + 1)))
	{
		ITEM_MANAGER::instance().Update();
		DESC_MANAGER::instance().UpdateLocalUserCount();
	}

 

Sauvegardez et compilez !

 

 

 

 

III°/Python

Révélation

 

  • 1-Rendez vous dans le fichier locale_game.txt (dans locale/X)
  • 2-Ajoutez ceci tout en bas de votre fichier :
BLACK_ONLINE	|cff00CC00|Hemp|hJoueurs en ligne:|h|r
BLACK_SARI	|cffFDD017|H|hChunjo:|h|r
BLACK_KIRMIZI	|cffff0000|Hemp|hShinsoo:|h|r
  • 3-Rendez vous dans le fichier game.py (root)
  • 4-Cherchez la fonction :
	def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
		self.interface.UpdateCubeInfo(gold, itemVnum, count)
  • 5-Ajoutez en dessous de celle-ci :
	def oyuncu_black(self, black, sari, kirmizi, mavi):
		#blackdragonx61
		self.interface.wndMiniMap.online_cok_hojdir_ama_benane(black, sari, kirmizi, mavi)

 

  • 6-Rendez vous dans le fichier uiminimap.py (root)
  • 7-Cherchez la fonction :
			self.serverInfo = self.GetChild("ServerInfo")
  • 8-Ajoutez en dessous de celle-ci :
			self.mali	= self.GetChild("Toplam")
			self.sari	= self.GetChild("sari")
			self.kirmizi	= self.GetChild("kirmizi")
			self.mavi	= self.GetChild("mavi")
  • 9-Cherchez la fonction :
	def UpdateObserverCount(self, observerCount):
		if observerCount>0:
			self.observerCount.Show()
		elif observerCount<=0:
			self.observerCount.Hide()

		self.observerCount.SetText(localeInfo.MINIMAP_OBSERVER_COUNT % observerCount)
  • 10-Ajoutez en dessous de celle-ci :
	def online_cok_hojdir_ama_benane(self, black, sari, kirmizi, mavi):	 	
		#blackdragonx61
		self.mali.Show()
		self.sari.Show()
		self.kirmizi.Show()
		self.mavi.Show()
		self.mali.SetText(localeInfo.BLACK_ONLINE + str(black))#Toplam
		self.sari.SetText(localeInfo.BLACK_SARI + str(sari))
		self.kirmizi.SetText(localeInfo.BLACK_KIRMIZI + str(kirmizi))
		self.mavi.SetText("|cff00ccffJinno:|h|r" + str(mavi))

 

  • 11-Rendez vous dans le fichier minimap.py (uiscript)
  • 12-Cherchez la fonction 
  • 				## ServerInfo
    				{
    					"name" : "ServerInfo",
    					"type" : "text",
    					
    					"text_horizontal_align" : "center",
    
    					"outline" : 1,
    
    					"x" : 67,
    					"y" : 165,
    
    					"text" : "",
    				},
  • 13-Ajoutez ceci en dessous :
				{
					"name" : "Toplam",
					"type" : "text",
					
					"text_horizontal_align" : "center",

					"outline" : 1,

					"x" : 70,
					"y" : 180,

					"text" : "",
				},
				{
					"name" : "sari",
					"type" : "text",
					
					"text_horizontal_align" : "center",

					"outline" : 1,

					"x" : 70,
					"y" : 195,

					"text" : "",
				},
				{
					"name" : "kirmizi",
					"type" : "text",
					
					"text_horizontal_align" : "center",

					"outline" : 1,

					"x" : 70,
					"y" : 210,

					"text" : "",
				},
				{
					"name" : "mavi",
					"type" : "text",
					
					"text_horizontal_align" : "center",

					"outline" : 1,

					"x" : 70,
					"y" : 225,

					"text" : "",
				},

 

 

Sauvegardez et repackez !

 

 

 

 

 

Source : Turkmmo

Enjoy,

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci !

 

j'avais le tout traduit en anglais pour que ce soit propre, et avec le define, si je le retrouve je le ferais passer.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci. :)

Partager ce message


Lien à poster
Partager sur d’autres sites

×

Information importante

By using this site, you agree to our Conditions d’utilisation.