Aller au contenu

C++ - Joueurs en Ligne sous la MiniMap


Messages recommandés

  • Bot

Centre de Téléchargement

Télécharger ( Interne )

Ce système vous permet de voir combien de joueurs sont connectés sur votre serveur, les informations sont affichées en dessous de la minimap.

 

Révélation

171526Sans-titre.jpg

 

Pré-requis:

  • Sources client
  • Sources serveur

 

I. Sources Client

Révélation

Ouvrez donc votre projet avec Visual Studio et ouvrez le fichier PythonNetworkStreamCommand.cpp présent UserInterface

Recherchez ce code :

	else if (!strcmpi(szCmd, "gift"))
	{
		PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "Gift_Show", Py_BuildValue("()")); 	
	}

Ajouter ceci en dessous :

	//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 votre lanceur !

 

 

II. Sources Serveur

Révélation

 

A. Fichier desc_manager.cpp

Révélation

Recherchez donc 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()];
			}
		}
};

Remplacez la totalement par ceci :

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]);
			}
		}
};

 

 

B. Fichier p2p.cpp

Révélation

Cherchez la fonction suivante :

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);
	}
}

Remplacez la par ceci :

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);
	}
}

 

 

Ensuite cherchez la fonction suivante :

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);
		}
	}

Remplacez la par ceci :

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);
}

 

 

C. Fichier main.cpp

Révélation

Recherchez cette fonction :

	if (!(pulse % (passes_per_sec * 5 + 2)))
	{
		ITEM_MANAGER::instance().Update();
		DESC_MANAGER::instance().UpdateLocalUserCount();
	}

Remplacez la fonction par ceci :

	if (!(pulse % (passes_per_sec + 1)))
	{
		ITEM_MANAGER::instance().Update();
		DESC_MANAGER::instance().UpdateLocalUserCount();
	}

 

 

Succès ! N'oubliez pas de compiler votre game !

 

 

 

III. Partie Client (Python)

Révélation

 

A. Fichier locale_game.txt (Locale_fr)

Révélation

Rendez-vous tout en bas de votre fichier et copiez-y ce code :

BLACK_ONLINE	|cff00CC00|Hemp|hJoueurs en ligne:|h|r
BLACK_SARI	|cffFDD017|H|hChunjo:|h|r
BLACK_KIRMIZI	|cffff0000|Hemp|hShinsoo:|h|r
Information. Vous pouvez changer le code couleur, il suffit de modifier les codes présents après "cff" , voici un site qui peut vous fournir des codes couleurs : HTML Color Codes

 

 

B. Fichier game.py (root)

Révélation

Cherchez la fonction suivante : 

	def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
		self.interface.UpdateCubeInfo(gold, itemVnum, count)

Ajoutez ce code en dessous :

	def oyuncu_black(self, black, sari, kirmizi, mavi):
		#blackdragonx61
		self.interface.wndMiniMap.online_cok_hojdir_ama_benane(black, sari, kirmizi, mavi)

Sauvegardez !

 

C. Fichier uiminimap.py (root)

Révélation

Cherchez la fonction suivante :

			self.serverInfo = self.GetChild("ServerInfo")

Ajoutez ceci en dessous :

			self.mali	= self.GetChild("Toplam")
			self.sari	= self.GetChild("sari")
			self.kirmizi	= self.GetChild("kirmizi")
			self.mavi	= self.GetChild("mavi")

 

 

Ensuite, cherchez la fonction suivante :

def UpdateObserverCount(self, observerCount):
		if observerCount>0:
			self.observerCount.Show()
		elif observerCount<=0:
			self.observerCount.Hide()

		self.observerCount.SetText(localeInfo.MINIMAP_OBSERVER_COUNT % observerCount)

Placez ceci en dessous :

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

 

Sauvegardez !

 

D. Fichier minimap.py (uiscript)

Révélation

Cherchez la fonction suivante :

				## ServerInfo
				{
					"name" : "ServerInfo",
					"type" : "text",
					
					"text_horizontal_align" : "center",

					"outline" : 1,

					"x" : 67,
					"y" : 165,

					"text" : "",
				},

Placez 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 !

 

 

Succès ! Vous pouvez désormais voir les joueurs en ligne en dessous de votre minimap !

 

 

Pour continuer :

Si vous avez un problème n'hésitez pas à poster votre demande d'aide dans la section AQS

 

  • Funky Emulation 2
  • J'adore 7

090100logo.png 090149logo-4-bis.png

Lien vers le commentaire
  • 3 months later...

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant


  • Flux d'Activité

    1. 34

      Decay 2.51

    2. 0

      Achète emulateur dofus 2.x.x débug

    3. 34

      Decay 2.51

    4. 61

      Extraire les fichiers D2P de Dofus 2 en .swf

    5. 3

      Overfall2 Server Files Leaked

    6. 34

      Decay 2.51

×
×
  • Créer...

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.