Русский | English
Эмулятор RAGE MP прямо в браузере. Город на канвасе, боты, день сменяет ночь - а поверх работает настоящий код: интерфейс (CEF), клиентский и серверный скрипты из rp-vue-starter запускаются без единой правки. Они думают, что вокруг игра.
Писать интерфейс для RP-сервера обычно значит: собрал, залил в client_packages, перезапустил сервер, зашёл в игру, проверил, вернулся в редактор. По кругу.
Здесь игры вообще нет. Запустил npm run dev - и у тебя «город» с машинкой.
Весь цикл событий CEF - клиент - сервер живой: HUD берёт скорость из физики,
чат ходит через серверную рассылку, /veh выдаёт машину, боты подключаются
и болтают. А внизу инспектор показывает каждое событие с payload'ом.
git clone https://github.com/hilsetapp/rage-sim.git
cd rage-sim
npm i
npm run devОткрыть http://localhost:5200.
| Клавиша | Что делает |
|---|---|
| WASD | ехать (или идти пешком, если без машины) |
| T | чат |
| F2 | спрятать/показать HUD |
| F3 | курсор (чтобы тыкать в интерфейс мышкой) |
Сверху тулбара: /veh - выдать машину, сесть/выйти, бот +/-, день/ночь,
пауза мира, скрыть лог.
- CEF - клиент: mp.trigger из интерфейса (ui:ready, chat:send и весь rpui:* трафик)
- клиент - сервер: callRemote
- сервер - клиент/CEF: player.call, browser.execute
- мир: playerJoin/Quit, спавны машин, курсор
Строка раскрывается кликом - виден весь payload. Пауза, очистка, фильтр по имени.
src/engine/world.ts город, физика машины, боты, день/ночь
src/engine/mp.ts муляж RAGE MP API: mp.events, browsers, keys, gui, game.zone...
src/engine/bus.ts шина событий + журнал для инспектора
src/engine/loader.ts запускает бандлы client.js и server.js, шлёт render-тик
public/demo/ само демо: клиент, сервер и CEF из rp-vue-starter
scripts/refresh-demo.mjs пересобрать демо из rp-vue-starter, если он рядом
Клиент и сервер грузятся как есть: это те же esbuild-бандлы, что уходят
в server-files у настоящего сервера. CEF - та же сборка из rp-vue-starter,
плюс одна строка: window.mp = window.parent.mp.
Честно: сейчас это работает с бандлами в формате rp-vue-starter.
- клиент - один iife-бандл, url интерфейса как
package://cef/index.html(мапится вpublic/demo/cef/) - сервер - один cjs-бандл, только mp-API, без node-модулей
- CEF - статика, получает
window.mpиз родителя
Если твой проект собирается похоже - положи свои файлы в public/demo/ и всё.
Универсальный вход для произвольных страниц (через отдельный shim-скрипт
и другой порт) в планах.
- универсальный shim для произвольных страниц
- запись сессии и replay
- пешеходы и простой трафик по полосам
- миникарта
- пресеты сценариев: «ехать по маршруту», «боты спорят в чате»
Идеи и баги - Issues.
- rp-vue-starter - проект, который крутится в этом симуляторе
- rp-ui-kit - готовые интерфейсы (телефон в демо отсюда)
MIT.


