04.07.2013, 17:20
Ребят вопрос конечно хорош, начну с кода:
Сама суть проблемы:
В данном коде указана система регистрации. Проблема в том, что через некоторое время (примерно день или пол дня) аккаунт недееспособен.
К примеру:
Вчера был я админом с 100 фрагами, сегодня захожу - бац обычный игрок и фрагов нет. При этом аккаунт на хосте не тронут. После перезагрузки сервера все становится обратно. Все бы ничего, но получается что не грузит файл аккаунта.
Помогите кто-нибудь разобраться. Голову изломал не могу решения найти.
Стоит учесть что путь акков таков: users/%s.ini (папка scriptfiles)
Код:
#include <mxINI> #include <md5> enum pInfo{ pBank, pAdmin, pScore,}; forward SaveAccounts(); stock SaveAccount(playerid){ new PlayerName[MAX_PLAYER_NAME], account[128]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); format(account,sizeof(account), "users/%s.ini", PlayerName); new iniFile = ini_openFile(account); ini_setInteger(iniFile, "Bank", Player[playerid][pBank]); ini_setInteger(iniFile, "Score", GetPlayerScore(playerid)); ini_setInteger(iniFile, "Level", Player[playerid][pAdmin]); ini_closeFile(iniFile); return true;} pubblic OnPlayerConnect(playerid){ new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); new account[128]; format(account,sizeof(account),"users/%s.ini",PlayerName); if(!fexist(account)) { ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Зарегистрируйтесь! Введите пароль", "ок", ""); }else{ ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "{FFFFFF}Àâòîðèçàöèÿ", "Авторизуйтесь! Введите пароль", "ок", "");} return true;} public OnPlayerDisconnect(playerid, reason){ new PlayerName[MAX_PLAYER_NAME], account[128]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); format(account,sizeof(account), "users/%s.ini", PlayerName); new iniFile = ini_openFile(account); ini_setInteger(iniFile, "Bank", Player[playerid][pBank]); ini_setInteger(iniFile, "Score", GetPlayerScore(playerid)); ini_closeFile(iniFile); } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){ if(dialogid == 1){ if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Зарегистрируйтесь! Введите пароль", "ок", ""); if(response){ if(IsPlayerConnected(playerid)){ new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); new account[128]; format(account,sizeof(account),"users/%s.ini",PlayerName); if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйтесь! Введите пароль", "ок", ""); new iniFile = ini_createFile(account); if(iniFile < 0) ini_openFile (account);{ ini_setString(iniFile,"Ïàðîëü",inputtext); ini_setInteger(iniFile, "Bank", 0); ini_setInteger(iniFile, "Score", 0); ini_setInteger(iniFile, "Level", 0); ini_closeFile(iniFile); SetPVarInt(playerid, "Logged", 0); if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйтесь! Введите пароль", "ок", ""); } }else{ ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Зарегистрируйтесь! Введите пароль", "ок", "");}}} if(dialogid == 2){ if(!strlen(inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйтесь! Введите пароль", "ок", ""); if(response){ new PlayerName[MAX_PLAYER_NAME], password[64]; GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); new account[128]; format(account,sizeof(account),"users/%s.ini",PlayerName); if(IsPlayerNPC(playerid))return true; new iniFile = ini_openFile(account); ini_getString(iniFile, "Пароль",password); if(!strcmp(inputtext, password, true)){ ini_getInteger(iniFile, "Bank", Player[playerid][pBank]); ini_getInteger(iniFile, "Score", Player[playerid][pScore]); ini_getInteger(iniFile, "Level", Player[playerid][pAdmin]); SetPlayerScore(playerid, Player[playerid][pScore]); GivePlayerMoney(playerid, Player[playerid][pMoney]); ini_closeFile(iniFile); logged[playerid] = 1; GameTextForPlayer(playerid, "~y~Logged in!",2000,1); PlayerPlaySound(playerid,1057,0.0,0.0,0.0); if(Player[playerid][pAdmin] == 0){ GetPlayerName(playerid, PlayerName, 30); format(string, sizeof(string), "Загруженный как: %s, игрок", PlayerName); SendClientMessage(playerid, 0x33AA33AA, string);} if(Player[playerid][pAdmin] == 100){ GetPlayerName(playerid, PlayerName, 30); format(string, sizeof(string), "Загруженный как: %s, уровень 1 (Администратор)", PlayerName); SendClientMessage(playerid, 0x33AA33AA, string);} if(Player[playerid][pAdmin] == 101){ GetPlayerName(playerid, PlayerName, 30); format(string, sizeof(string), "Загруженный как: %s, уровень 2 (Владелец ресурса)", PlayerName); SendClientMessage(playerid, 0x33AA33AA, string);} return true; }else{ SendClientMessage(playerid, 0xFF0000AA, "Неверно указан пароль! Попробуйте еще раз"); ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйтесь! Введите пароль", "ок", ""); return true;} }else{ ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйтесь! Введите пароль", "ок", ""); return false;}} return false;} public SaveAccounts(){ for(new f; f < GetMaxPlayers(); f++){ if(!IsPlayerConnected(f))continue; SaveAccount(f);}}
В данном коде указана система регистрации. Проблема в том, что через некоторое время (примерно день или пол дня) аккаунт недееспособен.
К примеру:
Вчера был я админом с 100 фрагами, сегодня захожу - бац обычный игрок и фрагов нет. При этом аккаунт на хосте не тронут. После перезагрузки сервера все становится обратно. Все бы ничего, но получается что не грузит файл аккаунта.
Помогите кто-нибудь разобраться. Голову изломал не могу решения найти.
Стоит учесть что путь акков таков: users/%s.ini (папка scriptfiles)