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);
}