Szerző Téma: y_ini login rendszer: rosszul mentett és visszatöltött értékek  (Megtekintve 736 alkalommal)

0
Sziasztok!
 
Egy szervert írok éppen, és támad egy kis furcsaság a y_ini mentésrendszeremmel. (OFF: Tudom, hogy régi a y_ini és MySQL-t kellene használni, de évek óta nem scripteltem és kíváncsi vagyok mennyit tudok összehozni múltbéli tudásommal.)
A problémák a következőek: A regisztrációnál megadott jelszót hol elmenti rendesen, hol nem. A játékos pozícióját elmenti, de loginnál nem jó helyre spawnol (0,0,0 -nál \"zuhan a mélybe\"). A játékos pénzét nem tölti be, csak az alap kezdőösszeget minden alkalommal. Minden mást (Kor, AdminLvl, stb.) jól elment és visszatölt.
A script ezen részei:
 
 

#include <a_samp>
#include <YSI\\y_ini>
#define PATH \"/Users/%s.ini\"
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;
}
enum pInfo
{
pJelszo,
Float:pPosX,
Float:pPosY,
Float:pPosZ,
Float:pPosA,
pPenz,   
}
new PlayerInfo[MAX_PLAYERS][pInfo];
forward LoadUser_data(playerid, name[], value[]);
public LoadUser_data(playerid, name[], value[])
{
INI_Int(\"Jelszó\", PlayerInfo[playerid][pJelszo]);
INI_Float(\"PosX\", PlayerInfo[playerid][pPosX]);
INI_Float(\"PosY\", PlayerInfo[playerid][pPosY]);
INI_Float(\"PosZ\", PlayerInfo[playerid][pPosZ]);
INI_Float(\"PosA\", PlayerInfo[playerid][pPosA]);
INI_Int(\"Pénz\", PlayerInfo[playerid][pPenz]);
return 1;
}
  //OnPlayerConnect alatt:
if(fexist(UserPath(playerid)))
{
   INI_ParseFile(UserPath(playerid), \"LoadUser_%s\", .bExtra = true, .extra = playerid);
   ShowPlayerDialog(playerid, dialog_log, DIALOG_STYLE_PASSWORD, \"{FFFFFF}Bejelentkezés\", \"Írd be a jelszavad a bejelentkezéshez:\", \"Tovább\",        \"Kilépés\");
}
else
{
    ShowPlayerDialog(playerid, dialog_reg, DIALOG_STYLE_INPUT, \"{FFFFFF}Regisztráció\", \"Írj be egy kívánt jelszót:\", \"Tovább\", \"Kilépés\");
}
return 1;
 
  //OnPlayerDisconnect alatt:
     new INI:File = INI_Open(UserPath(playerid));
new Float:x, Float:y, Float:z, Float:a, money;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
money = GetPlayerMoney(playerid);
money = PlayerInfo[playerid][pPenz];
INI_SetTag(File, \"Data\");
INI_WriteFloat(File, \"PosX\", x);
INI_WriteFloat(File, \"PosY\", y);
INI_WriteFloat(File, \"PosZ\", z);
INI_WriteFloat(File, \"PosA\", a);
INI_WriteInt(File, \"Jelszó\", PlayerInfo[playerid][pJelszo]);
     INI_WriteInt(File, \"Pénz\", money);
     INI_Close(File);
    return 1;
 
  //OnDialogResponse alatt, miután a jelszót beírta a mezőbe és le \"OK\"-ta:
  if(!strlen(inputtext)) return ShowPlayerDialog(playerid, dialog_reg, DIALOG_STYLE_INPUT, \"{FFFFFF}Regisztráció\", \"Az általad megadott jelszó hibás karaktert tartalmaz.\\nPróbálj meg egy másikat:\", \"Tovább\", \"Kilépés\");
        new INI:File = INI_Open(UserPath(playerid));
        INI_SetTag(File, \"Data\");
        INI_WriteInt(File, \"Jelszó\", udb_hash(inputtext));
        INI_Close(File);
        PlayerInfo[playerid][pJelszo] = udb_hash(inputtext);
  // nincs return
 
  //OnDialogResponse alatt, login után:
  if(udb_hash(inputtext) == PlayerInfo[playerid][pJelszo])
  {
       INI_ParseFile(UserPath(playerid), \"LoadUser_%s\", .bExtra = true, .extra = playerid);
       ShowPlayerDialog(playerid, dialog_logsucc, DIALOG_STYLE_MSGBOX, \"{FFFFFF}Bejelentkezés\", \"{FFFFFF}Sikeresen bejelentkeztél.\",\"Tovább\",\"\");
   GivePlayerMoney(playerid, PlayerInfo[playerid][pPenz]);
        SetSpawnInfo(playerid, 0, 0,0,0,0,0,0,0,0,0,0,0);
       SpawnPlayer(playerid);
  }
  }
  else
  {
   ShowPlayerDialog(playerid, dialog_log, DIALOG_STYLE_PASSWORD, \"{FFFFFF}Bejelentkezés\", \"{FFFFFF}Hibás jelszó!\",\"Tovább\",\"Kilépés\");
  }
  return 1;
 
  //OnPlayerSpawn alatt:
     if(elsospawn[playerid] == 0)
{
       INI_ParseFile(UserPath(playerid), \"LoadUser_%s\", .bExtra = true, .extra = playerid);
   SetPlayerPos(playerid, PlayerInfo[playerid][pPosX], PlayerInfo[playerid][pPosY], PlayerInfo[playerid][pPosZ]);
   SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pPosA]);
   SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
}
return 1;

 
A segítséget előre is köszönöm! :)
 
 
EDIT: Megoldva
« Utoljára szerkesztve: 2017. Május 25. - 22:01:39 írta ares »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal