При введении неверного пароля, инфа аккаунта обнуляется -
[HHT]DRON - 22.06.2012
Помогите исправить проблему с авторизацией игрока.
То есть,когда мы вводим неверный пароль,то статистика игрока в папке Scriptfiles/Users обнуляется.
Открываем файл игрока который ввел неверный пароль NickName.ini и видим
Pass =
Admin Level = 0
VIP = 0
Jailed = 0
Muted = 0
Money = 0
Score = 0
Kills = 0
Deaths = 0
Bank = 0
Помогите исправить пожалуйста.
Код:
forward OnPlayerLogin(playerid,password[]);
public OnPlayerLogin(playerid,password[])
{
if(IsPlayerConnected(playerid))
{
new string[64];
new pass[16];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
format(string,sizeof(string), "Users/%s.ini", playername);
new iniFile = ini_openFile(string);
ini_getString(iniFile,"Pass",pass,16);
if(strcmp(pass,password,true) == 0)
{
ini_getString(iniFile,"Pass",Player[playerid][pPass],64);
ini_getInteger(iniFile,"Admin Level",Player[playerid][AdminLevel]);
ini_getInteger(iniFile,"VIP",Player[playerid][pVip]);
ini_getInteger(iniFile,"Jailed", Player[playerid][jailed]);
ini_getInteger(iniFile,"Muted", Player[playerid][pMuted]);
ini_getInteger(iniFile, "Money", Player[playerid][pMoney]);
ini_getInteger(iniFile, "Score", Player[playerid][pScore]);
ini_getInteger(iniFile,"Kills", Player[playerid][pKills]);
ini_getInteger(iniFile,"Deaths", Player[playerid][pDeaths]);
ini_getInteger(iniFile,"Bank", Player[playerid][pBank]);
SetPlayerScore(playerid,Player[playerid][pScore]);
ini_closeFile(iniFile);
}
else
{
SendClientMessage(playerid,COLOR_RED,"Вы были кикнуты с сервера! [Причина: Неверный пароль].");
Kick(playerid);
return 1;
}
SendClientMessage(playerid,0xFF00000,"Вы успешно авторизованны!");
}
return 1;
}
Re: При введении неверного пароля, инфа аккаунта обнуляется -
ZAM - 22.06.2012
Поставь перед логином загрузку всех данных игрока. Тоесть чтобы при кике не сохранялись нули, а статистика игрока, загруженная до появления диалога со входом.
Re: При введении неверного пароля, инфа аккаунта обнуляется -
Stepashka - 23.06.2012
Вот поэтому во всех нормальных системах авторизации есть флаг отвечающий за то что игрок залогинился.
Re: При введении неверного пароля, инфа аккаунта обнуляется -
OKStyle - 23.06.2012
Потому что у тебя файл не закрывается при неверном вводе пароля.
Re: При введении неверного пароля, инфа аккаунта обнуляется -
CaHbKo - 23.06.2012
Ты открываешь файл с данными игрока но закрываешь его только если пароль правильный.
pawn Код:
forward OnPlayerLogin(playerid,password[]);
public OnPlayerLogin(playerid,password[])
{
if(IsPlayerConnected(playerid))
{
new string[64];
new pass[16];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
format(string,sizeof(string), "Users/%s.ini", playername);
new iniFile = ini_openFile(string);
ini_getString(iniFile,"Pass",pass,16);
if(strcmp(pass,password,true) == 0)
{
ini_getString(iniFile,"Pass",Player[playerid][pPass],64);
ini_getInteger(iniFile,"Admin Level",Player[playerid][AdminLevel]);
ini_getInteger(iniFile,"VIP",Player[playerid][pVip]);
ini_getInteger(iniFile,"Jailed", Player[playerid][jailed]);
ini_getInteger(iniFile,"Muted", Player[playerid][pMuted]);
ini_getInteger(iniFile, "Money", Player[playerid][pMoney]);
ini_getInteger(iniFile, "Score", Player[playerid][pScore]);
ini_getInteger(iniFile,"Kills", Player[playerid][pKills]);
ini_getInteger(iniFile,"Deaths", Player[playerid][pDeaths]);
ini_getInteger(iniFile,"Bank", Player[playerid][pBank]);
SetPlayerScore(playerid,Player[playerid][pScore]);
}
else
{
SendClientMessage(playerid,COLOR_RED,"Вы были кикнуты с сервера! [Причина: Неверный пароль].");
Kick(playerid);
}
SendClientMessage(playerid,0xFF00000,"Вы успешно авторизованны!");
ini_closeFile(iniFile);
}
return 1;
}
Re: При введении неверного пароля, инфа аккаунта обнуляется -
[HHT]DRON - 23.06.2012
спасибо всем, все получилось.
Re: При введении неверного пароля, инфа аккаунта обнуляется -
OKStyle - 23.06.2012
Только над кодом поработай, а то сначала кикаешь игрока, а потом показываешь сообщение. Добавь его в первое условие.