Стриминг-мод для Casualties Unknown: подключается к DonationAlerts и превращает каждый донат в
внутриигровое событие. Компаньон-приложение CasualStreamer.exe управляет всеми настройками,
интегрируется с OBS (obs-websocket + Browser Source overlay) и общается с BepInEx-плагином через
локальный WebSocket.
Streaming mod for Casualties Unknown: hooks DonationAlerts and turns every donation into an
in-game event. The CasualStreamer.exe companion app manages every setting, integrates with OBS
(obs-websocket + Browser Source overlay) and talks to the BepInEx plugin over a local WebSocket.
🇷🇺 Установка
-
Плагин игры. Скопируй
ModikStreamer/ModikStreamerByStaili.dllв папкуCasualties Unknown\BepInEx\plugins\. Нужен уже установленный BepInEx 5 и модMultyModikByStaili(для эвента "Босс-паук" — иначе он просто заспавнит стайку обычных пауков). -
Компаньон-приложение. Разархивируй
ModikStreamerClient/куда угодно (например, рядом с игрой). ЗапустиCasualStreamer.exe. Настройки хранятся в%AppData%\CasualStreamer\.
- Открой
CasualStreamer.exe— сразу увидишь 5 вкладок сверху. - Перейди в DonationAlerts → Sign in / Войти. Откроется браузер — авторизуйся на DA.
- После разрешения увидишь статус "Signed in" и в правом нижнем углу зелёный маркер DA online.
- Запусти игру. Плагин подключится к клиенту через ~1 секунду. Второй зелёный маркер (IPC) — значит DLL на связи.
- Нажми "Тест донат 500₽" — должен сработать эвент (по умолчанию 500₽ = звуковая пушка).
Вкладка Эвенты / Events. У каждого из 22 эвентов — чекбокс "включен", слайдер и поле с минимальной суммой (₽), кнопка "Тест". При донате берётся эвент с самой высокой суммой, которую покрывает донат.
Вкладка OBS:
- В OBS: Tools → WebSocket Server Settings → включи, поставь пароль, порт по умолчанию 4455.
- В CasualStreamer: вбей адрес/порт/пароль → "Подключить" → "Обновить сцены". После этого
можешь в
%AppData%\CasualStreamer\config.jsonпрописать per-eventobsActions(переключение сцены, показ источника, включение фильтра).
Вкладка Overlay:
- Скопируй URL (
http://127.0.0.1:19871/overlay) → в OBS добавь Sources → Browser → URL, 1920×1080, "Прозрачный фон" включён. - Шаблон HTML редактируется прямо во вкладке. Кнопка "Восстановить дефолт" вернёт исходный.
🇷🇺 Список эвентов (по умолчанию)
| Сумма ₽ | Id | Что происходит |
|---|---|---|
| 100 | fx_party_pop |
Хлопушка (pop) у игрока + немного радости |
| 150 | heal_small |
Немного стамины/энергии/happiness случайному игроку |
| 200 | happy_boost |
+10 happiness всей команде |
| 250 | firework |
Салют (мина в воздухе рядом с игроком) |
| 300 | random_snack |
Кинуть случайный дешёвый предмет рядом с игроком |
| 400 | spawn_land_mine |
2 мины на карте |
| 500 | spawn_sound_cannon |
1 звуковая пушка |
| 600 | spawn_turret |
1 турель |
| 700 | weather_rain |
Мрачная атмосфера (тонировка света + eyeScare) |
| 800 | full_backpack |
Рюкзак припасов рядом с игроком |
| 900 | spawn_gun_mine |
2 стреляющих мины |
| 1000 | spider_swarm |
Рой пауков вокруг команды |
| 1200 | spawn_coil |
1 электрокатушка |
| 1500 | extra_enemies_layer |
Волна врагов на слой |
| 2000 | big_spider_boss |
Большой босс-паук (из MultyModik) |
| 2500 | chaos_moodles |
Хаос настроений у всех |
| 3000 | earthquake |
Мощный катаклизм: у каждого игрока пик шока/адреналина/паники + мины/пушмины/пауки по широкому радиусу вокруг эпицентра + доп. волна пауков рядом со случайным игроком |
| 4000 | boss_wave |
Босс-волна |
| 5000 | curse_all |
Проклятие: у всех игроков сразу шок 90, адреналин 90, паника 15с, ужас +50, happiness −40, стамина/энергия обрезаются до 20, болезнь +25 |
| 7500 | dark_hour |
Тёмный час: тьма + пауки + мины |
| 10000 | apocalypse |
Всё сразу: DarkHour + BigSpider + swarm + earthquake + chaos |
| — | custom_command |
Ручной триггер из клиента (кнопка "Тест") |
🇷🇺 Что если у меня своё DA-приложение?
По умолчанию клиент использует зашитый client_id (может быть пустым в этой сборке — тогда
Sign in выдаст ошибку). Чтобы использовать своё приложение:
- Зайди на https://www.donationalerts.com/application/clients и создай приложение.
- В поле "Redirect URL" впиши точно
http://localhost:64571/da/callback. - В CasualStreamer → Настройки / Settings вставь
client_idиclient_secret→ Сохранить. - В DonationAlerts → Sign in — авторизуйся заново.
🇷🇺 Полезные пути
- Настройки клиента:
%AppData%\CasualStreamer\config.json - OAuth-токены (DPAPI):
%AppData%\CasualStreamer\tokens.bin - Кастомный HTML overlay'а:
%AppData%\CasualStreamer\overlay.html - Лог клиента:
%AppData%\CasualStreamer\casualstreamer.log - Плагин игры:
Casualties Unknown\BepInEx\plugins\ModikStreamerByStaili.dll - Настройки плагина:
Casualties Unknown\BepInEx\config\ModikStreamerByStaili.cfg(создаётся при первом запуске игры)
🇷🇺 Валюты (RUB / USD / EUR / прочие)
Пороги эвентов заданы в рублях. Донаты приходят в своей валюте — клиент автоматически конвертирует сумму в рубли по настраиваемым курсам, и уже по этой сумме подбирает эвент.
- Курсы редактируются в Настройки / Settings → Курсы валют: поля "1 USD = ₽", "1 EUR = ₽" и "Неизвестная валюта = ₽ за 1 единицу" (0 = игнорировать неизвестные валюты).
- Остальные валюты (UAH, KZT, BYN и т.д.) со своими курсами лежат в
%AppData%\CasualStreamer\config.json→currencyRatesToRub. Туда можно дописать любые ISO-коды. - Значения по умолчанию: USD=90, EUR=100, UAH=2.3, KZT=0.19, BYN=28, fallback=90.
- В логе донатов рядом с суммой показывается её эквивалент в рублях (
~450₽).
Пример: донат 5 USD при курсе 90 = 450₽ → сработает эвент с ближайшим порогом ≤ 450₽.
🇬🇧 Installation (EN)
-
Game plugin. Copy
ModikStreamer/ModikStreamerByStaili.dllintoCasualties Unknown\BepInEx\plugins\. Requires BepInEx 5 and (for the "Big Spider boss" event) theMultyModikByStailimod — otherwise that event falls back to spawning a small spider swarm. -
Companion app. Unpack
ModikStreamerClient/anywhere, runCasualStreamer.exe. Settings live under%AppData%\CasualStreamer\.
- Open
CasualStreamer.exeand hit DonationAlerts → Sign in. A browser tab opens. - Approve access. The status bar should switch to "Signed in".
- Launch the game. Within ~1 second the plugin's IPC dot in the CasualStreamer status bar should go green (DLL connected).
- Press "Тест донат 500₽" to fire a synthetic donation → should trigger an in-game event.
22 events, each with an enable checkbox, minimum-amount slider (RUB), text field and a Test button. A donation picks the enabled event with the highest threshold it covers.
Thresholds are stored in RUB. Non-RUB donations are converted to RUB using editable rates
before matching. Set them in Settings → Currency rates (USD, EUR, and a fallback rate for
unknown currencies; 0 = ignore). Additional currencies live in
%AppData%\CasualStreamer\config.json under currencyRatesToRub. Defaults: USD=90, EUR=100,
UAH=2.3, KZT=0.19, BYN=28, fallback=90. The donation log shows the RUB equivalent (~450₽).
- In OBS: Tools → WebSocket Server Settings → enable, set a password, keep port 4455.
- In CasualStreamer → OBS: host/port/password → Connect → Refresh scenes. Per-event OBS
actions can be edited under
%AppData%\CasualStreamer\config.json(events[eventId].obsActions).
- CasualStreamer → Overlay → copy the URL → in OBS add Sources → Browser → 1920×1080.
- The HTML template is editable in the tab. "Восстановить дефолт" restores the shipped one.
🇬🇧 Bringing your own DonationAlerts app (EN)
By default the client uses the built-in client_id. If it's empty in this build (or you want
to use your own app):
- https://www.donationalerts.com/application/clients → register a new app.
- Set Redirect URL to exactly
http://localhost:64571/da/callback. - Paste
client_id+client_secretinto CasualStreamer → Settings → Save. - Sign in again from the DonationAlerts tab.
🇬🇧 Paths (EN)
- Client settings:
%AppData%\CasualStreamer\config.json - OAuth tokens (DPAPI):
%AppData%\CasualStreamer\tokens.bin - Overlay HTML override:
%AppData%\CasualStreamer\overlay.html - Log:
%AppData%\CasualStreamer\casualstreamer.log - Plugin:
Casualties Unknown\BepInEx\plugins\ModikStreamerByStaili.dll - Plugin config:
Casualties Unknown\BepInEx\config\ModikStreamerByStaili.cfg
[DonationAlerts] --wss--> [CasualStreamer.exe] --ws--> [ModikStreamerByStaili.dll]
| |
+--obs-websocket--> [OBS] +--> in-game events
+--http SSE -------> Browser Source overlay
- OAuth2 authorization code with loopback (
http://localhost:64571/da/callback) — no server needed, the client hosts the callback itself. - Centrifugo v2 WebSocket for realtime donations.
- Fleck-based WebSocket on
ws://127.0.0.1:19870/gamebetween client and DLL. - HttpListener + Server-Sent Events on
http://127.0.0.1:19871/overlayfor OBS Browser Source. - Every port is configurable in CasualStreamer → Settings.