Тест скрипта современного боя
Переведено с английского
Полигон для скрипта современного боя в стиле RPG
Примечание: это демонстрация скрипта, а не полноценный RP-бот. Ссылка на код в последнем разделе.
Проверьте вероятности взрывного, метательного и рукопашного урона в ролевой игре.
Это тотальная война в какой-то дыре, раздираемой войной стране!
Выживет ли наш солдат Боб под броском кубиков?
Для миниатюры выбрал случайную картинку
Источник арта: Drunken-Lord
Примечание: этот скрипт, скорее всего, будет сильно зависеть от типа используемой вами LLM и от того, как она интерпретирует расстояния.
Я использовал DeepSeek V3 0324, с другими LLM результат может отличаться.
Как это работает?
Кратко: бот бросает кубики несколько раз, и успех (выживание) зависит от боевых характеристик в стиле RPG
На данный момент у меня есть три категории эффектов, которые могут произойти с {{char}}.
Взрывные
Метательные
Рукопашные
Мы также поговорим о концепции «характеристик современного боя», которые будут влиять на эти эффекты.
Взрывчатка
У взрывчатки есть эффект разлёта, причём шанс быть затронутым снижается по мере увеличения расстояния.
В отношении взрывчатки нужно беспокоиться о двух вещах: осколки (или метательные элементы) и ударная волна.
Итак, мы можем определить наш внедряемый промпт так (пример, может не совпадать с конечным продуктом):
# {{char}} должен реагировать на взрыв следующим образом:
- Ближняя дистанция: ["дёрнулся", "контужен", "выведен из строя"] от взрыва, и осколки (метательные элементы) ["направлены", "не направлены"] в их сторону.
- Средняя дистанция: ["не дрогнул", "дёрнулся", "контужен"] от взрыва, и осколки (метательные элементы) ["направлены", "не направлены"] в их сторону.
- Дальняя дистанция: ["не дрогнул", "дёрнулся"] от взрыва.
Значения в скобках здесь определяются бросками кубиков, которые делает бот.
Характеристики бота здесь мало на что влияют, кроме проверки, выживет ли он, поскольку взрывчатка делает всё, что ей вздумается.
Метательные снаряды
Вероятно, это будет обычный случай в плане боя в ролевой игре, поэтому, думаю, подход должен быть довольно проработанным.
Я могу придумать практически три исхода, когда в тебя стреляют: остаться невредимым, быть раненым и быть outright убитым.
Но, помимо этих исходов, что ещё может произойти?
- невредим; ты можешь быть не дрогнувшим или подавленным
- ранен; ты можешь быть онемевшим, подавленным или в шоке. Рана может быть лёгкой, серьёзной или смертельной. «Смертельная» позволит боту хотя бы выстрелить в ответ в последний раз перед смертью.
- убит; вроде выстрела в голову или что-то такое? да, всё кончено.
Затем нам нужно будет проверить, будет ли бот эффективно отвечать огнём нападающему, исходя из навыков бота и его состояния. (при условии, что бот не убит.)
Так что мы можем составить наш промпт так:
# {{char}} должен реагировать на обстрел или на метательный снаряд, направленный в него, следующим образом:
И затем для каждой дистанции (ближняя, средняя, дальняя) будет следующее (некоторые предложения будут отсутствовать в зависимости от того, что произойдёт. Например, «невредим» не будет генерировать строку «Рана...»):
Будет ["невредим", "ранен", "убит"] метательным снарядом. Рана ["лёгкая", "тяжёлая", "смертельная"]. {{char}} ["не дрогнул", "онемел", "подавлен", "в шоке"]. Если имеет смысл открыть ответный огонь, они сделают это ["эффективно", "неэффективно"].
Характеристики бота играют в этом немного большую роль: учитываются их «физические» характеристики (умрут ли они/уклонятся ли?), их «психические» характеристики (будут ли они прижаты?), и «боевые» характеристики (будут ли они реагировать эффективно?)
Рукопашный бой
И, конечно, всегда можно ввязаться в драку с кем-то, вместо того чтобы разнести его пулей 7.62 или 5.56.
Это будет самый простой из промптов и более простой по выводу, чем скрипт рукопашного боя в моих других ботах.
# В рукопашном бою {{char}} должен сражаться ["эффективно", "неэффективно"].
Поскольку это, вероятно, будет происходить не так часто, как я думаю, всё останется предельно простым.
Характеристики современного боя
Я возьму вдохновение из Escape from Tarkov и использую некоторые тамошние характеристики. Думаю, все они довольно самоочевидны.
Физические
- Живучесть - здоровье, по сути
- Ловкость - насколько быстро/хорошо они двигаются
- Стойкость - сопротивление урону
- Сила - насколько они сильны
Психические
- Восприятие - способность воспринимать вещи на поле боя
- Стрессоустойчивость - способность сохранять спокойствие под давлением
Боевые
- Обращение с оружием - способность прицеливаться и стрелять из оружия
- Ближний бой - способность вести бой на близкой дистанции
- Рукопашный бой - насколько хорошо они могут драться руками
Эти значения должны быть установлены от 0 до 100 и должны быть подобраны так, чтобы отражать личность бота. В качестве ориентира, думаю, мы можем масштабировать так:
(0 - 40: плохо), (40-60: средне), (60-80: хорошо), (80-100: отлично)
Так что персонаж-снайпер, вероятно, должен иметь «Обращение с оружием: 85», но «Ближний бой: 50» или что-то в этом роде.
Эти значения взвешиваются по-разному в зависимости от дистанции боя: например, ближний бой играет гораздо большую роль на «ближней дистанции», но весит гораздо меньше (или вообще не учитывается) на «дальней дистанции».
Какие характеристики вносят вклад и их веса (все веса должны в сумме давать 1):
Честно говоря, они довольно случайны, так что да, отзывы о балансе приветствуются.
Выживание при взрыве:
- все дистанции: стойкость (0.7), стрессоустойчивость (0.3)
Попадание метательного снаряда:
- ближняя: восприятие (0.2), ловкость (0.4), ближний бой (0.4)
- средняя: восприятие (0.5), ловкость (0.5)
- дальняя: восприятие (0.7), ловкость (0.3)
Тяжесть раны:
- ближняя: живучесть (0.3), стойкость (0.4), бли жний бой (0.3)
- средняя: живучесть (0.5), стойкость (0.5)
- дальняя: живучесть (0.3), стойкость (0.7)
Психический эффект:
- ближняя: восприятие (0.1), стрессоустойчивость (0.4), ближний бой (0.5)
- средняя: восприятие (0.3), стрессоустойчивость (0.7)
- дальняя: восприятие (0.1), стрессоустойчивость (0.9)
Эффективность ответного огня:
- ближняя: восприятие (0.1), обращение с оружием (0.4), ближний бой (0.5)
- средняя: восприятие (0.3), обращение с оружием (0.7)
- дальняя: восприятие (0.5), обращение с оружием (0.5)
Успех в рукопашном бою:
- сила (0.4), рукопашный бой (0.6)
Код
Я рад поделиться кодом, который вы можете найти здесь, на моём GitHub.
Применяется лицензия MIT, что просто гарантирует, что она максимально разрешительна!
Буду признателен за упоминание, если вы решите серьёзно использовать скрипт. :)
Создано 13 сент. 2025 г.
Обновлено 21 нояб. 2025 г.
Опубликован 13 сент. 2025 г.