Szerző Téma: Dini mentés restartnál  (Megtekintve 1232 alkalommal)

Nem elérhető maark

  • 565
    • Profil megtekintése
Dini mentés restartnál
« Dátum: 2014. Január 04. - 01:28:05 »
0 Show voters
Sziasztok, mindenhogy próbáltam..
Hogy tudom megcsinálni azt hogy szerver restartnál is lementse az adatokat?
Ha kilépek akkor mûködik rendesen, de ha pl adok magamnak pénzt és újraindítom a szervert úgy hogy nem lépek ki, akkor azt már nem menti le.
Restartnál nem fut le az OnPlayerDisconnect?
Egy szimpla dialogos reg. system (Nem saját).:
 
#include 
#include
#include
#include sscanf2
#include
#define SCRIPT_VERSION          \"v3\"
#define colorRed                0xFF0000FF
#define colorGreen              0x008000FF
#define DIALOG_REGISTER       1
#define DIALOG_LOGIN           2
#define DIALOG_ACCOUNT         3
#define DIALOG_CHANGEPASS      4
#define DIALOG_CHANGENAME       5
#define DIALOG_VIEWSTATS        6
#define DIALOG_CHECKSTATS       7
#pragma unused                  ret_memcpy
#pragma unused                  strtok
forward UpdateTime(playerid);
new str[128];
new file[128];
new playerIP[16];
new Update;
public OnPlayerConnect(playerid)
{
format(file, 128, \"/tReg/%s.ini\", GetName(playerid));
GetPlayerIp(playerid, playerIP, 16);
TogglePlayerSpectating(playerid, 1);
if(!dini_Exists(file))
{
    format(str, 128, \"Üdvözöllek %s \\n\\nKérlek regisztrálj!\", GetName(playerid));
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, \"Felhasználó\", str, \"Reg.\", \"Kilépés\");
}
   if(dini_Exists(file))
   {
if(strcmp(playerIP, dini_Get(file, \"IP\"), true) == 0)
{
         dini_Set(file, \"IP\", playerIP);
    SetPVarInt(playerid, \"Logged\", 1);
   SetPlayerCash(playerid, dini_Int(file, \"Money\"));
   SetPlayerScore(playerid, dini_Int(file, \"Score\"));
   SetPVarInt(playerid, \"Deaths\", dini_Int(file, \"Deaths\"));
   SetPVarInt(playerid, \"Kills\", dini_Int(file, \"Kills\"));
   SetPVarInt(playerid, \"Time\", dini_Int(file, \"Time\"));
   TogglePlayerSpectating(playerid, 0);
   Update = SetTimerEx(\"UpdateTime\", 60*1000, 1, \"i\", playerid);
    SendClientMessage(playerid, colorGreen, \"Automatikus belépés!\");
}
else
{
       format(str, 128, \"Üdvözöllek %s \\n\\nKérlek jelentkezz be a felhasználódba!\", GetName(playerid));
   ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, \"Felhasználó\", str, \"Belépés\", \"Kilépés\");
}
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
   format(file, 128, \"/tReg/%s.ini\", GetName(playerid));
if(GetPVarInt(playerid, \"Logged\") == 1)
{
dini_IntSet(file, \"Money\", GetPlayerMoney(playerid));
dini_IntSet(file, \"Score\", GetPlayerScore(playerid));
dini_IntSet(file, \"Deaths\", GetPVarInt(playerid, \"Deaths\"));
dini_IntSet(file, \"Kills\", GetPVarInt(playerid, \"Kills\"));
dini_IntSet(file, \"Time\", GetPVarInt(playerid, \"Time\"));
KillTimer(Update);
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
   format(file, 128, \"/tReg/%s.ini\", GetName(playerid));
   if(dialogid == DIALOG_REGISTER)
   {
if(!response) return Kick(playerid);
if(response)
{
    if(strlen(inputtext) == 0)
   {
      format(str, 128, \"Üdvözöllek %s \\n\\nKérlek regisztrálj!\", GetName(playerid));
      ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, \"Felhasználó\", str, \"Reg.\", \"Kilépés\");
      return 0;
   }
   if(!dini_Exists(file))
   {
      dini_Create(file);
      dini_IntSet(file, \"Password\", udb_hash(inputtext));
      dini_IntSet(file, \"Money\", GetPlayerMoney(playerid));
      dini_IntSet(file, \"Score\", GetPlayerScore(playerid));
      dini_IntSet(file, \"Deaths\", GetPVarInt(playerid, \"Deaths\"));
      dini_IntSet(file, \"Kills\", GetPVarInt(playerid, \"Kills\"));
      dini_IntSet(file, \"Time\", GetPVarInt(playerid, \"Time\"));
               format(str, 128, \"Ez a felhasználó már regisztrálva van \\n\\n\\nÜdvözöllek %s \\n\\nKérlek jelentkezz be!\", GetName(playerid));
      ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, \"Felhasználó\", str, \"Belépés\", \"Kilépés\");
   }
}
}
if(dialogid == DIALOG_LOGIN)
{
    if(!response) return Kick(playerid);
if(response)
{
    if(strlen(inputtext) == 0)
   {
      format(str, 128, \"Üdvözöllek %s \\n\\nKérlek, lépj be a felhasználódba\", GetName(playerid));
      ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, \"Felhasználó\", str, \"Belépés\", \"Kilépés\");
      return 0;
   }
   if(fexist(file))
   {
      new password = dini_Int(file, \"Password\");
      if(udb_hash(inputtext) != password)
      {
         if(GetPVarInt(playerid, \"Attempts\") == 0)
         {
             SetPVarInt(playerid, \"Attempts\", 1);
             SendClientMessage(playerid, colorRed, \"Hibás jelszó még 1 próbálkozásod maradt!\");
             format(str, 128, \"Üdvözöllek %s \\n\\nKérlek lépj be!\", GetName(playerid));
            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, \"Felhasználó\", str, \"Belépés\", \"Kilépés\");
         }
         else if(GetPVarInt(playerid, \"Attempts\") == 1)
         {
             SendClientMessage(playerid, colorRed, \"Hibás jelszó, nincs már egy próbálkozásod sem.!\");
             Kick(playerid);
         }
      }
      else
      {
         SetPVarInt(playerid, \"Logged\", 1);
         SetPlayerCash(playerid, dini_Int(file, \"Money\"));
         SetPlayerScore(playerid, dini_Int(file, \"Score\"));
         SetPVarInt(playerid, \"Kills\", dini_Int(file, \"Kills\"));
         SetPVarInt(playerid, \"Deaths\", dini_Int(file, \"Deaths\"));
         SetPVarInt(playerid, \"Time\", dini_Int(file, \"Minutes Ingame\"));
         GetPlayerIp(playerid, playerIP, 16);
         dini_Set(file, \"IP\", playerIP);
         Update = SetTimerEx(\"UpdateTime\", 60*1000, 1, \"i\", playerid);
         TogglePlayerSpectating(playerid, 0);
         SendClientMessage(playerid, colorGreen, \"Sikeresen bejelentkeztél!\");
      }
   }
}
}
if(dialogid == DIALOG_CHANGEPASS)
{
if(response)
{
    if(GetPVarInt(playerid, \"PassStage\") == 1)
    {
          new password = dini_Int(file, \"Password\");
          if(udb_hash(inputtext) == password)
          {
              SetPVarInt(playerid, \"PassStage\", 2);
         ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT, \"Felhasználó\", \"Kérlek írd be az új jelszót:\", \"Csere\", \"Bezárás\");
      }
      else
      {
          SendClientMessage(playerid, colorRed, \"Hibás jelszó!\");
      }
   }
   else if(GetPVarInt(playerid, \"PassStage\") == 2)
   {
       if(GetPVarInt(playerid, \"Logged\") == 1)
       {
         dini_IntSet(file, \"Password\", udb_hash(inputtext));
         SendClientMessage(playerid, colorGreen, \"Jelszó sikeresen megváltoztatva!\");
      }
   }
}
}
if(dialogid == DIALOG_CHANGENAME)
{
if(response)
{
    if(GetPVarInt(playerid, \"NameStage\") == 1)
    {
          new password = dini_Int(file, \"Password\");
          if(udb_hash(inputtext) == password)
          {
              SetPVarInt(playerid, \"NameStage\", 2);
         ShowPlayerDialog(playerid, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, \"Felhasználó\", \"Kérlek írd az új neved:\", \"Csere\", \"Bezárás\");
      }
      else
      {
          SendClientMessage(playerid, colorRed, \"Hibás jelszó.\");
      }
   }
   else if(GetPVarInt(playerid, \"NameStage\") == 2)
   {
      format(file, 128, \"/tReg/%s.ini\", inputtext);
       if(dini_Exists(file))
       {
         SetPVarInt(playerid, \"NameStage\", 2);
         ShowPlayerDialog(playerid, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, \"Felhasználó\", \"Ez a név már foglalt!\", \"Csere\", \"Bezárás\");
      }
      else
      {
          format(file, 128, \"/tReg/%s.ini\", GetName(playerid)); dini_Remove(file);
          format(file, 128, \"/tReg/%s.ini\", inputtext); dini_Create(file);
         dini_IntSet(file, \"Password\", udb_hash(inputtext));
         dini_IntSet(file, \"Money\", GetPlayerMoney(playerid));
         dini_IntSet(file, \"Score\", GetPlayerScore(playerid));
         dini_IntSet(file, \"Kills\", GetPVarInt(playerid, \"Kills\"));
         dini_IntSet(file, \"Deaths\", GetPVarInt(playerid, \"Deaths\"));
         dini_IntSet(file, \"Minutes Ingame\", GetPVarInt(playerid, \"Time\"));
         SetPlayerName(playerid, inputtext);
         SendClientMessage(playerid, colorGreen, \"Név sikeresen megváltoztatva!\");
      }
   }
}
}
return 0;
}
public UpdateTime(playerid)
{
   format(file, 128, \"/tReg/%s.ini\", GetName(playerid));
SetPVarInt(playerid, \"Time\", GetPVarInt(playerid, \"Time\")+1);
return 1;
}
CMD:changepass(playerid, params[])
{
if(GetPVarInt(playerid, \"Logged\") == 1)
{
    SetPVarInt(playerid, \"PassStage\", 1);
ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT, \"Felhasználó\", \"Kérlek írd be a jelenlegi jelszavad:\", \"Folytatás\", \"Bezárás\");
}
return 1;
}
CMD:changename(playerid, params[])
{
if(GetPVarInt(playerid, \"Logged\") == 1)
{
    SetPVarInt(playerid, \"NameStage\", 1);
ShowPlayerDialog(playerid, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, \"Felhasználó\", \"Please input your password for verification\", \"Folytatás\", \"Bezárás\");
}
return 1;
}
CMD:stats(playerid, params[])
{
   if(GetPVarInt(playerid, \"Logged\") == 1)
{
    new Float:health; GetPlayerHealth(playerid, health);
    new Float:armour; GetPlayerArmour(playerid, armour);
    format(str, 128, \"Név: %s\\nÉlet: %0.00f\\nPáncél: %0.00f\\nPénz: %i\\nPont: %i\\nÖlések: %i\\nHalálok: %i\\nInterior: %i\", GetName(playerid), health, armour, GetPlayerMoney(playerid), GetPlayerScore(playerid), GetPVarInt(playerid, \"Kills\"), GetPVarInt(playerid, \"Deaths\"), GetPlayerInterior(playerid));
ShowPlayerDialog(playerid, DIALOG_VIEWSTATS, DIALOG_STYLE_MSGBOX, \"Felhasználó\", str, \"Oké\", \"Bezárás\");
}
return 1;
}
CMD:checkstats(playerid, params[])
{
new targetid;
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, colorRed, \"Hiba: Nem vagy admin!\");
if(sscanf(params, \"u\", targetid)) return SendClientMessage(playerid, colorRed, \"Használat: /checkstats [PlayerID/Játékos név]\");
if(targetid == playerid) return SendClientMessage(playerid, colorRed, \"Használd: /stats\");
if(targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid, colorRed, \"Nincs ilyen játékos!\");
   if(GetPVarInt(playerid, \"Logged\") == 1)
{
    new Float:health; GetPlayerHealth(targetid, health);
    new Float:armour; GetPlayerArmour(targetid, armour);
    format(str, 128, \"Name: %s\\nHealth: %0.00f\\nArmour: %0.00f\\nMoney: %i\\nScore: %i\\nKills: %i\\nDeaths: %i\", GetName(targetid), health, armour, GetPlayerMoney(targetid), GetPlayerScore(targetid), GetPVarInt(targetid, \"Kills\"), GetPVarInt(targetid, \"Deaths\"));
ShowPlayerDialog(playerid, DIALOG_VIEWSTATS, DIALOG_STYLE_MSGBOX, \"Felhasználó\", str, \"Bezárás\", \"\");
}
return 1;
}
stock GetName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof name);
return name;
}
stock SetPlayerCash(playerid, amount)
{
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, amount);
}

Nem elérhető Lucio

  • 232
    • Profil megtekintése
Dini mentés restartnál
« Válasz #1 Dátum: 2014. Január 04. - 01:43:28 »
0 Show voters
OnGameModeExit -nél mentesz a playerid-t meg for ciklussal oldod meg

Nem elérhető maark

  • 565
    • Profil megtekintése
Dini mentés restartnál
« Válasz #2 Dátum: 2014. Január 04. - 01:47:44 »
0 Show voters
Próbáltam már, úgy mûködik ha rconból visszatöltöm az Fs-t.
Gm-be is raktam modeexit alá, de úgy restartnál nem érvényesül.

Nem elérhető Lucio

  • 232
    • Profil megtekintése
Dini mentés restartnál
« Válasz #3 Dátum: 2014. Január 04. - 01:49:22 »
0 Show voters
Akkor restarthoz kell csinálni egy külön parancsot ami kirúgja a játékosokat és akkor érvényesül az, ha lelép a játékos és lementi

Nem elérhető maark

  • 565
    • Profil megtekintése
Dini mentés restartnál
« Válasz #4 Dátum: 2014. Január 04. - 01:52:16 »
0 Show voters
Igen, így lenne a legegyszerûbb (nem kickel, hanem lepörgeti a játékosokon a mentést).  Csak hogy külön parancs nélkül szeretném megoldani, ezért is írtam fórumra ezt a kérdést/problémát.

Nem elérhető Lucio

  • 232
    • Profil megtekintése
Dini mentés restartnál
« Válasz #5 Dátum: 2014. Január 04. - 01:56:44 »
0 Show voters
Azt írják mindenhol, hogy nem érzékeli a restartot. 5 percenként be kell állítani egy timert ami menti a játékost. Ha történik valami olyan akkor is mentse a játékost. Úgy biztos hogy jó lesz, bár lehet lesz valami lagg féleség ha sokan vannak

Nem elérhető maark

  • 565
    • Profil megtekintése
Dini mentés restartnál
« Válasz #6 Dátum: 2014. Január 04. - 02:04:17 »
0 Show voters
Én is most olvasom õket.. Köszönöm szépen a segítséget! Szerintem megmarad a parancsos mentés, timer nagyon lehúzná a szervert. Témát még nem zárom, ha valakinek van még valami hasznos infója, az jól jönne :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal