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

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

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

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

Перевод мода на mysql

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

*Машка*

Новичок
Перевод мода на mysql R6

Многие ищут и я все же сделала это ;)​

1. Нам понадобится база данных mysql, её можно преобрести за 30р. на сайте gamerhost.su ( можно на другом, смысла это не меняет ).
2. Создадим таблицу ( это как бы папка, тоесть например таблица account там будут хранится аккаунты, zone там будут ганг зоны и т.д. ).

Называем свою таблицу как вам угодно, я назову её rls_accounts



Дальше у нас выскочит вот такое. Заполняем ...



Мы создали таблицу где будут храниться наши аккаунты. Переходим к части в Pawn

3. Для начала подключим к серверу инклюд и плагин.

Для этого качаем инклюд a_mysql ( ) и кидаем его в папку с программой pawno/iclude ( если что подтверждаем замену ).

В начало мода, после a_samp добавляем:
PHP:
#include <a_mysql>
В папку с сервером/plugin качаем плагин mysql.dll ->

В server.cfg в строку plugin добавляем mysql.


В корень с папкой сервера качаем файл ->

4. Подключимся к базе данных.

В OnGameModeInit()

HTML:
mysql_connect("ip адрес сервера mysql" , "имя пользователя бд", "Имя базы, на гамер хоте такоеже как и имя пользователя", "пароль от аккаунты");//все эти данные будут указаны в ПУ при покупке базы данных
	mysql_debug(1);//включаем логирование запросов
	mysql_set_charset("cp1251_general_ci");//кодировка
	mysql_query("SET NAMES 'cp1251'");//кодировка
	mysql_query("SET CHARACTER SET 'cp1251'");//кодировка
if(mysql_ping() == 1) printf("База данных mysql успешно подключена");
	else printf("Что-то не то, подключение не успешно :(");

Для удобства работы добавте в конец мода:
PHP:
stock sendername(playerid)
{
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	return name;
}
И так поехали дальше. Разбарем проверку на существования аккаунта. Если на файлах за это отвечала функция fexist тотеперь у нас будет mysql_fetch_row_format.

Ищем диалог входа/регистрация и изменяем проверку.


HTML:
new stringg[500];
format(stringg, sizeof(stringg), "SELECT * FROM название нашей созданной таблицы с акками WHERE name = '%s'", sendername(playerid));//ищем в базе по нику
mysql_query(stringg);//выполняем запрос
mysql_store_result();
if(mysql_fetch_row_format(stringg))
{
//если аккаунт есть то ...
}
else 
{
//если его нет то ...
}


5. Регистрация.

После вода всей информации ( пол, выбор скина и т.д. ) в модах вызывается функция регистрации, так вот, удаляйте все из вашей функции т.к. оно нам не пригодится

Нам нужно создать игрока в бд, для этого используем:

HTML:
new query[512];
format(query, sizeof(query), "INSERT INTO название таблицы с акками (name) VALUES ('%s')",sendername(playerid));//Внимание! Я создала аккаунт только с именем, вам же придется самим дописать пол, скин, дату регистрации и прочее, если что пишем в тему, помогу.
mysql_query(query);

6. Ну вот собственно и все. Осталось только изменить загрузку и сохранение аккаунта.

Начнем с сохранения:

Опять же чистим нашу функцию сохранения, и пишем по новой:


HTML:
new src[1024], query[2048];
format(query,sizeof(query),"UPDATE название таблицы с акками SET ");

format(src,sizeof(src),"название переменной в таблице='%s'Внимание! если у вас это не последняя из переменных то здесь нужна запятая!",PlayerInfo[playerid][название переменной в моде]), strcat(query,src,sizeof(query));//Не забываем что если у переменной десятичное значение то нужен %f а не %s а если числовое то %d

//Делаем также со всеми переменными в моде

format(src,sizeof(src)," WHERE name='%s'",sendername(playerid)), strcat(query,src,sizeof(query));
mysql_query(query);strcat(query,src,sizeof(query));


И осталась загрузка:

Убираем часть с переменными и пишем по новой.


HTML:
new stringg[1028], tmp[11];
format(stringg, sizeof(stringg), "SELECT * FROM название таблицы с акками WHERE name = '%s'", sendername(playerid));
mysql_query(stringg);
mysql_store_result();
if(mysql_fetch_row_format(stringg))
{
mysql_get_field("имя переменной в базе", tmp), PlayerInfo[playerid][имя переменной в моде] = strval(tmp);// первым делом мы считали из колонки и записали в временную переменную tmp, вторым мы перевели её в integer и присвоили переменной в моде, если переменная стринг второе действие не трубуется а сразу присваиваем переменной в моде

//Проделываем тоже самое со всеми переменными в моде.

mysql_free_result();
}

Если я что-то не дописала, напишите чего не хватает. Если не понятно спрашивайте ;)

Не забываем при добавлении переменных в загрузку/сохранение добавлять их в базу данных. INT это числовые значение а VARCHAT буквенные, с float думаю понятно​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу