Как стать автором
Обновить

Go в SAMP

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.4K

Возможно эта статья покажется Вам странной, ведь вопрос одного из самых популярных мультиплееров для игры 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: ↑3 и ↓3+2
Комментарии6

Публикации

Истории

Работа

Go разработчик
106 вакансий

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань