Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Проблема с переводом мода на MySQL R7

Статус
В этой теме нельзя размещать новые ответы.

-=Nexus=-

Дебютант
Всем привет. В pawno я новенький, пишу свой проект с чистого листа, возникла проблема с переводом мода на mysql R7 (blueG).Быть точнее - что то я мудрю с системой регистрации. До этого использовал MySQL R6, все работало норм. Попробывал его перевести, насчет измененных функций я в курсе. компиляция прошла без проблем, но возникают следующая проблема:
не происходит проверка на то, есть ли пользователь в базе или нет. Предположим, я этого пользователя заново регистрирую. В игру заходит, после перезахода - снова требуется регистрация. И в базе создается эта запись с этим пользователем. Так то этот юзер есть, в базе, но samp мне говорит, что данный пользователь не зарегистрирован. Получается, что какая то функция не работает, отвечающая за проверку на наличие записи в бд.
Если кто то знает, что делать в такой ситуации, отпишитесь. Часть кода я кидаю ниже (что непонятно, попытаюсь закомментировать)
:dn:
PHP:
public OnPlayerConnect(playerid)
        new query[128];
	mysql_format(dbHandle, query,"SELECT `ID` FROM `users` WHERE `Name` = '%s'", Player[playerid][pName]);
	mysql_function_query(dbHandle, query, true, "OnPlayerRegCheck","d", playerid); //проверка на зарегистрированнного пользователя
.......................................................................................................................
//сами диалоги
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) диалог
{   switch(dialogid) { 
	case LOGIN: { // Диалог авторизации. 
			if(!response) {  
				SendClientMessage(playerid, COLOR_YELLOW, "* Вы передумали авторизоваться. Введите /q, чтобы выйти. Как задумаете - заходите к нам!"); 
				Kick(playerid); 
				return 1; 
			} 
			if(!strlen(inputtext)) {
				new dialog[134+MAX_PLAYER_NAME]; 
				format(dialog, sizeof(dialog), 
				"%s, вы не ввели пароль!\n\
				Попробуйте еще раз:", 
				Player[playerid][pName]); 
				ShowPlayerDialog(playerid, DIALOG_LOGIN, DSP, "{ffff66}Пустое поле ввода", dialog, "Войти", "Отмена"); 
				return 1; 
			} 
			LoginAccount(playerid, inputtext); // Пробуем его авторизовать. 
		} 
	case REGISTER: { // Диалог регистрации. 
			if(!response) {
				SendClientMessage(playerid, COLOR_YELLOW, "*Вы отказались от регистрации."); 
				Kick(playerid); 
				return 1; 
			} 
			if(!strlen(inputtext) || strlen(inputtext) < 6 || strlen(inputtext) > 32) { 
				new dialog[380+24+32]; 
				format(dialog, sizeof(dialog), 
				"Пустое поле ввода или пароль не соответствует критериям\n\ 
				Попробуйте еще раз.\n\n\ 
				Примечания:\n\ 
				- Пароль регистрозависимый.\n\ 
				- Длина пароля -  от 6 до 32 символов", Player[playerid][pName]); 
				ShowPlayerDialog(playerid, DIALOG_REGISTER, DSI, "{ff6600}Неверно введен пароль", dialog, "Далее", "Отмена"); 
				return 1; 
			} 
			RegisterAccount(playerid, inputtext); // Создаём аккаунт. 
		} 
	case WRONGPAS: { 
			if(response) { 
				new dialog[134+MAX_PLAYER_NAME]; 
				format(dialog, sizeof(dialog), 
				"%s, добро пожаловать на сервер!\n\ 
				Введите пароль:", 
				Player[playerid][pName]); 
				ShowPlayerDialog(playerid, DIALOG_LOGIN, DSP, "{ffff66}Авторизация на сервере", dialog, "Войти", "Отмена"); 
				return 1; 
			} 
			else { 
				Kick(playerid); 
				return 1; 
			} 
		} 
	} 
	return 1;
}

.......................................................................


//callback, stock и прочая ****я
forward OnPlayerRegCheck(playerid); // проверка на зарегистрированнного игрока, тут как раз наверно и проблема
public OnPlayerRegCheck(playerid) 
{ 
	if(IsPlayerConnected(playerid)) 
	{ 
		new rows, fields; 
		cache_get_data(rows, fields); 
		if(rows)
		{
			new dialog[128+MAX_PLAYER_NAME]; 
			format(dialog, sizeof(dialog), 
			"Привет, %s, пожалуйста, авторизуйтесь:", 
			Player[playerid][pName]); 
			ShowPlayerDialog(playerid, DIALOG_LOGIN, DSP, "{ffff66}Авторизация на сервере", dialog, "Войти", "Отмена"); 
		}
		else {
			new dialog[344+MAX_PLAYER_NAME]; 
			format(dialog, sizeof(dialog), 
			"%s, добро пожаловать на сервер!\n\ 
			Вы не зарегистрированы.\n\
			Для регистрации введите пароль и нажмите \"Далее\".\n\n\ 
			Внимание:\n\ 
			- Пароль чувствителен к регистру.\n\ 
			- Длина - от 6 до 32 символов.\n", Player[playerid][pName]); 
			ShowPlayerDialog(playerid, DIALOG_REGISTER, DSI, "{ff6600}Регистрация на сервере", dialog, "Далее", "Отмена"); 
		} 
		return 1; 
	} 
	return 1;
}




stock RegisterAccount(playerid, password[]) // регистрация акка
{ 
    new query[128],
	sqlname[MAX_PLAYER_NAME], 
	sqlpassword[32]; 
	mysql_real_escape_string(Player[playerid][pName], sqlname);
	mysql_real_escape_string(password, sqlpassword);
	mysql_format(dbHandle, query, "INSERT INTO `users` (`Name`, `Password`) VALUE ('%s', '%s')", sqlname, sqlpassword);
    mysql_function_query(dbHandle, query, false, "RegisterCallback","d", playerid); 
    return 1; 
} 

forward RegisterCallback(playerid); 
public RegisterCallback(playerid) 
{ 
    SendClientMessage(playerid, COLOR_YELLOW, "Регистрация успешно завершена!"); 
    Player[playerid][pLogged] = true, SpawnPlayer(playerid); 
    return 1; 
} 


stock LoginAccount(playerid, password[]) // логин акка
{ 
	new query[128], 
	sqlpass[32];
	mysql_real_escape_string(password, sqlpass);
	mysql_format(dbHandle, query, "SELECT * FROM `users` WHERE `Password` = '%s' AND `ID` = '%i'", sqlpass, Player[playerid][pID]); 
	mysql_function_query(dbHandle, query, true, "LoginCallback","si", playerid, password); 
	return 1; 
} 


forward LoginCallback(playerid, password[]); //  в случае фиаско
public LoginCallback(playerid, password[]) 
{ 
	new rows, fields, dialog[128]; 
	cache_get_data(rows, fields); 
	if(!rows) 
	{ 
		if(Player[playerid][pWrongPassword] == 2) 
		{ 
			SendClientMessage(playerid, COLOR_LIGHTRED, "Вы были отключены от сервера, т.к. ввели 3 раза неверный пароль. Введите /q, чтобы выйти из игры."); 
			Kick(playerid); 
			return 1; 
		} 
		Player[playerid][pWrongPassword] ++; 
		format(dialog, sizeof(dialog), 
		"Вы ввели неверный пароль.\n\ 
			У Вас осталось %i из 3 попыток ввода.", 3 - Player[playerid][pWrongPassword]); 
		ShowPlayerDialog(playerid, DIALOG_WRONGPAS, DSM, "{ff0000}Неверный пароль!", dialog, "Повтор", "Отмена"); 
		return 1; 
	} 
	
	Player[playerid][pLogged] = true;
	SendClientMessage(playerid, COLOR_LIGHTRED, "Вы успешно авторизовались!"); 
	SpawnPlayer(playerid), SaveAccount(playerid); 
	return 1; 
}  
stock SaveAccount(playerid) { // Сохранение аккаунта. 
	if(Player[playerid][pLogged] == true) {
		CheckMySQLConnection();
		new query[186], 
		sqlname[MAX_PLAYER_NAME], 
		sqlpass[32]; 
		mysql_real_escape_string(Player[playerid][pName], sqlname); 
		mysql_real_escape_string(Player[playerid][pPassword], sqlpass); 
		mysql_format(dbHandle, query, "UPDATE `users` SET `Name` = '%s', `Password` = '%s' WHERE `ID` = '%i'", sqlname, sqlpass, Player[playerid][pID]); 
		mysql_function_query(dbHandle,query,false,"","");  
	} 
	return 1; 
}


Извините за столь длинный и нехорошо оформленный код.
Кто поможет, как тут быть, отблагодарю, сами знаете чем :)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу