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
-
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
-
pour le stats tu doit faire sa :
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 )
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,"___________________________________________________________");
}
}
-
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;
}
-
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.
-
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;
}
-
Salut , pour ton registrer tu peut me montré la commande qui enregistre le joueur Merci
-
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;
}
-
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); }
}
}
-
ça n'a rien avoir car dans mon premier gm j'utilise mon systeme et ça fonctionne.
-
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...
-
Je capte deja pas car mon code me semble juste ^^.
ça viens surement du compte xD
-
up?
-
Il y a seulement la Variable "key" qui ne s'écrit pas dans ton fichier, ou tous celle que tu souhaites enregistrer?
-
Seulement la variable Key
-
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à.
-
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.
-
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;
}
-
Merci j'avais complètement oublié de fermer le fichier xD
-
Merci j'avais complètement oublié de fermer le fichier xD
Pas de soucie ca arrive ;)