Публичное превью Новое: интерфейс и ввод · игровые моды · шлюз · MCP

Пусть любой LLM-агент сам создаёт ИИ для Warcraft III

War3AI превращает игру в API, спроектированный для агентов: полное состояние всей карты каждые 50 ms, семантические команды исполняются примерно за кадр, на каждую — квитанция с кодом причины. Отдайте документацию Claude, GPT, Gemini, Qwen или любому агенту — он напишет бота, выйдет на карту, прочитает результаты и сам всё улучшит.

Windows 10/11 · Warcraft III 1.27a · Двойной щелчок по start.bat — остальное установится само

agent-session inst 20 1.27 2×
Вы

Играем за людей. Если здоровье героя ниже 40% — отступать домой; ночью, когда бойцов не меньше 3, — атаковать ближайший лагерь крипов.

Прочитал llms.txt и api.json, сгенерировал night_raider.py — используются только 8 проверенных методов.

night_raider.py api.json BOT_HANDBOOK.md
from openwar3 import Bot

class NightRaider(Bot):
    def on_tick(self, g):                     # около 5 раз в секунду
        halls = g.my_buildings({"htow", "hkee", "hcas"})
        army, camps = g.my_army(), g.creeps()
        if not halls:
            return
        home = halls[0]
        with g.batch():                       # команды этого тика уходят разом
            for h in g.my_heroes():
                if h.hp < h.hp_max * 0.4:     # спасаем героя
                    g.move(h, home.x, home.y)
            if g.is_night() and len(army) >= 3 and camps:
                camp = min(camps, key=lambda c: g.path_distance(home, c) or 1e9)
                g.attack_move(army, camp.x, camp.y)   # ночью — крипинг

    def on_event(self, g, ev):
        if ev.kind == "production.done" and ev.owner == g.me():
            print("Готово", ev.done_code, f"{ev.value:.1f}s")
Мини-карта 21:40 · ночь
last_seen · 42 с назад walk_path → attack_move
Поток событий Онлайн
  1. production.donehbar → hfoo · 14.9s
  2. order.changedHamg → attack
  3. damagehfoo → ngno −14 · normal
  4. receiptattack_move ×5 ✓ Принята · 6 µs
Подключено Снимок #18342 · 50 ms Команд за тик: 12 · одной пачкой fair=True

Совместимо с любой моделью и агентом, которые умеют писать код или выдавать JSON

Claude GPT Gemini DeepSeek Qwen Kimi GLM Llama Claude Code Cursor Codex LM Studio Ollama
50 ms
Период публикации всей карты
Можно уменьшить до 16 ms; клиент читает одну копию ≈ за 0.4 ms
~1 кадр
До исполнения команды
Одна команда исполняется в игровом потоке за 4~8 µs
3 000 команд/с
Пропускная способность
6 процессов параллельно, медианное ожидание 0.06 ms
103
Методы API
из них проверено в игре: 98
1 024
Юниты с полным состоянием
Здоровье и мана, приказ, текущая цель, перезарядка, баффы, инвентарь

Цифры — из замеров на тестовом экземпляре 1.27 (2026-09-23 / 24); методика — в разделе Платформа · производительность.

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

От одной фразы — до ИИ, который умеет воевать

Программировать не обязательно: вы объясняете, как ИИ должен играть, а агент пишет код, выходит на карту, смотрит на результат и дорабатывает, пока вас всё не устроит.

  1. 01

    Опишите стиль игры простыми словами

    «Люди, первым героем — Архимаг; две казармы, пехотинцы и стрелки; накопили 12 бойцов — атакуем вторую базу соперника; у героя меньше 30% здоровья — отступает.»

  2. 02

    Агент читает документацию и пишет бота

    Отдайте ему llms.txt, api.json и руководство. API использует игровые названия (четырёхсимвольные коды, названия способностей), поэтому модель понимает всё с первого прочтения.

  3. 03

    Одна команда — и матч идёт

    tools/play.py запускает игру, внедряет рантайм, начинает матч и поднимает бота. Скорость игры, раса, сложность и честный режим задаются параметрами.

  4. 04

    Агент читает квитанции и события и правит сам

    У каждой команды есть квитанция с кодом причины, а поток событий фиксирует каждый удар, каждое убийство и каждое завершение производства. По ним агент находит проблему, правит код и играет следующий матч.

Шаги 2 ~ 4 образуют замкнутый цикл: квитанции и события — структурированные данные, и агенту не нужно смотреть на экран, чтобы понять, что пошло не так. Автономные итерации агента
Возможности

API, спроектированный для агентов

Наблюдение без ожидания, квитанции на команды, события о результатах — именно такая структурированная, проверяемая обратная связь нужна модели, чтобы исправлять себя.

Полное состояние мира без ожидания

Ресурсы и пища 16 игроков; здоровье и мана, приказ, текущая цель атаки, перезарядка способностей, баффы и инвентарь до 1024 юнитов; предметы на земле, деревья, очереди производства, время суток. Рантайм выкладывает всё в общую память, одна копия читается ≈ за 0.4 ms.

Семантические команды с квитанциями

Движение, атака, добыча, строительство, тренировка, применение и изучение способностей, воскрешение, использование предметов, покупки… Принята ли команда и почему нет — вы узнаёте в том же кадре.

Поток событий

Появление и гибель юнитов, смена приказа, повышение уровня героя, появление предметов; каждый удар на уровне движка (источник, тип атаки, урон до брони) и завершение производства — в том числе у соперника.

Пачка за один кадр

Команды внутри with g.batch() отправляются одной пачкой. В замерах 8 приказов движения ускорились с 68 ms до 6.5 ms.

Расчёт боя и поиск пути

stats / time_to_kill учитывают встроенную таблицу бонусов атаки и брони и текущие технологии; path_distance / walk_path запускают A* по сетке рельефа движка.

Честный режим

Видны только юниты, предметы, производство и события в пределах обзора; last_seen помнит врагов в тумане войны. На Арене правила те же.

Документация для моделей

api.json генерируется из кода, у каждого метода указаны статус проверки, класс задержки и механизм — модели не нужно гадать; llms.txt / llms-full.txt позволяют агенту прочитать всю документацию сайта за раз.

Архитектура

Один рантайм, один протокол, любой ИИ

Рантайм внедряется в оригинальную игру и в игровом потоке собирает состояние мира, исполняет команды и сообщает результаты; ваш ИИ общается с ним по версионированному протоколу W3P — через Python SDK или на любом языке, который умеет работать с общей памятью.

Ваш агент / бот
Любая модель, любой язык
Claude CodeCursorChatGPTлокальная Qwenбот на Pythonэталонный ИИ
Решения
import openwar3 · или шлюз WebSocket / JSON · MCP
OpenWar3 SDK
Python · openwar3
Game / Botснимок w3worldбыстрая полоса w3fastcombat — расчёт бояpathing — поиск путиw3claim — арбитражcanvas — холстjass — JASS-каналschemes — ИИ-схемы
Интерфейс
мир каждые 50 ms · команда исполняется ≈ за 1 кадр · квитанция на каждую
Протокол W3P v2
Общая память · zero-copy · версионирование
War3WorldWar3EventsWar3MapWar3TreesWar3Fast — полосы командWar3Canvas — холст
Протокол
пачками в игровом потоке · 4~8 µs на команду · бюджет 4 ms на проход
W3 Runtime
Работает в игровом потоке
публикация состояния мирапоток событийисполнитель семантических командзапросыправа и точки зрениясобственная отрисовка холставызовы JASSподдержка версийздоровье и предохранители
Рантайм
War3.exe 1.27 · оригинальная игра, никакие файлы на диске не изменяются
Код

Пишется так же,
как командуют армией

Фасад — всего два класса: Bot отвечает за ритм, Game — за то, чтобы видеть и действовать. Юниты задаются четырёхсимвольными кодами, способности — строками приказов, как в самой игре.

  • Нет данных — это None, а не 0
  • Команде можно передать одного юнита или список
  • Очередь через Shift: queue='after'
  • Квитанция «принята» ≠ «выполнена»: результат смотрите по снимку и событиям
Ментальная модель: снимок, команда, событие, тик
from openwar3 import Bot

class FocusFire(Bot):
    """Фокус на враге, которого быстрее всего убить, а не на ближайшем; раненых — домой."""

    def on_tick(self, g):
        army, halls = g.my_army(), g.my_buildings()
        foes = [e for e in g.enemies(fighters_only=True) if e.visible_to(g.me())]
        if not army or not foes or not halls:
            return
        home = halls[0]
        # с учётом бонусов типов атаки и брони, брони, улучшений и текущего здоровья цели
        target = min(foes, key=lambda e: g.time_to_kill(army, e) or 1e9)
        with g.batch():                                   # десятки команд — одно ожидание игрового потока
            for u in army:
                if u.hp < u.hp_max * 0.35:
                    g.move(u, home.x, home.y)             # отвести раненого
                elif (t := g.current_target(u)) is None or t.handle != target.handle:
                    g.attack(u, target)                   # приказ только тем, кто ещё не бьёт цель
Полная рабочая версия — в brains/examples/micro_bot.py (фокус огня, отвод раненых, спасение героя, ночной крипинг).
ИИ-агенты

Шесть способов подключить LLM к Warcraft

Пять работают уже сегодня, шестой в разработке. Они не исключают друг друга: в одном матче бот, написанный агентом, может играть, локальная модель — советовать, ещё одна модель — озвучивать юнитов, а вы в любой момент можете вставить слово через Claude Code.

Офлайн · пишет код

Агент пишет бота

Claude Code, Cursor, Codex, ChatGPT… читают документацию и пишут bot.py, выходят на карту, смотрят квитанции и события и правят код. Самый быстрый способ начать — программировать не нужно.

0 строк кода, написанного вручную
Подробнее
Онлайн · советник

LLM как стратегический советник

Каждые несколько игровых секунд модель получает страницу с обстановкой и возвращает строгий JSON: диагноз, распределение рабочих, что строить в первую очередь, линию поведения на ближайшую минуту. Слой правил применяет это через белый список и ограничение значений.

1.09 s медиана, локальная Qwen3.6-35B-A3B
Подробнее
Онлайн · роли

Юниты заговорят

Любой юнит от любого имени говорит в облачке над головой, а локальная LLM пишет реплики потоком: посиделки крестьян, диалоги героев, комментарии к ходу боя.

0.3 s задержка первого токена (локальная модель)
Подробнее
Онлайн · инструменты

LLM вызывает инструменты напрямую

Подключите один сервер к Claude Code, Claude Desktop или любому клиенту с поддержкой MCP — и LLM сама смотрит на обстановку, отдаёт команды, пишет игроку на экране, задаёт ему вопросы карточками и делает скриншоты. Писать код заранее не нужно.

10 инструментов, подключение одной командой
Подробнее
Онлайн · любой язык

Напрямую через шлюз

Шлюз WebSocket / JSON открывает публичный API как есть: JS, C#, Go, страница в браузере, программа на другой машине — все могут смотреть обстановку, отдавать команды, подписываться на события и ставить в игру кнопки. Роль игрока командует только своими юнитами и видит только свой обзор.

+1 ms дополнительная задержка поверх быстрой полосы
Подробнее
Скоро · прямая игра

Агент сам выходит на карту

Арена: судья фильтрует наблюдения по обзору, проверяет владение юнитами и отсчитывает тики по игровому времени, и два внешних ИИ выясняют в одном матче, кто сильнее. Играть напрямую сможет любой язык и любая модель.

P6 этап Арены
Подробнее
Расширения игры Новое

Не только бои: создавайте в игре свой геймплей

Рисуйте на экране собственный интерфейс — нарисованные кнопки нажимаются, горячие клавиши срабатывают; вызывайте извне все функции, доступные авторам карт; возьмите на RPG-карту ИИ-напарника, который играет вместе с вами; целый новый геймплей оформите как мод — как и ИИ-схема, он переключается в один клик, а поделиться им можно в любой момент.

Рисует рантайм

Холст

Текстовые блоки, панели, индикаторы прогресса, изображения, круги по рельефу, маршруты со стрелками. Следуют за юнитами; любые шрифты (включая китайские), скругления и полупрозрачность — на ваш выбор; рисуется только на вашем экране, поэтому безопасно и в многопользовательской игре.

0.3 ms накладные расходы за кадр (9 элементов)
Подробнее
1291 функция

JASS-канал

Функции, доступные авторам карт, вызываются прямо по имени: создание юнитов, эффекты, панели, диалоги, звук, камера, туман войны… Работает из консоли Farsight, командной строки, HTTP и Python; подключаются и чат-команды, меню с кнопками, стрелки на клавиатуре.

94 функции, эффект каждой проверен в игре
Подробнее
RPG / пользовательские карты

ИИ-компаньон

Ходит за вами, помогает в бою, лечит, когда у вас мало здоровья, и болтает с вами — реплики может писать локальная LLM. Четыре режима: союзник, свой юнит, захват юнита карты, только разговор; имена пользовательских юнитов читаются прямо из карты.

37 / 38 RPG-карт, где прочитаны имена пользовательских юнитов
Подробнее
Переключение · обмен · импорт

ИИ-схемы

Один ИИ — одна папка. Переключение в один клик, даже посреди матча — управление перехватит другой ИИ; экспорт в zip — это и есть обмен, чужую схему запускают только после подтверждения доверия; результаты каждой схемы считаются автоматически.

zip экспорт = обмен; перед импортом — подтверждение доверия
Подробнее
Клик · клавиша

Интерфейс и ввод

Нарисованные кнопки и карточки выбора нажимаются и подсвечиваются при наведении; можно регистрировать горячие клавиши, выбирать точку кликом по земле, узнавать, куда указывает мышь. Кого выбрал игрок, какую способность применил, что написал в чат — всё попадает в поток событий. Кнопки рисуются под указателем мыши, а клик по ним до игры не доходит.

16 / 16 проверок в реальной игре пройдено
Подробнее
Один файл — один геймплей

Игровые моды

Играете вы, а мод ставит задачи: расстановка на старте, волны врагов по таймеру, выбор одного улучшения из трёх, вызов волны горячей клавишей, постройка башни кликом по земле, определение победителя. Унаследуйте openwar3.Mod и напишите несколько функций; в комплекте два примера — «Рогалик с героем» и «Бесконечная оборона».

~150 строк кода на полноценный мод
Подробнее
Замеры

Низкая задержка — измеренная, а не обещанная

Межпроцессное взаимодействие само по себе не медленное; медленно «ждать цикл сообщений на каждый запрос» и «одна блокировка на всю машину». Быстрая полоса даёт каждому клиенту собственную полосу без блокировок, а команды исполняются пачками внутри диспетчеризации событий игрового потока.

Пропускная способность
Было 88 3 000 команд/с
6 процессов параллельно
Медианное ожидание при параллельной работе
Было 67 ms 0.06 ms
старый канал управления → быстрая полоса
16 команд
Было 121 ms 13 ms
по одной → одной пачкой
Один цикл решений эталонного мозга
Было 0.15~0.56 s 0.02~0.07 s
матч 39 минут, 0 ошибок
Инструменты

Не просто API, а целый верстак

От запуска матча и наблюдения за мыслями ИИ до разбора игр и комментирования стримов — для всего есть готовые инструменты.

Консоль Farsight Запуск и остановка экземпляров, настройка следующего матча, мысли ИИ, ручные приказы, история матчей Эталонный ИИ Полноценный ИИ, который ставит базы, крипует, атакует, применяет способности и спасает юнитов, — можно сразу играть против него Авторежиссёр Автоматическая работа камеры и полоски здоровья над юнитами — для стримов и записей Облачка реплик Любой юнит может говорить, реплики потоком от локальной LLM Несколько экземпляров Несколько матчей на одной машине, каждый автоматически перезапускается по настройкам Проверка в реальной игре Одна команда по пунктам проверяет каждую возможность в настоящем матче ИИ-схемы Переключение между несколькими ИИ в один клик, экспорт для обмена, импорт чужих схем, автоматическая статистика результатов Консоль JASS Пишете скрипт и нажимаете «Выполнить»; справочник по 1291 функции с разбивкой по категориям Шлюз WebSocket / JSON — подключается любой язык; в комплекте JS-клиент и демо-страница для браузера MCP-сервер Claude Code и другие клиенты подключают его одной командой — и LLM сама вызывает инструменты
Дорожная карта

Каждый этап проходит приёмку в реальной игре

P0 ~ P3, P5, расширения игры, шлюз и MCP уже работают на 1.27; дальше — поддержка нескольких версий и Арена.

  1. P0 Быстрая полоса + фасад SDK Готово
  2. P1 Семантические команды + квитанции Готово
  3. P2 Слой данных в реальном времени Готово
  4. P3 Перенос эталонного мозга Готово
  5. P5 Права и точки зрения Готово
  6. EX Расширения игры: холст · JASS · компаньон · схемы Готово
  7. EX+ Интерфейс и ввод · моды · шлюз · MCP Готово
Вся дорожная карта

Только для клиента, которым вы владеете законно

На своём компьютере, в локальной сети, в собственных играх. Game.dll на диске не изменяется, файлы Blizzard не распространяются (игровые данные извлекаются из вашей собственной игры), использование в Battle.net и на любых серверах с античитом запрещено.

Условия использования

Отдайте эту фразу своему агенту

Прочитай https://war3ai.com/ru/llms-full.txt, а затем с помощью OpenWar3 напиши мне бота за людей: первым героем — Архимаг, ночью армия идёт на крипинг, при здоровье героя ниже 40% — отступать.