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

Обновлено: 18.05.2024

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

Первым делом подключаем инклуд и включаем denwer (phpmyadmin).

Где localhost/root/bd - ваш хост/имя пользователя/название базы соответственно.

Тем самым мы подключаем мод к нашей базе.

Далее создаём enum (данные, которые мы будет загружать и выгружать из бд.

Теперь нам нужно сделать поиск аккаунта при коннекте. В OnPlayerRequestClass:

И создаём паблик в конце мода:

Теперь создаём макросы на диалоги. Делается это для того, чтобы вы не запутались при создании новых диалогов (не обязательно).

Далее создаём сами диалоги. В OnDialogResponse:

Создаём функции для этих диалогов. В конец мода:

Загрузка аккаунта. В конец:

Основа готова. Теперь осталось сделать сохранение.

И в OnPlayerDisconnect:

Тем самым мы сохраняем аккаунт при выходе с сервера.

Осталось дело за малым. Создать нашу таблицу.
Заходим в phpmyadmin (localhost), затем нажимаем на базы данных, затем в поле, где написано "Создание базы данных" мы вводим название нашей таблицы, которую мы вводили в "MYSQL_DATABASE". В нашем случае это "BD"

Мы создали базу, теперь нужно создать нужные нам таблицы. В нашем случае она одна - accounts. Название таблицы пишите всегда как указываете в моде т.к одна не та буква/раскладка - вы не подключитесь к этой таблице.

Создаём таблицу, в поле вводим "accounts", количество столбцов - 3.
Далее настраиваем саму таблицу. Первый столбец называется ID, тип которого INT, а длинна 11. Далее, чтобы иды не мешались - ищем A_I (Auto Increment) и ставим галочку.
Второй столбец - имя: player_name, тип: varchar, длинна: 24, остальное не трогаем.
Ну и последний столбец - это пароль. Имя столбца: password, тип: varchar, длина - 30.

Нажимаем сохранить и слева у нас есть наша таблица. Думаю как с ней работать вас учить не нужно

Система регистрации на сервере SAMP

Перед нами 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<length; n++)
<
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
>
return (s2 << 16) + s1;
>

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

В паблик

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, чтобы наша информация сохранялась (деньги, пароль, уровень админки, кол-во убийств и смертей)

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

Наши диалоги:

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

>> Наш OnPlayerConnect.


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

Основу дал, объяснил. Дальше дорабатывайте сами под свой лад.

Защиту от съезда полей (из-за sscanf) сами делайте, опять же, тут разжевал основу.

Автор урока: Snoowker (на SRC — Satellite) .


Копирование материала на посторонние сайты без указания автора строго запрещено.

SamPawno

Для вывода меню, в паблик - public OnPlayerConnect(playerid)

А теперь создаём действия для этих меню.
В паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])

Создаём новый паблик - public SaveAccounts() , ко всем пабликам добавим

public SaveAccounts ()
for ( new f ; f < GetMaxPlayers (); f ++)
if (! IsPlayerConnected ( f ))continue;
SaveAccount ( f );
>
>

В конце мода добавляем сток, который и будет выполнять все функции сохранения и записи данных

Для сохранения при выходе из игры, в паблик public OnPlayerDisconnect(playerid, reason)

public OnPlayerDisconnect ( playerid , reason )
SaveAccount ( playerid ); // Сохранение аккаунтов
return true ;
>

С модом работу мы закончили, теперь открываем папку с сервером и в папке scriptfiles создаём новую папку Users , в которой и будут сохраняться файлы игроков. Всё! Заходим в игру регистрируемся, выходим из игры. Открываем папку scriptfiles --> Users и видим там файлик ваш ник.ini .

Password = 123
Money = 0
House = 0
House1 = 0
House2 = 0
NHouse = 0

i love you mxIni Mysql почему не доконца. аа) андрюха писал(а): почему не доконца. аа) Какой тебе конец то нужен? i love you mxIni Mysql

проблема

не сохраняет акк и нет авторизации

public OnGameModeInit ()
SetGameModeText ( "Blank Script" );
AddPlayerClass ( 0 , 1958.3783 , 1343.1572 , 15.3746 , 269.1425 , 0 , 0 , 0 , 0 , 0 , 0 );
return 1 ;
>

public OnGameModeExit ()
return 1 ;
>

public OnPlayerRequestClass ( playerid , classid )
SetPlayerPos ( playerid , 1958.3783 , 1343.1572 , 15.3746 );
SetPlayerCameraPos ( playerid , 1958.3783 , 1343.1572 , 15.3746 );
SetPlayerCameraLookAt ( playerid , 1958.3783 , 1343.1572 , 15.3746 );
return 1 ;
>

public OnPlayerDisconnect ( playerid , reason )
SaveAccount ( playerid ); // сохранение аккаунтов
return true ;
>

public OnPlayerSpawn ( playerid )
return 1 ;
>

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

public OnVehicleSpawn ( vehicleid )
return 1 ;
>

public OnVehicleDeath ( vehicleid , killerid )
return 1 ;
>

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 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 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 OnPlayerClickPlayer ( playerid , clickedplayerid , source )
return 1 ;
>

public SaveAccounts ()
for(new f ; f < GetMaxPlayers (); f ++)
if(! IsPlayerConnected ( f ))continue;
SaveAccount ( f );
>
>

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

Похожий контент

Dzho_Handerson

От Dzho_Handerson

Виктор Васянкин, 17 лет.
Должность: Pawn-Разработчик.

О себе:
Работаю с Pawn более 4 лет, помимо pawn изучаю такие языки программирования, как: node js, c++, html (css).

Навыки:
- Разработка игрового мода с 0.
- Написание систем любой сложности.
- Исправление багов.
- Оптимизация игрового мода.
- Работа с базами данных MySQL.

Способы оплаты:
Qiwi, VK Pay.

От Гость nezoxi2

C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(301) : error 017: undefined symbol "ShowRegistration"
C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : error 029: invalid expression, assumed zero
C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : warning 215: expression has no effect
C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : error 001: expected token: ";", but found ")"
C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : error 029: invalid expression, assumed zero
C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

Сами строчки с 300 по 305:

От bdbsnnsd
Вот ошибка при компеляции как решить:
C:\Users\Дмитрий\Desktop\GreenTech со всем продажа — бекап\gamemodes\new.pwn(48) : warning 203: symbol is never used: "playerid"
C:\Users\Дмитрий\Desktop\GreenTech со всем продажа — бекап\gamemodes\new.pwn(3117) : warning 213: tag mismatch: expected tag "bool", but found none ("_")
C:\Users\Дмитрий\Desktop\GreenTech со всем продажа — бекап\gamemodes\new.pwn(3125) : warning 213: tag mismatch: expected tag none ("_"), but found "Text3D"
C:\Users\Дмитрий\Desktop\GreenTech со всем продажа — бекап\gamemodes\new.pwn(3126) : warning 213: tag mismatch: expected tag "Text3D", but found none ("_")
C:\Users\Дмитрий\Desktop\GreenTech со всем продажа — бекап\gamemodes\new.pwn(6370) : warning 204: symbol is assigned a value that is never used: "AdvertiseTimerIndex"
  • Язык NOT UNCOMMENT
    • Язык

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

    Похожий контент

    Dzho_Handerson

    От Dzho_Handerson

    Виктор Васянкин, 17 лет.
    Должность: Pawn-Разработчик.

    О себе:
    Работаю с Pawn более 4 лет, помимо pawn изучаю такие языки программирования, как: node js, c++, html (css).

    Навыки:
    - Разработка игрового мода с 0.
    - Написание систем любой сложности.
    - Исправление багов.
    - Оптимизация игрового мода.
    - Работа с базами данных MySQL.

    Способы оплаты:
    Qiwi, VK Pay.

    От Гость nezoxi2

    C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(301) : error 017: undefined symbol "ShowRegistration"
    C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : error 029: invalid expression, assumed zero
    C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : warning 215: expression has no effect
    C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : error 001: expected token: ";", but found ")"
    C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : error 029: invalid expression, assumed zero
    C:\Users\mmajk\Desktop\My Server SAMP\gamemodes\mysamp.pwn(304) : fatal error 107: too many error messages on one line
    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

    Сами строчки с 300 по 305:

    • Язык NOT UNCOMMENT
      • Язык

      Тема: Создание системы регистрации на основе плагина MySQL [R39/R40]












      Создание системы регистрации на основе плагина MySQL [R39/R40]

      Доброго времени суток.
      В этом уроке я попытаюсь объяснить Вам, как создаётся система записи/загрузки аккаунтов на основе плагина MySQL от BlueG.
      Код, предоставленный в статье, актуален для веток "R39" и "R40".
      Начнём.

      Плагин MySQL от BlueG:

      F.A.Q. <Как скачать с GitHub>

      1. Переходим по ссылке выше и скачиваем нужную версию плагина

      Скриншот


      2. Разархивируем скачанный архив и его содержимое перемещаем в папку с модом

      Скриншот


      3. Открываем файл "server.cfg" и ищем строчку "plugins".
      - Если нашли, то приписываем ко всем прочим плагинам новый - "mysql"
      - Если не нашли, то добавляем в самый конец файла новую строку - "plugins mysql"

      * Если сервер запускается в Ubuntu Linux / CentOS, к названию плагина приписываем расширение ".so" ("mysql.so"). Если же Windows, то приписывать к названию плагина ничего не нужно.

      Скриншот


      4. Открываем скрипт, в который будем прописывать регистрацию и подключаем инклюд MySQL (я буду использовать стандартный пустой мод, ссылку на который помещу в конце урока).

      Скриншот База данных:

        Софт для работы с базой данных:

      Для работы с базой данных (чтение/редактирование) предпочтительнее использовать Open Server.

      Преимущество данного программного комплекса в том, что он является полностью портативным. Иными словами, Вам достаточно будет скачать его всего раз, после чего Вы сможете спокойно его переносить на флешку, другой жёсткий диск и так далее - он не потеряет своей работоспособности.
      Так же очевидным преимуществом Open Server над тем же Denwer является то, что проект активно дорабатывается (упомянутый Denwer не обновляется с 2013 года)

      Официальный сайт программы ospanel.io
      F.A.Q. <Как скачать с официального сайта Open Server>
      • На официальном сайте переходим на страницу загрузки.
      • Находим область "Поддержка проекта", в самом конце которой имеется поле для ввода Email-адреса и несколько кнопок.
      • При желании, можете поддержать проект рублём, указав Email-адрес и совершив все нужные манипуляции по оплате.
      • В случае, если Вы хотите только скачать программу - не вводя никаких данных, просто нажимаете два раза кнопку "Нет, спасибо, хочу просто скачать", после чего загрузка файла начнётся.*

      * При бесплатной загрузке программы скорость скачивания будет сильно ограничена, из-за чего загрузка может длиться несколько часов. При желании, Вы можете попытаться найти инсталлятор Open Server на торрент-трекерах, но учитывайте, что уже бывали случаи, когда torrent-версии данной программы модифицировались. Так что промышляйте подобным только на свой страх и риск, тщательно изучая комментарии, если такие присутствуют.

      F.A.Q. <Установка Open Server>

      Установка Open Server проста до безобразия:

      1. Запускаем скачанный ранее файл и указываем место распаковки программы.
      2. Готово! Вы настоящий хакер!
      F.A.Q. <Как открыть веб-приложение для работы с СУБД MySQL (Open Server)>
      • Заходим в указанную при распаковке папку и находим там два файла: "Open Server x32.exe" и "Open Server x64.exe". Запускаем файл, в зависимости от разрядности Вашей системы.
      • В открывшемся окне выбираем желаемый язык.
      • Далее программа может предложить Вам установить патчи для Microsoft Visual C++. Для пущей уверенности, соглашаемся на установку.
      • В системном трее (области уведомления справа снизу) находим значок красного флажка, нажимаем на него правой кнопкой и выбираем в самом верху кнопку "Запустить".

      При желании, в настройках Вы можете включить автозапуск Open Server при запуске Windows и/или автозапуск самого MySQL-сервера (то действие, которое описано в последнем пункте).

      F.A.Q. <Краткий экскурс по phpMyAdmin> Вкладка "Обзор"

      Во вкладке "Обзор" находится содержимое выбранной базы данных. Если данная вкладка неактивна - таблица пуста.

      Типы столбцов

      MySQL поддерживает все основные виды столбцов и кучу их подвидов (которые, как я понимаю, нужны для оптимизации работы таблицы), но я расскажу Вам лишь о самых основных (те, которые потребуются нам для простой работы с данными)

      INT - это, как Вы могли уже догадаться, Integer (от англ. "Целое число"). В нём мы можем хранить все данные, являющиеся целым числом (деньги, уровень, кол-во смертей/убийств и прочее).
      VARCHAR - это тип данных, в котором хранятся строки (буквы любого регистра/числа/спец.символы). Максимальная длина строки, которую может хранить такое поле - 255 символов. VARCHAR - это усовершенствованная версия типа столбца CHAR, главной отличительной особенностью которого является то, что если при создании столбца с типом CHAR прописать 100 символов, а записать, например, 50 - остальные 50 ячеек будут заполнены пробелами. В VARCHAR же сохранится именно 50 символов + 1 символ для нуль-символа (конца строки).
      FLOAT - это тип данных, в котором можно хранить вещественные числа (дробные/числа с плавающей точкой)

      Всё остальное лично мной не использовалось и о всех тонкостях поведать Вам я не могу. Но Вы всегда можете прочитать об этом на официальной странице MySQL =)

      Создание нового столбца (поля)

      Новый столбец (поле) создать очень просто. Для этого находим нужную нам таблицу, открываем её, жмём на вкладку "Структура" и ищем последний столбец. Под ним есть надпись "Добавить" и далее идут настройки. Именно эта строка нам и нужна.
      В поле после "Добавить" пишем то число столбцов, которое нам нужно добавит в таблицу (если они должны располагаться друг за другом). Далее выбираем позицию, в которую нам нужно добавить эти поля (это может быть как начало/конец таблицы, так и определённое поле, после которого новые поля и будут добавлены). Выбираем нужную позицию и жмём "Ок". Далее нужно настроить новые столбцы и всё :)

      Скриншот Идентификатор

      Идентификаторы нужны в таблице для того, чтоб можно было с лёгкостью связать данные нескольких таблиц, опираясь на данные какой-то одной. MySQL самостоятельно устанавливает идентификатор для новой строки в момент создания этой строки. Ни в коем случае не меняйте данный параметр вручную. Изменять его может исключительно MySQL!

      Сброс auto_increment до определённого значения ДЕЛАЙТЕ ЭТО С ОСТОРОЖНОСТЬЮ! ПРИ НЕПРАВИЛЬНОМ ОБРАЩЕНИИ С AUTO_INCREMENT ВОЗМОЖНА ПОРЧА ДАННЫХ.
      1. Открываем таблицу, в которой будем менять значение поля с auto_increment
      2. Находим вкладку "Операции" и открываем её
      3. Находим поле AUTO_INCREMENT и меняем значение напротив поля на нужное
      Готово. Теперь при создании нового поля значение AUTO_INCREMENT будет равно установленному и начнётся отсчёт именно с него В данной инструкции я расскажу Вам о том, как создать базу данных в phpMyAdmin

        Открываем phpMyAdmin, если не сделали этого ранее

      Скриншот Скриншот Скриншот
      Последний раз редактировалось DeimoS; 13.02.2021 в 10:43 .
      Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
      Великих идей полно, на них нет спроса.
      Воплощение идеи в законченную игру требует долгой работы,
      таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
      Предложить идею просто, воплотить – вот в чём проблема
      S teve P avlina












      Статус Оффлайн Адрес Восточный Мордор Репутация: 1973 ±

      *Продолжение* [Создание системы аккаунтов:]

        Создание таблицы для хранения аккаунтов:

        Выбираем базу данных, в которой будем создавать таблицу (если Вы создавали базу данных вместе со мной, то выбираем "sa-mp")

      • В поле "Имя таблицы" вводим "account"
      • В поле "Количество столбцов" вводим "3"
      Скриншот Открыть/закрыть

      • Первый столбец
        - Имя столбца: id
        - Тип столбца: INT
        - Длина/значения: 11
        Все остальные значения, кроме A_I, не трогаем. Находим A_I (Auto Increment) и ставим галочку.
        Идентификаторов не может быть больше одного в таблице. Да оно и не нужно =)

      Внимание:
      MySQL чувствительна к регистру, поэтому если Вы решили записать имена столбцов иначе, учитывайте это в дальнейшем. Скриншот

      Так же нужно добавить переменную, в которой будет хранится ID подключения к базе данных

      Открыть/закрыть Для R39 Для R40 Разбор кода

      Собственно, подключаем инклюд, в котором хранится объявление всех функций для работы с плагином

      Этот макрос хранит в себе адрес хостинга, где хранится база данных (мы будем запускать на ПК, поэтому указываем адрес локальной сети).

      Этот макрос хранит в себе имя пользователя, у которого имеется доступ к базе данных (так как мы запускаем мод на ПК, у нас это администратор. Когда будете запускать мод на хостинге, Вам выдадут особое имя)

      Этот макрос содержит в себе имя базы данных. Если при создании БД Вы прописывали имя отличное от моего, измените его на то, что указали Вы.

      Этот макрос хранит в себе пароль, который требуется для подключения к базе данных. Так как мы работаем на ПК и в Denwer по-умолчанию он не указан, пароль мы не указываем. При работе с хостингами нужно указывать пароль от хостинга.


      Это целочисленная переменная, в которой мы будем хранить ID подключения, которое потребуется для работы большинства функций.
      Скриншот Открыть/закрыть Для R39 Для R40

      Так же, если Вы хотите сохранять в базу данных текст на русском, следует добавить следующие запросы прямо после подключения

      Открыть/закрыть Получится так Для R39 Для R40 Разбор кода Открыть/закрыть Для R39 Функция mysql_connect нужна для подключения плагина к базе данных. Она имеет 7 параметров, из которых только 4 первых обязательны к заполнению.
      Для R40 Функция mysql_connect нужна для подключения плагина к базе данных. Она имеет 5 параметров, из которых только 4 первых обязательны к заполнению.

      Данная функция возвращает ID подключения, который мы и записали в переменную.

      Скриншот Дополнение: Отслеживание качества подключения Так же Вы можете добавить простую проверку, которая будет отображать в логах то, насколько удачно произошло подключение к базе данных и выведет причину (либо код ошибки) в случае, если подключение не удалось. Для этого сразу после кода о подключении добавим такой код:

      Где mysql_errno - функция, которая возвращает ID ошибки при отправке запросов к базе данных.

      Скриншот Немного лирики Для хранения данных мы можем использовать либо связку "enum + двумерный массив", либо просто массивы, либо pVar. Удобнее всего использовать связку "enum + двумерный массив", но Вы можете использовать другой способ, если достаточно осведомлены о нём и считаете его удобным.
      Как я уже писал ранее, это вводный урок и поэтому мы реализуем хранение лишь трёх параметров: ID аккаунта, имя игрока и пароль от аккаунта. А раз с способом хранения данных мы определились, а так же определились с данными, которые будем хранить - можно приступать к написанию кода.
      Под наши данные для подключения добавим следующий код:
      Разбор кода

      enum - англ. Enumeration (Перечисление) - это тип, состоящий из набора целочисленных констант, называемых перечислителями. Перечисление позволяет объединить данные разных типов в одну "группу". Enum состоит из самого оператора и названия перечисления/

      Первый член перечисления, а по совместительству и ячейка, в которой будет хранится ID аккаунта игрока. Имеет целочисленный тип и может хранить только целые числа (КЭП)

      Второй член перечисления, а по совместительству и ячейка, в которой будет хранится имя аккаунта. Для хранения строки требуется массив, который мы и создали. В базе данных мы выделили 24 ячейки под хранение ника, поэтому и тут нам глупо выделять меньше/больше.

      Третий член массива, а по совместительству и ячейка, в которой будет хранится пароль от аккаунта. Тут мы, опять же, создали массив и выделили 31ячеек (так как решили, что пароль игрока не должен будет превышать эти самые 30 ячеек + 1 символ на конец строки. Если в базе данных Вы выделяли другие число ячеек для столбца - прописывайте своё значение)


      Массив, через который мы будем обращаться у нужному нам члену перечисления за данными. В первой группе ячеек мы будем указывать ID игрока (ID Игрока будет равен номеру ячейки, в которой будут записываться его данные. Так мы с лёгкостью сможем в дальнейшем с этими данными работать). Во второй группе ячеек мы будем указывать имя члена перечисления, которое так же вызовет нужную нам ячейку с данными
      Скриншот

      Теперь нам нужно сделать запрос для поиска игрока в базе данных, а так же записать ник игрока (ибо игрок не сможет сменить свой ник без нашего ведома, поэтому логичнее всего просто 1 раз записать его при входе и уже использовать массив, чем каждый раз вызывать GetPlayerName) .
      В OnPlayerConnect вставим:

      Открыть/закрыть Для R39 Разбор кода

      С помощью функции GetPlayerName мы записали имя игрока в наш массив, дабы в будущем получить возможность брать имя игрока из этого массива, а не вызывать повторно функцию GetPlayerName.

      С помощью функции format мы вставили имя в наш запрос, который заставит плагин просмотреть таблицу на предмет строк, в которых данные столбца "player_name" совпадают с именем игрока.

      Для R40 Разбор кода

      С помощью функции GetPlayerName мы записали имя игрока в наш массив, дабы в будущем получить возможность брать имя игрока из этого массива, а не вызывать повторно функцию GetPlayerName.

      С помощью функции format мы вставили имя в наш запрос, который заставит плагин просмотреть таблицу на предмет строк, в которых данные столбца "player_name" совпадают с именем игрока.

      Скриншот

      Так же нам нужно эти данные записать в наш массив. Для этого мы идём в самый конец скрипта (для удобства) и вставляем туда следующий код:

      Открыть/закрыть Для R39 Разбор кода

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

      Создаём две переменные, в которые запишем число строк и столбцов, которые будут возвращены в результате обработки нашего запроса

      Проверка, которая звучит так: "Если число строк, возвращённых MySQL, равно нулю. ". Иначе говоря, если MySQL вернуло 0 строк после обработки запроса, значит аккаунт игрока не создан и нам можно предложить создать этот самый аккаунт игроку.


      Собственно, сам диалог регистрации
      Подробнее о диалоге

      Если проверка "if(!rows)" не сработала, значит MySQL нашёл в таблице аккаунт с нужным именем. А раз нашёл, значит показываем диалог с авторизацией и запишем пароль от аккаунта для дальнейших проверок

      Для R40 Разбор кода

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

      Создаём переменную, в которую запишем число строк, которые будут возвращены в результате обработки нашего запроса

      Проверка, которая звучит так: "Если число строк, возвращённых MySQL, равно нулю. ". Иначе говоря, если MySQL вернуло 0 строк после обработки запроса, значит аккаунт игрока не создан и нам можно предложить создать этот самый аккаунт игроку.


      Собственно, сам диалог регистрации
      Подробнее о диалоге

      Если проверка "if(!rows)" не сработала, значит MySQL нашёл в таблице аккаунт с нужным именем. А раз нашёл, значит показываем диалог с авторизацией и запишем пароль от аккаунта для дальнейших проверок

      Сначала нам нужно вспомнить о себе любимых и упростить работу с диалогами, создав ещё одно перечисление, которое будет позволять писать нам на месте ID диалога какие-то слова, намекающие нам на предназначение этого диалога, а не обычные числа. Ведь согласитесь, "dRegister" гораздо сильнее намекает нам на то, что этот диалог является диалогом регистрации, нежели просто "0", "1" или какое-либо ещё число. Но перечисление не только даст нам возможность более лучше понимать предназначение диалога по его ID, но и избавит нас от страха того, что ID диалогов могут перепутаться, ведь перечисление само определит свободный ID и установит его.

      Чтоб создать такое перечисление, находим наше перечисление с данными игроков и выше него создадим ещё одно:

      Если Вы желаете изменить порядковые ID в перечислении Если Вы желаете, чтоб первый диалог занимал не ID 0, а, например, ID 10, достаточно присвоить первому члену перечисления "10" и далее перечисление само рассчитает ID для последующих членов:

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

      Всё =) Теперь достаточно придумывать имя каждому новому диалогу, дописывать его в этот список и тогда Вы точно никогда не запутаетесь при создании новых диалогов.

      Теперь напишем сами действия. В OnDialogResponse добавим:

      Открыть/закрыть Для R39 Для R40 Разбор кода
      О switch можно почитать в статье, написанной Ziggi, о операторах в Pawn.
      Если попытаться перевести эту строку кода с машинного языка на человеческий, то смысл этой строки состоит в том, что тут мы указываем оператору switch переменную, значение которой мы будем сравнивать с заданными нами значениями в последующем коде.


      Эта строка всё так же относится к switch. Именно тут мы указываем значения, которые будем искать в "dialogid". В данном случае мы указали не число, а член перечисления, который подразумевает под собой ID "1"


      Тут мы проверяем значение параметра "response". Если оно равно нулю, значит игрок нажал на вторую (правую) кнопку или Esc (то бишь, попытался закрыть диалоговое окно) и поэтому мы его отсоединяем от сервера, показывая диалог-оповещение.
      Что за восклицательный знак перед response?

      Восклицательный знак перед параметром означает то, что мы ожидаем увидеть в "response" значение "false". Следовательно, эта проверка может выглядеть и так "if(response == 0)".

      Для тех, кто не в курсе:


      Это серия различных проверок того, что ввёл игрок в поле для ввода (в данном случае - это пароль). Вот разбор первых трёх условий

      При срабатывании каждого из условий игроку будет показан диалог, в котором будет указано то, какая из проверок не сработала и что игрок сделал не так.

      Теперь разберёмся с циклом.


      О циклах можно прочесть, опять же, в статье, написанной Ziggi об операторах. Я же расскажу подробнее о структуре.

      уже знакомый нам switch, где мы проверяем значение определённой ячейки в массиве (ID этой ячейки хранится в "i")

      Немного о кодировках

      Теперь окунёмся в теоретическую часть, слабо относящуюся к уроку, которая поможет понять код, разбираемый дальше.
      Любая машина, которая в перспективе может поднять восстание и уничтожить жизнь на Земле, не понимает ничего, кроме нулей и единиц. Но мы, человеки создавшие этих киборгов-убийц, не согласились плясать под их дудку и придумали различные способы конвертировать привычные нам символы, отличные от нуля и единицы, в привычные киборгам-убийцам нули и единицы. Эти способы мы обозвали кодировками. Кодировок на сегодняшний день есть достаточно много и все они представляют из себя что-то типа таблиц, где за каждым символом, понятным нам, закреплён набор других символов (если кодировка направлена на двоичную систему счисления, с которой и работают машины, то это будет набор нулей и единиц. Ну а если нет, то, в любом случае, данные из отличной от двоичной системы счисления, конвертируются в двоичную систему счисления и только потом подаются машине). И какой бы символ Вы не попытались всунуть машине, она конвертирует его в набор нулей и единиц, опираясь на заданную в неё кодировку, и только потом будет с ним работать (кстати, именно по причине того, что в каждой кодировке за символами может быть закреплено любое кол-во нулей и единиц, которое заблагорассудится создателю этой кодировки, случается искажение текста, если напечатать текст в редакторе с одной кодировкой, а после переключить на другую. То есть, машина не может сама определить кодировку и если в одной кодировке за символом "@" закреплён такой набор нулей и единиц - "01110", а в другой, например, "01010", машина выдаст Вам не "@", а что-то совсем другое).
      В общем, наматываем на ус следующее:
      1) Однажды Ваш тостер поджарит не хлебушек, а Вас.
      2) Машины работают с набором нулей и единиц. Вся информация, какой бы она не была, конвертируется в нули и единицы. А для того, чтоб мы могли как-то контролировать этот процесс, придумали кодировки.

      Когда намотка на ус завершена, приступаем к дальнейшему разбору кода.

      switch работает исключительно с числами. В case нельзя указать ни переменную, ни слово в привычном для всех виде. Поэтому есть два варианта:
      1) Открывать таблицу символов для ASCII кодировки и искать тот набор нулей и единиц, что соответствует нашему символу. Ну и вписывать его.
      2) Использовать апостроф и операцию, что я описал в первом пункте, машина сделает за Вас.
      В коде выше мы используем именно второй способ, ибо он гораздо нагляднее.

      Как я уже описывал выше, в switch мы проверяем каждый символ в ведённой игроком строке. А тут мы указываем то, какие из символов мы ищем. В данном случае если мы находим одну из цифр или же букв кириллического/латинского алфавита в любом из регистров, то мы пропускаем итерацию и смотрим содержимое следующей ячейки в массиве с строкой. То есть, тут мы указываем все символы, что разрешены в пароле.

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

      SAMP Role Play - GTA San Andreas по сети

      В этой инструкции, мы расскажем Вам, дорогие участники группы, как создать игровой сервер в SAMP.

      Уровень сложности: Несложно
      Что вам понадобится:
      Голова.
      Руки, из нужного места.
      Интернет.
      Сам мультиплеер.

      2 шаг
      Как создать игровой сервер в SAMP ( San Andreas Multy Player)
      Распакуйте – в удобное для Вас место. Распаковали – заходим в папку ( назовите ее “Сервер”, или "Мой сервер. ) Находим в папке – файл “server.cfg”. — Открываем с помощью блокнота:
      _________________________________
      echo Executing Server Config…
      lanmode 0 – 0 – игра по интернету, 1 – игра по локальной сети.
      rcon_password 123 – “123” – пароль от админ.панели на сервере.
      maxplayers 50 – Как Вы уже поняли, максимальное кол – во игроков. В версии 0,3а, максимально 500.
      port 7777 – Порт, отображаемый в конце адреса Вашего сервера. (лучше оставить как есть.)
      hostname NameServer – Название, Вашего будущего сервера.
      gamemode0 mode – Игровой мод, Вашего будущего сервера. Об этом ниже …
      announce 0 – Не меняем.
      query 1 – Не меняем.
      weburl сайт – Сайт сервера, если такой имеется.
      maxnpc 10 – Не меняем.
      onfoot_rate 40 – Не меняем.
      incar_rate 40 – Не меняем.
      weapon_rate 40 – Не меняем.
      stream_distance 300.0 – Не меняем.
      stream_rate 1000 – Не меняем.
      filterscripts – Скрипты. Об этом ниже …
      _________________________________

      3 шаг
      Как создать игровой сервер в SAMP ( San Andreas Multy Player)
      Сворачиваем – “server.cfg”, и заходим в папку под названием “gamemodes”. Присматриваем нужный Вам мод, в данном случаи “lvdm”, разворачиваем “server.cfg”, и после gamemode0, вписываем lvdm (пример). (gamemode0 lvdm). Снова, сворачиваем блокнот.

      4 шаг
      Как создать игровой сервер в SAMP ( San Andreas Multy Player)
      Ищем папку “filterscripts” — > жмякаем два раза на нее, перед нами скрипты. (Можно качать интересные скрипты на свой сервер из интернета.) Высматриваем нужные Вам скрипты, и аналогично как и с модами, вписываем название напротив “filterscripts” (filterscripts actions (пример)).
      тандартные команды администрирования сервера:
      (вводить в строке чата):
      /rcon login – вход в режим администратора. Необходимо для выполнения следующих команд.
      /rcon exec – запустить конфиг.
      /rcon cmdlist – отобразить список всех команд.
      /rcon varlist – отобразить список всех переменных.
      /rcon exit – выход.
      /rcon kick – kick player по id. Выбрасывает игрока.
      /rcon ban – ban player по id. Выбрасывает игрока перманентно.
      /rcon gmx – перезапуск сценария.
      /rcon changemode – смена текущей карты.
      /rcon say – напечатать в чате “text” от админа.
      /rcon echo – напечатать текст на стороне консоли.
      /rcon reloadbans – reloads bans.
      /rcon password – установка или изменение пароля на сервер.

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