Уважаемый пользователь! Система засекла подозрительную активность. Скорее всего вы используете AdBlock (Plus). Наш сервис абсолютно бесплатен, поэтому мы просим вас отключить AdBlock (plus). Как это сделать вы можете узнать, нажав на знак вопроса. Спасибо.
Вступление: Приветствую! У меня огромная проблема. Прошу знающих людей дать ответ, я не слишком смышленый в деле модов, т.к только начинаю этим заниматься так что прошу (Если можете) помочь в решении возникшей ситуации.
Контекст: Дело в том что пишу код с нуля по урокам, в видео автор делает ХЭШ-пароль, а у меня с ним возникли трудности, не суть. Возникла проблема при авторизации игрока. Когда я ввожу не правильный пароль, программа естественно отвечает что он не верный, но когда я пишу правильный, он тоже пишет что он не правильный, и я не знаю что с этим делать...
Весь код (Убрал только не задействованные функции):
открыть спойлер
#include<a_samp>#include<fix>#include<a_mysql>#include<streamer>#include<sscanf2>#include<foreach>#include<Pawn.Regex>#include<Pawn.CMD>#include<crashdetect>#define SCM SendClientMessage#define SCMTA SendClientMessageToAll#define SPD ShowPlayerDialog#define COLOR_WHITE 0xFFFFFFFF#define COLOR_RED 0xff0004AA#define MAX_PASSWORD_LENGTH 32//--------------------------- БАЗА ДАННЫХ ----------------------------#define MYSQL_HOST "localhost"#define MYSQL_USER "root"#define MYSQL_PASS ""#define MYSQL_BASE "project"//------------------------------------------------------------------------main(){ print("\n----------------------------------"); print(" 14.11.23 | Mr.Sokolowsky"); print("----------------------------------\n");}//---------------------------- Переменные ----------------------------//----------------------------- Мусорка ------------------------------//------------------------------------------------------------------------//------------------------------------------------------------------------enum player{ ID, NAME[MAX_PLAYER_NAME], PASSWORD[32], EMAIL[64], REF, SEX, RACE, AGE, SKIN, REGDATA[13], REGIP[16],}new player_info[MAX_PLAYERS][player]; // 1 Warning, он ни на что не влияет.enum Dialog{ DLG_NONE, DLG_REG, DLG_REGEMAIL, DLG_LOG, DLG_REGREF, DLG_SEX, DLG_REGRACE, DLG_REGAGE}new MySQL:dbHandle;public OnGameModeInit(){ ConnectMySQL();return1;}stock ConnectMySQL(){ dbHandle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE);switch(mysql_errno()) {case0: print("Успешно");default: print("НЕ РАБОТАЕТ"); }}public OnGameModeExit(){ mysql_close(dbHandle);return1;}public OnPlayerRequestClass(playerid, classid){return1;}public OnPlayerConnect(playerid){ GetPlayerName(playerid, player_info[playerid][NAME], MAX_PLAYER_NAME); TogglePlayerSpectating(playerid, 1); InterpolateCameraPos(playerid, 1243.014526, -2036.578369, 82.257240+5.0, 71.424697, -2078.663574, 37.513919, 25000); InterpolateCameraLookAt(playerid, 498.725097, -1991.036376, 37.513919-5.0, 364.344390, -1828.529296, 8.788626, 25000);staticconst fmt_query[] = "SELECT `id` 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);return1;}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], 32); ShowLogin(playerid); }else ShowRegistration(playerid);}stock ShowLogin(playerid){new dialog[156+(-2+MAX_PLAYER_NAME)]; format(dialog, sizeof(dialog),"{FFFFFF}Уважаемый {0089ff}%s{FFFFFF}, с возврощением на {0089ff}Venera RolePlay{FFFFFF}\n\ \t\tМы рады снова видеть вас!\n\n\ Для продолжения, введите свой пароль в поле ниже:", player_info[playerid][NAME] ); SPD(playerid, DLG_LOG, DIALOG_STYLE_INPUT, "* {ffd100}Авторизация{FFFFFF} *", dialog, "Войти", "Выход");}stock ShowRegistration(playerid){new dialog[340+(-2+MAX_PLAYER_NAME)]; format(dialog, sizeof(dialog),"{FFFFFF}Уважаемый {0089ff}%s{FFFFFF}, мы рады вас видеть на {0089ff}Venera RolePlay{FFFFFF}\n\ Аккаунт с таким именем не зарегестрирован в базе\n\ Для игры на нашем сервере, придумайте сложный пароль!\n\ После чего нажмите \"Далее\"\n\ {ff9500}\t* Пароль должен быть от 8-ми до 32-ух символов\n\ \t* Пароль дожен состоять из цифр и латинских букв.", player_info[playerid][NAME] ); SPD(playerid, DLG_REG, DIALOG_STYLE_INPUT, "* {ffd100}Регистрация{FFFFFF} * Ввод пароля", dialog, "Далее", "Выход" );}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\ Введите его в поле ниже и нажмите \"Далее\"","Далее", ""); }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: {// caseif(!strlen(inputtext)) {//strlen SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} * Ввод Email","{FFFFFF}Введите свой настоящий Email адрес \n\ Если вы потеряете доступ к аккаунту, то сможете восстановить его через Email\n\ Введите его в поле ниже и нажмите \"Далее\"","Далее", "");return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ваш Email ниже и нажмите \"Далее\""); }//strlennew 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)) {//regex strmid(player_info[playerid][EMAIL], inputtext, 0, strlen(inputtext), 64); SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} * Ввод пригласившего игрока","{FFFFFF}Если ты зашел на сервер по приглашению, то \n\ можешь указать ник пригласившего в поле ниже.","Далее", "Пропустить"); }//regexelse {//else-regex SPD(playerid, DLG_REGEMAIL, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} * Ввод Email","{FFFFFF}Введите свой настоящий Email адрес \n\ Если вы потеряете доступ к аккаунту, то сможете восстановить его через Email\n\ Введите его в поле ниже и нажмите \"Далее\"","Далее", "");return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ваш Email ниже и нажмите \"Далее\"");return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Укажите правильно ваш Email адрес."); }//else-regex regex_delete(rg_emailcheck); }//casecase DLG_REGREF: { // case 2if(response) { // if response 2new regex:rg_refcheck = regex_new("^[a-zA-Z_]{4,24}$");if(regex_check(inputtext, rg_refcheck)) { // if regexstaticconst 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); } // if regexelse { // else regex SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} * Ввод пригласившего игрока","{FFFFFF}Если ты зашел на сервер по приглашению, то \n\ можешь указать ник пригласившего в поле ниже.","Далее", "Пропустить");return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Введите ник игрока приглосившего вас корректно!"); } // else regex regex_delete(rg_refcheck); } // if response 2else { // else if response 2 SPD(playerid, DLG_SEX, DIALOG_STYLE_MSGBOX, "{ff9300}Регистрация{FFFFFF} * Выбор пола","{FFFFFF}Выберите пол вашего персонажа:","Мужской", "Женский"); } // else if response 2 } //case 2case DLG_SEX: {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) {case0: player_info[playerid][RACE] = 1;case1: player_info[playerid][RACE] = 2;case2: player_info[playerid][RACE] = 3; } SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} * Выбор возраста","{FFFFFF}Введите возраст вашего будующего персонажа:\n\ {ff9500}\t* Возраст должен быть от 18-ти до 60-ти лет!","Далее", ""); }case DLG_REGAGE: {if(!strlen(inputtext)) { SPD(playerid, DLG_REGAGE, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} * Выбор возраста","{FFFFFF}Введите возраст вашего будующего персонажа:\n\ {ff9500}\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\ {ff9500}\t* Возраст должен быть от 18-ти до 60-ти лет!","Далее", "");return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Укажите возраст от 18-ти до 60-ти"); } player_info[playerid][AGE] = strval(inputtext);// ИНФ ПРО МАССИВ// В массиве 3 рассы, на каждый диаразон возраста - свои скины// Расы: Негроидная, Европиоидная, Монголоидная// Диапазоны: 18-29, 30-45, 46-60new regmaleskins[9][4] = { {19,21,22,28}, // Негроидная 18-29 {24,25,36,67}, // Негроидная 30-45 {14,142,182,183}, // Негроидная 46-60 {29,96,101,26}, // Европиоидная 18-29 {2,37,72,202}, // Европиоидная 30-45 {1,3,234,290}, // Европиоидная 46-60 {23,60,170,180}, // Монголоидная 18-29 {20,47,48,206}, // Монголоидная 30-45 {44,58,132,229} // Монголоидная 46-60 };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]) {case1: {}case2: newskinindex+=3;case3: newskinindex+=6; }switch(player_info[playerid][AGE]) {case18..29: {}case30..45: newskinindex++;case46..60: newskinindex+=2; }if(player_info[playerid][SEX] == 1) player_info[playerid][SKIN] = regfemaleskins[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));staticconst fmt_query[] = "INSERT INTO `users` (`name`, `password`, `email`, `ref`, `sex`, `race`, `age`, `skin`, `regdata`, `regip`) VALUES ('%s', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%s', '%s')";new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+64)+(-2+32)+(-2+8)+(-2+2)+(-2+2)+(-2+3)+(-2+4)+(-2+13)+(-2+16)]; format(query, sizeof(query), fmt_query, player_info[playerid][NAME], player_info[playerid][PASSWORD], player_info[playerid][EMAIL], 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);staticconst 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) {staticconst fmt_query[] = "SELECT * FROM `users` WHERE `password` = '%s'";new query[sizeof(fmt_query)+(-2+32)]; format(query, sizeof(query), fmt_query, player_info[playerid][PASSWORD]);new Cache: result = mysql_query(dbHandle, query);if(cache_num_rows()) { SCM(playerid, COLOR_WHITE, "{22ff00}[SERVER]{FFFFFF}: {ff0000}Верно!"); }else { SCM(playerid, COLOR_WHITE, "{ff0000}[SERVER]{FFFFFF}: {ff0000}Не верно!"); ShowLogin(playerid); cache_delete(result); } }else { SCM(playerid, COLOR_WHITE, "{ff0000}[SERVER]{FFFFFF}: {ff0000}(/q){FFFFFF}"); SPD(playerid, -1, 0, " ", " ", " ", "");return Kick(playerid); } } }// Не трогатьreturn1;}// не трогать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, "email", player_info[playerid][EMAIL], 64); cache_get_value_name(0, "password", player_info[playerid][PASSWORD], 32); 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, "age", player_info[playerid][AGE]); cache_get_value_name_int(0, "skin", player_info[playerid][SKIN]); cache_get_value_name_int(0, "regdate", player_info[playerid][REGDATA], 13); cache_get_value_name_int(0, "regip", player_info[playerid][REGIP], 16); TogglePlayerSpectating(playerid, 0); SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); SetPVarInt(playerid, "logged", 1); SpawnPlayer(playerid); }return1;}forward CheckReferal(playerid, referal[]);public CheckReferal(playerid, referal[]){new rows; cache_get_row_count(rows);if(rows) {new refid; SPD(playerid, DLG_SEX, DIALOG_STYLE_MSGBOX, "{ff9300}Регистрация{FFFFFF} * Выбор пола","{FFFFFF}Выберите пол вашего персонажа:","Мужской", "Женский"); cache_get_value_name_int(0, "id", refid); player_info[playerid][REF] = refid; }else { SPD(playerid, DLG_REGREF, DIALOG_STYLE_INPUT, "{ff9300}Регистрация{FFFFFF} * Ввод пригласившего игрока","{FFFFFF}Если ты зашел на сервер по приглашению, то \n\ можешь указать ник пригласившего в поле ниже.","Далее", "Пропустить");return SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF}Аккаунта с таким ником нет в базе данных!"); }return1;}public OnPlayerClickPlayer(playerid, clickedplayerid, source){return1;}CMD:spawn(playerid){ TogglePlayerSpectating(playerid, 0); SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); SetPVarInt(playerid, "logged", 1); SpawnPlayer(playerid);}
VDOVA Новичок 1
Вступление: Приветствую! У меня огромная проблема. Прошу знающих людей дать ответ, я не слишком смышленый в деле модов, т.к только начинаю этим заниматься так что прошу (Если можете) помочь в решении возникшей ситуации.
Контекст: Дело в том что пишу код с нуля по урокам, в видео автор делает ХЭШ-пароль, а у меня с ним возникли трудности, не суть. Возникла проблема при авторизации игрока. Когда я ввожу не правильный пароль, программа естественно отвечает что он не верный, но когда я пишу правильный, он тоже пишет что он не правильный, и я не знаю что с этим делать...
Весь код (Убрал только не задействованные функции):
Код самой авторизации:
Отредактировано пользователем keyl
Заметка от keyl , создано
3.2. Код необходимо брать в тег "Код", а код более 10 строк – еще и в "Спойлер". Как это сделать рассказано в разделе "FAQ".
Устное предупреждение.
Поделиться сообщением
Ссылка на сообщение