GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 26 Juillet 2010, 04:23:06

Titre: Probleme de mon register et d'un commande
Posté par: scott1 le 26 Juillet 2010, 04:23:06
Bonsoir à tous,

je cree mon nouveau gamemode, un sumo,

mais j'ai un soucis, quand je m'enregistre, le serveur n'écrit pas le mot de passe dans le fichier, ce qui fait que tout le monde peu se connecter avec n importe quel mot de passe.

public OnPlayerRegister(playerid, password[])
{
if(IsPlayerConnected(playerid))
{
new string3[64];
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
format(string3, sizeof(string3), "Comptes/%s.ini", playername3);
new File: hFile = fopen(string3, io_write);
if (hFile)
{
    strmid(PlayerInfo[playerid][pKey], password, 0, strlen(password), 255);
    new var[64];
format(var, 64, "Key=%s\n", PlayerInfo[playerid][pKey]);fwrite(hFile, var);
format(var, 64, "Admin=%d\n", PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
format(var, 64, "Cash=%d\n", PlayerInfo[playerid][pCash]);fwrite(hFile, var);
format(var, 64, "Win=%d\n", PlayerInfo[playerid][pWin]);fwrite(hFile, var);
format(var, 64, "Lose=%d\n", PlayerInfo[playerid][pLose]);fwrite(hFile, var);
            new string[256];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "Compte enregistré avec le mot de passe %s, connectez vous.", PlayerInfo[playerid][pKey]);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(st,256,"Bienvenue\nnentrer votre identifient secret\npour vous logger:");
ShowPlayerDialog(playerid,Login,DIALOG_STYLE_INPUT,"Identification",st,"Login","Annuler");
}
}
return 1;
}

J'ai aussi créé une commande /stats mais elle n'affiche rien quand je la tape :s

if(strcmp(cmd,"/stats",true)==0)
{
    if(IsPlayerConnected(playerid))
    {
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD1, "USAGE: /stats [Id/PartieduNom]");
return 1;
}
            giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
    if(giveplayerid != INVALID_PLAYER_ID)
    {
        if (IsPlayerConnected(giveplayerid))
{
GetPlayerName(giveplayerid, sendername, sizeof(sendername));
format(string, sizeof(string),"Stats de %s",sendername);
SendClientMessage(playerid, COLOR_GREEN,string);
format(string, sizeof(string), "Argent [%d]", PlayerInfo[giveplayerid][pCash]);
SendClientMessage(playerid, COLOR_WHITE,string);
format(string, sizeof(string), "Manches Gagnées [%d]", PlayerInfo[giveplayerid][pWin]);
SendClientMessage(playerid, COLOR_WHITE,string);
format(string, sizeof(string), "Eliminé [%d]", PlayerInfo[giveplayerid][pLose]);
SendClientMessage(playerid, COLOR_WHITE,string);
}
}
return 1;
}
}
else
{
    SendClientMessage(playerid, COLOR_WHITE,"Vous n'êtes pas connecté.");
}
return 1;
}

Merci d'avance
Titre: Re : Probleme de mon register et d'un commande
Posté par: Leonidas300 le 26 Juillet 2010, 10:24:44
pour le stats tu doit faire sa :

Code: (pawn) [Sélectionner]
if (strcmp(cmd, "/stats", true) == 0)
{
    if(IsPlayerConnected(playerid))
    {
if (gPlayerLogged[playerid] != 0)
{
ShowStats(playerid,playerid);
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "   Vous n'êtes pas logué!");
}
}
return 1;
}

et dans le public showstat tu crée ton stats, comme sa, ( je tes filé qu'un petit bout, à toi de le crée )

Code: (pawn) [Sélectionner]
new drank[20];
if(PlayerInfo[targetid][pDonateRank] == 1) { drank = "Pack Novice"; }
else if(PlayerInfo[targetid][pDonateRank] == 2) { drank = "Pack Argent"; }
else if(PlayerInfo[targetid][pDonateRank] == 3) { drank = "Pack Bronze"; }
else if(PlayerInfo[targetid][pDonateRank] == 4) { drank = "Pack OR"; }
else { drank = "None"; }
new age = PlayerInfo[targetid][pAge];
new ptime = PlayerInfo[targetid][pConnectTime];
new bigfish = PlayerInfo[targetid][pBiggestFish];
new arrests = PlayerInfo[targetid][pArrested];
new drugs = PlayerInfo[targetid][pDrugs];
new mats = PlayerInfo[targetid][pMats];
new level = PlayerInfo[targetid][pLevel];
new exp = PlayerInfo[targetid][pExp];
new pnumber = PlayerInfo[targetid][pPnumber];
new account = PlayerInfo[targetid][pAccount];
new nxtlevel = PlayerInfo[targetid][pLevel]+1;
new expamount = nxtlevel*levelexp;
new housekey = PlayerInfo[targetid][pPhousekey];
new bizkey = PlayerInfo[targetid][pPbiskey];
new intir = PlayerInfo[targetid][pInt];
new virworld = PlayerInfo[targetid][pVirWorld];
new local = PlayerInfo[targetid][pLocal];
new Float:health;
new name[MAX_PLAYER_NAME];
GetPlayerName(targetid, name, sizeof(name));
GetPlayerHealth(targetid,health);
new Float:px,Float:py,Float:pz;
GetPlayerPos(targetid, px, py, pz);
new coordsstring[256];
format(coordsstring, sizeof(coordsstring),"____________________| %s |____________________",name);
SendClientMessage(playerid, COLOR_GREEN,coordsstring);
format(coordsstring, sizeof(coordsstring), "Niveau:[%d] Sex:[%s] Age:[%d] Argent:[$%d] Banque :[$%d] Ph:[%d] Rang:[%s]", level,atext,age,cash,account,pnumber,drank);
SendClientMessage(playerid, COLOR_GRAD1,coordsstring);
format(coordsstring, sizeof(coordsstring), "Temp de jeu:[%d] Poissons:[%d] Nbr de fois arreter:[%d] Job:[%s] Respect:[%d/%d]", ptime,bigfish,arrests,jtext,exp,expamount);
SendClientMessage(playerid, COLOR_GRAD2,coordsstring);
format(coordsstring, sizeof(coordsstring), "Drogue:[%d] Materiaux:[%d] Team:[%s] Organisation:[%s] Rang:[%s]",drugs,mats,ttext,ftext,rtext);
SendClientMessage(playerid, COLOR_GRAD3,coordsstring);
format(coordsstring, sizeof(coordsstring), "Radio:[%s] ",Radios);
SendClientMessage(playerid, COLOR_GRAD4,coordsstring);
if (PlayerInfo[playerid][pAdmin] >= 1)
{
format(coordsstring, sizeof(coordsstring), "Maison [%d] Entreprise [%d] clef [%d] int:[%d] virworld:[%d] local[%d]", housekey,bizkey,HireCar[targetid],intir,virworld,local);
SendClientMessage(playerid, COLOR_GRAD6,coordsstring);
}
SendClientMessage(playerid, COLOR_GREEN,"___________________________________________________________");
}
}
Titre: Re : Probleme de mon register et d'un commande
Posté par: steve76 le 26 Juillet 2010, 11:58:51
Il demande de l'aide pour corriger ces codes. Inutile de lui filer des bout de code tous droit sortie du LARP car ca ne sert strictement à rien.
Tu lui dit de faire avec la fonction ShowStat, tu ne la définie même pas.


Sinon pour scott, je n'utilise pas les fichiers, donc je ne peut pas t'aider sur le système d'enregistrement.
Par contre sur ton code pour les stats, on voit déjà que tu as mis 2 fois la condition suivante, ce qui n'est pas gênant je pense.

if (IsPlayerConnected(giveplayerid))
Sinon moi je l'aurais fait comme ca:

if(strcmp(cmd,"/stats",true)==0)
{
   if(IsPlayerConnected(playerid))
   {
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD1, "USAGE: /stats [Id/PartieduNom]");
return 1;
}
            giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
   if(giveplayerid != INVALID_PLAYER_ID)
   {
GetPlayerName(giveplayerid, sendername, sizeof(sendername));
format(string, sizeof(string),"Stats de %s",sendername);
SendClientMessage(playerid, COLOR_GREEN,string);
format(string, sizeof(string), "Argent [%d]", PlayerInfo[giveplayerid][pCash]);
SendClientMessage(playerid, COLOR_WHITE,string);
format(string, sizeof(string), "Manches Gagnées [%d]", PlayerInfo[giveplayerid][pWin]);
SendClientMessage(playerid, COLOR_WHITE,string);
format(string, sizeof(string), "Eliminé [%d]", PlayerInfo[giveplayerid][pLose]);
SendClientMessage(playerid, COLOR_WHITE,string);
return 1;
}
}
}
else
{
   SendClientMessage(playerid, COLOR_WHITE,"Vous n'êtes pas connecté.");
}
return 1;
}
Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 26 Juillet 2010, 17:35:32
Leonidas stop ton copier coller du LARP ça saoul. Si tu avait regardé ma commande tu verrais que je n'ai pas besoin de ce que tu donne.

Steve, pour le /stats si tu regarde bien la fonction s'applique 2 fois, mais pour celui qui la tape et celui qu'on regarde les stats.
Titre: Re : Probleme de mon register et d'un commande
Posté par: steve76 le 26 Juillet 2010, 18:50:16
En fait tu as mis une fois le if(IsPlayerConnected(playerid))
et deux fois le if(IsPlayerConnected(giveplayerid))
De tout je ne pense pas que ca change beaucoup de truc, c'est juste pour l'esthétique ^^

Sinon tu n'as aucune erreur quand tu compiles?

EDIT:

Je viens de tester avec ton code ca ne marche pas. Par contre avec celui la nikel:

if(strcmp(cmd,"/stats",true)==0)
{
    if(IsPlayerConnected(playerid))
    {
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD1, "USAGE: /stats [Id/PartieduNom]");
return 1;
}
            giveplayerid = ReturnUser(tmp);
if(IsPlayerConnected(giveplayerid))
{
    if(giveplayerid != INVALID_PLAYER_ID)
    {
GetPlayerName(giveplayerid, sendername, sizeof(sendername));
format(string, sizeof(string),"Stats de %s",sendername);
SendClientMessage(playerid, COLOR_GREEN,string);
format(string, sizeof(string), "Argent [%d]", PlayerInfo[giveplayerid][pCash]);
SendClientMessage(playerid, COLOR_WHITE,string);
format(string, sizeof(string), "Manches Gagnées [%d]", PlayerInfo[giveplayerid][pWin]);
SendClientMessage(playerid, COLOR_WHITE,string);
format(string, sizeof(string), "Eliminé [%d]", PlayerInfo[giveplayerid][pLose]);
SendClientMessage(playerid, COLOR_WHITE,string);
return 1;
}
}
}
else
{
    SendClientMessage(playerid, COLOR_WHITE,"Vous n'êtes pas connecté.");
    return 1;
}
return 1;
}
Titre: Re : Probleme de mon register et d'un commande
Posté par: 69scorpion le 26 Juillet 2010, 21:08:53
Salut , pour ton registrer tu peut me montré  la commande qui enregistre le joueur Merci
Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 26 Juillet 2010, 23:01:12
Merci Steve !

Voici Scorpion

if(dialogid == Register)
{
if(response)
{
OnPlayerRegister(playerid, inputtext);
}
else
{
    log[playerid] += 1;
    if(log[playerid] == 3) { return 1; }
    else { Entry(playerid); }
}
}

public OnPlayerRegister(playerid, password[])
{
if(IsPlayerConnected(playerid))
{
new string3[64];
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
format(string3, sizeof(string3), "Comptes/%s.ini", playername3);
new File: hFile = fopen(string3, io_write);
if (hFile)
{
    strmid(PlayerInfo[playerid][pKey], password, 0, strlen(password), 255);
    new var[64];
format(var, 64, "Key=%s\n", PlayerInfo[playerid][pKey]);fwrite(hFile, var);
format(var, 64, "Admin=%d\n", PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
format(var, 64, "Cash=%d\n", PlayerInfo[playerid][pCash]);fwrite(hFile, var);
format(var, 64, "Win=%d\n", PlayerInfo[playerid][pWin]);fwrite(hFile, var);
format(var, 64, "Lose=%d\n", PlayerInfo[playerid][pLose]);fwrite(hFile, var);
            new string[256];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "Compte enregistré avec le mot de passe %s, connectez vous.", PlayerInfo[playerid][pKey]);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(st,256,"Bienvenue\nnentrer votre identifient secret\npour vous logger:");
ShowPlayerDialog(playerid,Login,DIALOG_STYLE_INPUT,"Identification",st,"Login","Annuler");
}
}
return 1;
}
Titre: Re : Probleme de mon register et d'un commande
Posté par: 69scorpion le 27 Juillet 2010, 00:12:00
Tiens essaye sa

Dans OnPlayerCommandText


if (strcmp(cmd, "/registrer", true) ==0)
{
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "Comptes/%s.ini", sendername);
new File: hFile = fopen(string, io_read);
if (hFile)
{
SendClientMessage(playerid, COLOR_YELLOW, "Ce Pseudo est déjà pris, veuillez en choisir un autre.");
fclose(hFile);
return 1;
}
        new motdepass[64];
tmp = strtok(cmdtext, idx);
strmid(motdepass, tmp, 0, strlen(cmdtext), 255);
OnPlayerRegister(playerid,motdepass);
}
return 1;
}



    if(dialogid == Register)
{
if(response)
{
  new regis[256]
          format(regis, 256, "/registrer %s", inputtext);
          return OnPlayerCommandText(playerid, regis);
}
else
{
    log[playerid] += 1;
    if(log[playerid] == 3) { return 1; }
    else { Entry(playerid); }
}
}

Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 27 Juillet 2010, 01:13:38
ça n'a rien avoir car dans mon premier gm j'utilise mon systeme et ça fonctionne.
Titre: Re : Probleme de mon register et d'un commande
Posté par: steve76 le 27 Juillet 2010, 02:39:10
Je suis totalement d'accord avec toi Dizzy, les gars filent des codes tiré d'un LARP et le refourgue en croyant aidé.

Et c'est vrai que j'aurais pu expliquer ce que j'ai modif dans ton code TUpac.

En gros j'ai supprimé des conditions en double, et j'ai déplacé un return 1; mal placé. Et je crois que c'est tous...
Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 27 Juillet 2010, 02:53:33
Je capte deja pas car mon code me semble juste ^^.

ça viens surement du compte xD
Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 29 Juillet 2010, 05:05:13
up?
Titre: Re : Probleme de mon register et d'un commande
Posté par: steve76 le 29 Juillet 2010, 12:29:55
Il y a seulement la Variable "key" qui ne s'écrit pas dans ton fichier, ou tous celle que tu souhaites enregistrer?
Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 29 Juillet 2010, 20:12:09
Seulement la variable Key
Titre: Re : Probleme de mon register et d'un commande
Posté par: steve76 le 29 Juillet 2010, 21:12:26
Essaye de faire un printf sur "PlayerInfo[playerid][pKey]" juste après ton strmid pour voir si il contient le pass ou si il est vide. Puis sur "password".

Juste pour voir si ton passe arrive jusque là.



Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 29 Juillet 2010, 22:59:05
J'ai essayé ceci format(string, sizeof(string), "Compte enregistré avec le mot de passe %s, connectez vous.", PlayerInfo[playerid][pKey]);
SendClientMessage(playerid, COLOR_YELLOW, string);

Et ça me donne le mot bon mot de passe.

Merci pour ton aide.
Titre: Re : Probleme de mon register et d'un commande
Posté par: steve76 le 30 Juillet 2010, 03:14:56
Re,

Alors je viens d'essayer dans un GM pour tester, j'ai juste rajouté le  "fclose(hFile);" et ca marche sans soucie.
Redit moi si ca a réglé ton soucie.  ;)

public OnPlayerRegister(playerid, password[])
{
if(IsPlayerConnected(playerid))
{
new string3[64];
new playername3[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername3, sizeof(playername3));
format(string3, sizeof(string3), "Comptes/%s.ini", playername3);
new File: hFile = fopen(string3, io_write);
if (hFile)
{
    strmid(PlayerInfo[playerid][pKey], password, 0, strlen(password), 255);
    new var[64];
format(var, 64, "Key=%s\n", PlayerInfo[playerid][pKey]);fwrite(hFile, var);
format(var, 64, "Admin=%d\n", PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
format(var, 64, "Cash=%d\n", PlayerInfo[playerid][pCash]);fwrite(hFile, var);
format(var, 64, "Win=%d\n", PlayerInfo[playerid][pWin]);fwrite(hFile, var);
format(var, 64, "Lose=%d\n", PlayerInfo[playerid][pLose]);fwrite(hFile, var);
                        fclose(hFile); // <=== J'ai rajouté ca
                    new string[256];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "Compte enregistré avec le mot de passe %s, connectez vous.", PlayerInfo[playerid][pKey]);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(st,256,"Bienvenue\nnentrer votre identifient secret\npour vous logger:");
ShowPlayerDialog(playerid,Login,DIALOG_STYLE_INPUT,"Identification",st,"Login","Annuler");
}
}
return 1;
}
Titre: Re : Probleme de mon register et d'un commande
Posté par: scott1 le 30 Juillet 2010, 04:05:58
Merci j'avais complètement oublié de fermer le fichier  xD
Titre: Re : Re : Probleme de mon register et d'un commande
Posté par: steve76 le 30 Juillet 2010, 12:50:11
Merci j'avais complètement oublié de fermer le fichier  xD

Pas de soucie ca arrive ;)