1
Scripting SA-MP [Pawn center] / Re : Problème d'écriture .ini
« le: 14 Août 2013, 03:33:17 »
Il fallait lancer le serveur en tant qu'admin.
Probleme reglé
Probleme reglé
Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.
Si tu mets le niveau Admin à 0 après avoir écrit dans le fichier, narmol que ça fonctionne pas déjà. Pour le reste j'ai pas compris
Dans le code que tu nous montre, tu as deux systèmes de sauvegarde.
Donc, évidement, comme tu sauvegarde deux fois de deux façons différentes et entre ces deux sauvegarde, tu retire le rang administrateur du joueur, au final, le joueur est systématiquement un membre.
Donc, déjà, sauvegardé deux fois, c'est inutile, et de deux manières différentes, encore plus !
enum pInfo
{
pMdp,
pArgent,
pAdmin,
pKills,
pDeaths,
}
new PlayerInfo[MAX_PLAYERS][pInfo];
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,COL_WHITE"Login",COL_WHITE"Entrez votre mot de passe pour vous connecter.","Login","Quitter");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,COL_WHITE"Enregistrement",COL_WHITE"Entrez un mot de passe pour votre compte.","Valider","Quitter");
}
public OnPlayerDisconnect(playerid, reason)
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
INI_Close(File);
gJob[playerid] = 0;
PlayerInfo[playerid][pAdmin] = 0;
checkpoint = 0;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_REGISTER:
{
if(!response) return Kick(playerid);
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Enregistrement",""COL_RED"Il faut inserer un mot de passe !\n"COL_WHITE"Entrez votre password ci dessous pour enregistrer votre compte","Valider","Quitter");
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Password",udb_hash(inputtext));
INI_WriteInt(File,"Cash",0);
INI_WriteInt(File,"Admin",0);
INI_WriteInt(File,"Kills",0);
INI_WriteInt(File,"Deaths",0);
INI_Close(File);
SaveAccount(playerid);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Validé !",""COL_GREEN"Bienvenue ! Reconnectez vous pour sauvegarder vos stats","Ok","");
}
}
case DIALOG_LOGIN:
{
if(!response) return Kick(playerid);
if(response)
{
if(udb_hash(inputtext) == PlayerInfo[playerid][pMdp] )
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
GivePlayerMoney(playerid, PlayerInfo[playerid][pArgent]);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Validé!",""COL_GREEN"Connexion réussie ! Bon jeu !","Ok","");
if(PlayerInfo[playerid][pAdmin] == 1)
{
new playername[MAX_PLAYER_NAME];
new str[124];
GetPlayerName(playerid, playername, sizeof(playername));
format(str, sizeof(str), "L'administrateur %s vient de se connecter !", playername);
SendClientMessageToAll(COLOR_ADMIN, str);
}
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"Vous avez entré un mot de passe incorrect.\n"COL_WHITE"Entre votre mot de passe ci dessous pour vous connecter.","Login","Quitter");
}
return 1;
}
}
}
return 1;
}
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pMdp]);
INI_Int("Cash",PlayerInfo[playerid][pArgent]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
return 1;
}
stock UserPath(playerid)
{
new string[128],playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),PATH,playername);
return string;
}
stock udb_hash(buf[]) {
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n<length; n++)
{
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16) + s1;
}