Кратко о том что мы будем делать.
Данные уроки будут посвящены написанию игрового мода sa-mp с new.pwn. Мод будет жанра РПГ, написан на файловой системе с использованием инклуда mxINI.
Краткий план разработки на ближайшее время:
Основа Мода.
— Система Регистрации
— Загрузка сохранения аккаунта.
— Система Домов
— Система Бизнесов
— Система Транспорта
— Система Банка.
Это план на написание основы. После этого мод начнет заполнятся фракциями, работами и т.п.
Данный урок, будет посвящен началу разработки, и написанию системы регистрации, и загрузки сохранения аккаунта.
Пожалуй начнём.
Действие Первое. Нужные файлы, и настройка сервера:
Действие второе. Удаление лишнего из мода:
Открываем наш мод. Первое что бросается нам в глаза, это
Вот это нам не нужно. Удаляем.
Находим паблик
И после него, вставляем
В самом начале мода, мы можем видеть такую строку.
Если подумать головой, то можно понять что это подгрузка инклудов в мод. После него добавим наш инклуд:
Нажимаем F5, и компилируем мод, если всё прошло без ошибок, значит вы всё сделали правильно.
Эта строка, устанавливает название мода, которое будет видно в клиенте. Меняем его на своё.
Компилируем мод, и.. мы закончили с подготовкой мода. Теперь нас ждёт система регистрации.
Действие Третье. Сохранение аккаунта.
Переходим к созданию того, чем мы будет пользоваться постоянно. Это данные о аккаунте.
После строки с добавлением нашего инклуда, создаём масив, с информацией о игроке.
Теперь мы можем записать пароль, определённого игрока, чем мы сейчас и займёмся.
Опускаемся в самый конец мода, и создаём там, вот это:
Нажимаем F5, и мод компилируется. Если ошибок нет, то вы сделали всё правильно.
Теперь нам надо зайти в папку с сервером, открыть папку scriptfiles, и в ней добавить папку players.
Сохранение готово.
Действие Четвёртое. Создание регистрации и загрузки игрока.
Для создания регистрации, надо узнать, есть ли игрок с таким именем на сервере, для начала нужно после объявления нашего инклуда, вставить следующее:
Далее ищем паблик OnPlayerConnect. И в него добавляем:
Теперь ищем паблик, OnPlayerRequestClass, он покажет нам диалог с логином, или регистрацией, в него добавляем.
Диалоги мы показали, но теперь надо заставить его работать. Для этого нам надо сделать функцию загрузки и регистрации игрока.
Этим мы и займёмся. В конец мода, вставляем.
Функция которая зарегистрирует игрока, готова, теперь функция логина. В конец мода, добавляем.
Функция регистрации есть, логина есть, осталось заставить их работать, для этого находим паблик OnDialogResponse и вставляем в него:
Конец первой части.
Полезные ссылки:
— Include mxINI
— new.rar [1,84К]
Приношу свои извинения за ошибки в тексте.
Понравился урок? Пользуйся на здоровье.
Следующий урок, в ближайшие дни.
Автор урока: Vovan228
Как написать мод для сампа
Быстрый переход в группу «Пользователи», без надобности написания постов и ожидания.
Покупка дает возможность:
Маппинг для сервера
Моды для сервера
Огромный выбор различных модификаций для Вашего сервера. Пролистайте эти темы! Возможно именно там Вы найдете то, что искали уже давно.
Модификации SA
Хотите разнообразить свою игру в San Andreas? Смелее в наш раздел. Отличный сборник готовых решений. Играйте с удовольствием
potemckin
Изучающий
Пишем мод с 0 самостоятельно.(Урок 1)
//——————————————————————————————————————\\
Здравствуйте, дорогие поситители и обитатели pawno-info.ru!
Это мой первый и я надеюсь не последний урок по созданию мода для samp.
Ну и ближе к теме.
Наш мод будет в так полюбившемся многим жанре Role Play.
Основной функционал будет на mxINI, потому что я в mySQL мало жу-жу.
//——————————————————————————————————————\\
Для начала нам надо скачать инклуд mxINI и официальный сервер samp.
Открываем папку с нашим сервером, открываем с помощью блакнота фаил server.сfg и правим в нем всё по примеру ниже
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT
#if defined FILTERSCRIPT
public OnFilterScriptExit()
<
return 1;
>
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;
>
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 OnPlayerConnect(playerid)
<
return 1;
>
public OnPlayerDisconnect(playerid, reason)
<
return 1;
>
public OnPlayerSpawn(playerid)
<
return 1;
>
public OnPlayerDeath(playerid, killerid, reason)
<
return 1;
>
public OnVehicleSpawn(vehicleid)
<
return 1;
>
public OnVehicleDeath(vehicleid, killerid)
<
return 1;
>
public OnPlayerText(playerid, text[])
<
return 1;
>
public OnPlayerCommandText(playerid, cmdtext[])
<
if (strcmp(«/mycommand», cmdtext, true, 10) == 0)
<
// Do something here
return 1;
>
return 0;
>
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 OnRconCommand(cmd[])
<
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 OnRconLoginAttempt(ip[], password[], success)
<
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 OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
<
return 1;
>
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
<
return 1;
>
Ладно, приступим, для начала удалим кое-что, потисачим из нашего мода что-нибудь!
НЕ партесь! Нам это ненужно, это для создания FS.
Теперь сделаем наш мод более «НАШИМ» тобишь вставим наши названия!
Снова всех приветствую, сегодня продолжаем писать мод с нуля. Уже в этом уроке будет создаваться регистрация и авторизация и после нее конечно же отправление игрока на спавн. Не буду тянуть драгоценные секунды вашей жизни. Приступаем:
Качаем архив, который находится в конце урока и распаковываем его в папку с сервером. Открываем его конфиг и вставляем в самый низ строку подключения плагинов.
Закончили с подключением плагина, переходим в мод.
Открываем наш мод, который мы создавали в прошлом уроке и на первых строчках мы видим код:
Его нужно почистить от лишнего мусора, который нам не понадобится. Весь код можно удалить, кроме main() <. >и подключения инклуда SA-MP’a.
Теперь нам нужно подключить сам инклуд MySQL, взаимодействовать который будет напрямую с плагином для работы с БД. После строки с подключением последнего инклуда вставляем новую строку:
и получаем
Нам нужно создать переменную, которая будет являться подключением к БД. Кроме этого, я решил сделать еще и макросы для подключения и массив, который будем использовать для форматирования запросов на 256 ячеек. Думаю, на первое время хватит.
Подключаем БД: ищем коллбэк (public) OnGameModeInit и прописываем функции подключения
Для избежания предупреждений о дубликате подключения в логах MySQL нужно закрыть подключение после выключения мода:
Настроим немного мод и можно приступать к основному.
В начало мода прописываем перечисление (enum) с автоподсчетом ID диалогов и информации о игроке:
После них создаем переменные для использования последнего перечисления (ну и еще переменную с проверкой на авторизацию игрока).
Закончено. Можно двигаться дальше. Ищем коллбэк OnPlayerConnect и нам нужно записать имя игрока и запустить таймер для выполнения запроса:
Создаем так же коллбэк, в «теле» которого будет выполняться код:
Коллбэк таймера мы создали, но теперь нужно еще и запроса. Делаем:
Создаем реакцию диалогов на действия игрока. Ищем OnDialogResponse и начинаем писать (ну не Ctrl + C же):
При авторизации мы отправляли БД запрос на поиск совпадений с name и pName и password с inputtext (хешированным). Для него тоже нужно создать коллбэк, который мы указывали при выполнении (@__mysqlUploadPlayerAccount)
Все, мы закончили. Осталось написать спавн игрока и создать базу данных. В OnPlayerSpawn:
Я буду использовать phpMyAdmin (который будет создавать для меня Denwer).
Переходим по локальному адресу localhost/Tools/phpMyAdmin
При входе в БД у нас еще нет созданных таблиц, поэтому и отображается уведомление с этой «проблемой».
Ниже видно «Создать таблицу». В поле Имя вписываем accounts (или ваш вариант), Количество столбцов оставляем пустым.
Мы все сделали, закончили, теперь можно отдыхать. Ниже можете писать свои вопросы или замечания (мне), я все прочитаю и отвечу. Следующий урок будет завтра ну или через 2-3 дня. До встречи.
Как написать мод для сампа
Кратко о том что мы будем делать.
Данные уроки будут посвящены написанию игрового мода sa-mp с new.pwn. Мод будет жанра РПГ, написан на файловой системе с использованием инклуда mxINI.
Краткий план разработки на ближайшее время:
Основа Мода.
— Система Регистрации
— Загрузка сохранения аккаунта.
— Система Домов
— Система Бизнесов
— Система Транспорта
— Система Банка.
Это план на написание основы. После этого мод начнет заполнятся фракциями, работами и т.п.
Данный урок, будет посвящен началу разработки, и написанию системы регистрации, и загрузки сохранения аккаунта.
Пожалуй начнём.
Действие Первое. Нужные файлы, и настройка сервера:
Действие второе. Удаление лишнего из мода:
Открываем наш мод. Первое что бросается нам в глаза, это
#if defined FILTERSCRIPT
public OnFilterScriptExit()
<
return 1;
>
Вот это нам не нужно. Удаляем.
Находим паблик
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;
>
И после него, вставляем
В самом начале мода, мы можем видеть такую строку.
Если подумать головой, то можно понять что это подгрузка инклудов в мод. После него добавим наш инклуд:
Нажимаем F5, и компилируем мод, если всё прошло без ошибок, значит вы всё сделали правильно.
Находим строку
SetGameModeText(«Blank Script»);
Эта строка, устанавливает название мода, которое будет видно в клиенте. Меняем его на своё.
Компилируем мод, и.. мы закончили с подготовкой мода. Теперь нас ждёт система регистрации.
Система Регистрации будем в следующем уроке до скорых встреч.
Всем привет
Решил заняться разработкой своим сервером SAMP Mobile (Android) и делится своим опытом с вами
Все уроки будут опубликоваться в этой теме
Список уроков:
Также пишите в коменты какие вы хотите видеть уроки по SAMP Mobile (Android)
Приступим
Нам понадобится:
Для начало распакуем содержимое архива build69-master.zip папку jni в любое вам место (лучше создайте отдельную папку на диске C для удобства)
И в тоже место наш NDK
После того как мы всё разархивовали запускаем Командную строку (CMD)
Нажимаем win+r и вводим cmd и нажимаем кнопочку ОК
После этого пишем в командной строке:
Пример: cd C:/Android/NDK и нажимаем Enter
После того как мы перешли в командной строке в папку с нашим NDK нам надо поставить свой IP:port для сервера
Для этого переходим по пути и открываем файл любым редактором (в моём случае): Android/jni/main.cpp и ищем такие строки:
И меняем 2 строки encryptedAddress.decrypt(), port что бы получилось вот так:
После того как мы отредактировали main.cpp сохраняем его и открываем следующий файл Application.mk (Любым редактором) и меняем
После этого сохраняем наш Application.mk и возвращаемся в командную строку
В командной строке пишем следующие:
Нажимаем Enter и ждём
При удачном компилирование должно получится:
Переходим в папку libs\armeabi-v7a и видим наш скомпилированый клиент libsamp.so
В следующем уроке я расскажу как его поместить в наш samp.apk
Вот и всё урок окончен
Автор урока: MuhamadPawn (Kirita)
Копирование данной статьи без разрешение автора запрешено!
Мы скомпилировали исходники SAMP Mobile (Android) и получили libsamp.so
Если у вас появились вопросы или ошибки задавайте в теме отвечу
Урок 2. Сбор проекта (.apk)
Приступим
Запускаем нашу программу ApkEditor и нажимаем «Выберите файл APK»
После того как завершится добавления файла «libsamp.so» В верху с права нажимаем на кнопку «Сборка»
После сборки нас должно встретить окно о завершение сборки проекта
После этого переходим по пути которому указала программа и забираем наш apk
В следующем уроке я расскажу как заменить загрузочный экран SAMP ANDROID на свой
Вот и всё урок окончен
Автор урока: MuhamadPawn (Kirita)
Копирование данной статьи без разрешение автора запрешено!
Мы скомпилировали исходники SAMP Mobile (Android) и получили libsamp.so
Если у вас появились вопросы или ошибки задавайте в теме отвечу
Хотел бы дополнить ваш урок или точнее альтернативный вариант с вводом хоста и порта.
Если изменить данный кусок кода на мой вариант, то не придется каждый раз компилировать нативную библиотеку, можно будет просто заносить свои изменения в файл settings.ini.
А точнее просто дописав
Данная инструкция не доведена до ума, так как есть еще доп файлы к клиенту и если просто скомпилировать, то будет вылетать так как в исходниках есть ошибки, авторы исходников это потвердили.
Урок 2. Сбор проекта (.apk)
Приступим
Запускаем нашу программу ApkEditor и нажимаем «Выберите файл APK»
После того как завершится добавления файла «libsamp.so» В верху с права нажимаем на кнопку «Сборка»
После сборки нас должно встретить окно о завершение сборки проекта
После этого переходим по пути которому указала программа и забираем наш apk
В следующем уроке я расскажу как заменить загрузочный экран SAMP ANDROID на свой
Вот и всё урок окончен
Автор урока: MuhamadPawn (Kirita)
Копирование данной статьи без разрешение автора запрешено!
Мы скомпилировали исходники SAMP Mobile (Android) и получили libsamp.so
Если у вас появились вопросы или ошибки задавайте в теме отвечу
Как оптимизировать мод под Mobile версию?