PDA

Просмотр полной версии : [Вопрос] Проблема с авторизацией



Draga-02
20.04.2017, 18:37
Написал систему авторизации на MySQL.

Но столкнулся с одной проблемой, когда один игрок проходит авторизацию всё проходит нормально, его спавнит в его скине с его всеми данными.

http://i.imgur.com/WPZTLYi.jpg

Но когда авторизован игрок на сервере и заходит другой, при вводе пароля в окно авторизации авторизованному игроку выдаётся скин игрока который ввел пароль в окно авторизации и заспавнило авторизованного игрока на точку спавна.

http://i.imgur.com/PvrsvE0.jpg

А у игрока который проходил авторизацию, окно после ввода пароля пропало и не заспавнило!

Вот код авторизации/спавна/и загрузки аккаунта:


public OnPlayerSpawn(playerid)
{
if(GetPVarInt( playerid, "RegSkin") == 1)
{
SetPVarInt( playerid, "RegSkin", 0);
SetPlayerCameraPos( playerid, 204.4336, -164.8902, 1001.2896);
SetPlayerCameraLookAt( playerid, 204.2567, -160.8903, 1000.5234);
SetPlayerInterior( playerid, 14);
SetPlayerVirtualWorld( playerid, 14);
SetPlayerPos( playerid, 204.2567, -160.8903, 1000.5234);
SetPlayerFacingAngle( playerid, 180.0);
TextDrawShowForPlayer( playerid, BACK[playerid]);
TextDrawShowForPlayer( playerid, NEXT[playerid]);
TextDrawShowForPlayer( playerid, SELECT[playerid]);
SelectTextDraw( playerid, 0xFFFFFFFF);
switch(Player[playerid][Sex])
{
case 1:
{
SetPlayerSkin( playerid, 2);
SetPVarInt( playerid, "selectskin", 2);
}
case 2:
{
SetPlayerSkin( playerid, 9);
SetPVarInt( playerid, "selectskin", 9);
}
}
}
if(GetPVarInt( playerid, "registration") == 1)
{
CancelSelectTextDraw( playerid);
TextDrawHideForPlayer( playerid, BACK[playerid]);
TextDrawHideForPlayer( playerid, NEXT[playerid]);
TextDrawHideForPlayer( playerid, SELECT[playerid]);
TogglePlayerControllable( playerid, 1);
SetPlayerInterior( playerid, 0);
SetPlayerVirtualWorld( playerid, 0);
SetPlayerSkin( playerid, Player[playerid][Skin]);
SetPlayerScore( playerid, Player[playerid][Level]);
SetPlayerPos( playerid, 1770.2997, -1949.2952, 14.1096);
SetPlayerFacingAngle( playerid, 328.0);
}
else
{
SetPVarInt( playerid, "Spawn", 0);
SetPlayerInterior( playerid, 0);
SetPlayerVirtualWorld( playerid, 0);
SetPlayerSkin( playerid, Player[playerid][Skin]);
SetPlayerScore( playerid, Player[playerid][Level]);
SetPlayerPos( playerid, 1770.2997, -1949.2952, 14.1096);
SetPlayerFacingAngle( playerid, 328.0);
}
return 1;
}

case 6:
{
if(response)
{
if(!strlen(inputtext))
{
static const
login[] = "{FFFFFF}Уважаемый {00FFA8}%s{FFFFFF}!\n\
Вы зашли на сервер: {8AFF00}Server{FFFFFF}!\n\
Данный персонаж имеется в базе данных!\n\
Пройдите авторизацию!";
new str_login[sizeof(login) + (-2+24)];

format( str_login, sizeof(str_login), login, sendername(playerid));
SPD( playerid, 6, DSI, "{0080B5}Авторизация.", str_login, "{FFFFFF}Далее", "{FFFFFF}Выход");
return 1;
}
for(new i = strlen(inputtext); i != 0; --i)
switch(inputtext[i])
{
case 'А'..'Я', 'а'..'я': return show_mistake2(playerid);
}
if(strlen(inputtext) < 5 || strlen(inputtext) > 15) return show_mistake2(playerid);

static const
pass[] = "SELECT * FROM `accounts` WHERE `name` = '%s' AND `password` = '%s' LIMIT 1";
new str_pass[sizeof(pass) + (-2+24) + (-2+15)];

format( str_pass, sizeof(str_pass), pass, sendername(playerid), inputtext);
return mysql_function_query( Mysqlconnect, str_pass, true, "@OnPlayerLogin", "");
}
else
{
SCM( playerid, COLOR_ORANGE, "Вы были кикнуты сервером! (Для того чтобы выйти воспользуйтесь командой /q(uit)).");
Kickk(playerid);
}
}
}

@OnPlayerLogin(playerid);
@OnPlayerLogin(playerid)
{
new r, f;
cache_get_data( r, f);
if(r)
{
cache_get_field_content(0, "name", Player[playerid][Name], Mysqlconnect, 25);
cache_get_field_content(0, "password", Player[playerid][Password], Mysqlconnect, 16);
Player[playerid][Level] = cache_get_field_content_int(0, "level", Player[playerid][Level]);
Player[playerid][Nation] = cache_get_field_content_int(0, "nation", Player[playerid][Nation]);
Player[playerid][Year] = cache_get_field_content_int(0, "year", Player[playerid][Year]);
Player[playerid][Sex] = cache_get_field_content_int(0, "sex", Player[playerid][Sex]);
Player[playerid][Skin] = cache_get_field_content_int(0, "skin", Player[playerid][Skin]);
Player[playerid][Admin] = cache_get_field_content_int(0, "admin", Player[playerid][Admin]);
Player[playerid][Money] = cache_get_field_content_int(0, "money", Player[playerid][Money]);
if(Player[playerid][Skin] != 0)
{
Logged{playerid} = true;
TogglePlayerSpectating(playerid, false);
LoginPlayer{playerid} = true;
KillTimer(PlayerLogin[playerid]);
SpawnPlayer(playerid);
}
}
else
{
SetPVarInt( playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")+1);
if(GetPVarInt( playerid, "WrongPassword") == 3)
{
SCM( playerid, COLOR_ORANGE, "Вы ввели 3 раза неверный пароль!");
SCM( playerid, COLOR_ORANGE, "Вы были кикнуты сервером! (Для того чтобы выйти воспользуйтесь командой /q(uit)).");
return Kickk(playerid);
}

static const
Wrong[] = "Введённый пароль не совпадает с паролем в базе данных! У вас осталось попыток: %i из 3!";
new str_wrong[sizeof(Wrong) + (-2+2)];

format( str_wrong, sizeof(str_wrong), Wrong, 3-GetPVarInt( playerid, "WrongPassword"));
SCM( playerid, COLOR_WARNING, str_wrong);

static const
login[] = "{FFFFFF}Уважаемый {00FFA8}%s{FFFFFF}!\n\
Вы зашли на сервер: {8AFF00}Server{FFFFFF}!\n\
Данный персонаж имеется в базе данных!\n\
Пройдите авторизацию!";
new str_login[sizeof(login) + (-2+24)];
format( str_login, sizeof(str_login), login, sendername(playerid));
SPD( playerid, 6, DSI, "{0080B5}Авторизация.", str_login, "{FFFFFF}Далее", "{FFFFFF}Выход");
}
return 1;
}




Заранее огромное спасибо:)