Пусть любой LLM-агентсам создаёт ИИ для Warcraft III
War3AI превращает игру в API, спроектированный для агентов: полное состояние всей карты каждые 50 ms, семантические команды исполняются примерно за кадр, на каждую — квитанция с кодом причины. Отдайте документацию Claude, GPT, Gemini, Qwen или любому агенту — он напишет бота, выйдет на карту, прочитает результаты и сам всё улучшит.
Windows 10/11 · Warcraft III 1.27a · Двойной щелчок по start.bat — остальное установится само
agent-sessioninst 201.272×
Вы
Играем за людей. Если здоровье героя ниже 40% — отступать домой; ночью, когда бойцов не меньше 3, — атаковать ближайший лагерь крипов.
Прочитал llms.txt и api.json, сгенерировал night_raider.py — используются только 8 проверенных методов.
night_raider.pyapi.jsonBOT_HANDBOOK.md
from openwar3 import Botclass 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 · ночь
Поток событий Онлайн
production.donehbar → hfoo · 14.9s
order.changedHamg → attack
damagehfoo → ngno −14 · normal
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 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
Юниты с полным состоянием
Здоровье и мана, приказ, текущая цель, перезарядка, баффы, инвентарь
Программировать не обязательно: вы объясняете, как ИИ должен играть, а агент пишет код, выходит на карту, смотрит на результат и дорабатывает, пока вас всё не устроит.
01
Опишите стиль игры простыми словами
«Люди, первым героем — Архимаг; две казармы, пехотинцы и стрелки; накопили 12 бойцов — атакуем вторую базу соперника; у героя меньше 30% здоровья — отступает.»
02
Агент читает документацию и пишет бота
Отдайте ему llms.txt, api.json и руководство. API использует игровые названия (четырёхсимвольные коды, названия способностей), поэтому модель понимает всё с первого прочтения.
03
Одна команда — и матч идёт
tools/play.py запускает игру, внедряет рантайм, начинает матч и поднимает бота. Скорость игры, раса, сложность и честный режим задаются параметрами.
04
Агент читает квитанции и события и правит сам
У каждой команды есть квитанция с кодом причины, а поток событий фиксирует каждый удар, каждое убийство и каждое завершение производства. По ним агент находит проблему, правит код и играет следующий матч.
Шаги 2 ~ 4 образуют замкнутый цикл: квитанции и события — структурированные данные, и агенту не нужно смотреть на экран, чтобы понять, что пошло не так.Автономные итерации агента
Возможности
API, спроектированный для агентов
Наблюдение без ожидания, квитанции на команды, события о результатах — именно такая структурированная, проверяемая обратная связь нужна модели, чтобы исправлять себя.
Полное состояние мира без ожидания
Ресурсы и пища 16 игроков; здоровье и мана, приказ, текущая цель атаки, перезарядка способностей, баффы и инвентарь до 1024 юнитов; предметы на земле, деревья, очереди производства, время суток. Рантайм выкладывает всё в общую память, одна копия читается ≈ за 0.4 ms.
Движение, атака, добыча, строительство, тренировка, применение и изучение способностей, воскрешение, использование предметов, покупки… Принята ли команда и почему нет — вы узнаёте в том же кадре.
✓ move ×8 6 µs
✓ build hbar order → hbar
✗ train hfoo 3 · не хватает пищи
✗ attack ogru 1001 · не видно
Поток событий
Появление и гибель юнитов, смена приказа, повышение уровня героя, появление предметов; каждый удар на уровне движка (источник, тип атаки, урон до брони) и завершение производства — в том числе у соперника.
Пачка за один кадр
Команды внутри 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 позволяют агенту прочитать всю документацию сайта за раз.
{"name": "build_near",
"category": "command",
"status": "verified",
"latency": "Быстрая полоса × число пробных точек",
"mechanism": "Команда build по точкам + отслеживание (…",
"signature": "build_near(worker, code, x, y, …)",
"doc": "Ищет вокруг (x,y) от ближнего к дальнему…"}
Рантайм внедряется в оригинальную игру и в игровом потоке собирает состояние мира, исполняет команды и сообщает результаты; ваш ИИ общается с ним по версионированному протоколу W3P — через Python SDK или на любом языке, который умеет работать с общей памятью.
Ваш агент / бот
Любая модель, любой язык
Claude CodeCursorChatGPTлокальная Qwenбот на Pythonэталонный ИИ
мир каждые 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 Botclass 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 (фокус огня, отвод раненых, спасение героя, ночной крипинг).
Напиши ИИ для Warcraft III 1.27 (на Python). Используй только методы Game, перечисленные в api.json,не выдумывай несуществующих методов. Унаследуй openwar3.Bot и реализуй on_start(g) и on_tick(g).Правила:- on_tick вызывается примерно 5 раз в секунду и должен быть быстрым (никаких sleep внутри).- Отсутствующее значение — это None, а не 0: сначала проверь, потом используй.- Команды возвращают квитанцию: `if r:` значит, что движок принял команду; если нет — причина в r.reason.- Для атаки конкретного врага используй g.attack(боец, враг); невидимую цель движок отклонит (1001).- Погибшего героя воскрешай через g.revive(алтарь), нанять второго такого же нельзя.- Если за тик нужно отдать много команд, оберни их в with g.batch():.Как я хочу играть: Люди. В начале 5 крестьян на золото, 1 на лес; первым героем — Архимаг; две казармы, пехотинцы и стрелки; накопили 12 бойцов — вместе с героем атакуем вторую базу соперника; у героя меньше 30% здоровья — отступает домой.
Полный шаблон — на странице «Пишем бота с помощью LLM», копируется одним кликом.
>>> r = g.train(barracks, "hfoo")>>> bool(r), r.reason # «не хватает пищи»(False, 'rejected(人口不够)')>>> r = g.attack(footmen, grunt_in_fog)>>> r.verdict, r.reason # «цель не видна (в тумане войны / под чёрной маской)»(1001, 'rejected(目标看不见(在迷雾/黑区里))')>>> r = g.move(footmen, 1200, -800)>>> bool(r), r.exec_us # сколько микросекунд команда заняла в игровом потоке(True, 6)>>> g.can_do(altar, "Hamg") # сначала спросить движок: 185 = алтарь воскрешает героя185
Квитанция превращает «почему не получилось» в машиночитаемый код причины — именно благодаря этому агент может сам исправлять ошибки.
// Наблюдение, которое судья каждый тик отправляет боту (только то, что в его обзоре){"t": "obs", "tick": 57, "gameMs": 11400, "me": 1, "res": {"gold": 320, "lumber": 150, "food": [18, 30]}, "units": [ {"id": 101, "type": "hfoo", "owner": 1, "x": -4500, "y": 2200, "hp": 380, "hpMax": 420}], "visibleEnemies": [ {"id": 733, "type": "ogru", "owner": 2, "x": -3900, "y": 2500, "hp": 700}], "deadlineMs": 180}// Действия, которые возвращает бот (их может выдать любой язык и любая модель){"t": "act", "tick": 57, "actions": [ {"do": "attack", "unit": 101, "target": 733}, {"do": "train", "unit": 5, "code": "hfoo"}, {"do": "cast", "unit": 7, "spell": "thunderbolt", "target": 733}]}
Черновик протокола WebSocket / JSON для Арены — LLM может играть напрямую, без Python.
ИИ-агенты
Шесть способов подключить LLM к Warcraft
Пять работают уже сегодня, шестой в разработке. Они не исключают друг друга: в одном матче бот, написанный агентом, может играть, локальная модель — советовать, ещё одна модель — озвучивать юнитов, а вы в любой момент можете вставить слово через Claude Code.
Рисуйте на экране собственный интерфейс — нарисованные кнопки нажимаются, горячие клавиши срабатывают; вызывайте извне все функции, доступные авторам карт; возьмите на RPG-карту ИИ-напарника, который играет вместе с вами; целый новый геймплей оформите как мод — как и ИИ-схема, он переключается в один клик, а поделиться им можно в любой момент.
Межпроцессное взаимодействие само по себе не медленное; медленно «ждать цикл сообщений на каждый запрос» и «одна блокировка на всю машину». Быстрая полоса даёт каждому клиенту собственную полосу без блокировок, а команды исполняются пачками внутри диспетчеризации событий игрового потока.
Пропускная способность
Было 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, а целый верстак
От запуска матча и наблюдения за мыслями ИИ до разбора игр и комментирования стримов — для всего есть готовые инструменты.
На своём компьютере, в локальной сети, в собственных играх. Game.dll на диске не изменяется, файлы Blizzard не распространяются (игровые данные извлекаются из вашей собственной игры), использование в Battle.net и на любых серверах с античитом запрещено.
Прочитай https://war3ai.com/ru/llms-full.txt, а затем с помощью OpenWar3 напиши мне бота за людей: первым героем — Архимаг, ночью армия идёт на крипинг, при здоровье героя ниже 40% — отступать.