Kohann 0 Опубликовано 7 июня, 2019 Вообщем начал писать мод с 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 0 Опубликовано 14 июля, 2019 Вместо старого кода вставьте этот 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,!"Вы ввели неверный пароль!"); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты