Я занимаюсь Garry's Mod'ом с 2015 года, начиная с администрирования чужого сервера и до создания своего проекта, где большинство разработок были самописны (не куплены), а сервера проекта в свое время были в топ-10 мира по рейтингу GameTracker.

Инструменты, которые я использую позволили мне ускорить разработку в сравнении с банальным редактированием файлов через FTP в десятки раз. То, что написано ниже требует немного времени на изучение, но это время уже за неделю окупится за счет гораздо большего скорости разработки и удобства в целом.

Я старался сделать пост максимально сжатым, поэтому некоторые детали по установке или настройке упустил. Если возникнут вопросы, вы можете задать их мне в t.me/gmodev

Софт, который будем использовать

  • xShell (лучшая альтернатива Putty). Главное преимущество это очень удобное управление сессиями и окнами на экране. На больших разрешениях даже банальная замена Putty на xShell дает значительный (хотя и далеко не самый большой прирост эффективности)
  • SublimeText с плагинами, как замену динозавру Notepad++. Нотпэд безусловно хороший текстовый редактор, но его функционал не позволяет делать ничего интереснее, чем тупо редактировать файлы. Саблайм с плагинами будет самым ценным, что повысит нашу эффективность
SublimeText с темой Afterglow
  • [не обязательно] GitHub Desktop, чтобы синхронизироваться между несколькими своими компьютерами, а также вести учет изменений на своих проектах
  • [не обязательно] CyberDuck на замену громоздкой FileZilla, которая не умеет ничего, кроме задалбывания сообщениями о бесполезных обновлениях. Вообще, FTP клиент после этой статьи нужен будет нам в очень редких случаях. Я запускаю его не чаще раза в месяц

Плагины для SublimeText

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

Все плагины устанавливаются через один единственный плагин PackageControl, который устанавливается одной командой и позволяет сделать из простого текстового редактора красивую и мощную IDE

GLua синтаксис

Для установки этого плагина, нажмите в саблайме Ctrl+Shift+P, введите Install Package, затем выберите glua

GmodLua (glua) немного отличается от чистого Lua. В нем есть особенности синтаксиса, а также функции, которых нет в чистом Lua. Плагин сделает ваш код визуально красивее.

После установки плагина в Sublime Preferences > User Settings нужно будет добавить блок ignored_packages, а в него добавить Lua, чтобы он не конфликтовал в glua:

Мой файл настроек саблайма. Здесь настраивается тема, шрифт, а выделенным показано то, что вам нужно сделать, чтобы glua не конфликтовал с Lua

SFTP - избавляемся от FTP клиента

С этим плагином мы избавляемся от необходимости использовать FTP клиент, а также упрощаем поиск нужной функции - все lua файлы сервера теперь будут храниться локально у нас на компьютере и при изменении локальных файлов изменения будут попадать на сервер.

Хранение файлов на компьютере не будет являться проблемой, зато появится возможность быстрого поиска кода по всем файлам сервера сразу. Более того, если с сервером что-то случится - у нас всегда будет локальный "бэкап"

Пример файла настройки и инструкция находится здесь

LuaDev - удаленное выполнение кода

Этот плагин позволяет вам выполнять код на сервере или клиенте сочетанием клавиш Ctrl + 1/2, а это, wait a minute, меньше секунды времени вместо постоянного лазания в файлах.

Еще в далеком 2015 году я снимал видео установки. Если ссылки с видео устарели - пишите мне в t.me/gmodev. Вот некоторые из них: luadev аддон для сервера, luadev плагин для саблайма (форк. Noiwex удалил свой GitHub)

Чтобы работали сочетания клавиш, нужно добавить в ваши key bindings (ищите в панели инструментов Sublime) нужные сочетания:

[
	{ "keys": ["ctrl+1"], "command": "lua_send_self"},
	{ "keys": ["ctrl+2"], "command": "lua_send_sv"},
	{ "keys": ["ctrl+3"], "command": "lua_send_cl"},
	{ "keys": ["ctrl+4"], "command": "lua_send_sh"}
]

Glua Lint - подсветка ошибок в реальном времени

Плагин сделает ваш код чище, а также сэкономит время на исправлении случайных синтаксических ошибок (ох уж эти скобочки). Он прямо в процессе написания кода будет подсвечивать участки, которые не соответствуют стилю или вовсе содержат ошибки.

Красным выделена синтаксическая ошибка

Перед установкой плагина сначала нужно скачать glualint.exe "модуль", закинуть его в удобную папку и прописать путь к ней в PATH системы (как это сделать?). После этого откройте командную строку Win+R > cmd.exe и введите там glualint. Если появляется ошибка, то плагин для саблайма работать не будет. Именно этот модуль отвечает за определение ошибок в коде.

Только теперь можно открывать саблайм и устанавливать сам плагин. В Ctrl + Shift + P пишем Install Package, затем ищем glualint (SublimeLinter-contrib-glualint). Чтобы этот плагин работал, необходимо установить еще SublimeLinter. Он так и называется. Подробнее процесс установки Glualint описан тут.

Если возникли вопросы или нужна помощь с установкой и настройкой, напишите мне в t.me/gmodev

Еще для SublimeText

  • Плагин Sidebar Enchancements добавляет кучу функционала в контекстное меню сайдбара
  • Тема Afterglow Blue моя любимая уже вот более 5 лет и не надоедает
  • Классный шрифт для разработки - Input Mono
  • Плагин Trailing Spaces позволяет одной кнопкой убрать все лишние пробелы в конце строк
  • Плагин Alignment сочетанием клавиш позволяет выравнивать строки под одну длину, что экономит огромное количество времени, если вы любите красивый код
  • Привыкните к сочетаниям клавиш Ctrl + P (переход к файлу),  Ctrl + G (переход к номеру строки), а также Ctrl + R (переход к функции) и вы больше не заходите покидать саблайм
  • В саблайме есть разделение на проекты. Проект это как сейв-файл текущего окружения. Оно сохраняет открытые файлы и тд. Если у вас несколько разных серверов, то может помочь держать редактор в чистоте

Особенности разработки

  • Удобно заливать и обновлять аддоны в Workshop можно через workshopper. Можете еще посмотреть Crowbar.
  • Удобнее всего заниматься разработкой не на своем компе, не на живом, с игроками, а именно на отдельном Dev, который тоже на хостинге
  • FastDL нужен для особых файлов, например, шрифтов. Но через Workshop большой контент скачается намного быстрее
  • Гитхаб не требует много времени для изучения базовых фишек, а их вам будет достаточно для того, чтобы сделать жизнь лучше. Вы сможете смотреть код с любого момента времени, синхронизировать код между своими компьютерами, откатывать изменения, которые привели к багам и тд. Мой .gitignore для понимающих
  • Trello позволяет вести более организованную разработку и не только. Пример, как его применял в гмоде я: задачи, персонал.

Еще скрипты для сервера

  • WSDL - идеально для всех, у кого есть файл а-ля workshop.lua с кучей строк вида resource.AddWorkshop(id). Этот скрипт автоматически делает это для всех аддонов вашей серверной коллекции и вам больше не нужно будет изменять никакой файл при добавлении нового аддона в коллекцию
  • FProfiler - определение скриптов и участков кода, которые потребляют больше всего процессорного времени (грузят сервер)
fprofiler - обнаружение тяжелых участков кода
  • DASH - библиотека с полезными функциями. Сама по себе ничего не делает, но разработчики могут найти там много полезного
  • IGS - наш автодонат для Garry's Mod. Именно для наших клиентов я и начал писать эту статью. Мы помогаем зарабатывать проектам больше, чем позволяет самопис или ручной прием платежей
IGS (InGameShop) - серверная часть автодоната для Garry's Mod проектов. На фото 2 версия интерфейса
  • gluegram - мой фреймворк, позволяющий работать Telegram ботам прямо на Garry's Mod сервере. С их помощью я могу управлять сервером прямо через мессенджер. Если вам интересно, как я это делаю – напишите мне
  • EPOE - смотрите консоль сервера прямо из игры. Требует отдельный dll модуль, поэтому читайте readme по ссылке
epoe - внутриигровая серверная консоль

В статье собраны не все инструменты, которые я использовал при разработке и администрировании своего проекта, чтобы статья получилась не слишком громадной. Если вам интересно узнать что-то еще, то можете спросить у меня в t.me/gmodev.

Также я буду рад, если кто-то подскажет еще какие-то интересности. Так что не стесняйтесь и пишите мне :)