Jump to content
×
×
  • Create New...

C++ - Slot de Personnages Supplémentaires


Recommended Posts

Centre de Téléchargement

Télécharger ( Interne )

Bonjour, Bonsoir

 

Je vous présente aujourd'hui, un petit partage, qui vous permettra d'ajouter des emplacements pour vos personnages.

Ceci est mon premier partage, donc toutes critiques ou autres seront une source d'améliorations.

 

Le tutoriel se base sur l'ordre suivant : Serveur/Client/MySQL

 

Fini de parler, passons au tutoriel :

 

/!\ Serveur /!\

 

Rendez-vous dans Common/length.h

 

Cherchez :

 

  PLAYER_PER_ACCOUNT = 4, 
 

 

Remplacez par :

 

  PLAYER_PER_ACCOUNT = 8, 
 

Rendez-vous maintenant dans Game/src/locale_service.cpp

 

Cherchez :

static void __CheckPlayerSlot(const std::string& service_name)
{
if (PLAYER_PER_ACCOUNT != 4)
{
	printf(" PLAYER_PER_ACCOUNT = %d\n", PLAYER_PER_ACCOUNT);
	exit(0);
}
}
 

 

Remplacez par :

static void __CheckPlayerSlot(const std::string& service_name)
{
if (PLAYER_PER_ACCOUNT != 8)
{
	printf(" PLAYER_PER_ACCOUNT = %d\n", PLAYER_PER_ACCOUNT);
	exit(0);
}
}
 

 

 

Maintenant, allez dans Game/src/char_change_empire.cpp

 

Cherchez :

  	snprintf(szQuery, sizeof(szQuery), 
			"SELECT id, pid1, pid2, pid3, pid4 FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", 
			get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());

	std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery));
 

 

Remplacez par :

        snprintf(szQuery, sizeof(szQuery), 
                               "SELECT id, pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8 FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u OR pid5=%u OR pid6=%u OR pid7=%u OR pid8=%u AND empire=%u", 
                               get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());

               std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery));
 

 

 

Toujours dans char_change_empire.cpp

 

Cherchez :

 

		MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);

	str_to_number(dwAID, row[0]);
	str_to_number(dwPID[0], row[1]);
	str_to_number(dwPID[1], row[2]);
	str_to_number(dwPID[2], row[3]);
	str_to_number(dwPID[3], row[4]);
 

 

Remplacez par :

                MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);

               str_to_number(dwAID, row[0]);
               str_to_number(dwPID[0], row[1]);
               str_to_number(dwPID[1], row[2]);
               str_to_number(dwPID[2], row[3]);
               str_to_number(dwPID[3], row[4]);
               str_to_number(dwPID[4], row[5]);
               str_to_number(dwPID[5], row[6]);
               str_to_number(dwPID[6], row[7]);
               str_to_number(dwPID[7], row[8]);
 

 

 

cherchez ensuite :

		snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", 
			get_table_postfix(), empire, GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());

	std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery));
 

 

 

Remplacez par :

                snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u OR pid5=%u OR pid6=%u OR pid7=%u OR pid8=%u AND empire=%u", 
                               get_table_postfix(), empire, GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());

               std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery));
 

 

 

Cherchez :

DWORD CHARACTER::GetAID() const
{
char szQuery[1024+1];
DWORD dwAID = 0;

snprintf(szQuery, sizeof(szQuery), "SELECT id FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", 
		get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());

SQLMsg* pMsg = DBManager::instance().DirectQuery(szQuery);
 

 

 

Remplacez par :

DWORD CHARACTER::GetAID() const
{
       char szQuery[1024+1];
       DWORD dwAID = 0;

       snprintf(szQuery, sizeof(szQuery), "SELECT id FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u OR pid5=%u OR pid6=%u OR pid7=%u OR pid8=%u AND empire=%u", 
                       get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire());

       SQLMsg* pMsg = DBManager::instance().DirectQuery(szQuery);
 

 

 

Maintenant, rendez-vous dans db/src/clientmanager.cpp

 

Cherchez :

void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpireSelectPacket * p)
{
char szQuery[QUERY_MAX_LEN];

snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE id=%u", GetTablePostfix(), p->bEmpire, p->dwAccountID);
delete CDBManager::instance().DirectQuery(szQuery);

sys_log(0, "EmpireSelect: %s", szQuery);
{
	snprintf(szQuery, sizeof(szQuery),
			"SELECT pid1, pid2, pid3, pid4 FROM player_index%s WHERE id=%u", GetTablePostfix(), p->dwAccountID);

	std::auto_ptr pmsg(CDBManager::instance().DirectQuery(szQuery));

	SQLResult * pRes = pmsg->Get();
 

 

 

Remplacez par :

void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpireSelectPacket * p)
{
       char szQuery[QUERY_MAX_LEN];

       snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE id=%u", GetTablePostfix(), p->bEmpire, p->dwAccountID);
       delete CDBManager::instance().DirectQuery(szQuery);

       sys_log(0, "EmpireSelect: %s", szQuery);
       {
               snprintf(szQuery, sizeof(szQuery), 
                               "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8 FROM player_index%s WHERE id=%u", GetTablePostfix(), p->dwAccountID);

               std::auto_ptr pmsg(CDBManager::instance().DirectQuery(szQuery));

               SQLResult * pRes = pmsg->Get();
 

 

 

Cherchez :

 

void CClientManager::ChangeMonarchLord(CPeer * peer, DWORD dwHandle, TPacketChangeMonarchLord* info)
{
char szQuery[1024];
snprintf(szQuery, sizeof(szQuery), 
		"SELECT a.name, NOW() FROM player%s AS a, player_index%s AS b WHERE (a.account_id=b.id AND a.id=%u AND b.empire=%u) AND "
	    "(b.pid1=%u OR b.pid2=%u OR b.pid3=%u OR b.pid4=%u)", 
		GetTablePostfix(), GetTablePostfix(), info->dwPID, info->bEmpire,
	   	info->dwPID, info->dwPID, info->dwPID, info->dwPID);

SQLMsg * pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER);
 

 

 

Remplacez par :

void CClientManager::ChangeMonarchLord(CPeer * peer, DWORD dwHandle, TPacketChangeMonarchLord* info)
{
       char szQuery[1024];
       snprintf(szQuery, sizeof(szQuery),
                       "SELECT a.name, NOW() FROM player%s AS a, player_index%s AS b WHERE (a.account_id=b.id AND a.id=%u AND b.empire=%u) AND "
                   "(b.pid1=%u OR b.pid2=%u OR b.pid3=%u OR b.pid4=%u OR b.pid5=%u OR b.pid6=%u OR b.pid7=%u OR b.pid8=%u)", GetTablePostfix(), GetTablePostfix(), info->dwPID, info->bEmpire, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID);

       SQLMsg * pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER);
 

 

 

 

Rendez-vous ensuite dans db/src/clientmanagerlogin.cpp

 

Cherchez :

 void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketGDLoginByKey * p)
 

 

 

Ensuite, trouvez les lignes :

	sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip);
char szQuery[QUERY_MAX_LEN];
snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id);
CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
 

 

Remplacez par :

        sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip);
       char szQuery[QUERY_MAX_LEN];
       snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id);
       CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
 

 

 

Cherchez ensuite :

 

void CClientManager::RESULT_LOGIN_BY_KEY(CPeer * peer, SQLMsg * msg)
 

 

 

Trouvez les lignes :

	if (msg->Get()->uiNumRows == 0)
{
	DWORD account_id = info->pAccountTable->id;
	char szQuery[QUERY_MAX_LEN];
	snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id);
	std::auto_ptr pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER));
 

 

Et remplacez par :

        if (msg->Get()->uiNumRows == 0)
       {
               DWORD account_id = info->pAccountTable->id;
               char szQuery[QUERY_MAX_LEN];
               snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id);
               std::auto_ptr pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER));
 

Maintenant, cherchez :

void CClientManager::RESULT_PLAYER_INDEX_CREATE(CPeer * pkPeer, SQLMsg * msg)
 

 

Trouvez les lignes :

	char szQuery[QUERY_MAX_LEN];
snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), info->pAccountTable->id);
CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
 

 

Remplacez par :

        char szQuery[QUERY_MAX_LEN];
       snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), info->pAccountTable->id);
       CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
 

 

 

/!\ Client /!\

 

Rendez-vous dans Client/UserInterface/Packet.h

 

Cherchez :

	PLAYER_PER_ACCOUNT3 = 3,
PLAYER_PER_ACCOUNT4 = 4,
 

 

 

Remplacez par :

	PLAYER_PER_ACCOUNT3 = 7,
PLAYER_PER_ACCOUNT4 = 8,
 

 

 

Rendez-vous maintenant dans Pack/root/introselect.py

 

Cherchez :

	SLOT_COUNT = 4
 

 

 

Remplacez par :

	SLOT_COUNT = 8
 

 

 

 

Cherchez :

	SLOT_ROTATION = [135.0, 225.0, 315.0, 45.0]
 

 

 

Remplacez par :

	SLOT_ROTATION = [135.0, 180.0, 225.0, 270.0, 315.0, 360.0, 45.0, 90.0]
 

 

Cherchez :

		chr.DeleteInstance(0)
	chr.DeleteInstance(1)
	chr.DeleteInstance(2)
	chr.DeleteInstance(3)
 

 

Remplacez par :

                chr.DeleteInstance(0)
               chr.DeleteInstance(1)
               chr.DeleteInstance(2)
               chr.DeleteInstance(3)
               chr.DeleteInstance(4)
               chr.DeleteInstance(5)
               chr.DeleteInstance(6)
               chr.DeleteInstance(7)
 

 

 

Cherchez :

indexArray = (3, 2, 1, 0)
 

 

Remplacez par :

indexArray = (8, 7, 6, 5, 4, 3, 2, 1, 0)
 

 

 

Cherchez :

	def OnKeyDown(self, key):

	if 1 == key:
		self.ExitSelect()
	if 2 == key:
		self.SelectSlot(0)
	if 3 == key:
		self.SelectSlot(1)
	if 4 == key:
		self.SelectSlot(2)
	if 5 == key:
		self.SelectSlot(3)
 

 

Remplacez par :

        def OnKeyDown(self, key):

               if 1 == key:
                       self.ExitSelect()
               if 2 == key:
                       self.SelectSlot(0)
               if 3 == key:
                       self.SelectSlot(1)
               if 4 == key:
                       self.SelectSlot(2)
               if 5 == key:
                       self.SelectSlot(3)
               if 6 == key:
                       self.SelectSlot(4) 
               if 7 == key:
                       self.SelectSlot(5) 
               if 8 == key:
                       self.SelectSlot(6) 
               if 9 == key:
                       self.SelectSlot(7)
 

 

 

/!\ MySQL /!\

 

Rendez-vous dans Player/Player_index

 

Modifiez :

  `id` int(11) NOT NULL DEFAULT '0',
 `pid1` int(11) NOT NULL DEFAULT '0',
 `pid2` int(11) NOT NULL DEFAULT '0',
 `pid3` int(11) NOT NULL DEFAULT '0',
 `pid4` int(11) NOT NULL DEFAULT '0',
 `empire` tinyint(4) NOT NULL DEFAULT '0',
 

 

Par :

  `id` int(11) NOT NULL DEFAULT '0',
 `pid1` int(11) NOT NULL DEFAULT '0',
 `pid2` int(11) NOT NULL DEFAULT '0',
 `pid3` int(11) NOT NULL DEFAULT '0',
 `pid4` int(11) NOT NULL DEFAULT '0',
 `pid5` int(11) NOT NULL DEFAULT '0',
 `pid6` int(11) NOT NULL DEFAULT '0',
 `pid7` int(11) NOT NULL DEFAULT '0',
 `pid8` int(11) NOT NULL DEFAULT '0',
 `empire` tinyint(4) NOT NULL DEFAULT '0',
 

 

 

Voilà, vous venez d'ajouter des emplacements supplémentaire sur vos comptes.

 

Aperçu ?

 

 

214232B02129.jpg

 

Le screen du système comporte les 8 emplacements.

Je vous conseil de mettre 6 emplacements pour éviter une "surcharge" des personnages.

 

Bien entendu, si quelqu'un souhaite modifier/corriger les codes, je suis d'accord car je ne suis pas trop calé niveau sources.

 

 

 

Source : Turkmmo

  • J'adore 5
Link to comment
  • 2 years later...

Oui voilà @ASIKOO, l’interface n’est pas la même du coup la partie Client n’est pas adapté.. j’ai remarqué que le client FE possède déjà #chr.DeleteInstance(4) quand je supprime tout les # le client crach.. malheureusement je ne suis pas sur mon PC pour le syserr.

 

@DixN, inscription il a quelque heure avec ton premier message.. j’imagine pas là suite.. 

Link to comment

Bonjour,

 

Inscription récente ne veut pas forcement dire membre récent. Les remarques de ce genre ont s'en passe.

Le tutoriel publié sur Turkmmo est repris par plusieurs personnes, que se soit "Vanithys" pour le partagé ici ou d'autre connaissance qui ont réalisé l'ajout de ce "système" m'ont dit n'avoir eu aucuns problèmes avec les files 2016 en suivant le tutoriel ici présent, d'où ma réponse sur ce sujet.

 

Cordialement,

Link to comment

Bonjour,

 

J'ai lus ton ancien message, je ne travail que très rarement sur les files FE donc je ne peut pas te venir en aide sur ce sujet, ne connaissant pas les changements entre ceux-ci et les files 2014 classique. 

 

Ensuite, tu parle de crash client lorsque tu supprime les #, hors sur le tutoriel présent, il n'est indiquer nul part de supprimé les # mais uniquement de remplacer les choses indiqué.

Si ta question n'est pas celle-ci, essai d'expliquer au mieux ton problème.

 

Cordialement,

Link to comment

J'ai dit le contraire ? je ne pense pas.

Le problème étant que je te demande des détails sur le problème que tu as ainsi que la parti du tutoriel qui te bloque.

Déjà pour suivre ce que tu dit, c'est la partie client qui te bloque niveau interface mais ? as tu des détails supplémentaire à donné ?.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.