Skip to content
hilsetappPublic

About

Эмулятор RAGE MP в браузере: город на канвасе, боты, день/ночь, а интерфейс, клиент и сервер из проекта работают без правок и думают, что вокруг игра.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Русский | English

RAGE-SIM

баннер

Эмулятор 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.

About

Эмулятор RAGE MP в браузере: город на канвасе, боты, день/ночь, а интерфейс, клиент и сервер из проекта работают без правок и думают, что вокруг игра.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages