Игровой Портал State Texas RolePlay and Drift 4 You
Игровой Портал State Texas RolePlay and Drift 4 You
Игровой Портал State Texas RolePlay and Drift 4 You


 

Поделиться
 

 Пишем мод с 0.(урок 1)

Предыдущая тема Следующая тема Перейти вниз 
АвторСообщение
Felave
Пользователь
Пользователь
Felave

Сообщения : 125
Город : Нижний Новгород
Репутация : 44

Пишем мод с 0.(урок 1) Empty
СообщениеТема: Пишем мод с 0.(урок 1)   Пишем мод с 0.(урок 1) Empty2012-07-03, 08:00

Кратко о том что мы будем делать.
Данные уроки будут посвящены написанию игрового мода sa-mp с new.pwn. Мод будет жанра РПГ, написан на файловой системе с использованием инклуда mxINI.

Краткий план разработки на ближайшее время:

Основа Мода.
- Система Регистрации
- Загрузка сохранения аккаунта.
- Система Домов
- Система Бизнесов
- Система Транспорта
- Система Банка.

Это план на написание основы. После этого мод начнет заполнятся фракциями, работами и т.п.

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

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

Качаем последнюю версию сервера 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 .
Если сервер запустился, мы всё сделали правильно, настройка сервера закончена.

Действие второе. Удаление лишнего из мода:

Открываем наш мод. Первое что бросается нам в глаза, это
Код:
#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
Это нам ненужно удаляем!
Действие третье:Меняем название мода
Находим паблик OnGameModeInit()
Код:
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;
}
И после него, вставляем
main()
{
print("\n----------------------------------");
print(" Название вашего мода PG");
print("----------------------------------\n");
}
Действие четвертое:Вставка инклюдов и первое компелирование
В самом начале мода, мы можем видеть такую строку.
Код:
#include <a_samp>
Если подумать головой, то можно понять что это подгрузка инклудов в мод. После него добавим наш инклуд:
Код:
#include <mxINI>
Нажимаем F5, и компилируем мод, если всё прошло без ошибок, значит вы всё сделали правильно.

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

Компилируем мод, и.. мы закончили с подготовкой мода. Теперь нас ждёт система регистрации.

Действие Пятое. Сохранение аккаунта.
Переходим к созданию того, чем мы будет пользоваться постоянно. Это данные о аккаунте.
После строки с добавлением нашего инклуда, создаём масив, с информацией о игроке.
Код:
enum pInfo
{
        pPass[64],// Масив с паролем
}
new Player[MAX_PLAYERS][pInfo];
Теперь мы можем записать пароль, определённого игрока, чем мы сейчас и займёмся.

Опускаемся в самый конец мода, и создаём там, вот это:
Код:
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.
Сохранение готово.

Действие Шестое. Создание регистрации и загрузки игрока.
Для создания регистрации, надо узнать, есть ли игрок с таким именем на сервере, для начала нужно после объявления нашего инклуда, вставить следующее:
Код:
new PAccount[MAX_PLAYERS];// Есть аккаунт, или нет
Далее ищем паблик OnPlayerConnect. И в него добавляем:
Код:
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, он покажет нам диалог с логином, или регистрацией, в него добавляем.
Код:
if(PAccount[playerid] == 1)// Если аккаунт есть
        {
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");// Показываем диалог входа в игру. Стиль диалога выставляем на ввод текста.
        }
        else// Если аккаунта нет
        {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации. Стиль диалога выставляем на ввод текста.
        }
Диалоги мы показали, но теперь надо заставить его работать. Для этого нам надо сделать функцию загрузки и регистрации игрока.
Этим мы и займёмся. В конец мода, вставляем.
Код:
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;
}
Функция которая зарегистрирует игрока, готова, теперь функция логина. В конец мода, добавляем.
Код:
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 и вставляем в него:
Код:
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Зарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации.
            }
        }
Конец первой части.
Автор урока: Vovan228
Редактор и оформитель:Felave
mxINI
Что должно получиться(new.pwn)
Вернуться к началу Перейти вниз
Laskoviy
Пользователь
Пользователь
Laskoviy

Сообщения : 270
Репутация : 9

Пишем мод с 0.(урок 1) Empty
СообщениеТема: Re: Пишем мод с 0.(урок 1)   Пишем мод с 0.(урок 1) Empty2012-07-03, 09:51

ой же как все рассписал ) идеально все. Красава)
Вернуться к началу Перейти вниз
Felave
Пользователь
Пользователь
Felave

Сообщения : 125
Город : Нижний Новгород
Репутация : 44

Пишем мод с 0.(урок 1) Empty
СообщениеТема: Re: Пишем мод с 0.(урок 1)   Пишем мод с 0.(урок 1) Empty2012-07-03, 13:44

А то. Пишем мод с 0.(урок 1) 3559866721
Вернуться к началу Перейти вниз
Medium
Создатель
Создатель
Medium

Сообщения : 1612
Город : State Texas
Репутация : 165

Пишем мод с 0.(урок 1) Empty
СообщениеТема: Re: Пишем мод с 0.(урок 1)   Пишем мод с 0.(урок 1) Empty2012-07-03, 13:46

В натуре четко ) можно и мод теперь писать
Вернуться к началу Перейти вниз
Felave
Пользователь
Пользователь
Felave

Сообщения : 125
Город : Нижний Новгород
Репутация : 44

Пишем мод с 0.(урок 1) Empty
СообщениеТема: Re: Пишем мод с 0.(урок 1)   Пишем мод с 0.(урок 1) Empty2012-07-18, 04:25

Для этого и урок : Shocked
Вернуться к началу Перейти вниз
Nickin
Пользователь
Пользователь
Nickin

Сообщения : 1
Город : Екатеринбург
Репутация : 0

Пишем мод с 0.(урок 1) Empty
СообщениеТема: Re: Пишем мод с 0.(урок 1)   Пишем мод с 0.(урок 1) Empty2012-09-09, 15:33

Лови + )
Вернуться к началу Перейти вниз
???? 123
Гость
Anonymous


Пишем мод с 0.(урок 1) Empty
СообщениеТема: +   Пишем мод с 0.(урок 1) Empty2012-10-11, 19:02

+[i][u]
Вернуться к началу Перейти вниз
Alex_Maibach
Создатель
Создатель
Alex_Maibach

Сообщения : 542
Город : Germany/Stuttgart
Репутация : 69

Пишем мод с 0.(урок 1) Empty
СообщениеТема: Re: Пишем мод с 0.(урок 1)   Пишем мод с 0.(урок 1) Empty2012-10-11, 19:38

урок крутой, +
Вернуться к началу Перейти вниз
Crossfie
Гость
Anonymous


Пишем мод с 0.(урок 1) Empty
СообщениеТема: Error's   Пишем мод с 0.(урок 1) Empty2013-02-16, 07:06

Почему при последнем компилиривонии выдаёт 23 eror's ???
Вернуться к началу Перейти вниз
 

Пишем мод с 0.(урок 1)

Предыдущая тема Следующая тема Вернуться к началу 
Страница 1 из 1

Права доступа к этому форуму:Вы не можете отвечать на сообщения
Игровой Портал State Texas RolePlay and Drift 4 You :: Корзина :: Архив тем, которые разрешены для просмотра всем пользователям :: Уроки Pawno-
Игровой портал | www.portal-games.com
Рейтинг серверов mmotop
State Texas | YouTube