Сделал визуальный конструктор скриптов для RAGE:MP — хочу отдать на потестить
Привет. Короч я давно сижу в RAGE:MP и меня всегда раздражало одно — порог входа для новых разрабов и владельцев серверов просто неадекватный. Простые вещи типа playerJoin с записью в базу или кастомный HUD — это часы гугления и копипасты чужого кода.
Поэтому я сел и сделал штуку которую давно хотел видеть в нише. Называется RAGE Framework.
Что это такое
Визуальный редактор нод в браузере — как Blueprints в Unreal Engine, только для RAGE:MP скриптов. Соединяешь блоки мышкой, нажимаешь Generate — и у тебя в папке сервера лежит готовый
.js файл.Никакой магии — просто берёт граф и компилирует в обычный JavaScript. Можно открыть сгенерированный файл и читать его как любой другой скрипт.
Как это работает
Устанавливаешь маленький CLI на свою машину:
Код:
rage init my-server
rage link <projectId>
rage daemon
Daemon висит в терминале и смотрит на сокет. Когда жмёшь Generate в браузере — он получает граф, запускает генератор и пишет файлы прямо в папку твоего RAGE:MP сервера. Никаких облаков, никакого доступа к твоим файлам без твоего ведома.
Отдельно про совместимость: CLI и API общаются через протокол с версией. Если платформа обновится и твой CLI стал несовместим — он не зависнет молча и не начнёт генерить кривой код. Daemon сразу напишет в терминал
Версия CLI устарела. Обновите: npm install -g @rage/cli и завершится. Никаких скрытых сюрпризов.Что уже есть
Больше 100 нод из коробки. Вот основное:
- Events — playerJoin, playerDeath, playerChat, keyDown, playerCommand, playerEnterVehicle и ещё куча
- Player — getHealth, setHealth, teleport, spawn, freeze, kick, ban, giveWeapon, setModel...
- CEF — createBrowser, showBrowser, setUrl, навигация между экранами
- Remote Events — call.clientEvent, call.serverEvent, on.remoteEvent, proc с динамическими аргументами
- Database — getRecord, createRecord, updateRecord, deleteRecord
- Logic — if, forEach, delay, interval, compare, and, or, isNull
- Math, String, Variables, Utility — базовые вещи которые нужны в каждом скрипте
Редактор знает контекст — если ты пишешь клиентский скрипт, серверные ноды просто не показываются. Не получится случайно сломать.
База данных
Отдельно хочу рассказать про работу с БД, потому что тут не просто «ноды которые делают SQL».
Сначала описываешь схему своей игровой базы прямо в платформе:
Код:
Entity: Player
├── socialclub (string, unique)
├── passwordHash (string)
├── money (number, default: 0)
└── level (number, default: 1)
Есть готовый шаблон Player — берёшь и добавляешь свои поля. После этого Database-ноды в редакторе уже знают твои сущности, ты просто выбираешь что и откуда брать. Генератор сам делает параметризованные запросы, с инъекциями не паришься.
К примеру playerJoin → getRecord → если нет записи → createRecord → spawn
Конфиг сервера прямо из браузера
Небольшая но удобная штука —
conf.json твоего сервера редактируется прямо в Dashboard. Название сервера, maxPlayers, порт, язык — меняешь в форме, жмёшь Save. Если daemon онлайн — файл сразу пишется в папку сервера. Не надо открывать проводник, искать файл, следить чтобы не сломать JSON.Если нужно что-то нестандартное — есть переключатель «Edit as JSON» и правишь руками. Всё равно синхронизируется через daemon.
Сервер — прямо из браузера
Это наверное самое удобное что есть в платформе для ежедневной работы.
В тулбаре редактора есть три кнопки: запустить сервер, остановить, перезапустить. Нажал — daemon поднимает процесс
ragemp-server на твоей машине. Там же статус в реальном времени: starting → ready → stopped → crashed.Весь вывод сервера —
stdout и stderr — стримится прямо в панель логов в браузере. С подсветкой по уровню: ошибки красным, предупреждения жёлтым. Последние 500 строк хранятся, можно очистить кнопкой.Панель логов: вывод сервера в реальном времени прямо в браузере[/CENTER]
Флоу выглядит так: поменял граф → нажал Build → файлы сгенерировались → сервер автоматически перезапустился через секунду. Ничего руками. Папку с игрой вообще не трогаешь.
Если сервер крашнулся — видишь статус crashed и последние логи с ошибкой. Не надо переключаться в терминал чтобы понять что пошло не так.
CEF без боли
Для тех кто делал CEF интерфейсы — вы знаете что это отдельный ад. package://, кривые скрипты, синхронизация состояния с сервером.
В платформе есть отдельный CEF Generator. Описываешь структуру интерфейса нодами — UIScene, UIScreen, UIElement — и получаешь готовый статичный HTML бандл для
client_packages/cef/.Кастомные ноды
Если какой-то ноды не хватает — делаешь свою. Это не сложно: в разделе
/my-nodes задаёшь название, категорию, входные/выходные пины и пишешь шаблон кода. Для этого есть встроенный шаблонизатор на Handlebars — он помогает правильно описать что именно должно генерироваться. Справа сразу показывается живой preview как нода выглядит в редакторе и что она генерирует на выходе — видишь результат до того как что-то опубликовал.Созданная нода сразу доступна тебе в твоих проектах. Если хочешь поделиться — отправляешь на ревью. Я смотрю, проверяю что шаблон нормальный и не ломает генератор, и если всё ок — нода попадает в общий каталог и становится доступна всем пользователям платформы.
Со временем это должно стать основным способом роста каталога нод — не я один придумываю что добавить, а сообщество само закрывает то чего не хватает.
Создание кастомной ноды: форма слева, превью справа, сгенерированный код снизу[/CENTER]
Script Library
Это библиотека готовых модулей от сообщества. Идея простая — ты собрал систему авторизации, или инвентарь, или систему штрафов, и хочешь дать её другим. Публикуешь в библиотеку, и любой другой пользователь платформы может поставить её к себе одной кнопкой.
Конкретно: нашёл нужный скрипт → нажал Install → он появляется в твоём проекте и сразу доступен в редакторе. Либо Fork — берёшь чужой скрипт как основу и дорабатываешь под свой сервер. Граф при этом полностью редактируемый, ничего не залочено.
Сейчас библиотека только начинает наполняться, но принцип именно такой: не каждый с нуля пишет одно и то же, а берёт готовое и адаптирует. Авторизация, регистрация, базовые системы — это должно быть в библиотеке, а не в сотнях копипастных скриптов по серверам.
Script Library: карточки скриптов с кнопками Install и Fork[/CENTER]
Версионирование скриптов
Когда ты публикуешь скрипт в библиотеку — он выходит под конкретной версией в формате
1.0.0. Можно добавить changelog — что изменилось по сравнению с прошлым релизом.Зачем это нужно: если кто-то установил твой скрипт версии
1.0.0, и ты потом выпускаешь 2.0.0 с кучей изменений — у них на сервере ничего не ломается. Они сидят на своей версии пока сами не решат обновиться. Никаких ситуаций «автор что-то поменял и у меня сервер упал».Каждая версия хранит полный снапшот графа на момент публикации — не diff, а именно всё целиком. Плюс флаги
isStable и isDeprecated — автор может пометить версию как устаревшую если нашёл баг, или наоборот как рекомендуемую.Минификация и обфускация
Когда скрипт готов и ты хочешь его задеплоить — есть два флага в настройках экспорта проекта.
Минификация — убирает пробелы, переносы, сокращает имена переменных. Файл становится меньше, грузится быстрее. Для продакшн-сервера это норма.
Обфускация — делает сгенерированный JS нечитаемым. Полезно если ты публикуешь скрипт и не хочешь чтобы конкуренты просто скопировали логику. Открыть файл можно, понять что там — уже нет.
Оба флага включаются один раз в настройках и применяются к каждому билду автоматически. Не надо помнить про них каждый раз.
Безопасность подключения
Раз уж daemon имеет доступ к папке твоего сервера и может запускать процессы — вопрос безопасности важный.
Каждый проект получает свой daemon token — отдельный JWT, который не имеет ничего общего с твоим аккаунтом на сайте. Он хранится локально в
.rage/credentials.json (git-ignored) и передаётся при каждом WebSocket-подключении daemon'а к API.На сервере токен верифицируется: тип должен быть
daemon, и projectId в токене должен совпадать с проектом к которому пытается подключиться daemon. Если что-то не так — тихий дисконнект, никаких подсказок.Токен живёт 30 дней. Если считаешь что он скомпрометирован — в настройках проекта есть кнопка ротации. Ротация rate-limited: не больше 5 раз за 5 минут, только для владельца проекта.
Итого: даже если кто-то знает твой логин на платформе — без daemon token он не подключится к твоему серверу. Это разные уровни доступа.
Честно про текущее состояние
Я один разрабатываю это. Баги точно есть — инструмент молодой. Но фикшу быстро, не по-корпоративному. Если что-то сломалось — пишешь мне, через час-два смотрю.
Сейчас хочу дать первым людям попробовать и услышать что реально не работает или чего не хватает. Не продать, не собрать деньги — просто проверить на живых людях.
Если интересно потестить — пиши в ЛС или сюда в тред. Добавлю в список первых тестеров.
Ну и вопросы сюда — отвечу на всё.
Еще делал стрим сегодня, но как обычно когда надо чтобы работало, оно выкаблучивалось, но уже все пофиксил, если хотите можете чисто моменты глянуть что и как работает:
И последнее — то что описано выше это далеко не всё. Много мелочей которые уже не хотел описывать, ахах, многое зависит от того насколько это вообще интересно людям. Если вижу что проект живёт, что им пользуются — буду вкладывать в него всё больше. Думаю вы сами понимаете как это работает. Так что пишите фидбеки, может это вообще гиблое дело и зря делал и тратил время, а так спасибо если читали это полотно.