GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Dark_revan le 30 Août 2011, 16:50:01

Titre: Probleme fonction
Posté par: Dark_revan le 30 Août 2011, 16:50:01
Bonjour a tous,

Voila j'ai un petit probleme avec cette fonction de samp mysql :

samp_mysql_fetch_row

Voila le morceaux de code :

Code:

new query[64];
format(query, sizeof(query), "SELECT %s FROM joueurs WHERE id = %d LIMIT 1", sqlvalname, sqlplayerid);
samp_mysql_query(query);
samp_mysql_store_result();
if(samp_mysql_fetch_row(sqlresult)==1)
{
return 1;
}

Le serveur crash après l'utilisation de la fonction, si vous pourriez m'aidez a réglé ce légé problème.
Merci d'avance Très souriant

PS: excusez moi d'avoir poster dans la mauvaise section la premiere fois.
Titre: Re : Probleme fonction
Posté par: Ssk le 30 Août 2011, 16:54:07
http://www.gtaonline.fr/forums/index.php/topic,12060.0.html (http://www.gtaonline.fr/forums/index.php/topic,12060.0.html)
Titre: Re : Probleme fonction
Posté par: Dark_revan le 30 Août 2011, 21:49:33
J'ai edit mon message pour le code.
Titre: Re : Probleme fonction
Posté par: Xartrick le 31 Août 2011, 06:53:15
D'où sort la variable sqlresult ?
Titre: Re : Probleme fonction
Posté par: Dark_revan le 31 Août 2011, 09:20:57
La variable sqlresult provien de la fonction dans ce cas précis elle égal PlayerInfo[playerid][pPassword]

Enfaite le but de ce code est de voir si le password de la variable PlayerInfo[playerid][pPassword] et le password dans la BD est le même.

Je me suis inspirer de modern topia pour ce code. Vu que je suis débutant en mysql.
Titre: Re : Probleme fonction
Posté par: Xartrick le 31 Août 2011, 13:52:40
C'est simplement que tu ne comprend pas réellement l'utilité des fonctions.
La fonction mysql_fetch_row permet de parcourir les résultats renvoyés par la requête faite précédemment (mysql_query).


new sQuery[64];

format(sQuery, sizeof(sQuery), "SELECT \"%s\" FROM joueurs WHERE id = %d LIMIT 1", sqlvalname, sqlplayerid);
samp_mysql_query(sQuery);
samp_mysql_store_result();

if(samp_mysql_num_rows() == 1)
{
return 1;
}

samp_mysql_free_result();

Et un conseil, change de plugin pour utiliser MySQL ;).
Un second conseil, utilise des guillemets pour encadrer une chaîne de caractères si tu ne veux pas avoir de mauvaise surprise.
Titre: Re : Probleme fonction
Posté par: Dark_revan le 31 Août 2011, 13:58:12
Merci pour tes conseils, je les est appliquer et j'ai pris le plugin de G-Style (Mysql.dll)
Le problème avec ce plugin c'est que j'arrive pas a save mes données avec le onplayerupdate.
Pour le moment j'utilise le système de mordern topia qui est assez complexe je trouve pour le Onplayerupdate.

Voila mon morceaux de code :

Onplayerupdate

if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 1)
{
MySQLCheckConnection();
new query[MAX_STRING];
format(query, MAX_STRING, "UPDATE players SET ");
MySQLUpdatePlayerStr(query, PlayerInfo[playerid][pSQLID], "Password", PlayerInfo[playerid][pKey]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Tut", PlayerInfo[playerid][pTut]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Faction", PlayerInfo[playerid][pFaction]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Race", PlayerInfo[playerid][pRace]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Sexe", PlayerInfo[playerid][pSex]);
MySQLUpdateFinish(query, PlayerInfo[playerid][pSQLID]);
}
}

Fonction :

public MySQLUpdateFinish(query[], sqlplayerid) // by Luk0r
{
if (strcmp(query, "WHERE id=", false) == 0) mysql_query(query);
else
{
new whereclause[32];
format(whereclause, sizeof(whereclause), " WHERE id=%d", sqlplayerid);
strcat(query, whereclause, MAX_STRING);
mysql_query(query);
format(query, MAX_STRING, "UPDATE joueurs SET ");
}
return 1;
}

public MySQLUpdatePlayerInt(query[], sqlplayerid, sqlvalname[], sqlupdateint) // by Luk0r
{
MySQLUpdateBuild(query, sqlplayerid);
new updval[64];
format(updval, sizeof(updval), "%s=%d", sqlvalname, sqlupdateint);
strcat(query, updval, MAX_STRING);
return 1;
}

public MySQLUpdatePlayerFlo(query[], sqlplayerid, sqlvalname[], Float:sqlupdateflo) // by Luk0r
{
/* new query[128];
format(query, sizeof(query), "UPDATE players SET %s=%f WHERE id=%d", sqlvalname, sqlupdateflo, sqlplayerid);
mysql_query(query);*/
new flotostr[32];
format(flotostr, sizeof(flotostr), "%f", sqlupdateflo);
MySQLUpdatePlayerStr(query, sqlplayerid, sqlvalname, flotostr);
return 1;
}

public MySQLUpdatePlayerStr(query[], sqlplayerid, sqlvalname[], sqlupdatestr[]) // by Luk0r
{
MySQLUpdateBuild(query, sqlplayerid);
new escstr[128];
new updval[128];
mysql_real_escape_string(sqlupdatestr, escstr);
format(updval, sizeof(updval), "%s='%s'", sqlvalname, escstr);
strcat(query, updval, MAX_STRING);
return 1;
}

Si vous voyez l'erreur dans la sauvegarde faite le moi savoir :D, De mon coté si je trouve j'indiquerai mon erreur.

Merci,
Titre: Re : Probleme fonction
Posté par: Xartrick le 31 Août 2011, 14:48:15
Évite d'utiliser la fonction évènementielle OnPlayerUpdate pour sauvegarder tes données.
Pour commencer, l'utilisation de MySQL est assez lourde et que en plus de ça, tu l'utilise PLUSIEURS FOIS PAR SECONDE.
Titre: Re : Probleme fonction
Posté par: spiirou le 31 Août 2011, 15:26:13
Tu devrai genre enregistrer le nombre de mort a la mort du joueur uniquement, son password juste au register et au changement de pass, je pense pas qu'un joueur change de sexe donc pas besoin de l'enregistrer apres l'enregistrement du debut
Titre: Re : Probleme fonction
Posté par: Dark_revan le 31 Août 2011, 16:06:45
Ok je vais pas mettre le save dans onplayerupdate mais le soucis enfaite. C'est que sa sauvegarde toujours pas. le code est certainement mauvais dans mon onplayerupdate.
Enfaite il faut que je trouve l'equivalent de cette fonction samp_mysql_strtok avec le nouveau plugin mysql.
Car onplayerlogin ne marche pas aussi, il ne charge pas les données.

Voici le code d'origine :

samp_mysql_strtok(Fields, "|", Data);
while (samp_mysql_strtok(Fields, "|", "")==1)
{

Pour remplacer ce code j'ai fait :

while(mysql_fetch_row(Data)==1)
{

Je sait que sait foireux mais je sait pas comment remplacer cette fonction qui n'est plus sur le nouveau plugin

Au pire si quelqu'un peut m'aider par msn ou autre sa serai sympa :D.

Ou alors si vous avez un autre système de sauvegarde joueur par sql je suis prenant (mis a part Modern Topia)

Merci pour vos aides.


EDIT : Probleme résolut a lock,

Le problème venait de l'ancien système de modern topia.
J'ai refait le système de save et load entierement et sa a marcher je me suis appuyer de plusieur exemple de script SQL tel que Radmin et d'autre.

Merci a tous ceux qui m'ont répondu et donner des conseils.

++ Darkrevan
Titre: Re : Probleme fonction
Posté par: Xartrick le 31 Août 2011, 18:03:52
Et voilà un code vite fait, MAL fait ... avec plein de petit bout de code ... VOLÉ à droite, à gauche.
Titre: Re : Probleme fonction
Posté par: Dark_revan le 01 Septembre 2011, 12:14:09
Hum hum ce code si tu l'aurai lu a était refait entièrement, et si tu m'aurai un peu plus aidé j'aurai peut être fait mieux...
Je te signale aussi que c'était le gros foutoirs pendant que j'essaye plusieurs truc en même donc normal que sa te paraissent mal fait.
Titre: Re : Probleme fonction
Posté par: Xartrick le 01 Septembre 2011, 13:18:04
À partir du moment où tu prends à gauche à droite, tu n'as pas tous refait.
Et selon ton raisonnement, si tu serais seul, tu ne pourrait RIEN faire ?
Apprend à vraiment programmer ou change d'objectif, car tu n'es pas fait pour ça si c'est ta vision des choses.
Titre: Re : Probleme fonction
Posté par: Ssk le 01 Septembre 2011, 13:47:42
Le problème est résolu ? si oui on stop le HS ;)
Titre: Re : Probleme fonction
Posté par: Dark_revan le 03 Septembre 2011, 13:59:40
J'ai dit que je l'est refait, donc un système sql que j'ai fait moi même pas en piquant un bout a gauche ou a droite, J'ai réussit a bien comprendre le SQL pour refaire mon propre système enregistrement et de chargement de donnée.

Bref vous pouvez lock.