• Изначально данный проект был сборником библиотеком, который перерос в автоматическую загрузку скриптов, а там и в архитектуру. И я использовал данную платформу для всех своих проектов (аддонов, сборок). На момент 10.11.23, разработка платформы заморожена. Я очень надеюсь, всё же кому то, кроме меня, она поможет в разработке под Garry's Mod. Вот список некоторых особенностей, которые уже есть или которые я реализую в этом проекте или в последующих:
- Репозиторий будет на английском, как и документация
- Сама дока - слабое место этого проекта. В октябре 2023 раздумывал о автоматической публикации через md, нужен свой парсер.
- Есть синтаксический сахар: ePly:GetNWInt("Money") == ePly.nw_Money
- Есть поддержка пустых файлов с префиксом wid_xxxxxx, работает и просто в addons, парсит первую папку аддона.
- Есть особый ChatSend по правилу одной строки
ePly:ChatSend( "~WHITE~ Example #example_language" )
- Планировался мощный UI Kit - Tyrex в виде модуля
- Модули должны были полностью сепаратированы в отдельную репу
Я очень благодарен Ambi Eco, и что решился на этот важный шаг. На 6 месяце обучения (Ноябрь 2020) пошёл на два важные принципа программирования: автоматизация и систематизация, начал заниматься архитектурой. Сейчас же я иду дальше, а именно в Unity и s&box, и буду иногда возвращаться в гмод, и может даже обновлять Ambi Eco.
Вам рекомендую, если не использовать её, то уж точно изучить, посмотрить исходники, коммиты, спрашивать меня, как и что. Делайте то, что любите и любите то, что делаете.
- Version: 6.6
- Team: Ambi
- Language: GLua (Lua)
- Game: Garry's Mod
Ambi Eco – это платформа по разработке аддонов для серверов в игре Garry's mod. Данный проект даёт возможность осуществить грамотное управление сервером и добавление модулей.
- Скачайте архив с этого репозитория (Синяя кнопка Code --> Download ZIP)
- Папку ambi распакуйте в addons
- Всё 😄
• Более подробный гайд на Официальной Вики
- Экосистема пригодна только для серверов в игре Garry's Mod.
- Основной язык GLua - диалект Lua.
- Можно загружать и просто аддоны на сервере, где есть такая экосистема, они не буду конфликтовать.
- Не путайте с module() в Lua, здесь внутренние аддоны называются Модулями.
- Документация по библиотекам и модулям.
- Своя загрузка модулей и полный контроль над ними.
- Большое количество разных библиотек, в том числе и интеграция из чужих библиотек.
- Стандартная библиотека general.
- Модули и Библиотеки:
- Большинство модулей можно отключить или удалить, библиотеки не стоит отключать без необходимости, тем более, не стоит это делать со стандартной библиотекой.
- Модуль более специфичный для сервера, когда библиотека общая для всех.
- Модуль может только использовать инструменты, и создавать специфичные, когда библиотека обязательно должна сгенерировать инструментарий.
- Библиотеки не имеют право использовать функционал друг друга, кроме использования стандартной библиотеки, модули могут быть связаны друг с другом.
- Локализация стандартных классов и функций (local string = string) чаще всего происходит в библиотеках, когда модулям лучше не перебарщивать с ними.
- Модули, в которых таблицы будут названы, как таблицы библиотек: General, UI и т.д. Не будут загружены.
- Функция обозначается с Upper CamelCase: Class.ToMake()
- Константа (переменные, таблицы) обозначается змеиной нотаций с верхним регистром: ALL_NUMBERS = 3.1415
- Локальная переменная/таблица обозначается змеиной нотаций с нижним регистром: local result = nil
- Класс обозначается с Upper CamelCase: Class.ChildClass.ChildChildClass = setmetatable( {}, ParentClass )
- Между операндами желательно ставить пробелы: 2 + 2
- Одиночные операций не обозначаются скобками: IsValid(a)/not IsValid(a), все остальные операций:( GetSize( a ) == false )
- В модулях допускается свой собственный стиль, который задумал автор модуля.
- General — стандартная библиотека, имеет в себе набор необходимых методов для работы с другими библиотеками и модулями. В ней также есть утилиты для разработчиков и глобальные константы. Здесь имеются классы: string, math, util и т.д
- UI — большой пакет клиентского интерфейса, содержащий всё для редактирования client-side (GUI, шрифты, звуки и так далее).
- SQL — библиотека для удобного использования SQL.
- RegEntity — регистрация и контроль новых entities (npcs, weapons). Есть создание tools.
- Cache — система кеширования различной информаций.
- Files — библиотека для удобного взаимодействия с файлами/папками.
- NW — библиотека для удобного использования SetNW/GetNW для Entities.
- Download — серверный контроль над resource.AddFile(); resource.AddWorkshop() и resource.AddSingleFile(). Взаимодействие с коллекцией.
- HTTP — для работы с HTTP-requests, а именно GET и POST, логирование запросов. Поддержка CHTTP
- Player — контроль над классом Player, совместим со всеми методами из оригинального класса.
- Entity — контроль над классом Entity, совместим со всеми методами из оригинального класса.
- Timer — контроль над классом timer, совместим со всеми методами из оригинального класса.
- Packages — возможности быстрой распаковки данных в таблицу из библиотеки (например, быстро коротко распаковать Ambi.General.Global.Colors в таблицу C)
- SaveData — упрощенная система по работе с перманентными данными
- JSON - набор методов по работе с JSON.
-
dash - библиотека, частично которую я интегрировал
-
GMStranded - режим, утилиты которой я интегрировал
-
Lua AES - AES, которую я интегрировал
-
TDLib - GUI