Skip to content

naduvaha/ModikDialog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

Modik Dialog by Staili — v0.1.0

Plugin / Плагин: ModikDialog.dll Releases: github.com/naduvaha/ModikDialog/releases Hard dependency / Жёсткая зависимость: BepInEx 5 · llama-server + GGUF-модель (~2 ГБ, вручную) Optional / Опционально: QoL.Unknown — вкладка Mods, кнопка GIT Not required / Не нужен: KrokMP — работает в одиночной игре / демо

LLM-диалоги торговцев для Casualties Unknown Demo. При правом клике на торговца открывается меню из трёх кнопок: Общаться / Торговать / Уйти. «Общаться» ведёт в разговор, где вопросы игрока, ответы торговца и подсказки действий генерируются локальной моделью Qwen2.5-3B-Instruct через llama-server (llama.cpp).

LLM-driven trader dialogues for Casualties Unknown Demo. Right-click a trader to open a 3-button menu: Talk / Trade / Leave. The Talk branch uses a local Qwen2.5-3B-Instruct model served by llama-server (llama.cpp).


🇷🇺 Зависимости
Обязательно BepInEx 5.4.x
Обязательно llama.cpp (llama-server.exe + DLL)
Обязательно Qwen2.5-3B-Instruct GGUF (~2 ГБ)
Обязательно CPU 4+ ядер (AVX2), ~2.5 ГБ на диске
Опционально QoL.Unknown — вкладка Mods, кнопка GIT
Не нужен KrokMP / мультиплеер — мод для одиночной игры
Скачивание GitHub Releases
🇷🇺 Установка

Что нужно

  • Casualties Unknown Demo с BepInEx 5 (winhttp.dll рядом с CasualtiesUnknown.exe).
  • ~2 ГБ на модель + ~50 МБ на llama-server.
  • CPU 4+ ядер (AVX2). Модель работает без GPU.

Как раскладываются файлы

Мод ничего не качает сам. Всё положить руками:

plugins/
  ModikDialog/
    ModikDialog.dll
    models/
      qwen2.5-3b-instruct-q4_k_m.gguf     ← сам GGUF (~2 ГБ)
      llama/                              ← распакованный релиз llama.cpp
        llama-server.exe
        llama.dll
        ggml.dll
        ggml-base.dll
        ggml-cpu-*.dll                    ← любые ggml-cpu-*.dll что были в архиве
        (и остальные .dll из архива llama.cpp)

llama-server.exe ищется в таком порядке:

  1. models/llama/llama-server.exe
  2. models/llama-server.exe
  3. llama-server.exe рядом с ModikDialog.dll

Модель ищется в:

  1. models/<ModelFile> (по имени из конфига)
  2. рядом с ModikDialog.dll

Если что-то не нашлось — в BepInEx\LogOutput.log появится строка вида llama-server.exe not found. Expected in one of: со списком путей.

Откуда взять файлы

Настройки

Основной конфиг — plugins/ModikDialog/models/settings.conf. Открой в блокноте, поправь строки, сохрани, перезапусти игру. Файл лежит рядом с моделью, поэтому удобно менять и модель, и настройки в одном месте.

Язык (ru/en) не настраивается — определяется автоматически по языку игры (Locale.currentLangName, с фолбэком на язык системы).

Строки с # — комментарии. Пустое поле = значение из запасного конфига BepInEx\config\ModikDialogByStaili.cfg.

Профили: Fast (слабый ПК), Balanced (по умолчанию), Quality (мощный ПК).

Если тормозит

По умолчанию уже стоит режим экономии: CPU-only, без лишнего вормапа и веб-UI, ответ и меню — одним запросом, кнопки-вопросы из готового списка.

Попробуй по порядку:

  1. Profile = Fast
  2. Threads = число физических ядер (не логических)
  3. MaxReplyTokens = 60
  4. ContextSize = 768
  5. Модель полегче — Qwen2.5-1.5B в models/, имя — в Model

Как это работает

  • Мод перехватывает TraderScript.OnUse (правый клик по торговцу) и вместо штатного окна бартера показывает свою панель слева.
  • Клик по «Общаться» запускает разговорный режим: LLM видит репутацию, товары торговца, предмет в руке игрока, состояние и генерирует приветствие; кнопки-вопросы либо тоже сгенерированы (если LlmMenuLabels=true), либо из статического пула.
  • Клик по вопросу → LLM генерирует ответ торговца (и, опционально, новый список вопросов).
  • Клик по «Торговать» возвращает управление игре — открывается штатное окно бартера.
🇬🇧 Requirements (EN)
Required BepInEx 5.4.x
Required llama.cpp (llama-server.exe + DLLs)
Required Qwen2.5-3B-Instruct GGUF (~2 GB)
Required CPU 4+ cores (AVX2), ~2.5 GB disk
Optional QoL.Unknown — Mods tab, GIT button
Not required KrokMP / multiplayer — single-player mod
Downloads GitHub Releases
🇬🇧 Installation (EN)

Requirements

  • Casualties Unknown Demo with BepInEx 5.
  • ~2 GB disk for the model + ~50 MB for llama-server.
  • CPU 4+ cores (AVX2). Runs on CPU, no GPU required.

File layout

The mod does not download anything. Drop files yourself:

plugins/
  ModikDialog/
    ModikDialog.dll
    models/
      qwen2.5-3b-instruct-q4_k_m.gguf
      llama/
        llama-server.exe
        llama.dll, ggml.dll, ggml-base.dll, ggml-cpu-*.dll ...

Search order:

  • llama-server.exe: models/llama/, then models/, then plugin root.
  • Model: models/<ModelFile>, then plugin root.

Downloads

Settings

Primary config: plugins/ModikDialog/models/settings.conf (edit in Notepad, restart game). It sits next to the model, so the model and its settings are in one place.

Language (ru/en) is not configurable — auto-detected from the game (Locale.currentLangName, falling back to the system language).

Lines starting with # are comments. Empty fields fall back to BepInEx\config\ModikDialogByStaili.cfg.

Profiles: Fast (weak PC), Balanced (default), Quality (powerful PC).

If it's slow

Defaults already save resources: CPU-only, no warmup/web UI, reply + menu in one request, question buttons from a static list.

Try in order:

  1. Profile = Fast
  2. Threads = physical core count (not logical)
  3. MaxReplyTokens = 60
  4. ContextSize = 768
  5. Lighter model — Qwen2.5-1.5B in models/, set the name in Model

How it works

  • Patches TraderScript.OnUse (right-click). Shows a 3-button side panel: Talk / Trade / Leave.
  • Talk mode: LLM sees rep, stock, held item, player state → generates a greeting. Question buttons are either LLM-generated (LlmMenuLabels=true) or from a static pool.
  • Each question click → LLM emits reply (and optionally new menu).
  • Trade mode calls the vanilla trade UI.

Architecture

Right-click trader
       │
       ▼
[Harmony prefix: TraderScript.OnUse]
       │
       ▼
[TraderMenu]  ─── "Торговать" ───▶  vanilla OnUse (game handles trade)
       │
       │ "Общаться"
       ▼
[DialogueController]
       │  (system prompt: persona + rep + stock + held item + player state)
       ▼
[LlmClient]  ──HTTP──▶  [llama-server.exe]  ──▶  Qwen2.5-3B-Instruct.gguf
       │
       ▼
reply (+ optional menu JSON)
       │
       ▼
[ResponseSanitizer] → [SpeechBubble queue] + rebuild menu buttons

Credits

  • Model: Qwen2.5-3B-Instruct — Apache 2.0 (Alibaba Qwen team).
  • Runtime: llama.cpp — MIT (Georgi Gerganov & contributors).
  • Style reference: the game's built-in CasualtiesUnknownImmersion.TraderDialog mod.

Packages

 
 
 

Contributors