Нейросети для DnD: как ИИ-мастер научился заканчивать бой переговорами, а не смертью

В ИИ-мастере DnD бой теперь можно закончить миром: фраза вроде "опусти оружие, поговорим" запускает проверку Переговоров, успех завершает бой примирением без опыта и лута, провал оставляет попытку единственной - бой продолжается.
Ребят, вот жалоба, знакомая любому, кто водил хоть один бой в ДнД: враг стоит на двух хитах, его отряд давно разбежался, а он всё равно машет оружием, потому что иначе некуда - в бою есть только один законный выход, и это чей-то труп. У нашего ИИ-мастера было ровно так же, только хуже: игрок опускал меч и говорил “давай поговорим” - а движок это все равно читал как ещё один боевой ход. Мир на словах, война по цифрам. Разбираюсь, почему так вышло, что такое parley-канал, который это чинит, и сколько раз пришлось переделывать, прежде чем заработало по-честному.
Почему бой в D&D с ИИ-мастером заканчивался только смертью
Бой заканчивался только гибелью одной из сторон, потому что у движка не было легального пути выйти из боя иначе - попытка “предложить мир” посреди схватки распознавалась как очередная атака. Не потому что нейросети лень, а потому что я сам эту дверь захлопнул раньше.
Дело в защите от старого читерства: раньше игрок мог “заболтать” любого врага текстом - и дракон, и голем на середине боя вдруг решали, что вы друзья. Чтобы это прикрыть, я поставил гейт: нейросеть не имеет права сама понижать враждебность врага посреди боя. Гейт свою работу сделал - заболтать дракона стало нельзя. Только вместе с лазейкой для абьюза он захлопнул и легальную дверь. Мира по правилам не стало вообще, остался только мир как эксплойт, который я и прикрыл.
Дыра всплыла не сама по себе - её нашли на волне QA-конвейера 1-2 августа 2026 года, где за два дня закрыли эпик на 87 из 87 задач. Parley оказался одной из последних настоящих дыр в боёвке: заявка на мир была последним углом, где движок ещё вёл себя нечестно.
Что такое parley-канал в D&D с ИИ-мастером
Parley-канал - это отдельный путь выхода из боя примирением, который движок отличает от обычного боевого действия и обрабатывает по своим правилам, а не как атаку или защиту. До него у боя было четыре законных выхода: победа, бегство игрока, его гибель и аварийный стоп-кран. Пятого - мира - не существовало вовсе.
Работает это так. Игрок пишет что-то вроде “опусти оружие, поговорим” - и вместо очередного размена ударами движок катит проверку Переговоров против сложности сцены. Кто в нашем ИИ-мастере вообще садится за кубик в такой момент - отдельная история, я разбирал её раньше. Успех - бой закрывается, враг успокаивается и уходит. Провал - бой продолжается, и заявка была одна: заболтать соперника до смерти новыми попытками не выйдет. Опыта и лута за мирную развязку не начисляют - мир это не способ фармить награду, а способ его не получить, но и не сдохнуть.
Ключевое ограничение сохранили от старого гейта: атака с мирными словами так и остаётся атакой. “Бью его, приговаривая - успокойся” никого не примиряет, потому что движок судит по механике заявки, а не по тому, насколько ласково она сформулирована.
Как ИИ-мастер отличает мирное слово от атаки со словом
Отличает по тому, какое действие стоит за фразой в игровой механике, а не по тону текста - иначе один и тот же удар с ласковой репликой каждый раз проходил бы как переговоры. Разруливают это на трёх уровнях: роутер заявок, промоушен в переговоры по закрытому перечню типов действий и отдельный текстовый перехват прямо в резолвере боя.
Живой пример с QA-прогона 2 августа: на ходу 78727 игрок атаковал с мирным словом в реплике - роутер честно завёл это в боевую ветку, никакой parley не сработал, атака осталась атакой. А на ходу 78730 настоящая заявка на переговоры дала бросок 19 против сложности 10 - и бой закрылся миром, без опыта и лута. Разница между этими двумя ходами и есть вся суть фикса.
Игроки вообще горазды ломать движок формулировками - я уже писал, как одной фразой можно было выбить у нейросети что угодно. Parley - тот редкий случай, где хочется, чтобы удачная формулировка сработала, просто в правильную сторону.
Три рефикса ради одного parley-канала
Первая версия parley прожила недолго - и это нормальная цена за новый канал, который раньше в игре вообще не существовал.
Что было. Флаг “идут переговоры” ставился на ход, но пересборка состояния боя между ходами его же и стирала - к следующему ходу переговоры как будто не начинались. Плюс всплыли “плашки вдогон”: интерфейс успевал показать двойную атаку там, где по факту был один ход.
Что стало после рефикса 1. Флаг научили переживать обычную пересборку состояния, плашки убрали.
Что было дальше. Промоушен заявки в переговоры решался нестрогим парсером - недетерминированным по своей природе, он на похожих фразах иногда давал разные ответы.
Что стало после рефикса 2. Промоушен посадили на закрытый перечень типов действий: не “звучит похоже на мир”, а конкретный список того, что вообще может стать переговорами.
Что было ещё. Прямая текстовая атака, зашитая не в общий роутер, а в отдельный резолвер боя (combat.resolve), проходила мимо всей этой логики и норовила сама себя объявить переговорами.
Что стало после рефикса 3. Текстовый перехват в резолвере боя обязали уважать тот же закрытый перечень, что и остальная система - три точки входа, одно правило.
Какие смежные баги вскрыла та же волна
В этой же волне QA всплыли соседние проблемы того же боевого движка, и почти все - от той же корневой причины: бой держал состояние не там, где ожидалось.
Стоп-кран боя падал, если у NPC в кампании был давно погибший тёзка - движок путал живого врага с архивной записью того же имени. Отдельно нашёлся баг с враждебностью: враг, ставший hostile прямо посреди хода, иногда не успевал получить эту метку тем же ходом, и бой на мгновение считал его мирным. А гейт, который не даёт нейросети самовольно понизить враждебность - тот самый, что изначально не пускал в игру мир, - пришлось аккуратно развести с новым parley-каналом, чтобы легальные переговоры не спотыкались о защиту от нелегальных.
У монстров в базовых правилах “Подземелий и драконов” вообще нет параметра, который решал бы, стоит ли им драться дальше - я разбирал это в статье про проверку боевого духа. Здесь та же боль с другой стороны: если у монстра нет цели кроме “убить партию”, ему и сдаваться незачем. Parley чинит именно эту сторону - даёт игроку канал предложить мир, даже когда сам монстр о нём не думал.
Чем parley отличается от проверки боевого духа
Разница в том, кто первым тянется к миру. Проверка боевого духа - это когда монстр сам решает, что бой проигран, и бежит или сдаётся без участия игрока: механика родом из варгеймов, в D&D 5e она есть как необязательное правило DMG. Parley - зеркальная история: инициативу берёт игрок, а движок решает, поверить ли ему.
По факту это две половины одной проблемы - “бой до последнего хита”, когда ни одна из сторон не может выйти из схватки иначе как трупом. Проверка боевого духа отвечает за инициативу монстра, parley - за инициативу игрока. У нас в ИИ-мастере реализована пока только вторая половина.
Что дальше: капитуляция врагов и бегство с погоней
Переговоры - только первый способ закончить бой не через труп. В планах - развить эту же ветку: капитуляция самих врагов без участия игрока в переговорах, бегство с погоней вместо мгновенного исчезновения сбежавшего, возможно - торг в духе “жизнь за кошелёк”. Точных сроков не называю - следующий большой кусок это движок заклинаний, а мир и капитуляция подождут своей очереди.
Если играете в нашего ИИ-мастера DnD в Telegram - попробуйте закончить следующий бой миром вместо добивания и напишите в чат бота, как повело себя переговоры. Ломайте специально - именно так и нашлись все баги из этой статьи.
Частые вопросы
Что будет, если атаковать врага в D&D мирными словами?
Останется атакой. Движок отличает мирную заявку от боевого действия по типу самой заявки, а не по тону реплики - фраза "бью, приговаривая успокойся" переговорами не станет.
Сколько попыток переговоров даётся за один бой в ИИ-мастере DnD?
Одна. Провал проверки Переговоров не даёт повторить попытку в том же бою - иначе любого врага можно было бы заболтать текстом до бесконечности.
Дают ли опыт и лут за мирное завершение боя в D&D с ИИ?
Нет. Мирная развязка закрывает бой без начисления опыта и добычи - это способ не погибнуть, а не способ фармить награду.
Как готовился материал: черновик собирает мой ИИ-конвейер по темам из практики таверны, факты сверяются с первоисточниками и правилами, финальную версию я читаю и правлю руками перед публикацией. Обложку тоже рисует нейросеть. Про кухню — на странице о проекте.