Скрипт в Dota 2 обычно добавляют в двух разных смыслах: либо вы подключаете файлы конфигурации игры (.cfg) для автоматизации нажатий и биндов, либо вы пишете Lua-скрипт для кастомных модов/аддонов (vscripts). В обоих случаях ключевое - понять, какой именно тип скрипта вы хотите использовать, потому что путь, формат файлов и запуск отличаются.

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

Скрипт как .cfg (bind в консоли)

Такой вариант чаще всего используют для “быстрого применения” последовательностей действий через bind и команду exec.

Что за файлы и куда их класть

Игра воспринимает cfg как набор команд. Самое распространённое место для Dota 2:

Что положить Куда Формат
Скрипт ...\steamapps\common\dota 2 beta\game\dota\cfg\ .cfg

Если у вас не “dota 2 beta”, а обычная папка установки, ориентируйтесь по реальному пути (см. ниже).

Как найти папку Dota 2 через Steam

Сделайте так:

Шаг Действие
1 Откройте Steam
2 ПКМ по Dota 2 -> Свойства
3 Локальные файлы -> Посмотреть локальные файлы
4 В открывшейся папке найдите game\dota\cfg

Дальше просто копируйте нужный .cfg файл в эту директорию.

Как подключить скрипт после установки

После того как файл лежит в cfg, его обычно запускают командой в консоли:

Задача Команда
Запустить скрипт из файла invoker.cfg exec invoker.cfg

Важно: Hero/invoker в примере - это имя файла без вашего пути. Реальное имя берите из названия файла, который вы положили.

Что ломает работу (самые частые причины)

Вот типовые ситуации:

Причина Симптом Что проверить
Конфликт биндов Скрипт “частично срабатывает” или не срабатывает вовсе Убедиться, что горячие клавиши, прописанные в cfg, не заняты в настройках игры на другие действия
Вы не положили файл в нужную папку exec ... не даёт эффекта Проверить путь ...\game\dota\cfg\
Ошибка в имени файла exec выполняется, но ничего Имя в команде должно совпадать с названием файла
Скрипт рассчитан на другие слоты/условия Вроде запускается, но делает “не то” Проверить ожидания авторов: например, где лежат предметы по слотам

Источник описаний пути/консольной активации и логики bind/exec: материалы из русскоязычных гайдов и база по командам/настройкам в Dota 2.

Скрипт как Lua для custom game mode и vscripts

Если речь про аддоны (custom games) и Lua-скриптинг, вы работаете не с .cfg, а со структурой файлов аддона и событиями/обработчиками.

В базовом варианте “каркас” выглядит так: движок подхватывает нужные файлы аддона и выполняет их в определённом порядке.

Где лежат файлы Lua

Для кастомного режима обычно используется следующая структура (конкретные папки зависят от проекта, но принцип одинаковый):

Файл Роль
addon_init.lua Инициализация: подключение модулей, регистрация логики
addon_game_mode.lua Создание экземпляра кастомного игрового режима
addon_main.lua “ядро” логики: класс режима, методы InitGameMode, Think/обработчики

Типовой порядок загрузки

Когда аддон загружен, выполняются:

Порядок Что запускается
1 addon_init.lua
2 addon_game_mode.lua

А главный файл может быть addon_main.lua, который подключают через require(...).

События: как заставить режим реагировать

В кастомных режимах используются игровые события и слушатели.

Что сделать Как это выглядит
Подписаться на событие dota_player_gained_level ListenToGameEvent("dota_player_gained_level", Dynamic_Wrap(CustomGameMode, "OnLevelUp"), self)

Дальше обработчик получает keys и вы уже берёте оттуда нужные параметры (например, keys.PlayerID и уровень).

Команды (если нужно дергать логику из UI)

Чтобы команда вызывалась из интерфейса (или из консоли), регистрируют command через Convars.

Что это даёт Зачем
Convars:RegisterCommand(...) UI может вызвать вашу функцию и передать параметр

Скрипт через “чит-команды” (console commands для тренировок)

Иногда под словом “как добавить скрипт” люди имеют в виду не автоматизацию, а набор чит-команд для тестов в консоли (создание героев/предметов, управление режимом для отладки).

Это не “подключение файла”, а ввод команд в консоли/чат. Описание команд и их формат есть в справочнике Dota 2.

Примеры команд (формат из справочника):

Команда (консоль) Что делает
-lvlup <количество> Повышает уровень героя
-refresh Сбрасывает перезарядки, восстанавливает здоровье и ману
-respawn Возрождает героя у фонтана
-allvision / -normalvision Включает/отключает видимость

Также там же есть команда createhero для создания юнитов/героев и вариантов (например, friendly/enemy/neutral и т.п.).

В чём разница и что выбрать

Цель Какой вариант
Хотите, чтобы dota сама выполняла последовательности нажатий по бинду .cfg + exec
Хотите функциональность кастомного режима/аддона на Lua vscripts/Lua-модули: addon_init.lua, addon_game_mode.lua, addon_main.lua
Хотите быстро тестировать в лобби/демо через команды консольные команды (включая createhero и т.д.)

Быстрый чек-лист, если “скрипт не работает”

Проверка Почему это важно
Имя файла в exec совпадает с реальным иначе команду нечего выполнить
Файл лежит ровно в game\dota\cfg\ игра ищет там
Горячие клавиши из скрипта не заняты в настройках игры иначе конфликт биндов
Консоль включена и команда реально вводится без этого скрипт не запускается
Если Lua-аддон - вы подключили нужные require(...) иначе логика не стартует
События подписаны и обработчик существует иначе ваши “ответы” на событие не вызовутся

Источники

  • Steam Community (страницы гайдов с описанием cfg, bind и запуска через exec): https://steamcommunity.com/sharedfiles/filedetails/?id=2937132745
  • Русскоязычный форум с примером AHK/биндов для “сообщений в чат” (как пример подхода через горячие клавиши): https://dota2.ru/forum/threads/skript-chata-dlja-doty-ahk.996543/
  • Справочник команд/консоли Dota 2 (чит-команды, createhero и т.д.): https://dota2.fandom.com/ru/wiki/%D0%A7%D0%B8%D1%82%D1%8B
  • Valve Developer Wiki (соглашение/документация по Workshop Tools/Scripting; доступность зависит от защиты сайта): https://developer.valvesoftware.com/wiki/Ru/Dota_2_Workshop_Tools/Scripting/Getting_Started
  • Пример каркаса Lua для кастомного режима и обработки событий/команд (перевод/конспект): https://xgm.guru/p/blog-sleep/132844