Как сделать окно регистрации на сервере самп

Обновлено: 29.04.2024

Помогите пожалуйста когда захожу на сервер не появляется окно регистрации, так же там есть ошибки:

(10403) : warning 202: number of arguments does not match definition
(10405) : warning 202: number of arguments does not match definition
(10409) : warning 202: number of arguments does not match definition
(10409) : warning 202: number of arguments does not match definition
(10409) : warning 202: number of arguments does not match definition
(10409) : warning 202: number of arguments does not match definition
(10411) : warning 202: number of arguments does not match definition
(10415) : warning 202: number of arguments does not match definition
(10415) : warning 202: number of arguments does not match definition
(10415) : warning 202: number of arguments does not match definition
(10415) : warning 202: number of arguments does not match definition
(10417) : warning 202: number of arguments does not match definition
(10421) : warning 202: number of arguments does not match definition
(10421) : warning 202: number of arguments does not match definition
(10421) : warning 202: number of arguments does not match definition
(10421) : warning 202: number of arguments does not match definition
(10423) : warning 202: number of arguments does not match definition
(10427) : warning 202: number of arguments does not match definition
(10427) : warning 202: number of arguments does not match definition
(10427) : warning 202: number of arguments does not match definition
(10427) : warning 202: number of arguments does not match definition
(10429) : warning 202: number of arguments does not match definition
(10433) : warning 202: number of arguments does not match definition
(10433) : warning 202: number of arguments does not match definition
(10433) : warning 202: number of arguments does not match definition
(10433) : warning 202: number of arguments does not match definition
(10435) : warning 202: number of arguments does not match definition

Создание системы регистрации MySQL Оценка: 8 Голосов

Пользователь офлайн

Romzes


В этом уроке я вам для примера расскажу, как сделать регистрацию в new.pwn моде и в процессе этого я Вам расскажу, что тут к чему, позже вы сможете использовать полученные знания для других целей, например для разных домов, системы банов, всякой фигни для ГФ мода и так дальше.

Начнём.
> Устанавливаем Denwer, запускаем сервер (на рабочем столе будет ярлык "Start Denwer").
> Заходим в браузер и в адресной строке вводим "localhost" (без кавычек).
> Спускаемся ниже и переходим по ссылке: http://localhost/Too. admin/index.php
> Итак, вы видите phpmyadmin, сейчас мы можем управлять базой данных.
> Создаём таблицу:
>> Там примерно в центре есть "Create new database".
>>> Я назвал свою БД "pawno", кодировку выбрал "cp1251_bin".

>>> БД создана

>>>> Теперь нам нужно создать таблицу для аккаунтов.

Name - Название таблицы, Number of Fields - количество полей.
Мы используем 3 поля,
1 - ID аккаунта, чтобы можно было его распознать в таблице, можно, конечно использовать ник, но с ИД удобней;
2 - Ник игрока, думаю тут всё ясно.
3 - Пароль игрока.
>>>> Таблица создана, сейчас мы настроим наши поля.

Нажимаем Save.
Все нужное я выделил красным, теперь расскажу, что за что отвечает.
Field - название поля;
Type - тип данных, есть integer, string (VARCHAR, TEXT), float, DATE, DATETIME, TIME и т.д., в общем как в павно, тут я использую VARCHAR для стринга, и INT для ID.
Length/Values - сколько "ячеек" мы выделяем для поля, для ника 24 (MAX_PLAYER_NAME), для пароля - 64.
Collation - кодировка.
AUTO_INCREMENT - генерирует значения для ID игрока в порядке возрастания (1, 2, 3. ).

Изображение

>>>> Так будет выглядеть пустая, без аккаунтов таблица:

> Базу данных и таблицу мы подготовили, теперь перейдем к моду.

>> Сверху мода, где вы подключаете все инкдюлы добавляем эти строки:

>> Чуть ниже задефайним парметры БД:

>> Создадим массив для хранения данных аккаунта.

>> Создадим сток для подключения и отключения к БД.

>> Тут у нас стоки для регистрации и логина.

Создадим сток для очистки массивов при коннекте/дисконнекте.

>> Отключаем возможность писать в чат неавторизованному.

Изображение

Готово, у нас есть система регистрации.
Вот так выглядит таблица с аккаунтами:

Автор урока: Snoowker .

Пользователь офлайн

cr1me

Здравствуйте! Сразу предупреждаю, в Pawn работаю не так давно. Написал всё по вашему уроку, но вот при компиляции выдаёт множество ошибок.

А вот то, что у меня получилось мод.
Помогите пожалуйста!

Пользователь офлайн

n0rze


таблицу сам создаш.

Пользователь офлайн

KoTe

Перед нами 5 папки: pawno, внутри нее папка include, внутри нее папка YSI; PHP; scriptfiles, внутри нее папка YSI.

Теперь разместим файлы в папках своего сервера. Из архива берем папку YSI (которая лежит в pawno/include) и помещаем ее в свою папку pawno/includes. Дальше из архива в папке scriptfiles берем папку YSI (уже другую!) и помещаем ее в папку scriptfiles вашего сервера. И папку PHP помещаем в главную директорию вашего сервера. Все, с файлами мы закончили.

Теперь открываем ваш мод и наверх ко всем инклюдам добавляем строку

Вот эту строчку:

И цвета, которые нам еще понадобятся:

Далее нам необходимо создать некий "хранитель" информации:

После всех new (если они у вас есть) добавляем вот это:

enum pInfo
<
pPass,
pCash,
pAdmin,
pKills,
pDeaths
>
new PlayerInfo[MAX_PLAYERS][pInfo];

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

forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
<
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
return 1;
>

Дальше создаем вот этот stock

stock UserPath(playerid)
<
new string[128],playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),PATH,playername);
return string;
>

stock udb_hash(buf[]) <
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n <
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
>
return (s2 >

Теперь мы должны сделать так, чтобы при подключении игрока на сервер ему на экран выводилось диалоговое окно.

В паблик

public OnPlayerConnect(playerid)
<
return 1;
>

Перед return 1; добавить вот это

Чтобы наши диалоговые окна работали, мы должны в паблик

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
<
return 1;
>

Перед return 1; добавить вот это:

SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
>
>

Теперь мы должны сделать так, чтобы при выходе наша статистика сохранялась:

в паблик

public OnPlayerDisconnect(playerid, reason)
<
return 1;
>

new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
INI_Close(File);

Выходим на финишную прямую. Нам нужно добавить в паблик:

public OnPlayerDeath(playerid, killerid, reason)
<
return 1;
>

Перед return 1; вот это

от и все, теперь при входе на сервер вы сможете зарегистрировать аккаунт, сохранять статистику и заходить на свой аккаунт снова.

Перед нами 5 папки: pawno, внутри нее папка include, внутри нее папка YSI; PHP; scriptfiles, внутри нее папка YSI.

Теперь разместим файлы в папках своего сервера. Из архива берем папку YSI (которая лежит в pawno/include) и помещаем ее в свою папку pawno/includes. Дальше из архива в папке scriptfiles берем папку YSI (уже другую!) и помещаем ее в папку scriptfiles вашего сервера. И папку PHP помещаем в главную директорию вашего сервера. Все, с файлами мы закончили.

Теперь открываем ваш мод и наверх ко всем инклюдам добавляем строку

Вот эту строчку:

И цвета, которые нам еще понадобятся:

После всех new (если они у вас есть) добавляем вот это:

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


forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
<
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
return 1;
>

Дальше создаем вот этот stock

stock UserPath(playerid)
<
new string[128],playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),PATH,playername);
return string;
>

stock udb_hash(buf[]) <
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n <
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
>
return (s2 >

Теперь мы должны сделать так, чтобы при подключении игрока на сервер ему на экран выводилось диалоговое окно.

Перед return 1; добавить вот это

Чтобы наши диалоговые окна работали, мы должны в паблик

Перед return 1; добавить вот это:

SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
>
>

Теперь мы должны сделать так, чтобы при выходе наша статистика сохранялась:


new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
INI_Close(File);

Выходим на финишную прямую. Нам нужно добавить в паблик:

Перед return 1; вот это

Вот и все, теперь при входе на сервер вы сможете зарегистрировать аккаунт, сохранять статистику и заходить на свой аккаунт снова.

2.MySQL Plugin от g-stylezzz — плагин для работы с базой данных.

Это кинуть в папку с сервером (жми на ссылку) + в server.cfg добавить строку: plugins mysql sscanf

a_mysql.inc - это кинуть в папку Pawno\Includes

3. Sscanf Plugin — плагин, при помощи которого нам будет удобней и быстрей извлекать данные из результата при выборке из таблицы.

Начнём!



БД создана



Теперь нам нужно создать таблицу для аккаунтов.


Name — Название таблицы, Number of Fields — количество полей.
Мы используем 3 поля,
1. ID аккаунта, чтобы можно было его распознать в таблице, можно, конечно использовать ник, но с ИД удобней;
2. Ник игрока, думаю тут всё ясно;
3. Пароль игрока.
Таблица создана, сейчас мы настроим наши поля.


Нажимаем Save.
Все нужное я выделил красным, теперь расскажу, что за что отвечает.
Field — название поля;
Type — тип данных, есть integer (целые числа), string (VARCHAR, TEXT), float, DATE, DATETIME, TIME и т.д., в общем как в павно, тут я использую VARCHAR для строк, и INT для целых чисел.
Length/Values — сколько «ячеек» мы выделяем для поля, для ника 24 (MAX_PLAYER_NAME), для пароля — 64.
Collation — кодировка.
AUTO_INCREMENT — генерирует значения для ID игрока в порядке возрастания (1, 2, 3. ).

Так будет выглядеть пустая, без аккаунтов таблица:


- Базу данных и таблицу мы подготовили, теперь перейдем к моду.

- Сверху мода, где вы подключаете все инклюды, добавляем эти строки:

- Чуть ниже задефайним парметры БД:

- Создадим массив для хранения данных аккаунта.

enum Variables <
aID,
aName[MAX_PLAYER_NAME],
aPassword[64],
bool: aLogged,
aWrongPassword,
>;
new playerVariable[100][Variables]; // 100 - моё кол-во слотов для игроков на сервере.

- Создадим функцию для подключения и отключения к БД.

ConnectMySQL() < // В OnGameModeInIt вставьте ConnectMySQL();
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS); // Тут мы используем все данные, которые мы дефайнили.
switch(mysql_ping()) < // Проверка на то, что мы подключены к БД.
case 1: print("MySQL connection: alive."); // Если подключена БД.
case -1: print("MySQL connection: dead."); // Если не подключена БД.
>
return 1;
>

Читайте также: