Создание собственного бота в Dota 2 — реальный способ научиться программировать, понять игровую логику и проверить свои алгоритмы в бою. Это руководство проведёт через весь путь: от установки инструментов до запуска бота в игре.

🤖

Практика программирования

Боты пишутся на Lua — простом языке, идеальном для старта в кодинге.

🧠

Понимание игры

Чтобы заставить бота принимать решения, придётся разобраться в механиках Dota 2.

⚔️

Свои эксперименты

Тестируйте стратегии, сборки и поведение без ограничений в лобби.

Шаг 1. Подготовка инструментов

Прежде чем писать код, необходимо подготовить рабочее окружение:

  • Steam и Dota 2 — установленная игра с включёнными инструментами Workshop Tools (дополнительная загрузка);
  • Текстовый редактор — Notepad++, VS Code или Sublime Text;
  • Базовые знания Lua — достаточно понимания переменных, функций и условий.
💡 Совет: включите консоль разработчика в настройках Dota 2 — она понадобится для отладки бота командой dota_launch_custom_game.

Шаг 2. Создание скрипта бота

Боты располагаются в папке Steam\steamapps\common\dota 2 beta\game\dota\scripts\vscripts\bots. Минимальный файл бота называется, например, bot_lina.lua:

-- bot_lina.lua
local bot = GetBot()

function Think()
    if bot:IsAlive() then
        -- Бот двигается к центру карты
        bot:Action_MoveToLocation(Vector(0, 0, 0))
    end
end

Функция Think() вызывается каждый игровой тик — это «мозг» бота, где принимаются все решения.

Как бот принимает решения

Любой бот в Dota 2 работает по циклу «восприятие → оценка → действие»:

👁
Восприятие

Бот читает состояние мира: здоровье, мана, враги рядом, крипы

→
⚖️
Оценка желаний

Каждое действие получает «вес» от 0 до 1: фармить, бить, отступать

→
🎯
Действие

Выполняется действие с наивысшим весом

Основные режимы поведения бота

Dota 2 предоставляет встроенную систему режимов (Desire). Каждый режим — это намерение бота с приоритетом:

Режим Когда активен Типичный вес
RETREAT (отступление) Мало здоровья, угроза ганга 0.8 – 0.95
LANING (линия) Начальная стадия игры 0.5 – 0.7
FARM (фарм) Свободная линия, лес 0.4 – 0.6
PUSH_TOWER (пуш) Преимущество на линии 0.3 – 0.5
ROAM / DEFEND Помощь союзникам, защита башен 0.3 – 0.6

Шаг 3. Логика желаний на практике

Пример расчёта веса отступления в зависимости от здоровья:

function GetRetreatDesire()
    local hp = bot:GetHealth() / bot:GetMaxHealth()
    if hp < 0.3 then
        return 0.9 -- критическое здоровье: спасаемся
    elseif hp < 0.5 then
        return 0.5 -- осторожно стоим назад
    end
    return 0
end

Попробуйте сами: интерактивный расчёт веса отступления

Желание отступить: 0.9

Шаг 4. Запуск бота в игре

  1. Создайте лобби в Dota 2 и включите читы (необходимо для теста).
  2. В настройках лобби выберите слот команды и укажите своего бота.
  3. Откройте консоль и проверьте логи: ошибки Lua выводятся с номером строки.
  4. Перезагружайте скрипт после правок командой script_reload — игру перезапускать не нужно.

Частые ошибки новичков

Зависание функции Think()

Циклы while без выхода роняют логику всех ботов. Всегда проверяйте условия завершения.

Жёсткий код вместо весов

Прямые команды «иди туда» игнорируют систему режимов. Правильно — менять веса, а не отдавать приказы каждый тик.

Отсутствие проверок на nil

Цель могла умереть или выйти из видимости — обращайтесь к объектам только после проверки.

Куда двигаться дальше

Базовое движение и фарм

Научите бота стоять на линии и добивать крипов.

Способности и предметы

Добавьте использование скиллов и логику покупок.

Командная игра

Реализуйте ганги, защиту и командные бои совместно с другими ботами.

Первый бот — это только начало

Создание бота в Dota 2 — это проект, который растёт вместе с навыками автора: от одного движения к центру карты до полноценного игрока, способного побеждать в командных боях. Начните с малого, тестируйте каждый шаг — и вскоре логика второй натуры станет предметом гордости.