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

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

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

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

Делаем Role Play мод с 0

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

Nuclea750

Новичок
И так, это мой первый мануал так что строго не судите! Первое что нам нужно сделать это система регистрации на mxINI.

Этапы создание:
1. mxINI - Система регистрации
2. Car system - система машин
3. Admin system - админ панель
4. system fraction and leaders - система лидеров/фракций
5. Map Editor - Делаем Мапинг
Это все будет в 1 уроке, в 1 уроке будем делать только 1 этап nxINI и подготовка мода. ну что-же начнем!

Действие Первое. Нужные файлы, и настройка сервера:

Качаем последнюю версию сервера sa-mp с офф. сайта.
Распаковываем сервер в любую удобную для вас папку.
Открываем server.cfg, и меняем rcon_password changename, на свой пароль, из строки filterscripts, убираем все FS которые включены. Меняем gamemode, на new.
Качаем последнюю версию инклуда mxINI.
Открываем папку pawno, в папке с вашим сервером, папку include, и ложем инклуд mxINI, в эту папку.
Заходи в папку gamemodes, и удаляем все моды которые там есть ( для удобства ).
Заходим в папку pawno, и открываем программу pawno.exe.
Слева, в углу, нажимаем на кнопку new.
Пред вами то, что в ближайшее время, будет нашим модом.
Нажимаем F5, и нам предлагают выбрать папку, и имя будущего мода. Выбираем папку gamemodes, в папке с вашим сервером, и имя файла задаём new .
Пробуем запустить мод, зайдя в папку с сервером, и запустим файл samp-server.exe .
Если сервер запустился, мы всё сделали правильно, настройка сервера закончена.
--------------------------------------------------------------------------------------------
Действие второе. Удаление лишнего из мода:

Открываем наш мод. Первое что бросается нам в глаза, это

HTML:
#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
        print("\n--------------------------------------");
        print(" Blank Filterscript by your name here");
        print("--------------------------------------\n");
        return 1;
}

public OnFilterScriptExit()
{
        return 1;
}

#else

main()
{
        print("\n----------------------------------");
        print(" Blank Gamemode by your name here");
        print("----------------------------------\n");
}

#endif
Вот это нам не нужно. Удаляем.
Находим паблик

HTML:
public OnGameModeInit()
{
        // Don't use these lines if it's a filterscript
        SetGameModeText("Blank Script");
        AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
        return 1;
}
И после него, вставляем

HTML:
main()
{
        print("\n----------------------------------");
        print(" Название вашего мода, у меня будет pawno-info.ru");
        print("----------------------------------\n");
}
В самом начале мода, мы можем видеть такую строку.

HTML:
#include <a_samp>
Если подумать головой, то можно понять что это подгрузка инклудов в мод. После него добавим наш инклуд:

HTML:
#include <mxINI>
Нажимаем F5, и компилируем мод, если всё прошло без ошибок, значит вы всё сделали правильно.

Находим строку

HTML:
SetGameModeText("Blank Script");
Эта строка, устанавливает название мода, которое будет видно в клиенте. Меняем его на своё.

HTML:
SetGameModeText("Pawno-info Mode");
Компилируем мод, и.. мы закончили с подготовкой мода. Теперь нас ждёт система регистрации.

Действие Третье. Сохранение аккаунта.

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

HTML:
enum pInfo
{
        pPass[64],// Масив с паролем
}
new Player[MAX_PLAYERS][pInfo];
Теперь мы можем записать пароль, определённого игрока, чем мы сейчас и займёмся.

Опускаемся в самый конец мода, и создаём там, вот это:

HTML:
stock SavePlayer(playerid)
{
    new string[64];// Масив с путём для файла
        new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
        GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
        format(string, sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
        iniFile = ini_openFile(string);// Открываем файл по тому пути который указали.
        ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл
        ini_closeFile(iniFile);// Закрываем файл
}
Нажимаем F5, и мод компилируется. Если ошибок нет, то вы сделали всё правильно.
Теперь нам надо зайти в папку с сервером, открыть папку scriptfiles, и в ней добавить папку players.
Сохранение готово.

Действие Четвёртое. Создание регистрации и загрузки игрока.

Для создания регистрации, надо узнать, есть ли игрок с таким именем на сервере, для начала нужно после объявления нашего инклуда, вставить следующее:

HTML:
new PAccount[MAX_PLAYERS];// Есть аккаунт, или нет
Далее ищем паблик OnPlayerConnect. И в него добавляем:

HTML:
new playername[MAX_PLAYER_NAME];// Масив для имени игрока
    new string[128];// Путь до папки с именем игрока
        GetPlayerName(playerid,playername,sizeof(playername));// Узнаём имя игрока
    format(string,sizeof(string),"players/%s.ini", playername);// Путь к файлу с аккаунтом
    if(fexist(string))// Проверка на файл, если он есть то выполняется следующее действие.
        {
                PAccount[playerid] = 1;// Аккаунт есть
        }
        else// Если файла с именем нет, то выполняется это действие.
        {
            PAccount[playerid] = 0;// Аккаунта нет
Теперь ищем паблик, OnPlayerRequestClass, он покажет нам диалог с логином, или регистрацией, в него добавляем.


HTML:
if(PAccount[playerid] == 1)// Если аккаунт есть
        {
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. Стиль диалога выставляем на ввод текста.
        }
        else// Если аккаунта нет
        {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. Стиль диалога выставляем на ввод текста.
        }
Диалоги мы показали, но теперь надо заставить его работать. Для этого нам надо сделать функцию загрузки и регистрации игрока.
Этим мы и займёмся. В конец мода, вставляем.

HTML:
forward OnPlayerRegister(playerid, password[]);
public OnPlayerRegister(playerid, password[])// Паблик регистрации
{
        if(IsPlayerConnected(playerid))
        {
            new string[64];// Масив с путём для файла
                new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
                GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
                format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
                new iniFile = ini_createFile(string);// Создаём файл с именем игрока в папке players
                if(iniFile < 0)// Если Файла нет
                {
                        iniFile = ini_openFile(string);// Открываем
                }
                if(iniFile >= 0)// Если файл есть
                {
                        strmid(Player[playerid][pPass],password,0,strlen(password),255);// Присваиваем масиву pPass, значение password[]
                        ini_setString(iniFile,"Pass",Player[playerid][pPass]);// Записываем пароль игрока в файл
                        ini_closeFile(iniFile);// Закрываем файл
                        ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
                }
        }
        return 1;
}
Функция которая зарегистрирует игрока, готова, теперь функция логина. В конец мода, добавляем.

HTML:
forward OnPlayerLogin(playerid,password[]);
public OnPlayerLogin(playerid,password[])
{
        if(IsPlayerConnected(playerid))// Проверка на подключение игрока
        {
        new string[64];// Масив с путём для файла
        new pass[64];// Масив с паролем
                new playername[MAX_PLAYER_NAME];// Масив для получения имени игрока
                GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
                format(string,sizeof(string), "players/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки
                new iniFile = ini_openFile(string);// Открываем файл
                ini_getString(iniFile,"Pass",pass,64);// Загружаем пароль
        if(strcmp(pass,password,true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк
            {
                ini_getString(iniFile,"Pass",Player[playerid][pPass],64);// Загружаем пароль
                ini_closeFile(iniFile);// Закрываем файл
        }
                else// Если пароль не верен..
                {
                    ini_closeFile(iniFile);// Закрываем файл
                ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
                return 1;
                }
                SendClientMessage(playerid,0xFF00000,"Добро пожаловать на наш сервер");// Выводим игрок сообщение
                SpawnPlayer(playerid);// Спавним игрока
        }
        return 1;
}
Функция регистрации есть, логина есть, осталось заставить их работать, для этого находим паблик OnDialogResponse и вставляем в него:

HTML:
if(dialogid == 1)// Ид диалога Для Логина
        {
            if(response)// Если игрок нажал первую кнопку входа
            {
                        if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова
                {
                    ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
                    return 1;
                }
                new pass[64];// Масив с паролем
                strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога
                OnPlayerLogin(playerid,pass);// Запускаем паблик входа
            }
            else// Если игрок нажал Esc, вернём ему диалог
            {
                ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру.
            }
        }
        if(dialogid == 2)// Ид диалога для регистрации
        {
            if(response)// Если игрок нажал первую кнопку 
            {
                if(!strlen(inputtext))// Если окно ввода пустое, выводим диалог снова
                {
                ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации.
                    return 1;
                }
                new pass[64];// Масив с паролем
                strmid(pass,inputtext,0,strlen(inputtext),64);// Считываем текст с диалога
                OnPlayerRegister(playerid,pass);// Запускаем паблик регистрации
            }
            else// Если игрок нажал Esc, вернём ему диалог
            {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации.
            }
        }
Конец первой части.

От + сика не откажусь

Все тему закрываю, да признаю автор урока не я ссылка на урок
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу