Если коротко: в Dota 2 под “скриптами” обычно имеют в виду cfg-конфиги (консольные команды, бинды, алиасы) и реже Lua-скрипты для кастомных игр/аддонов. Ниже разложено по полочкам, как это настраивается и почему иногда “то работает, то нет”.


cfg: алиасы, бинды и автоexec

Где лежат cfg-файлы

В актуальной установке путь обычно такой:

Steam\steamapps\common\dota 2 beta\game\dota\cfg\

Туда кладут:
- autoexec.cfg (или любой свой .cfg, который вы будете загружать)
- дополнительные файлы, которые грузите через exec

Как запустить cfg автоматически

Вариант 1. Через параметры запуска Steam (автозагрузка)
1) Steam -> Библиотека -> Dota 2 -> Свойства
2) “Установить параметры запуска”
3) Добавить оператор загрузки, например:

+exec autoexec.cfg

Вариант 2. Загрузить во время игры через консоль
Открой консоль и введи:

exec autoexec.cfg

Если консоль не открывается, её обычно включают в параметрах запуска (-console).

Что класть в autoexec.cfg (и как проверить)

Обычно в autoexec.cfg просто набор команд, алиасы и бинды. Минимальный рабочий пример под загрузку будет таким:

// Пример: загрузка настроек
dota_minimap_hero_size 400

Дальше вы проверяете: если команда меняет поведение в игре - значит файл грузится.


Проверка: почему “не работает” (частые причины)

Конфиг загружается, но команды перетираются другим exec

Если у вас в игре загружается несколько конфигов, последняя команда exec имеет приоритет. Поэтому типичная ошибка выглядит так:
- вы меняете значение в своём cfg
- но потом где-то ещё exec-ится другой файл с такими же командами

Что делать: временно закомментировать лишние exec и оставить один, затем добавить команды обратно.

Команды срабатывают не в том месте, не при тех условиях

Например, настройки мини-карты могут вести себя иначе, когда включены опции отображения иконок героев. Практика из обсуждений такая:
- при отключенных иконках меняются “капельки/зум”
- при включенных иконках часть команд может не давать эффекта

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

Смысл проверки простой: включаете/выключаете и смотрите, какие параметры реально реагируют.

Реально не тот cfg грузится

Иногда файл лежит “рядом”, но грузится другой (другая папка/другое название/другая раскладка). Самая надёжная проверка:
- сделать в конце autoexec.cfg команду, которая точно заметна (например, сообщение в чат/по центру экрана)
- перезапустить лобби/матч и убедиться, что это сообщение появляется


Настройка биндов и алиасы: как это выглядит в cfg

Базовый шаблон

В cfg чаще всего встречается схема:

alias "имя_алиаса" "команды..."
bind "КНОПКА" "имя_алиаса"

Пример с “выполнить конфиг по нажатию кнопки”:

bind "f8" "exec autoexec.cfg"

Это полезно для быстрой перезагрузки настроек в текущей сессии.

Важно: используйте только те алиасы и бинды, которые реально есть в файлах

Если в бинде вызываетcя алиас, но сам алиас не определён, в консоли обычно появится ошибка вида “Unknown command…”. В этом случае проблема не “в настройке доты”, а в том, что alias не успели или не туда вставили.


Куда кидать бинды и алиасы (логика по файлам)

Практический подход такой:

  • autoexec.cfg - место для загрузки всего “основного”
  • отдельные .cfg - для отдельных тематик (например, мини-карта, инвокер, инвентарь, быстрая панель)
  • далее в autoexec.cfg вы вызываете их строками exec some_file.cfg

Так проще разрулить ситуации, когда вы хотите быстро тестировать: отключили exec - и перестало, включили - вернулось.


“Layer” (слои) для отдельных биндов (если у вас есть такая система)

Иногда люди используют “слои” (когда клавиша временно подгружает другой набор биндов, а при отпускании возвращает исходный).

Общий принцип, который встречается в гайдах:
- есть DEFAULT_LAYER.CFG
- есть LAYER_1.CFG
- по нажатию клавиши делается exec на LAYER_1
- по отпусканию exec возвращает DEFAULT_LAYER

Пример идеи:

alias +keyShift2 "exec dota2_gameplay_mode/dota2_keybinds_alt_pressed.cfg"
alias -keyShift2 "exec dota2_gameplay_mode/dota2_keybinds_default.cfg"
bind "`" +keyShift2

Lua-скрипты (аддоны/кастомные игры): как это работает по файлам

Если вы про Lua (кастомки, аддоны Workshop Tools), там другая схема: Dota запускает файлы аддона в определённом порядке.

Типовая структура

Обычно используются:
- addon_init.lua - выполняется первым, часто там подключают модули (require)
- addon_game_mode.lua - отвечает за инициализацию игрового режима
- основной код лежит в ваших файлах (например addon_main.lua) и подключается из addon_init.lua

События и команды

Для взаимодействия с игрой используют:
- ListenToGameEvent(...) для слушателей событий
- Convars:RegisterCommand(...) для команд, которые можно дергать из UI/клиента на сервер

События приходят с параметрами, обычно в таблице keys, откуда вы читаете PlayerID и прочее.


Часто задаваемая проблема по Lua-отладке (и почему ломается ожидание)

Встречается путаница вокруг отладчика Lua: “подключается к VM, но breakpoints не срабатывают”. Одна из логичных причин, которую отмечают в обсуждениях по Workshop: когда срабатывает breakpoint, движок/цикл событий должен “замирать”, а в Dota это может блокировать выполнение и тянуть за собой зависание/неочевидное поведение.

Ещё один момент - не всегда понятно, к какому компоненту подключать отладчик: клиентскому процессу или серверной части аддона. В разных конфигурациях аддон исполняется на сервере, а UI - на клиенте, поэтому точки останова могут ожидать не там, где вы их ловите.

Если отладчик “видит” VM, но не ловит breakpoints, чаще всего проблема не в Lua-коде, а в:
- конфигурации подключения (client vs server)
- способе запуска аддона/VM
- несовпадении того, где выполняется нужный кусок кода

Официальные гайды Valve по старту Workshop помогают сверить ожидаемую архитектуру, но конкретно про “почему breakpoints не работают именно у вас” обычно требуется сопоставить: где исполняется логика и как именно подключается debugger.


Мини-чеклист, чтобы быстро довести до рабочего состояния

Что делаете Как понять, что всё ок Типичная ошибка
кладёте .cfg в нужную папку команды реально меняют настройки грузится другой файл или другая папка
добавляете загрузку через +exec после старта появляются эффекты не стоит autoexec.cfg в автозагрузке
делаете exec вручную в консоли изменения видны сразу конфликты приоритетов (дальше перетирается)
пишете alias и бинды на него консоль не ругается “Unknown command” алиас не определён / не в том файле
тестируете мини-карту/иконки реагируют конкретные параметры часть команд не влияет при включенных иконках

Использованные источники

  • Материалы по cfg-использованию и автозагрузке/exec (гайд на Steam): https://steamcommunity.com/sharedfiles/filedetails/?id=171142616
  • Обзор запуска и Lua-структуры Workshop (Getting Started): https://developer.valvesoftware.com/wiki/Ru/Dota_2_Workshop_Tools/Scripting/Getting_Started
  • Пример обсуждений по cfg/алиасам/биновым проблемам и нюансам мини-карты: https://dota2.ru/forum/threads/gajd-cfg-alias-bind-autoexec-skripty-i-t-d.768002/page-3
  • Материал про отладку Lua и breakpoints (обсуждение): https://customgames.ru/forum/threads/%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0-lua-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2.2723/

Если вы делаете “скрипты на доту” в смысле cfg-конфигов, ключевой успех обычно сводится к трём вещам: правильно загрузить файл (exec/autoexec), убедиться что он реально последний по приоритету, и проверять реакции в конкретных режимах (например, когда включены иконки мини-карты).