Страница 1 из 20 12311 ... ПоследняяПоследняя
Показано с 1 по 10 из 198

Тема: Пишем мод с Vovan228 [ Урок 1 ]

  1. #1
    Fallout MTA Аватар для Vovanm93
    Регистрация
    03.01.2011
    Адрес
    Армавир
    Возраст
    29
    Сообщений
    1,142
    Репутация: 129

    Звание: скоро придёт к известности

    Пишем мод с Vovan228 [ Урок 1 ]

    Здравствуйте уважаемые пользователи lightcode.ru.
    Описание того как я пришёл к этой теме, ссылка.
    Кратко о том что мы будем делать.
    Данные уроки будут посвящены написанию игрового мода 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


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

    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(" Название вашего мода, у меня будет lightcode.ru");
    print("----------------------------------\n");
    }


    В самом начале мода, мы можем видеть такую строку.

    #include <a_samp>


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

    #include <mxINI>


    Нажимаем F5, и компилируем мод, если всё прошло без ошибок, значит вы всё сделали правильно.

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

    SetGameModeText("Blank Script");


    Эта строка, устанавливает название мода, которое будет видно в клиенте. Меняем его на своё.

    SetGameModeText("Pawno.ru Mode");


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


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

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

    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Зарегистрируйтесь введя пароль в окошко","Ввод","");// Показываем диалог регистрации.
    }
    }


    Конец первой части.
    Полезные ссылки:

    Сервер 0.3d R2
    Include mxINI v0.5
    new.pwn

    Приношу свои извинения за ошибки в тексте.
    Понравился урок? Пользуйся на здоровье.
    Следующий урок, в ближайшие дни.
    Автор урока: Vovan228


    Все вопросы, задавать в этой теме.

  2. #2
    Пользователь
    Регистрация
    01.12.2011
    Адрес
    Хмельницкий
    Возраст
    28
    Сообщений
    63
    Репутация: 1

    Звание: пока не определено

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Супер.

  3. #3
    Активный пользователь Аватар для SV-RP
    Регистрация
    04.02.2011
    Возраст
    34
    Сообщений
    497
    Репутация: 35

    Звание: на пути к лучшему

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Норм,только лучше бы написал на MySQL а то по mxINI уроков как бы много))

  4. #4
    ?????? Аватар для Иваныч
    Регистрация
    10.02.2011
    Адрес
    Vlz
    Возраст
    28
    Сообщений
    4,152
    Репутация: 403

    Звание: - очень-очень хороший человек

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Назвал бы тему - "ПИШЕМ ГФ С 0"

  5. #5
    Активный пользователь Аватар для Динар
    Регистрация
    14.05.2011
    Адрес
    Уфа
    Возраст
    32
    Сообщений
    1,146
    Репутация: 69

    Звание: скоро придёт к известности

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Малаток.

  6. #6
    Активный пользователь Аватар для FreesK
    Регистрация
    10.03.2011
    Адрес
    Москва
    Сообщений
    115
    Репутация: 21

    Звание: на пути к лучшему

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Отлично!)

  7. #7
    Fallout MTA Аватар для Vovanm93
    Регистрация
    03.01.2011
    Адрес
    Армавир
    Возраст
    29
    Сообщений
    1,142
    Репутация: 129

    Звание: скоро придёт к известности

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Цитата Сообщение от SV-RP Посмотреть сообщение
    Норм,только лучше бы написал на MySQL а то по mxINI уроков как бы много))
    Не все понимают MySQL, да и не очень выгодно его держать)
    На mxINI будет весь сервер

    Цитата Сообщение от Tracker1 Посмотреть сообщение
    Назвал бы тему - "ПИШЕМ ГФ С 0"
    Мммм гф из за названия пабликов? Ну да, могу сменить, а смысл? Так тоже не плохо.

    Цитата Сообщение от Динар Посмотреть сообщение
    Малаток.
    Благодарю

  8. #8
    ?????? Аватар для Иваныч
    Регистрация
    10.02.2011
    Адрес
    Vlz
    Возраст
    28
    Сообщений
    4,152
    Репутация: 403

    Звание: - очень-очень хороший человек

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Цитата Сообщение от Vovan228 Посмотреть сообщение

    Мммм гф из за названия пабликов? Ну да, могу сменить, а смысл? Так тоже не плохо.
    Что так, что не так ***ня.

  9. #9
    Активный пользователь Аватар для Iceek
    Регистрация
    09.09.2011
    Адрес
    Казахстан.
    Сообщений
    679
    Репутация: 86

    Звание: скоро придёт к известности

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Отлично, + дал.
    ICQ: 624014893
    Skype: igor_iceek

  10. #10
    ваш статус был снят систе Аватар для DeadLine
    Регистрация
    10.03.2011
    Адрес
    Казахстан, Алма-Ата
    Возраст
    28
    Сообщений
    2,449
    Репутация: 243

    Звание: - весьма и весьма положительная личность

    Re: Пишем мод с Vovan228 [ Урок 1 ]

    Красава))) плюсиг поставил для новичков этот урок то что нужно)




Страница 1 из 20 12311 ... ПоследняяПоследняя

Похожие темы

  1. Vovan228
    от Vovanm93 в разделе О игроках/скриптерах в SA-MP
    Ответов: 37
    Последнее сообщение: 09.06.2014, 21:07
  2. Vice City RP aka LSRP by Vovan228
    от Vovanm93 в разделе Моды
    Ответов: 20
    Последнее сообщение: 21.08.2012, 22:17

Ваши права

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