[Урок 1]Пишем мод с Vovan228. - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
[Урок 1]Пишем мод с Vovan228.
Lineage Дата: Вторник, 26.06.2012, 01:47 | Сообщение # 1
Боец
Сообщений: 123
Статус: Offline
Краткий план разработки на ближайшее время:

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

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

Качаем последнюю версию сервера sa-mp с офф. сайта.
http://team.sa-mp.com/files/samp03dsvr_R2_win32.zip
Распаковываем сервер в любую удобную для вас папку.
Открываем server.cfg, и меняем rcon_password changename, на свой пароль, из строки filterscripts, убираем все FS которые включены. Меняем gamemode, на new.
Качаем последнюю версию инклуда mxINI.
http://rghost.ru/35987201

Открываем папку pawno, в папке с вашим сервером, папку include, и ложем инклуд mxINI, в эту папку.
Заходи в папку gamemodes, и удаляем все моды которые там есть ( для удобства ).
Заходим в папку pawno, и открываем программу pawno.exe.
Слева, в углу, нажимаем на кнопку new.
Пред вами то, что в ближайшее время, будет нашим модом.
Нажимаем F5, и нам предлагают выбрать папку, и имя будущего мода. Выбираем папку gamemodes, в папке с вашим сервером, и имя файла задаём new .
Пробуем запустить мод, зайдя в папку с сервером, и запустим файл samp-server.exe .
Если сервер запустился, мы всё сделали правильно, настройка сервера закончена.

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

Открываем наш мод. Первое что бросается нам в глаза, это
Code
#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

Вот это нам не нужно. Удаляем.
Находим паблик
Code
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;
}

И после него, вставляем
Code
main()
{
         print("\n----------------------------------");
         print(" Название вашего мода, у меня будет pawno.ru");
         print("----------------------------------\n");
}

В самом начале мода, мы можем видеть такую строку.
Code
#include <a_samp>


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


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

Находим строку
Code
SetGameModeText("Blank Script");

Эта строка, устанавливает название мода, которое будет видно в клиенте. Меняем его на своё.
Code
SetGameModeText("Pawno.ru Mode");

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

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

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


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

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

Code
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.
Сохранение готово.

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

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

Code
new PAccount[MAX_PLAYERS];// Есть аккаунт, или нет


Далее ищем паблик OnPlayerConnect. И в него добавляем:

Code
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, он покажет нам диалог с логином, или регистрацией, в него добавляем.

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


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

Code
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;
}


Функция которая зарегистрирует игрока, готова, теперь функция логина. В конец мода, добавляем.

Code
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 и вставляем в него:

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


http://rghost.ru/35992750 - new.pwn

Автор:Vovan228


ZFS

Сообщение отредактировал Lineage - Вторник, 26.06.2012, 01:52
maxxxum11 Дата: Пятница, 26.07.2013, 04:59 | Сообщение # 2
Боец
Сообщений: 203
Статус: Offline
Я дико извиняюсь за поднятие очень старой темы, но у меня ошибки, много ошибок выдает при комплиировании в конце. Ни кто не может дать ссылку на нормальный, свежий мануал по созданию сервера с нуля? Буду очень благодарен.
pf_fesko1337 Дата: Пятница, 26.07.2013, 23:25 | Сообщение # 3
Новичок
Сообщений: 18
Статус: Offline
Цитата (maxxxum11)
Я дико извиняюсь за поднятие очень старой темы, но у меня ошибки, много ошибок выдает при комплиировании в конце. Ни кто не может дать ссылку на нормальный, свежий мануал по созданию сервера с нуля? Буду очень благодарен.

Ошибки пиши, помогу.
Ронни Дата: Вторник, 06.08.2013, 14:09 | Сообщение # 4
Новичок
Статус: Offline
Lineage, Я хочу создать сервер, можешь ли ты мне в этом помочь?

[img]http://i.imgur.com/8OocJ1l.png[/img]
[font=courier]Принимаю в дар жирные аккаунты, либо ViP.[/font]
Cheater_keater Дата: Среда, 07.08.2013, 12:15 | Сообщение # 5
Новичок
Сообщений: 8
Статус: Offline
Почему я запускаю сервер и он сразу отключается?
switch(po61) Дата: Среда, 07.08.2013, 16:02 | Сообщение # 6
Любитель
Сообщений: 44
Статус: Offline
Cheater_keater, Возможно удален коллбек main() и сервер при вызове его крашиться, возможно какая-то функция переполняет память сервера и так-же крашит. Если-бы вы приложили лог crash detectorа, можно было бы максимально точно исправить ошибку.

My manuals (pawno):
http://cheat-master.ru/forum/117-154879-1 - покупка оружия


Сообщение отредактировал switch(po61) - Среда, 07.08.2013, 16:04
Cheater_keater Дата: Среда, 07.08.2013, 21:37 | Сообщение # 7
Новичок
Сообщений: 8
Статус: Offline
switch(po61), Ошибку решил.В server.cfg не был неправильно введён используемый мод в строке gamemode0.
[CM]Buben4ik Дата: Вторник, 19.11.2013, 15:36 | Сообщение # 8
Новичок
Сообщений: 16
Статус: Offline
C:\Users\1\Desktop\ðàçðàáîòàêà ìîäà äëÿ samp\gamemodes\new.pwn(260) : error 017: undefined symbol "OnPlayerRegister" ошибка. Типо неизвестный символ. Как исправить?

Мои темы:
1. Создание фракции с 0 для new.pwn. (Доработана).
Ссылка: http://cheat-master.ru/forum/117-324714-1

Проблемы с pawno? Обращайся! Помогу бесплатно. Skype: Metra123831
[Mr]White Дата: Пятница, 29.11.2013, 19:23 | Сообщение # 9
Любитель
Сообщений: 31
Статус: Offline
Полезно
[CM]Sam1337 Дата: Вторник, 24.12.2013, 16:26 | Сообщение # 10
Любитель
Сообщений: 31
Статус: Offline
Полезно
CM_Vovik Дата: Воскресенье, 19.01.2014, 17:23 | Сообщение # 11
Боец
Сообщений: 241
Статус: Offline
Автор не Vovan228, данный мануал по созданию регистрации был взят с паблика Pawno-info.ru.
У кого возникли проблемы, обращайтесь помогу.
P.S. Vovan228, не нарушай авторские права!


Сообщение отредактировал CM_Vovik - Воскресенье, 19.01.2014, 17:25
[CM]ABUZ Дата: Среда, 06.08.2014, 09:15 | Сообщение # 12
Боец
Сообщений: 89
Статус: Offline
спасибо
Zloy_Dedywka Дата: Пятница, 15.08.2014, 03:45 | Сообщение # 13
KAKTUS
Сообщений: 616
Статус: Offline
Случаем не от сюда взял?
http://pawn-wiki.ru/index.p....i-mysql (не реклама)
SeX-PrO-AdReNaLiN Дата: Пятница, 15.08.2014, 10:26 | Сообщение # 14
Авторитет
Сообщений: 1310
Статус: Offline
Zloy_Dedywka, а где ты тут видешь что используется плагин mysql. Тут mxini.
Но mysql то лучше. По теме: надо обновить


user N over 99999
Zloy_Dedywka Дата: Суббота, 16.08.2014, 22:23 | Сообщение # 15
KAKTUS
Сообщений: 616
Статус: Offline
SeX-PrO-AdReNaLiN, простите тогда, не заметил.
Не сможешь помочь мой сервер на mysql перевести?
А то новичок просто
Да и с бд поможешь?
  • Страница 1 из 1
  • 1
Поиск: