Перейти к содержанию
Авторизация  
Kohann

Не работает пароль

Рекомендуемые сообщения

Kohann

Вообщем начал писать мод с 0.
Почему я ввожу рандомный пароль и меня сразу отплавляет на спавн хотя пароль при регистрации указывал другой.



Вот сам мод:


 

#include <a_samp>
#include <fix>
#include <a_mysql>
#include <streamer>
#include <Pawn.cmd>
#include <sscanf2>
#include <foreach>
#include <Pawn.Regex>
#include <crashdetect>

#define     MYSQL_HOST "localhost"
#define     MYSQL_USER "root"
#define     MYSQL_PASS ""
#define     MYSQL_BASE "project"

#define     SCM      SendClientMessage
#define     SCMTA   SendClientMessageToAll
#define     SPD     ShowPlayerDialog

#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_RED   0xFF0000FF

main()
{
    print("\n-----------------------------------");
    print("-------NEW PROJETCT STARTED-------");
    print("-----------------------------------\n");
}

//====================  Переменные  ============================================

//--------------------  Мусорка ------------------------------------------------
new MySQL:dbHandle;
//------------------------------------------------------------------------------

//==============================================================================

enum player
{
    ID,
    NAME[MAX_PLAYER_NAME],
    PASSWORD[65],
    SALT[11],
    EMAIL[65],
    REF,
    SEX,
    RACE,
    AGE,
    SKIN,
    REGDATA[13],
    REGIP[16],
}
new player_info[MAX_PLAYERS][player];

enum dialogs
{
    DLG_NONE,
    DLG_REG,
    DLG_REGEMAIL,
    DLG_LOG,
    DLG_REGREF,
    DLG_SEX,
    DLG_REGRACE,
    DLG_REGAGE,
    DLG_REGSEX,
}

public OnGameModeInit()
{
    ConnectMySQL();
    return 1;
}

stock ConnectMySQL()
{
    dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE);
    switch(mysql_errno())
    {
        case 0: print("Подключение к MySQL успешно!");
        default: print("MYSQL НЕ РАБОТАЕТ!!!");
    }
    mysql_log(ERROR | WARNING);
    mysql_set_charset("cp1251");
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME);
    TogglePlayerSpectating(playerid, 1);
    
    InterpolateCameraPos(playerid, 2136.1487,-1822.3346,87.0022, 2675.6711,-2180.6238,72.7736,25000 );
    InterpolateCameraLookAt(playerid, 2393.5427,-2133.4954,78.7384, 2384.1890,-1653.2084,99.3312,25000 );
    
    static const fmt_query[] = "SELECT `password`, `salt` FROM `users` WHERE `name` = '%s'";
    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];
    format(query, sizeof(query), fmt_query, player_info[playerid][NAME]);
    mysql_tquery(dbHandle, query, "CheckRegistration", "i", playerid);
    
    SetPVarInt(playerid, "WrongPassword", 3);
    return 1;
}

forward CheckRegistration(playerid);
public CheckRegistration(playerid)
{
    new rows;
    cache_get_row_count(rows);
    if(rows)
    {
         cache_get_value_name(0, "password", player_info[playerid][PASSWORD], 65);
         cache_get_value_name(0, "salt", player_info[playerid][SALT], 11);
        ShowLogin(playerid);
    }
    else ShowRegistration(playerid);
}

stock ShowLogin(playerid)
{
    new dialog[171+(-2+MAX_PLAYER_NAME)];
    format(dialog, sizeof(dialog),
        "{FFFFFF}Уважаемый {0089ff}%s{FFFFFF}, с возвращением на {0089ff}Project RolePlay{FFFFFF}\n\
        \t\tМы рады снова видеть вас!\n\n\
        Для продолжения введите свой пароль в поле ниже:",
    player_info[playerid][NAME]
    );
    SPD(playerid, DLG_LOG, DIALOG_STYLE_INPUT, "{ff9300}Авторизация{FFFFFF}", dialog, "Войти", "Выход");
}

stock ShowRegistration(playerid)
{
    new dialog[402+(-2+MAX_PLAYER_NAME)];
    format(dialog, sizeof(dialog),
        "{FFFFFF}Уважаемый {0089ff}%s{FFFFFF}, мы рады видеть вас на {0089ff}Project RolePlay{FFFFFF}\n\
        Аккаунт с таким ником не зарегистрирован\n\
        Для игры на сервере вы должны пройти регистрацию\n\n\
        Придумайте сложный пароль для вашего будущего аккаунта и нажмите \"Далее\"\n\
        {ff9300}\t• Пароль должен быть от 8-ми до 32-х символов\n\
        \t• Пароль должен состоять только из чисел и латинских символов любого регистра",
        player_info[playerid][NAME]
    );
    SPD(playerid, DLG_REG, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Ввод пароля", dialog, "Далее", "Выход");
}

public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DLG_REG:
        {
            if(response)
            {
                if(!strlen(inputtext))
                {
                    ShowRegistration(playerid);
                    return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите пароль в поле ниже и нажмите \"Далее\"");
                }
                if(strlen(inputtext) < 8 || strlen (inputtext) > 32)
                {
                    ShowRegistration(playerid);
                    return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Длина пароля должна быть от 8-ми до 32-х символов");
                }
                new regex:rg_passwordcheck = regex_new("^[a-zA-Z0-9]{1,}$");
                if(regex_check(inputtext, rg_passwordcheck))
                {
                    strmid(player_info[playerid][PASSWORD], inputtext, 0, strlen(inputtext), 32);
                    SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Ввод Email",
                        "{FFFFFF}Введите ваш настоящий Email адрес\n\
                        Если вы потеряете доступ к аккаунту, то вы сможете его восстановить его через Email\n\
                        \t\tВведите его в поле ниже и нажмите \"Далее\"",
                    "Далее", "");
                }
                else
                {
                    ShowRegistration(playerid);
                    return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Пароль может состоять только из чисел и латинских символов любого регистра");
                }
                regex_delete(rg_passwordcheck);
            }
            else
            {
                SCM(playerid, COLOR_RED, "Используйте \"/q\", чтобы покинуть сервер");
                SPD(playerid, -1, 0, " ", " ", " ", "");
                return Kick(playerid);
            }
        }
        case DLG_REGEMAIL:
        {
            if(!strlen(inputtext))
            {
                SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Ввод Email",
                    "{FFFFFF}Введите ваш настоящий Email адрес\n\
                    Если вы потеряете доступ к аккаунту, то вы сможете его восстановить его через Email\n\
                    \t\tВведите его в поле ниже и нажмите \"Далее\"",
                "Далее", "");
                return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ваш Email в поле ниже и нажмите \"Далее\"");
            }
            new regex:rg_emailcheck = regex_new("^[a-zA-Z0-9.-_]{1,43}@[a-zA-Z]{1,12}.[a-zA-Z]{1,8}$");
            if(regex_check(inputtext, rg_emailcheck))
            {
                strmid(player_info[playerid], inputtext, 0, strlen(inputtext), 64);
                SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Ввод пригласившего",
                "{FFFFFF}Если ты зашел на сервер по приглашению, то\n\
                можешь указать ник пригласившего в поле ниже:",
                "Далее", "Пропустить");
            }
            else
            {
                SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Ввод Email",
                    "{FFFFFF}Введите ваш настоящий Email адрес\n\
                    Если вы потеряете доступ к аккаунту, то вы сможете его восстановить его через Email\n\
                    \t\tВведите его в поле ниже и нажмите \"Далее\"",
                "Далее", "");
                return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Укажите правильно ваш Email адрес");
            }
            regex_delete(rg_emailcheck);
        }
        case DLG_REGREF:
        {
            if(response)
            {
                new regex:rg_refcheck = regex_new("^[a-zA-Z_]{4,24}$");
                if(regex_check(inputtext, rg_refcheck))
                {
                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)];
                    format(query, sizeof(query), fmt_query, inputtext);
                    mysql_tquery(dbHandle, query, "CheckReferal", "is", playerid, inputtext);
                }
                else
                {
                    SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Ввод пригласившего",
                        "{FFFFFF}Если ты зашел на сервер по приглашению, то\n\
                        можешь указать ник пригласившего в поле ниже:",
                    "Далее", "Пропустить");
                    return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Корректно введите ник игрока пригласившего вас");
                }
                regex_delete(rg_refcheck);
            }
            else
            {
                SPD(playerid, DLG_REGSEX, DIALOG_STYLE_MSGBOX, "{ff9300}Регистрация{FFFFFF} • Выбор пола персонажа",
                "{FFFFFF}Выберите пол вашего будущего пержсонажа:",
                "Мужской", "Женский");
            }
        }
        case DLG_REGSEX:
        {
            if(response) player_info[playerid][SEX] = 1;
            else player_info[playerid][SEX] = 2;
            SPD(playerid, DLG_REGRACE, DIALOG_STYLE_LIST, "{ff9300}Регистрация{FFFFFF} • Выбор расы персонажа",
                "Негроидная\n\
                Европесидная\n\
                Монголоидная/Азиатская",
            "Далее", "");
        }
        case DLG_REGRACE:
        {
            switch(listitem)
            {
                case 0: player_info[playerid][RACE] = 1;
                case 1: player_info[playerid][RACE] = 2;
                case 2: player_info[playerid][RACE] = 3;
            }
            SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Выбор возраста персонажа",
            "{FFFFFF} Введите возраст вашего будущего персонажа:\n\
            {ff9300}\t• Введите возраст от 18-ти до 60-ти",
            "Далее", "");
        }
        case DLG_REGAGE:
        {
            if(!strlen(inputtext))
            {
                SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Выбор возраста персонажа",
                "{FFFFFF} Введите возраст вашего будущего персонажа:\n\
                {ff9300}\t• Введите возраст от 18-ти до 60-ти",
                "Далее", "");
                return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ваш возраств поле ниже и нажмите \"Далее\"");
            }
            if(strval(inputtext) < 18 || strval(inputtext) > 60)
            {
                SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Выбор возраста персонажа",
                    "{FFFFFF} Введите возраст вашего будущего персонажа:\n\
                    {ff9300}\t• Введите возраст от 18-ти до 60-ти",
                "Далее", "");
                return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ваш возраст от 18-ти до 60-ти");
            }
            player_info[playerid][AGE] = strval(inputtext);
            /*ИНФ ПРО МАССИВ
            В массиве 3 расы, на каждый диапазон возраста - свои скины
            Рысы: негройная, европеская, монголоидная(азиатская)
            Диапазоны: 18-29, 30-45, 46,-60
            */
            new regmaleskins[9][4] =
            {
                {19,21,22,28},
                {24,25,36,67},
                {14,142,182,183},
                {29,96,101,26},
                {2,37,72,202},
                {1,3,234,290},
                {23,60,170,180},
                {20,47,48,206},
                {44,58,132,229}
                };
            new regfemaleskins[9][2] =
            {
                {13,69},
                {9,190},
                {10,218},
                {41,56},
                {31,151},
                {39,89},
                {169,193},
                {207,225},
                {54,130}
            };
            new newskinindex;
            switch(player_info[playerid][RACE])
            {
                case 1: {}
                case 2: newskinindex+=3;
                case 3: newskinindex+=6;
            }
            switch(player_info[playerid][AGE])
            {
                   case 18..29: {}
                   case 30..45: newskinindex++;
                   case 46..60: newskinindex+=2;
            }
            if(player_info[playerid][SEX] == 1) player_info[playerid][SKIN] = regmaleskins[newskinindex][random(4)];
            else player_info[playerid][SKIN] = regfemaleskins[newskinindex][random(2)];
            new Year, Month, Day;
            getdate(Year, Month, Day);
            new date[13];
            format(date, sizeof(date), "%02d.%02d.%d", Day, Month, Year);
            new ip[16];
            GetPlayerIp(playerid, ip, sizeof(ip));
            static const fmt_query[] = "INSERT INTO `users` (`name`, `password`, `salt`, `email`, `ref`, `sex`, `race`, `age`, `skin`, `regdata`, `regip`) VALUES ('%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%s', '%s')";
            new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)+(-2+10)+(-2+64)+(-2+8)+(-2+1)+(-2+1)+(-2+2)+(-2+3)+(-2+12)+(-2+15)];
            format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD], player_info[playerid][SALT],  player_info[playerid],  player_info[playerid][REF],  player_info[playerid][SEX],  player_info[playerid][RACE],  player_info[playerid][AGE],  player_info[playerid][SKIN], date, ip);
            mysql_query(dbHandle, query);
            static const fmt_query2[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s' ";
            format(query, sizeof(query), fmt_query2, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
            mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
        }
        case DLG_LOG:
        {
            if(response)
            {
                  new checkpass[65];
                if(strcmp(player_info[playerid][PASSWORD], checkpass, false, 64) == 0)
                {
                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)];
                    format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin", "i", playerid);
                }
                else
                {
                    new string[87];
                    SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword ")-1);
                    if(GetPVarInt(playerid, "WrongPassword") > 0)
                    {
                        format(string, sizeof(string), "[Ошибка] {FFFFFF}Вы ввели неверный пароль от аккаунта. У вас осталось %d попыток входа.", GetPVarInt(playerid, "WrongPassword"));
                        SCM(playerid, COLOR_RED, string);
                    }
                    if(GetPVarInt(playerid, "WrongPassword") == 0)
                    {
                        SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF} Вы исчерпали лимит попыток входа и были отключены от сервера");
                        Kick(playerid);
                    }
                    ShowLogin(playerid);
                }
            }
            else
            {
                SCM(playerid, COLOR_RED, "Используйте \"/q\", чтобы покинуть сервер");
                SPD(playerid, -1, 0, " ", " ", " ", "");
                return Kick(playerid);
            }
        }
    }
    return 1;
}

forward PlayerLogin(playerid);
public PlayerLogin(playerid)
{
    new rows;
    cache_get_row_count(rows);
    if(rows)
    {
        cache_get_value_name_int(0, "id", player_info[playerid][ID]);
        cache_get_value_name(0, "password", player_info[playerid][PASSWORD], 65);
        cache_get_value_name(0, "email", player_info[playerid], 64);
        cache_get_value_name_int(0, "ref", player_info[playerid][REF]);
        cache_get_value_name_int(0, "sex", player_info[playerid][SEX]);
        cache_get_value_name_int(0, "race", player_info[playerid][RACE]);
        cache_get_value_name_int(0, "skin", player_info[playerid][SKIN]);
        cache_get_value_name(0, "regdata", player_info[playerid][SKIN]);
        cache_get_value_name(0, "regip", player_info[playerid][SKIN]);
        
        TogglePlayerSpectating(playerid, 0);
        SetPVarInt(playerid, "Logged", 1);
        SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        SpawnPlayer(playerid);
    }
    return 1;
}

forward CheckReferal(playerid, referal[]);
public CheckReferal(playerid, referal[])
{
    new rows;
    cache_get_row_count(rows);
    if(rows) 
    {
        new refid;
        cache_get_value_name_int(0, "id", refid);
        player_info[playerid][REF] = refid;
        SCM(playerid, COLOR_WHITE, "Чики пуки");
        SPD(playerid, DLG_SEX, DIALOG_STYLE_MSGBOX, "{ff9300}Регистрация{FFFFFF} • Выбор пола персонажа",
            "{FFFFFF}Выберите пол вашего пержсонажа:",
        "Мужской", "Женский");
    }
    else 
    {
        SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} • Ввод пригласившего",
            "{FFFFFF}Если ты зашел на сервер по приглашению, то\n\
            можешь указать ник пригласившего в поле ниже:",
        "Далее", "Пропустить");
         return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Аккаунта с таким ником не существует");
    }
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

CMD:spawn(playerid)
{
        TogglePlayerSpectating(playerid, 0);
        SetPVarInt(playerid, "Logged", 1);
        SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        SpawnPlayer(playerid);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Stamen

Вместо старого кода вставьте этот

		case DLG_LOG:
        {
			if(!response) return Kick(playerid);
			if(!strlen(inputtext)) return ShowLogin(playerid);
			if(!strcmp(player_info[playerid][PASSWORD],inputtext))
			{
				new s_string[65];
				format(s_string,65,"SELECT * FROM `users` WHERE `name` = '%s'", player_info[playerid][NAME]);
				mysql_tquery(dbHandle,s_string,"PlayerLogin","i",playerid);
			}
			else
			{
				if(GetPVarInt(playerid,!"WrongPassword") >= 3) return Kick(playerid);
				SetPVarInt(playerid,!"WrongPassword",GetPVarInt(playerid,!"WrongPassword")+1);
				ShowLogin(playerid), SCM(playerid,-1,!"Вы ввели неверный пароль!");
			}
         }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.