При введении неверного пароля, инфа аккаунта обнуляется
#1

Помогите исправить проблему с авторизацией игрока.
То есть,когда мы вводим неверный пароль,то статистика игрока в папке 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;
}
Reply
#2

Поставь перед логином загрузку всех данных игрока. Тоесть чтобы при кике не сохранялись нули, а статистика игрока, загруженная до появления диалога со входом.
Reply
#3

Вот поэтому во всех нормальных системах авторизации есть флаг отвечающий за то что игрок залогинился.
Reply
#4

Потому что у тебя файл не закрывается при неверном вводе пароля.
Reply
#5

Ты открываешь файл с данными игрока но закрываешь его только если пароль правильный.

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;
}
Reply
#6

спасибо всем, все получилось.
Reply
#7

Только над кодом поработай, а то сначала кикаешь игрока, а потом показываешь сообщение. Добавь его в первое условие.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)