Предисловие
Когда появилась идея написать свой сервер, это было страшно. Нет какой-то понятной статьи, не всегда понятно, что гуглить. Эта статья написана специально для таких новичков чтобы хоть немного осветить эту тему и дать вектор развития в этой области.
Глава 1: Дистрибутив
Работать будем с версией 0.3.7, так как она самая последняя и стабильная. Переходим на sa-mp.com, ищем с левой стороны раздел Navigation, под ним кнопку Downloads. После перехода нас будут интересовать два нижних раздела. "SA-MP Windows Server Download" и "SA-MP Linux Server Download"..
Есть вероятность, что после нажатия на ссылку, скачивание не начнётся. Тогда просто скопируйте адрес ссылок и вставьте их в строку поиска браузера.
В архиве находится ряд файлов и папок. Пройдёмся по основным:
filterscripts - подключаемые скрипты. вы можете выносить отдельные участки кода в отдельные файлы. если они автономны и не участвуют в основном моде, их можно вынести сюда
gamemodes - игровые режимы сервера. Здесь будет находиться главный файл нашего мода
include - подключаемые из кода мода файлы.
pawno - папка, имеющая в себе редактор IDE pawno и собственную папку includes. Настоятельно рекомендую использовать её. Отсюда легче подключать файлы
scriptfiles - хранилище. здесь расположены конфигурационные файлы скрптов.
samp-server.exe (Windows) - исполняемый файл, запускающий сервер
server.cfg - конфигурационный файл сервера
Глава 2: Конфигурация сервера и первый запуск
server.cfg как было сказано ранее - файл конфигурации сервера. Здесь подключаются моды, фильтерскрипты, плагины; устанавливаются название сервера, порт, язык, вебсайт и многое другое.
Значение всех его полей описано в файле server-readme.txt. Вот его перевод:
После того, как конфигурация будет завершена, запустите samp-server.exe для запуска серверного процесса
hostname (String) - указывает имя хоста, отображаемое в браузере серверов.
port (int) - указывает порт для прослушивания. Этот порт используется для игровых соединений, соединений rcon и для запросов.
maxplayers (int) - указывает максимальное количество игроков на сервере
announce (int 1/0) - добавляет ваш сервер в список серверов «Интернет» в браузере SA:MP. Вкл. (1) или Выкл. (0).
weburl (String) - указывает URL-адрес, отображаемый в обозревателе серверов, который связан с сервером.
gamemode0 - gamemode15 (String + int) - задает параметры ротации. Первый параметр задает имя игрового режима. Во-вторых, количество повторений. Вы можете использовать gamemode0 для указания первого игрового режима, gamemode1 для указания второго и т. д.
И вот, о чём в readme не написали:
rcon_password (String) - пароль админа сервера. ввод этого пароля при подключении в игру даёт игроку статус админа.
filtersripts (String[]) - через пробел описанные названия скриптов из папки filterscripts, которые будут запущены при запуске сервера
plugins (String[]) - список включенных плагинов (обязательно указывать форматы .so или .dll в зависимости от ОС сервера)
lanmode (int 0/1) - определяет возможность подключения к серверу только из локальной сети (1) или извне (0)
language (String) - устанавливает язык сервера (влияет только на отображение в браузере серверов)
После завершения конфигурации, запускаем файл samp-server.exe, смотрим в красивую консоль и..
Глава 2.1: Первое подключение
Я буду считать, что читатели этой статьи знакомы с SAMP и его интерфейсом. В поле IP прямого подключения или добавления сервера в Favorites вводим такой адрес:
[Local IP]:[Port]
И можем подключаться! (по умолчанию там уже стоит игровой мод grandlarc)
Глава 3: Pawn.. Pawno?
Pawn это простой Си-подобный язык программирования. Даже на википедии в спектре использований этого языка SAMP стоит на первом месте. В интернете информация по чистому языку и использованию в программировании игровых режимов. О хороших IDE и редакторах кода можете забыть. Для VS Code ещё можно накатить плагины поддержки Pawn, но он не так удобен как стандартный редактор кода, который лежит в дистрибутиве сервера в папке pawno. В подробности языка и его особенности углубляться не будем. Поверхностное представление того, с чем мы имеем дело можно сложить по статье на википедии.
Открываем Pawncc.exe, млева сверху ищем пустой белый лист, нажимаем на него и перед нашим взором предстаёт "чистый" лист шаблона мода..
Итак.. да, абсолютно всё здесь находится в одном файле. Прописано множество методов, которые будут вызываться при происхождении на клиенте или сервере какого-то события. игрок подключился, игрок вышел, игрок сел в машину игрок вылез иж машины, игрок выбирает класс, игрок умер, игрок зареспавнился, игрок игрок игрок..
почти все методы принимают в себе аргумент playerid. и он уникален. на каждый отдельный такт. игрок может выйти и на его место встанет другой. для этого лучше не вешайте на это поле слишком много, или подчищайте всю информацию за игроком после его отключения.
вы можете создавать внешние .inc файлы и подключать их через #include. файлы создавайте в папке pawno/include. да, кажется, что это просто дистрибутив редактора кода, но здесь лежат даже главные файлы кода сервера. так как отсюда их можно подключать, указав в include тмя файла. если вы будете подключать свои файлы из папки include в корне сервера, вам будет необходимо указать относительный путь до этой папки из дирректории pawn/include (.. /.. /include/file.inc)
Глава 3.1: Компиляция, подключение, запуск
После того, как режим был прописан и готов к встраиванию на сервер, сохраняем его в папку mods и жмём на зелёную стрелку. Если компиляция прошла успешно, необходимо указать название файла мода в server.cfg и цифру 1 в поле gamemode0 пример
gamemode0 mymode 1
Запускаем сервер и наслаждаемся своим творением!
Эпилог
Тут наверное стоит рассказать про коммьюнити. Все сервера предпочитают сохранять свой исходный код в тайне, не делятся скомпилированными результатами. Форумы уже заглохли, часто это просто зеркало другого форума, и если возникнет проблема, то решение может искаться очень долго. Активных чатов и бесед нет, документация не весьма удобная. Даже если нашли какой-то отличный плагин, даже довольно крупный и в обиходе на серверах.. Скорее всего будет трудно найти информацию о нём кроме оригинального сообщения на форуме. Но чёрт! это очень интересная и затягивающая тема, в которой мне понравилось разбираться. Если вам будет интересно узнать подробнее о создании сервера (Сторонние плагины, инклады, маппинг) проявите фидбек под этим постом. В этом посте я попытался только дать вектор развития и хоть как-то осветить эту тему комплексно. Спасибо за то, что прочитали этот туториал!
Ссылки и полезности
Ниже приведены ссылки на форумы и разделы документации, которые будут полезны во время работы над сервером.