Скрипт в 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