LCBridge
Local Lethal Company -> stream overlay bridge over WebSocket: monsters (in/out), weather (WeatherTweaks), traps, cumulative loot, per-quota & per-moon run analytics, top monster/killer. Pairs with StreamOverlays.LCBridge
Локальный мост между Lethal Company и стрим-оверлеем.
LCBridge — плагин на BepInEx, который раз в секунду собирает состояние игры и рассылает его в формате JSON по WebSocket. На другом конце — HTML-оверлей, который рисует эти данные поверх стрима. Создан для турниров и стримов сообщества GDLP (Games Don't Like People).
Мод только читает состояние игры (через геттеры и Harmony-патчи) и ничего в неё не записывает.
Как это работает
Lethal Company (+ LCBridge) --WebSocket--> overlay.html (в OBS)
ws://localhost:8181 -> JSON раз в секунду (только при изменении)
- Внутри игры поднимается WebSocket-сервер на
localhost(по умолчанию порт 8181). - Раз в секунду собирается состояние и шлётся подключённым клиентам — но только если оно изменилось (без лишнего спама).
- Оверлей подключается к
ws://localhost:8181и обновляет картинку.
⚠️ Сервер слушает только localhost — мост работает на той же машине, где запущена игра. Это не сетевая трансляция между разными ПК.
Что отдаёт мост (поля JSON)
Каждое сообщение — объект с "type":"bridge" и полями:
| Поле | Значение |
|---|---|
deaths |
смертей за забег (суммарно) |
alive / total |
живых игроков / всего в команде |
health |
здоровье локального игрока |
moonName |
текущая луна |
weatherFull |
погода (приоритет WeatherTweaks-комбо, иначе ванильная) |
brutalEvent |
событие Brutal Company (если мод установлен) |
onMoon / loading / inGame |
флаги состояния игры |
resetToken |
счётчик сбросов (новый забег) |
levelScrap |
стоимость скрапа на текущем уровне |
topKiller / topMonster |
кто чаще убивал / какого монстра видели чаще |
deadliestEvent |
самое смертоносное событие забега |
monstersOutside / monstersInside |
списки монстров снаружи / в комплексе |
traps |
ванильные ловушки на уровне (напр. ["Turret x2","Landmine x4"]) |
run |
вложенная аналитика забега (см. ниже) |
Объект run:
| Поле | Значение |
|---|---|
quotas[] |
по каждой квоте: i (номер), money (заработано), sec (время), deaths |
moons[] |
по каждой луне: name, visits, profit, sec (сортировка по профиту) |
monsters[] |
до 20 монстров: name, count (уникальных особей), sec (время присутствия) |
peak |
пиковое одновременное число монстров |
inside / outside |
секунд проведено в комплексе / снаружи |
runSec |
общее время забега |
timeline[] |
хроника событий забега (до 60 записей) |
Возможности
- Монстры. Списки врагов снаружи и в комплексе; подсчёт реального числа уникальных особей за забег (по instanceID); самый частый монстр и «убийца».
- ToilHead. Если установлен — турель на голове добавляет суффикс к имени
(
Spring -> Spring+Turret,Manticoil -> Manticoil+Turret). Без ToilHead — имена как обычно. Определяется через рефлексию, жёсткой зависимости нет. - Ловушки. Ванильные турели, мины, шипастые потолки — числом по типам.
- Лут (накопительно). Сумма собранного скрапа считается по уникальным предметам и не падает после продажи Компании, поэтому деньги по квотам и профит по лунам считаются корректно.
- Погода. Текущая погода с поддержкой WeatherTweaks / WeatherRegistry (комбо-погода), иначе ванильная.
- События. Мягкая интеграция с Brutal Company (текущее событие).
- Аналитика забега. Деньги, время, смерти (по всем игрокам), разбивка по квотам и лунам, таймлайн.
Установка (для игроков)
Требуется:
- BepInExPack
- StreamOverlays (Zehs) — обязательно: часть функций оверлея не работает без него.
Через мод-менеджер (r2modman / Thunderstore Mod Manager): найди LCBridge
и установи — BepInEx и StreamOverlays подтянутся автоматически.
Вручную:
- Установи BepInExPack для Lethal Company.
- Скопируй
LCBridge.dllв…/Lethal Company/BepInEx/plugins/. - Запусти игру один раз — создастся конфиг.
Настройка оверлея (для стримера)
- Файл оверлея —
overlay/overlay.html. - В OBS: Источники → + → Браузер (Browser Source) → локальный файл
overlay.html, размер1920x1080. - Запусти Lethal Company с установленным LCBridge — мод поднимет WebSocket, оверлей подключится сам.
- Помести источник оверлея поверх игрового захвата в сцене.
Конфигурация
После первого запуска BepInEx создаёт конфиг в BepInEx/config/. Параметр:
[Server] WebSocketPort(по умолчанию8181) — порт WebSocket-сервера. Если меняешь — укажи тот же порт в оверлее. Удобно править через LethalConfig, если он установлен.
Сборка из исходников
Проект на C#, таргет .NET Standard 2.1, зависит от BepInEx и игровых сборок
(LethalCompany.GameLibs.Steam).
dotnet build -c Release
На выходе — bin/Release/LCBridge.dll. GUID плагина: gdlp.lcbridge.
Структура:
.csprojв корне, исходники вsrc/. Не держи в одной папке дубли.cs— компилятор соберёт каждый класс дважды и упадёт с CS0101/CS0111.
Совместимость
- Lethal Company + BepInEx.
- Обязательная зависимость: StreamOverlays (Zehs) — нужен для части функций оверлея.
- Мягкие (необязательные): BrutalCompanyMinusExtraReborn, WeatherTweaks / WeatherRegistry (mrov), ToilHead (определяется в рантайме).
- Оверлей — любой Chromium-браузер и OBS Browser Source.
Лицензия
MIT.
Сообщество GDLP · Games Don't Like People
- Сайт турнира: https://solo00n.github.io/GDLP-tournament/
- Twitch: sOOlon
