Возможно эта статья покажется Вам странной, ведь вопрос одного из самых популярных мультиплееров для игры GTA: San Andreas давно решён, так или иначе поддержка неофициального фреймворка, если его можно так назвать, для языка GO всё ещё идёт.

Ответ на один из возможных вопросов читателей:
- Зачем писать статью о никому неизвестном фреймворке для SAMP-мультиплеера?
Вопрос вполне корректный, честно я и сам пока что не нашёл правильного ответа. Но думаю что кому-то это и потребуется. Когда-то я и сам начинал программировать, а моё начало было с написания игрового мода для сервера SAMP, впрочем, это другая история.

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

Введение

Не так давно я начал изучать язык программирования Go, знакомиться с горутинами, многопоточностью, осваивать стандартные библиотеки, бла-бла-бла. Вдруг мне стало интересно узнать об одной вещи: можно ли писать скрипты игрового мода для SAMP в Go? Буквально пару лет назад я видел библиотеку SAMP-GDK, которая позволяла писать игровые моды на языках C и C++. Тогда я не обратил на это внимания, но меня довольно сильно заинтересовала эта тема, конечно уже с другим языком, как и упоминалось ранее.

Основная информация о пакете для разработки

Дак вот, начав гуглить я столкнулся с одной интересной библиотекой на GitHub: SAMPGO.
У репозитория есть собственный Wiki-раздел, который позволяет более подробно ознакомиться с пакетом и узнать его тонкости.

Плюсы, которые я нашёл:

  • Пакет инструментов содержит в себе все функции из стандартной библиотеки SAMP. Иными словами, разработчики пакета перенесли все хендлеры, коллбеки и команды на язык Go.

  • Игровые сценарии на языке Go позволят ускорить работу в 3-5 раз.

  • Есть поддержка ООП (при классическом написании игрового мода на языке PAWN Вы её не найдёте).

  • Есть поддержка Linux и Windows.

Минусы, которые могут стать критичными:

  • Есть определённые мороки с компиляцией и запуском игровых скриптов (об этом поговорим ниже).

  • Некоторые функции работают не так как должны (в библиотеке есть ряд багов, которые решаются костылями в коде).

Пример кода от разработчиков библиотеки:

sampgo.On("goModeInit", func() bool {
	sampgo.Print("Hello from Go!")

	v1 := sampgo.CreateVehicle(503, 0, 0, 5.0, 0, 1, 1, 30, true)
	sampgo.Print(fmt.Sprintf("Vehicle id %d created", v1))

	v2 := sampgo.CreateVehicle(504, 0, 2, 5, 0, 3, 3, 30, false)
	sampgo.Print(fmt.Sprintf("Vehicle id %d created", v2))

	return true
})

sampgo.On("goModeExit", func() bool {
	sampgo.Print("goModeExit!")
	return true
})

sampgo.On("onPlayerConnect", func(p sampgo.Player) bool {
	sampgo.Print(fmt.Sprintf("Player ID is %d", p.ID))
	p.SendMessage(0xFFFFFF, "Welcome to the sampgo base gamemode!")
	return true
})

Проблемы с компиляцией

Поскольку SAMP-Сервер нацелен на исполнение скриптов с 32-битной архитектурой, Вам придётся повозиться с настройкой компилятора.

Весь проект нужно собирать в DLL-библиотеку, следовательно Вам потребуется кросскомпилятор, об этом авторы написали в одной из Wiki-статей.

Одна из вытекающих проблем, по непонятной для меня причине, скомпилированный проект не запускается на машине с 64-битной архитектурой. Я пробовал разные методы компиляции, старался запускать сервер с правами рута, думал что всё дело в доступе сервера к файлам. К большому сожалению это не так, вероятно и я мог допустить какую-либо ошибку, но при запуске этого же скрипта на машине с 32-битной архитектурой всё заработало.

Выводы

Пусть SAMP как и его ответвление CRMP уже не пользуется той популярностью что раньше, но на нём всё ещё действует огромное множество проектов. Которые приносят деньги владельцам и пользуются спросом у игроков. Думаю что эта статья станет полезной для Go-Разработчиков, которым по какой-либо причине стало скучно.

Комментарии (6)


  1. kin4stat
    00.00.0000 00:00

    А в чем вообще смысл статьи? Пожаловаться на 32 битную компиляцию?


    1. RyAtex
      00.00.0000 00:00
      +1

      Думаю, чтобы показать, что за пределами PAWN есть жизнь


    1. Catborisovv Автор
      00.00.0000 00:00

      Статья создана в ознакомительных целях, проблемы компиляции выделены для пользователей, которые захотят попробовать работу этого пакета в действии


  1. mellonges
    00.00.0000 00:00

    Интересно как себя покажет Go на запущенном сервере с 1к игроков. Pawn жрал намеренно


    1. Catborisovv Автор
      00.00.0000 00:00
      +1

      Мне кажется, что это будет работать довольно таки быстро. Ведь запуск такого скрипта происходит как .so или .dll библиотеки. Go сам по себе намного быстрее PAWN, но такой опыт был бы действительно интересным


  1. dzhamalique
    00.00.0000 00:00

    Пусть SAMP как и его ответвление CRMP уже не пользуется той популярностью что раньше

    это скорее вам так кажется, серверов в сампе и крпм с каждым месяцем все больше и больше
    и это не простые серверас 15 онлайна, это сервера по 1000 человек каждый