Как в доте 2 прописывать команды


Консольные команды — Dota 2 Вики

Здесь представлен список всех команд (читов), которые можно использовать в режиме тренировки, если такая опция включена.

Команды Пример Эквивалентные команды для консоли Описание / Примечания
-lvlup # -lvlup 25 dota_hero_level n Увеличивает уровень героя.
-levelbots # -levelbots 5 dota_bot_give_level # Увеличивает уровень всех ботов.
-gold # -gold 15000 dota_give_gold Дает вам золото.
-refresh -refresh dota_hero_refresh Убирает перезарядки и дает ману/здоровье.
-respawn -respawn dota_hero_respawn Воскрешает героя.
-spawncreeps -spawncreeps dota_spawn_creeps Создает крипов.
-spawnneutrals -spawnneutrals dota_spawn_neutrals Создает нейтральных крипов.
-startgame -startgame dota_start_game Ставит таймер на 0:00, все начинается сначала.
-killcreeps -killcreeps dota_kill_creeps Убивает всех крипов.
-killwards -killwards dota_killwards Уничтожает все варды.
-dumpbots -dumpbots dota_bot_dump_state Отображает состояние ботов.
-createhero <unit_name> [enemy] -createhero npc_dota_hero_lion enemy Создает определенного юнита (врага).
-item <item_name> -item item_blink dota_create_item <item_name> Дает определенный предмет
-givebots <item_name> -givebots item_blink dota_bot_give_item <item_name> Дает определенный предмет всем ботам
-ping -ping dota_ping Показывает текущий пинг. Может быть применено во время реальной игры, без включенных читов.
-wtf -wtf dota_ability_debug_enable Включает режим WTF — применение заклинаний и предметов не будет стоить маны, а сами предметы и заклинания получат мгновенную перезарядку .
-unwtf -unwtf dota_ability_debug_disable Выключает режим WTF.
-allvision -allvision dota_allvision_enable Рассеивает весь туман войны.
-normalvision -normalvision dota_allvision_disable Включает туман войны обратно, если он был выключен ранее.
-disablecreepspawn -disablecreepspawn dota_creeps_no_spawning_enable Выключает появление крипов на линиях.
-enablecreepspawn -enablecreepspawn dota_creeps_no_spawning_disable Включает появление крипов.
  • Список всех героев для команды "-createhero":

Что такое консоль Dota 2 и лучшие консольные команды Dota 2

Консоль Dota 2 и Autoexec.cfg и лучшие команды для использования

Обновлено 24 января 2019 г.

Прежде чем я расскажу вам, какие консольные команды лучше всего, позвольте мне сначала поделитесь с вами основной информацией.

Что такое Dota 2 Console

Dota 2 Console - это окно, которое открывается в игре Dota 2 точно так же, как командная строка в любых окнах. Он позволяет пользователям добавлять различные команды для изменения всего, что связано с Dota 2.Вы можете добавить эти команды через консоль Dota 2 или использовать их в файле autoexec.cfg.

Как использовать консоль Dota 2

В старой Dota 2 была долгая процедура активации и использования консоли Dota 2, но в Dota 2 reborn все просто.

  1. Войдите в Steam и запустите Dota 2.
  2. Перейдите в настройки Dota 2 и далее в Параметры. В правом нижнем углу самой опции отметьте « Enable Console »
  3. Теперь перейдите в «Горячие клавиши» и выберите любую клавишу для консоли.
  4. Во время игры вы нажмете клавишу, появится консоль.
  5. Если вы хотите закрыть его, просто нажмите эту выбранную клавишу еще раз или щелкните значок X в правом верхнем углу окна консоли.

Что такое autoexec.cfg

Если мы хотим использовать много команд в нашей консоли, то очень сложно набирать много команд каждый раз при запуске Dota 2. Так что мы можем автоматизировать этот процесс, добавив новый файл в наша папка Dota 2. Мы добавляем новый файл « autoexec.cfg ”и добавляем в него консольные команды. Каждый раз при запуске игры этот файл автоматически выполняет все те команды, которые записаны в файле autoexec.cfg .

Как использовать autoexec.cfg

Чтобы упростить задачу, я предлагаю вам перейти в Панель управления >> Инструменты >> Параметры папки >> Снять отметку - Скрыть расширения для известных типов файлов .

  1. Прежде всего, проверьте, является ли ваша операционная система 32-битной или 64-битной. Затем выберите подходящий путь.
    • Для 32-битной Windows: C: / Program Files >> Steam >> steamapps >> common >> dota 2 beta >> dota >> cfg
    • Для 64-битной Windows: C: / Program Files (x86) >> Steam >> steamapps >> common >> dota 2 beta >> dota >> cfg
  2. В случае, если вы установили игру на любой диск, кроме C, вам просто нужно перейти до «dota 2 beta >> dota >> cfg» .
  3. Щелкните правой кнопкой мыши в любом месте открытого окна, затем щелкните New и выберите Text Document
  4. После создания нового текстового документа назовите его autoexec.cfg и нажмите Enter. Итак, теперь мы создали пустой autoexec.cfg , и теперь он готов и имеет необходимый тип файла.
  5. Теперь вы должны открыть его с помощью Notepad , где вы можете добавить или удалить необходимые команды.
  6. Когда вы играете в свою первую игру, какие бы команды вы ни добавили в файл « autoexec.cfg »также будет автоматически добавлен в ваш основной файл конфигурации, который называется« config.cfg ». Чтобы не дать Dota 2 это сделать, щелкните правой кнопкой мыши config.cfg >> Свойства >> Атрибуты >> Только для чтения.
  7. Файл создан сейчас, и нам нужно, чтобы он загружался автоматически при каждом запуске Dota 2. Для этого перейдите в Steam ⇒ Библиотека ⇒ Щелкните правой кнопкой мыши Dota 2 - Свойства ⇒ Установить параметры запуска ⇒ add + exec autoexec.cfg

Запомните

Вам не нужно удалять кавычки («») из команд

Итак, теперь вы можете спросить, какие команды мне нужно добавить в autoexec.CFG. Итак, как вы можете видеть ниже, это лучшие команды для использования в Dota 2, и большинство команд используются игроками Pro Dota 2, такими как Funn1k и Arteezy. Если вам нужны их файлы, вы можете просто загрузить файлы autoexec.cfg, используемые этими профессиональными игроками, или вы можете создать для себя новый файл и использовать все, что захотите.

Вот список консольных команд Dota 2, в которых были ВСЕ команды.

Лучшие консольные команды Dota 2

А пока я напишу ниже о консольных командах, которые Na’Vi Funn1k и Arteezy используют во время игры.Я также объясню, что на самом деле делают эти команды и почему мы должны их использовать.

Файл Autoexec.cfg от Arteezy

Также вот старый cfg от Arteezy (не знаю, актуален ли он сейчас):

Скопируйте команды после строки ниже.


con_enable «1» // Включает консоль

cl_cmdrate «60» // Количество обновлений, отправляемых на сервер в секунду

cl_updaterate «60» // Количество обновлений, полученных с сервера в секунду

скорость «80000» / / Общее количество доты полосы пропускания может использовать

cl_interp «0» // Больше сетевого материала ниже…

cl_interp_ratio «1»

cl_smooth «1»

cl_smoothtime «0.01 ”

cl_lagcompensation« 1 »

cl_pred_optimize« 2 »

dota_camera_disable_zoom« 1 »// Невозможно увеличить камеру

dota_disable_range_finder 0 // Показывает, что заклинания находятся в пределах диапазона каста 9000_minize 9000_minize целевой области / / Изменяет размер героев на миникарте

dota_minimap_misclick_time «0» // Убирает задержку перед разрешением ввода на миникарте

dota_health_hurt_decay_time_max «0» // Время исчезновения при нанесении / получении урона сокращено до мгновенного

dota_decalth6_h dota_health_hurt_delay «0»

dota_pain_decay «0»

dota_pain_factor «0»

dota_pain_multiplier «0»

dota_pain_fade_rate «0»

9_delay «0»

898682 1232.745483 982.072876 »// Верхняя руна, привязка камеры

привязка« F2 »« dota_camera_setpos 3035.773438 -2972.680176 966.072937 »// Руна бота, привязка камеры


Скопируйте до строки выше.

Это старые команды для активации сетевой информации, которые использовали Funn1k и Arteezy. Но эти команды больше не требуются. Теперь в Dota 2 Reborn вы можете активировать его в настройках Dota 2. Просто перейдите в Dota 2 >> Настройки >> Параметры >> Проверить отображение сетевой информации .См. Изображение ниже для облегчения понимания.

Funn1k autoexec.cfg (Источник)

Копировать команды после строки ниже.


rate «80000» - Максимальное количество байт / сек, которое хост может получать данные.

cl_updaterate «30» - Количество пакетов обновлений, запрашиваемых с сервера, в секунду.

cl_cmdrate «30» - максимальное количество командных пакетов, отправляемых на сервер в секунду.

cl_interp «0,05» - Устанавливает величину интерполяции (ограниченную снизу настройками интерполяции сервера).,

cl_interp_ratio «2» - Устанавливает величину интерполяции.

cl_smooth «1» - сглаживание исходной точки обзора / глаза после ошибок прогнозирования.

cl_smoothtime «0» - сгладить вид клиента после ошибки прогноза за это количество секунд.

mat_vsync «1» - Принудительная синхронизация с обратным ходом по вертикали.

r_screenspace «1» - сглаживание включено.

con_enable «1» - консоль активирована.

fps_max «120» - Ограничитель частоты кадров.

cl_showfps «1» - Отрисовка счетчика кадров в секунду.FPS ( кадров в секунду ).

retry - повторить попытку подключения к последнему серверу.

volume «0,5» - объем игры.

snd_musicvolume «0» - громкость музыки.


Скопируйте до строки выше.

См. Инвентарь, как старый Dota

, используйте консольную команду «dota_import_steam_inventory_layout» без кавычек, чтобы импортировать размещение инвентаря Source 1 как есть. Это означает, что то, как вы разместили свои предметы в Source 1 Dota 2, будет добавлено в ваш Dota 2 Reborn.

.

Режимы Dota и руководства по командам Dota

Команды Dota и Режимы Dota будут размещены здесь. Это руководство основано на Руководстве по командам Dota-Allstars, составленном Lookyman, часть заслуги принадлежит ему.

I. Основная информация об игровых режимах

* Требуемый игровой режим должен быть введен до отметки 15 секунд, в противном случае выбирается Обычный режим.
* Первый доступный игрок может ввести эти команды, проверяя список игроков сверху.
* Игровые режимы вводятся в одной строке без разделения, например «-dmaridsc», или, альтернативно, их можно вводить отдельно друг от друга, с дефисом (-) перед каждым режимом, например «-dm - ar -id -sc ".
* Порядок не имеет значения. Игра справится с этим или (в случае неправильной комбинации) даст вам еще один шанс.

II. Основные режимы игры
* Можно выбрать только один из них.
* Также перечислены несовместимые дополнительные игровые режимы.

Нормальный режим -> Выбор команды

Этот режим выбирается, когда в течение первых 15 секунд нет другого основного режима. Игроки могут выбирать героев из таверн, принадлежащих их команде.

-allpick / -ap -> All Pick

Каждый может выбрать героев из любой таверны.

-allrandom / -ar -> All Random

Каждый игрок получает случайного героя из любой таверны.

Несовместимо с: реверсивным режимом.

-teamrandom / -tr -> Team Random

Каждый игрок получает случайного героя из таверн, принадлежащих его команде.

Несовместимо с: реверсивным режимом, Death Match.

-moderandom / -mr -> Mode Random

Случайным образом выбирает режим из All Random, All Pick, Team Random и Normal.

Несовместимо с: реверсивным режимом, Death Match.
Добавлено в v6.28

-leaguemode / -lm -> League Mode

Все формы рандома отключены. Требуется 10 игроков. Команды будут выбирать в чередующемся порядке: одна команда выбирает одного героя, другая команда выбирает двух героев, первая команда выбирает двух героев, другая команда выбирает двух героев, первая команда выбирает своих двух последних героев, другая команда выбирает своего последнего. герой (1-2-2-2-2-1). У каждого игрока есть 20 секунд, чтобы выбрать героя, в противном случае он выбирается случайным образом. Команда, у которой есть первый выбор, случайна.Можно выбирать только с вашей стороны, Sentinel или Scourge, как в нормальном режиме.

Несовместимо со: всеми дополнительными игровыми режимами, кроме перемешивания игроков, без замены, без перестановки, ландшафта снега.
Добавлено в v6.21

-randomdraft / -rd -> Random Draft

Для активации требуется равное количество игроков в каждой команде. Goblin Techies нельзя выбрать в этом режиме. 22 случайных героя выбираются из всех доступных и помещаются в 2 таверны (доступны как для Sentinel, так и для Scourge). Остальные герои удаляются, как и остальные таверны.Затем игроки выбирают из этих двух таверн, как в режиме лиги.

Несовместимо с: Mirror Match, Death Match, All Agility, All Intelligence, All Strength, Same Hero, Reverse Mode.
Добавлено в v6.39

-voterandom / -vr -> Vote Random

Будут выбраны три случайных матча, и каждый игрок может проголосовать за то, какой из трех матчей он хочет, используя -option 1/2 / 3. Для активации требуется равное количество игроков в каждой команде.
Дополнительные сведения см. В разделе V. Случайные команды голосования.

Несовместимо с: Mirror Match, Death Match, All Agility, All Intelligence, All Strength, Same Hero, Reverse Mode.
Добавлено в v6.35.

-extendedleague / -xl -> Extended League

Все формы случайного выбора отключены. Требуется 10 игроков. Оба лидера команд (синий для Sentinel, розовый для Scourge) могут удалить до 3 героев каждый из всех доступных в течение первых 20 секунд. Затем игроки выбирают из оставшихся героев, как в режиме лиги.

Несовместимо со: всеми дополнительными игровыми режимами, кроме перемешивания игроков, без замены, без перестановки, ландшафта снега.
Добавлено в версии 6.43.

-singledraft / -sd -> Single Draft

Каждому игроку представлены три случайных героя, один ловкость, одна сила и один интеллект. Затем они могут выбрать один из них, используя команды -pick 1/2/3.
Прочтите VI. Раздел «Команды одиночного черновика» для дополнительной информации.

Несовместимо с: Mirror Match, Death Match, All Agility, All Intelligence, All Strength, Same Hero, Reverse Mode.
Добавлено в v6.50.

-captainsmode / -cm -> Captains Mode
Синий и розовый - капитаны команд.Вы начинаете с чередования 1/1/1 в фазе запрета. Каждый капитан снимает до 4 героев. Отсутствие времени не приводит к случайному бану героя. После этого вы входите в фазу выбора 1/2/2 /. Каждый капитан выбирает героев, которых будет использовать его команда. Если в какой-то момент у вас закончится время, вы начнете использовать свое дополнительное время. Если вы закончите и находитесь в фазе выбора, вы получите случайного героя. Крипы появляются через 90 секунд после завершения фазы выбора. Сразу после завершения фазы выбора героев 5 героев вашей команды помечаются галочкой (стиль RD), позволяя игрокам вашей команды выбирать, кем они хотят быть.Капитан, который запускает этот процесс, является случайным. Если вы хотите дать старт Стражу, введите -cm 1 или -cm 2 для Scourge после входа в игровой режим. Время запрета составляет 40 секунд, время выбора - 60 секунд, а дополнительное время - 45 секунд.
Прочтите VII. Раздел КОМАНДЫ РЕЖИМА КАПИТАНА для получения дополнительной информации.

Несовместимо со: всеми дополнительными игровыми режимами.
Добавлено в v6.55

-cd / -CaptainsDraft -> Captain Draft

24 героя случайным образом распределяются по кругу (как RD).24 состоят из 8 случайных героев Интеллекта / Ловкости / Силы, отсортированных в указанном порядке по кругу.

У каждой команды есть общий банк времени 2,5 минуты. Синий / Розовый набирают героев для всей своей команды.

Синий и Розовый начинаются с чередования банов 1/1/1/1.
Затем он переходит в драфт героя 1/2/2/2/2/1.

Как только герой выбирает / банит героя, он немедленно переключается на другого игрока.
Ваш таймер отображается в режиме чтения, когда наступает ваша очередь действовать.

Несовместимо со: всеми дополнительными игровыми режимами.
Добавлено в v6.60

III. Дополнительные режимы игры

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

-deathmatch / -dm -> Death Match

Если вы умрете, вам нужно будет выбрать нового героя, как только вы сможете возродиться. Если был выбран случайный основной режим, вы получите героя в соответствии с этим случайным режимом. Команда проигрывает, если у нее 44 смерти (вы можете изменить это значение с помощью команды -lives #), или если ее древний объект уничтожен.
Прочтите VI. Раздел команд Death Match для получения дополнительной информации.

Несовместимо с: All Intelligence, All Agility, All Strength, Reverse Mode, Same Hero, Mirror Match.
Добавлено в v6.21

-reverse / -rv -> Reverse Mode

Игроки Стража выбирают команду Плети, а игроки Плети выбирают команду Стража. Для активации требуется равное количество игроков в каждой команде.

Несовместимо с: Death Match, Same Hero.
Добавлено в v6.38

-mirrormatch / -mm -> Mirror Match

Требуется, чтобы в обеих командах было одинаковое количество игроков. Через одну минуту герои каждой пары (синий - розовый, бирюзовый - серый, фиолетовый - голубой, желтый - темно-зеленый, оранжевый - коричневый) заменяются одним из двух героев. В конце концов, у каждой пары игроков один и тот же герой, и у обеих команд одинаковый бой.

Несовместимо с: Same Hero, Death Match.
Восстановлено в v6.30

-duplicatemode / -du -> Duplicate Mode

Один и тот же герой может быть выбран или выбран несколькими игроками.
Восстановлено в v6.33

-shuffleplayers / -sp -> Shuffle Players

Команды будут перемешаны в случайном порядке. Сюда входит, какой у вас цвет и на чьей вы стороне. Также по возможности выравнивает количество игроков в обеих командах.
Добавлено в v6.29

-samehero / -sh -> Одинаковый герой

У всех игроков будет герой, выбранный синим цветом.

Несовместимо с: Mirror Match, Reverse Mode, Death Match.
Добавлено в v6.33

-allagility / -aa -> All Agility

Разрешены только герои Agility.

Несовместимо с: All Strength, All Intelligence, Death Match.
Добавлено в v6.28

-allintelligence / -ai -> All Intelligence

Разрешены только герои с интеллектом.

Несовместимо с: All Strength, All Agility, Death Match.
Добавлено в v6.28

-allstrength / -as -> All Strength

Разрешены только герои с силой.

Несовместимо с: All Agility, All Intelligence, Death Match.
Добавлено в v6.28

-itemdrop / -id -> Item Drop

Когда вы умираете, из случайной ячейки в вашем инвентаре выпадает все, что в ней находится. Если этот слот пуст, ничего не происходит. Умирая, вы больше не теряете деньги.

-easymode / -em -> Easy Mode

Башни слабее, опыт набирается быстрее, и вы получаете в два раза больше периодического золота (16 каждые 7 секунд, то есть). Пожалуйста, обратитесь к Руководству Nova по опыту для получения значений опыта и к Руководству Y0UR All about Towers для получения данных о башнях.
Переименовано из -shortmode / -sm в v6.33

-nopowerups / -np -> No Powerups

Руны не появляются.

-supercreeps / -sc -> Super Creeps

Время от времени суперкрип может появиться для каждой стороны и следовать за крипами на любой линии. Самый слабый суперкрип - Осадный Голем, немного сильнее - Страшная рыба, а Древняя Гидра - самый сильный.
Простите за общую неясность, над этим работаю.

-onlymid / -om -> Only Mid

То же, что -ntnb, но башни в верхней и нижней полосах неуязвимы.
Добавлено в v6.42

-notop / -nt -> No Top

На верхней (левой) полосе не появляются крипы. Башни там все еще уязвимы.
Добавлено в v6.44

-nomid / -nm -> No Middle

На средней линии не появляются крипы. Башни там все еще уязвимы.
Добавлено в версии 6.44

-nobot / -nb -> No Bottom

На нижней (правой) полосе не появляются крипы. Башни там все еще уязвимы.
Добавлено в v6.44

-rangeonly / -ro -> Range Only
Разрешены только дальние герои.

Несовместимо с: Melee Only, Death Match.
Добавлено в v6.58

-meleeonly / -mo -> Только рукопашный бой
Разрешены только герои ближнего боя.

Несовместимо с: Range Only, Death Match.
Добавлено в v6.58

-cp / -capturepoint -> Режим точки захвата

Игра с включенным режимом точки захвата. Подробнее о том, как это работает, читайте в этом посте.
Добавлено в v6.67


IV.Третичные игровые режимы

* Можно выбрать любое их количество.
-noswap / -ns -> No Swap

Команды обмена не работают.
Прочтите VIII. Для получения дополнительной информации смените раздел команд.
Добавлен в v6.44

-norepick / -nr -> No Repick

-repick Команда не работает.
Добавлено в версии 6.48.

-terrainsnow / -ts -> Terrain Snow

Преобразует текущую местность в снежную. Это очень экспериментальный механизм, и он по-прежнему остается незавершенным в отделе визуализации.Команда «-terrain» или «-terrain default» возвращает ландшафт в нормальное состояние.
Добавлен в v6.48 как игровая команда -terrain snow
Переименован в v6.48b

-poolingmode / -pm -> Pooling Mode
Этот режим позволяет объединять (разделение предметов между игроками). Список того, как влияют на предметы, когда этот режим не активирован, см. В Thrall729's Pooling Items List.
Добавлено в v6.52

-observerinfo / -oi -> Observer Info
Отображает дополнительную информацию для игровых трансляторов / наблюдателей при наведении курсора на героев игроков.
Добавлено в v6.52
Начиная с версии 6.60, -oi по умолчанию включен в играх-наблюдателях. Вместо этого использование -oi отключит его.

-miniheroes / -mi -> Mini Heroes
Герои будут вдвое меньше обычного размера.
Добавлено в v6.54

-fastrespawn / -fr -> Fast Respawn
Заставляет респаун занимать вдвое меньше времени.
Добавлено в v6.55

-rs / -randomside -> Случайная сторона
Случайным образом выберите сторону, с которой начинает ваша команда.Это не перемешивает игроков. Он просто случайным образом размещает команду в качестве Стража или Плети.
Добавлено в версии 6.60

-zm / -zoommode - Режим масштабирования (только для наблюдателя)
Вытягивает камеру, чтобы одновременно видеть больше действий.
Добавлено в v6.67

V. Для веселых игровых режимов

* Необходимо вводить отдельно, но все же до отметки 15 секунд.

-wtf -> What The Fuck Mode

По сути, все способности героев и предметов не имеют кулдаунов и стоят 0 маны.Когда способность используется, все кулдауны сбрасываются, и ваша мана восстанавливается до максимума. Некоторые срабатывающие способности будут выглядеть так, как будто у них нет времени восстановления, но они не будут иметь никакого эффекта до тех пор, пока не пройдет время, в течение которого они обычно охлаждались (один из примеров - Заимствованное время).
Добавлено в v6.36

VI. Команды голосования в случайном порядке

* Можно ввести в течение 30 секунд после выбора режима случайного голосования.
* Если не выбрано ни одного варианта, он будет выбран случайным образом. Если голосование проводится вничью, из всех трех вариантов случайным образом выбирается один вариант, независимо от количества голосов.
* Необходимо вводить отдельно.
* Вы можете использовать только один из них, т.е. вы не можете изменить свое решение после того, как проголосовали.

-вариант 1 -> Вариант 1

Проголосуйте за первый представленный матч.
Добавлено в v6.35

-вариант 2 -> Второй вариант

Проголосуйте за второй представленный матч.
Добавлено в v6.35

-вариант 3 -> Вариант 3

Проголосуйте за третий представленный матч.
Добавлено в v6.35

VII. Команды режима капитана
* Необходимо вводить отдельно.

-cm 1 -> Sentinel start
Sentinel captain начинает процесс сбора.
Добавлено в v6.55
-cm 2 -> Scourge start
Scourge captain начинает процесс сбора.
Добавлено в v6.55

VIII. Команды Death Match

* Первый доступный игрок может ввести эти команды, проверяя список игроков сверху.
* Можно ввести до 15 секунд после выбора режима Death Match.
* Необходимо вводить отдельно.

-nd -> No Death Timer

Когда герой умирает, времени возрождения не будет.
Добавлено в v6.42.

-lives # -> Максимальное количество жизней

Устанавливает количество жизней у каждой стороны. Замените # желаемым числом. Минимум 10, максимум 44.
Добавлено в v6.42

IX. Игровые команды

* Может использоваться многократно в течение всей игры (за исключением).
* Доступно всем.

-matchup / -ma -> Показать матч

Показывает, какой противник контролирует какого героя, и его уровень. Также показывает время, когда игрок покинул игру (если он / она).
Добавлено в v6.13
-ma добавлено в v6.21
Поддержка уровней добавлено в v6.39
Поддержка времени добавлена ​​в v6.45

-movespeed / -ms -> Display movepeed

Отображает скорость передвижения вашего героя.
-ms добавлено в v6.21

-creepstats / -cs -> Показать статистику крипов

Показывает, сколько крипов вы убили, а также сколько вы запретили.
Добавлено в v6.28.

-cson -> Show Creep Stats Scoreboard

Показывает статистику Creep в заголовке мультиборда по умолчанию.
Переименовано из -csboardon в v6.33.

-csoff -> Hide Creep Stats Scoreboard

Скрывает статистику крипов из заголовка мультиборда по умолчанию.
В версии 6.33 переименовано из -csboardoff.

-disablehelp -> Отключить помощь.

Делает испытание веры союзника Чена неспособным телепортировать вас. Делает союзного Фуриона неспособным наложить на вас Sprout. Делает союзного Предвестника неспособным наложить на вас Astral Imprisonment.
Добавлено в v6. 19b
Поддержка Astral Imprisonment добавлена ​​в v6.38
Поддержка Sprout добавлена ​​в v6.39

-enablehelp -> Включить справку

По умолчанию включена. Отключает -disablehelp.
Добавлено в v6.19b

-unstuck -> Unstuck

Каналы на 60 секунд, затем перемещает вашего героя обратно на вашу базу.

-recreate -> Recreate

Доступно для N'aix, Terrorblade, Dragon Knight и Banehallow. Используйте, когда находитесь рядом с фонтаном, если вы потеряли контроль над своим героем (проблема метаморфозы). 200 секунд ченнелинга.Также можно использовать с Leshrac, хотя ему это больше не нужно.
Добавлен в v6.05
Ошибка Leshrac исправлена ​​в v6.48
IceFrog сказал мне, что, за возможным исключением N'aix, эта команда, вероятно, сейчас избыточна, особенно после ремейка v6.49 N'aix.

-showmsg -> Показывать сообщения о смерти героя

По умолчанию включено. Вы видите текстовое сообщение, когда герой умирает.
Переименовано с -unhidemsg

-hidemsg -> Скрыть сообщения о смерти героя

Делает так, чтобы текст не отображался, когда герой умирает.
Добавлено в v6.35

-showdeny -> Показывать уведомление о запрете

Включено по умолчанию для наблюдателей.
Каждый раз, когда вы, союзник или оппонент делаете отказ, вы видите восклицательный знак цвета игрока, который отказал в крипе.
Добавлено в v6.39

-hidedeny -> Скрыть уведомление о запрете

По умолчанию включено. Отключает -showdeny.
Добавлено в v6.39

-погода, дождь / снег / лунный свет / ветер / случайный / выкл. -> Погодные эффекты

Делает желаемую погоду.
-погода случайным образом меняет погоду каждые 5 минут.
-weather off отключает погодные эффекты.
-weather rain / snow / off добавлено в v6.39
-weather moonlight / wind / random добавлено в v6.44

-denyinfo / -di -> Show deny info

Устанавливает -showdeny и -cson.
Добавлено в v6.41

-deathon / -don -> Показать доску таймера смерти

По умолчанию включено. Отображает таймер смерти, когда герой умирает, который показывает, сколько времени осталось до возрождения.
Добавлено в v6.42

-deathoff / -doff -> Скрыть табло времени смерти

Отключает -deathon.
Добавлено в версии 6.42.

-roll # -> Roll

Отображает случайное целое число от 0 (включительно) до #. Замените # числом от 0 до 2000.
Добавлено в v6.44

-rollhero / -rh -> Отображать имя цапли в случайном порядке.
Это не имеет никакого фактического функционального эффекта в игре, просто небольшая простая команда, которую некоторые игроки хотели для своих игровых групп.
Добавлено в версии 6.60

-hideheronames / -hhn -> Скрыть имена героев

Скрывает класс героя, отображаемый за именем игрока в чате.Если вы хотите кого-то подавить, используйте сначала это, иначе команда / squelch не сработает.
Добавлено в v6.45

-mute -> Отключить звуки убийства

Отключает звуки убийства.
Добавлено в v6.48

-случайно -> Случайно

Дает вам случайного героя в режимах, где вы должны выбрать его. Не требует золота.-Random Интеллект / Сила / Ловкость Это дает вам на 100 бонусных золота меньше, чем 250 бонусных золотых, которые дает вам обычный -случайный. Добавлено в v6.60

-repick -> Repick

Дает вам нового героя вместо того, который у вас уже есть, по цене.Можно использовать только один раз и только в первую минуту, но не в режиме лиги. Repick обычно стоит 100 золотых, но в -ar и -tr он стоит 400 золотых. Если вы играете в случайном режиме игры, вы получите нового случайного героя. Если вы играете в режиме выбора игры, вам нужно будет выбрать нового героя.
Невозможно использовать, если включен режим No Repick.

-gameinfo -> Информация об игре

Отображает некоторую информацию о различных режимах игры, которые используются.

-afk -> AFK Info

Показывает, как долго каждый игрок неактивен.
Добавлено в v6.50

-kickafk # -> Kick AFK Players

Удаляет игроков, которые неактивны более 10 минут. Замените # на номер неактивного игрока.
Добавлено в v6.50

-apm -> Действия в минуту

Отображает APM.
Добавлено в v6.50.

-courier -> Значок курьера.

Переключает отображение значка неработающего курьера.
Добавлено в v6.50

-clear -> Очистить экран

Удаляет все текстовые сообщения игры с экрана.
Добавлено в v6.50.

-invokelist -> Список заклинаний Invoker.

Отображает список заклинаний Invoker.
Добавлено в v6.50

-rollon -> Прокрутка текста на
По умолчанию включена. Когда кто-то использует команду -roll, отображается текст.
Добавлено в v6.52

-rolloff -> Свернуть текст с
Никакой текст не будет отображаться для вас, когда кто-то использует команду -roll.
Добавлено в v6.52

-music # -> Play music
Воспроизводит указанную музыку.Для их использования у вас должна быть включена музыка. Замените # одним из следующих: off, random, nightelf1, nightelf2, nightelf3, human1, human2, human3, orc1, orc2, orc3, undead1, undead2, undead3, other1, other2, other3, other4, other5.
Добавлено в v6.52.

-водный красный / синий / зеленый / случайный / по умолчанию -> Акварель
Настраивает цвет воды для локального игрока.
Добавлено в v6.54
Начиная с версии 6.60 -water теперь поддерживает любые цветовые комбинации с использованием формата -water r g b

-itemswap x y -> Поменять местами инвентарь
Поменять местами предметы в слотах инвентаря.В первую очередь для борьбы с невозможными предметами или предметами в перезарядке. x и y соответствуют местоположениям цифровой клавиатуры.
Эта команда временно отключена.
Добавлено в v6.55

-quote # / random -> Play hero quote
Замените # на число. Воспроизводит цитату героя.

-quote random воспроизводит случайную цитату героя.
Поддерживаемые герои: Witch Doctor, Nightstalker, Alchemist, Silencer, Sniper, Rhasta, Ogre Magi, Techies, Blademaster и Panda.
Добавлено в v6.55 - WD, Nightstalker, Alchemist, Silencer, Sniper и Rhasta
Ogre, Techies, Blademaster и Panda добавлены в v6.57

-rickroll -> Rick Roll
Вы можете использовать этот макс. 10 раз.
Добавлено в v6.57b

-mc -> Multicast Counter
Показывает скорость многоадресной рассылки любого Ogre Magi на карте.
Добавлено в v6.58

-bonus -> Показать бонус опыта и золота
Начиная с версии 6.55, герои получают небольшой бонус опыта и золота за убийства героев. Эта команда показывает, сколько вы уже получили.
Добавлено в v6.55

-tips -> Показать подсказки
Если вы введете команду, игра выдаст вам 5 указателей (на разных этапах игры), уникальных для каждого героя, чтобы помочь вам получить основы вниз. Они не предназначены для того, чтобы давать указания о том, как играть героем, а скорее как простые советы, если вы новичок в этом герое.
Добавлено в версии 6.60

X. Команды обмена

* Это всего лишь другие игровые команды, но из-за недавних изменений в системе обмена они заслуживают отдельного раздела.
* Можно использовать несколько раз, но только до отметки 90 секунд.
* Невозможно использовать, если включен режим без замены.

-swaphero / -swap -> Показать номера героев

Показывает список героев, доступных для обмена, с их номерами, которые затем можно использовать в команде -swap.
-swaphero (старая версия) добавлено в v6.30
-swap добавлено в v6.46

-swap 1/2/3/4/5 -> Swap

Меняет вашего героя на героя другого игрока. Вы можете использовать эту команду несколько раз и даже поменяться местами с несколькими игроками одновременно.Номер игрока, с которым вы хотите поменяться местами, можно узнать с помощью команды -swaphero / -swap.
Добавлено в версии 6.46.

-swapcancel -> Отменить запросы на обмен.

Отменяет все ваши запросы на обмен. Это включает как просьбы, сделанные вами, так и вашими союзниками.
Добавлено в версии 6.46

-swapall -> Swap All

Отправляет запросы на обмен всем вашим союзникам. Также отключает -swapcancel.
Добавлено в v6.50

XI. Специальные команды для героев

* Можно многократно использовать в течение всей игры.

-fleshstr / -fs -> Flesh Heap Strength

Используется только Pudge. Показывает, сколько силы он приобрел благодаря своей способности Flesh Heap.
Добавлено в v6.42

-ha -> Hook Accuracy
Используется только Pudge. Показывает точность его мясного крючка. Учитываются только вражеские крючки (те, которые поражают врагов Pudge).
Добавлено в v6.55
Не учитывает союзные крючки, начиная с v6.58

-mines -> Land Mine Counter
Используется только Goblin Techies.Показывает, сколько наземных мин они установили.
Добавлено в v6.58

-aa -> Arrow Accuracy
Используется только Жрицей Луны. Показывает процент попаданий Стрелы Элуны Добавлено в v6.60-gg -> Жадность гоблинов Может использоваться только алхимиком. Показать бонусное золото, полученное от Goblins Greed

XII. ТЕСТОВАЯ КОМАНДА
* Первый доступный игрок может ввести эту команду, проверив список игроков сверху.
* Необходимо вводить отдельно, но до отметки 15 секунд.
* Может использоваться только в мультиплеере.

-test -> Test Mode
Позволяет использовать команды одиночной игры в многопользовательской игре для облегчения всестороннего тестирования.
Добавлено в v6.48

XIII. Система Anti-MapHack

* Первый доступный игрок может ввести эти команды, проверяя список игроков сверху.
* Необходимо вводить отдельно, между 15 и 60 секундами игрового времени.

-ah -> Anti-MapHack

Включает защиту от взлома карты.
Добавлено в v6.50

XIV. Команды одиночной игры

* Может использоваться только в одиночной игре или когда включен тестовый режим.
* Можно использовать повторно в течение всей игры.

-lvlup -> Повышение уровня

Повышает уровень вашего героя на 1 уровень.
Добавлено в v6.38

-refresh -> Refresh

Обновляет время восстановления всех ваших предметов и навыков. Аналогично использованию Refresher Orb, за исключением того, что он работает для всех ваших навыков и предметов. Также восполняет вам здоровье и ману.
Добавлено в v6.38

-spawncreeps -> Спаун крипов

Создает крипов как для Sentinel, так и для Scourge. Не влияет на нормальное время появления крипов.
Добавлено в v6.38.

-powerup -> Spawn runes

Spawes rune. Не влияет на нормальное время появления рун. Обратите внимание, что руна не появится, если она уже есть или была менее 5 секунд назад.
Добавлено в v6.42

-neutrals -> Создать нейтралов

Создает нейтральных крипов во всех лагерях, у которых нет юнитов поблизости.Обратите внимание, что трупы считаются юнитами. Не влияет на нормальное время появления нейтральных крипов.
Добавлено в v6.42

-kill -> Suicide

Убивает собственного героя.
Добавлено в v6.38

-gold # -> Добавить золото

Дает вам количество золота, которое вы вводите. Замените # на количество золота.
Добавлено в v6.38

-noherolimit -> Несколько героев
Позволяет получить несколько героев, в первую очередь для видеоредакторов, которые это запрашивали.Необходимо ввести в первые 15 секунд игры.
Добавлено в v6.52

-killall -> Убить крипов
Убить всех крипов.
Добавлено в v6.52

-killsent -> Kill Sentinel creeps
Убивает всех Sentinel creeps.
Добавлено в v6.52

-killscourge -> Kill Scourge creeps
Убивает всех Scourge creeps.
Добавлено в v6.52

-time # -> Установить время
Устанавливает дневное время. Замените # числом.
Добавлено в v6.52

-trees -> Восстановить деревья
Мгновенно возрождает все мертвые деревья.
Добавлено в версии 6.55.

Dota-Allstars: режимы и руководства по командам.
Последнее обновление: Dota-Allstars 6.67c

.

Создание бота DotA2 с использованием машинного обучения. Проблема | Мусаши Шредер

Разработка ресурсоэффективного алгоритма машинного обучения

Состав ботов

В декабре 2018 года создатели AI Sports провели презентацию и представили школе соревнование по искусственному интеллекту DotA2. DotA (Defense of the Ancients) - это игра, в которую играют две команды, каждая из которых состоит из пяти игроков, которые могут выбирать из более чем сотни разных героев. Цель игры - уничтожить базу противников, защищая при этом свою.Каждый герой имеет доступ как минимум к четырем уникальным способностям и может покупать предметы, которые также имеют разные способности. Предметы покупаются за золото, полученное за разрушение построек противника или за победу над игроками или крипами, юнитами NPC (неигровыми персонажами), которые появляются, чтобы помочь защищать и атаковать базы.

Сложность игры определяется не только составом персонажей, но и постоянно меняющимся состоянием карты. В играх с полной информацией, таких как шахматы или го, от игроков не утаивают никакой информации, что позволяет им видеть все возможные действия на доске в любой момент времени.Карта DotA включает в себя «туман войны», который скрывает любую часть карты, которую не видит игрок или его товарищи по команде. Способности каждого героя также имеют «кулдауны» - после того, как игрок использует способность, он не может использовать ее снова в течение определенного времени - и используют ману в качестве ресурса. Хотя игрок имеет доступ к этой информации о своих союзниках, он не имеет этой информации о противнике и должен принимать ее во внимание при участии в боях.

Правила соревнований заключались в том, чтобы запрограммировать полную команду из пяти ботов для игры в Captain’s Mode.Captain’s Mode устанавливает одного члена каждой команды в качестве капитана, давая им возможность выбирать героев для остальной команды, а также «запрещать» или выбирать героев, которых команда противника не может использовать. Чтобы избежать бана всех наших персонажей, нам нужно было запрограммировать как минимум шестнадцать из них. Наше ограничение, установленное Морисом, сотрудником 42 из Кремниевой долины, заключалось в том, что мы не могли использовать встроенные «желания», систему, обеспечивающую поведение по умолчанию для выполнения бота, предоставленную Valve. Вместо использования поведения ботов по умолчанию нам было поручено написать код снизу вверх.API для DotA2 написан на Lua и позволяет игрокам создавать собственных ботов. Первоначально соревнование было разработано для использования C ++ API, написанного

. Обзор поля битвы DotA с метками, изображение из https://dota2.gamepedia.com/Map

создателей AI Sports, но из-за «сложностей» наша команда вместо этого использовала Lua.

Изучение Lua и API

Чтобы создать бота, мы сначала прочитали API и искали другие примеры, созданные пользователями.API DotA был доступен в начале 2016 года, хотя не получал каких-либо значимых обновлений примерно с октября 2017 года. Первым ресурсом, который мы использовали, было руководство по началу работы, написанное RuoyuSon. RuoyuSon объяснил, где найти другие ресурсы и как запускать игры, а также рассказал о полезных консольных командах для процесса тестирования. Valve также предоставляет небольшие примеры сценариев ботов в каталоге игр, которые можно использовать для начала работы. С помощью API и других примеров мы наивно полагали, что сможем создать бота и получить грубую рабочую версию кода в течение недели.

Первым испытанием было выбрать героев, которых мы хотели использовать, и начать игру. В то время мы не знали, что если код для выбора героя содержит ошибку, вся игра вылетит, ничего не отображая. Пример, предоставленный Valve, можно использовать для быстрого создания кода выбора героя для режима All Pick, но его нельзя использовать для режима Captain’s Mode. Чтобы выбрать героев, мы читаем другие примеры кода. Хотя наша текущая версия бота позволяет игрокам-людям играть против него и вместе с ним, первоначальная версия предназначалась только для игры против другого бота в Captain’s Mode.Наконец, получение простой версии выбора героя заняло чуть больше недели, но с тех пор была изменена для поддержки режима All Pick и игроков-людей.

После запуска игры мы начали экспериментировать, заставляя героев ходить к локациям на карте. Мы быстро узнали, что незнание языка Lua затрудняло написание и понимание других примеров кода. Хотя мы могли заставить ботов ходить в определенные места или покупать предметы, мы часто допускали синтаксические ошибки, и поиск ошибок в коде занимал значительное время.После разочаровывающих двух недель нам потребовалось время, чтобы выучить язык, прежде чем снова приступить к работе с API.

Пока приближался турнир, мы все еще разбирались в Lua и боролись за понимание API. Наши герои переместились в правильные места, и они могли сражаться с вражескими миньонами и противниками, хотя и плохо, но они никогда не отступали, что приводило к смерти за смертью. Даже против самого простого бота по умолчанию, пассивного, мы не смогли победить. Мы реализовали грубую функцию отступления - просто приказывали ботам бежать на свою базу, если они получили слишком большой урон - это помогло, но оставляло желать лучшего.Нам удавалось постоянно побеждать пассивного бота, но обычно заканчивали игру с почти 100 смертельными случаями на нашей стороне, и нам посчастливилось увидеть две смерти на противниках.

Следующим шагом, теперь, когда была заложена основа для поведения ботов, было начать индивидуализировать каждого бота, чтобы они могли использовать свои способности. Каждый бот использует свои навыки в зависимости от условий, что позволяет им сражаться с противником. В этот момент стало проявляться отсутствие у нас опыта в DotA - хотя боты и могли использовать навыки, они не использовали их оптимально просто потому, что мы не знали, что является оптимальным.Мы часто спрашивали совета у более опытных людей и постепенно делали бота сильнее. Наконец, мы смогли победить пассивного бота с положительным счетом. Мы пытались преодолеть легкий уровень сложности, но безуспешно. Разница между ними была значительной, и нам нужно было реализовать больше моделей поведения, чтобы победить.

Конечный автомат

До этого момента весь код был написан как предопределенные действия для выполнения каждым ботом. Сложность DotA постепенно делала все труднее и труднее различать, какие действия предпринимать и когда.Сражаться в этом случае или убегать? Когда нам следует сосредоточиться на борьбе с крипами? Хотя нам удавалось последовательно преодолевать пассивный уровень сложности, мы понимали, что легкий будет серьезным препятствием. Мы начали обсуждать возможные варианты и остановились на Государственном автомате.

Пример конечного автомата

При изменении поведения бота стало невозможно четко разделить, когда он будет выполнять действия. Они были настолько тесно переплетены, что корректировка одного повлияла бы на производительность другого, и ни один из вариантов поведения не работал особенно хорошо.Мы также не смогли аккуратно включить больше вариантов поведения, не нарушая другие части кода. Создав конечный автомат, мы смогли разделить каждое поведение, используя средневзвешенные значения, чтобы решить, какое из них будет наиболее оптимальным в любом случае игры. Код каждого бота запускается каждый кадр, что позволяет проводить постоянные вычисления и присваивать каждому поведению значение в качестве веса. Предполагая, что мы хорошо запрограммировали бота, теперь он может сам решать, что ему делать, в зависимости от состояния игры.

На этом этапе мы смогли выделить каждое поведение в отдельный код, разбитый на компоненты и условия.Компоненты - это фрагменты информации, которые всегда необходимы для расчета поведения, тогда как условия могут добавлять или вычитать вес только при определенных обстоятельствах. Разделение кода позволило нам улучшить работу каждого поведения - раньше каждое поведение зависело от другого, но, используя конечный автомат, мы выполняли только те части кода, которые нам были нужны, и только тогда, когда это было необходимо.

В то время как некоторые из нас настраивали конечный автомат, мы также продолжали улучшать версию без конечного автомата до такой степени, что мы смогли преодолеть сложность Easy.Мы снова увидели 100 смертей на табло, но на нашей стороне будет больше убийств и мы будем выигрывать. Код из версии, не относящейся к конечному автомату, легко вставляется в нашего нового бота, что позволяет нам продолжать работу без каких-либо значительных задержек.

Одним из преимуществ конечного автомата была модульность системы. До этого общее поведение бота состояло из двух файлов, в которых были написаны необходимые комментарии, чтобы понять, какая часть кода просматривается - в новой версии были отдельные файлы для каждого веса, и поведения были разделены, чтобы они не взаимодействовали друг с другом.Модульность позволяла нескольким людям работать над разными частями проекта, не влияя на то, над чем может работать кто-то другой, улучшая ясность, простоту и рабочий процесс команды.

Мы также готовились к нашему первому матчу между ботами и ботами против другой команды, участвовавшей в соревновании, но Конечный автомат не был протестирован и не был готов к внедрению. Это дало нам последний шанс увидеть, насколько хороша предыдущая версия. Прежде чем мы начали нашу схватку, мы решили протестировать и убедиться, что код обеих команд работает правильно.Когда у обоих ботов была случайная смесь героев противника и их собственных, команды поняли, что мы допустили ошибку на этапе выбора. Обе команды смогли решить эту проблему, но это был еще один пример борьбы с API, которая будет сохраняться на протяжении всего процесса. В это время Морис также уведомил нас, что турнир будет отложен на месяц, что даст нам возможность продолжать улучшать наших ботов.

Во время тестирования патентованных ботов Valve нам часто приходилось перезапускать игры из-за проблем совместимости с их ботом и Captain’s Mode.Мы решили сделать собственный режим подбора для двух команд, чтобы ускорить процесс и сократить количество ненужных перезапусков. Мы выделили ботов соперника случайную команду из пяти человек и использовали эту команду на протяжении большей части нашего тестирования. В то время мы не знали, что это вернется, чтобы укусить нас позже.

Наша команда продолжила работу с State Machine, добавляя новые варианты поведения, которые мы не могли реализовать раньше. По мере того, как поведение увеличивалось, мы также стали замечать улучшения в наших матчах с ботом Valve.После победы над Easy, в течение 24 часов мы смогли обыграть Medium, а на следующий день победили Hard и Unfair подряд. Мы были в восторге, не ожидая победить Unfair намного позже, но когда мы решили присмотреться к ботам противника поближе, у нас отвисла челюсть. Два бота нашего оппонента не покупали предметы, а один не использовал никаких способностей. Хотя мы смогли победить, что само по себе было подвигом, это не была настоящая победа над ботом Unfair.

Мы не знали, что Valve реализовала использование определенных навыков и покупку предметов только для 46 ботов.Мы изменили состав соперника на пять таких ботов, и хотя мы могли хорошо бороться с Hard и выигрывать примерно в сорока процентах случаев, мы редко выигрывали у Unfair. Мы начали больше обсуждать, что мы можем сделать, чтобы увеличить наш винрейт, что привело к первому изменению нашего состава. Посмотрев на героев, которых мы реализовали, а на тот момент их было всего пять, мы решили заменить героев, которые, будем надеяться, лучше впишутся в наш общий план игры. Сразу же мы увидели рост, и, хотя мы и привязались к героям, которых выбрали использовать, мы начали рассматривать замену героев как вариант, продолжая программировать.

Сбор данных

Мы продолжали внедрять больше вариантов поведения в конечный автомат, добавляли больше функций и, как и мы, наблюдали медленное, но неуклонное повышение производительности в наших матчах. Чтобы увидеть, насколько хорошо мы справились с добавлением чего-то нового, нам нужно было посмотреть полную игру, чтобы увидеть конкретное поведение и узнать, выиграли ли мы матч. Все веса бота были настроены вручную, и любые изменения, которые мы внесли, могли быть невидимы в рамках одной игры. Даже в ускоренном режиме игра длилась от десяти до пятнадцати минут.Чтобы собрать какие-либо значимые данные, мы могли бы часами просто наблюдать. Чтобы ускорить этот процесс и убедиться, что любое добавленное нами изменение было значимым, с помощью Python, языка программирования Go и Docker мы начали создавать способ сбора данных по сотням игр.

Морис дал нам доступ к пятнадцати компьютерам, на которых мы могли запускать игры и собирать данные. На этом этапе мы исследовали «безголовый» режим для DotA; мы могли запускать игры без графики, что ускоряло сами игры и позволяло запускать несколько экземпляров игры без использования графического процессора.Используя Docker, мы настроили соединение клиента с сервером, что позволило нам использовать виртуальные машины на четырнадцати из этих компьютеров. Мы подсчитали, что можем оптимально запустить до четырех игр на одном компьютере, поэтому четыре виртуальные машины запускались с шестикратной скоростью. В целом мы смогли запустить игры примерно в 300 раз быстрее, чем изначально.

Каждая игра может длиться от пятнадцати до восьмидесяти минут. Docker Swarm равномерно распространил общее количество запрошенных игр на все наши рабочие компьютеры.Если бы мы запускали менее 56 игр, это решение было бы хорошо, но что-то большее было бы неоптимальным. Первоначально мы пытались выполнить развертывание с помощью Docker Swarm, но для нас было разумнее создать собственное решение. Он должен быть настраиваемым, хорошо работать в распределенной сети и иметь поддержку простого параллелизма. Мы решили использовать Go, потому что он соответствовал нашим критериям и был прост в сборке и развертывании. Наконец, Python был использован для построения графиков и иллюстрации наших результатов данных в виде гистограмм и линейных графиков.

Данные, показывающие выигрыши и проигрыши во времени

Используя эту настройку, мы смогли запустить 500 игр за час, что дало нам значимые данные. Хотя нам по-прежнему необходимо было наблюдать за играми, чтобы наблюдать и подтверждать, что поведение работает должным образом, теперь мы могли тестировать их и собирать данные, чтобы подтвердить, было ли изменение полезным или вредным для бота.

В последние недели мы поиграли с идеей включения генетического алгоритма. Все веса конечного автомата были настроены вручную и основаны на наших наблюдениях.В частности, наши веса «Ферма», «Охота» и «Отступление» были настолько тесно связаны друг с другом, что, изменив значение одного, мы увидели бы резкие различия в их способах игры, и их процент побед в целом уменьшился бы. Мы знали, что они в хорошем состоянии, но были уверены, что они не оптимальны, особенно учитывая, что разные персонажи играли по-разному, и использование одинаковых весов заставляло их всех играть более или менее одинаково. Использование генетического алгоритма будет использовать машинное обучение для настройки каждого веса, давая нам самые идеальные числа, чтобы победить ботов по умолчанию и, надеюсь, наших оппонентов в турнире.Амбициозной целью было создать разные гены для каждого персонажа, тем самым дать каждому из них свой уникальный стиль игры, но мы знали, что без дополнительного времени и вычислительных мощностей нам придется обходиться вручную настроенными весами.

За неделю до соревнований мы отошли от добавления основных функций, включив лишь небольшие изменения, которые, как убедительно доказали наши данные, увеличивают процент побед. В конце концов, с помощью State Machine мы смогли добиться стабильного выигрыша выше 98% против ботов Valve.Готовый к участию в конкурсе, Морис написал нам, что в очередной раз конкурс был продлен еще на месяц.

Генетический алгоритм

С продлением турнира на месяц, мы начали обсуждать, как мы можем создать генетический алгоритм. В конце концов, мы решили снова использовать Go, потому что наши программы для сбора данных уже были написаны на нем, что упростило объединение программ.

Блок-схема генетического алгоритма, от arwn

Чтобы заставить генетический алгоритм работать, нам нужно было запустить несколько итераций нашего бота.На основе этих итераций мы брали гены пяти лучших героев и «скрещивали» их, перемешивая, усредняя и соединяя вместе. Следующее поколение будет состоять из слегка модифицированных версий (с использованием 10% вероятности мутации, чтобы выбрать, какие гены изменить, и 10% вероятности мутации, чтобы изменить каждый ген на соответствующую величину), по которым мы затем будем собирать данные, повторяя процесс. до начала конкурса. Наш план состоял в том, чтобы заменить текущие гены, настроенные вручную, на наши новые гены с машинным обучением.

Нашим первым шагом было убедиться, что мы можем запустить генетический алгоритм с помощью Go и Docker и одновременно изменить сценарий Lua. Ген каждого бота представлял собой Lua-файл, содержащий значения, которые мы хотели изменить с помощью генетического алгоритма. Мы использовали Go для чтения файла гена, мутации значений и вывода нового гена с использованием шаблона гена. Затем новые гены использовались для последующих итераций.

Успешно создав способ чтения и записи в наши новые генные файлы, вместо того, чтобы создавать один общий генетический алгоритм, как мы изначально планировали, мы создали гены для каждого героя, которого использовали.Чтобы это работало, каждый файл должен был включать имя героя, которому мы писали. К сожалению, мы могли тренировать только пять героев за раз, поэтому мы решили тренировать наш стартовый состав и использовать наши настроенные вручную гены для остальных героев, которые мы реализовали.

Завершение генетического алгоритма заняло больше времени, чем планировалось. Мы надеялись запустить и потренироваться в течение недели, но нам понадобилось еще несколько дней, чтобы исправить ошибки. Каждый из нас создал отдельные части генетического алгоритма, и на сборку каждой из них ушло некоторое время.

Наконец, генетический алгоритм заработал, но когда мы начали запускать первые поколения, мы столкнулись с множеством проблем. На этом этапе у нас продолжались некоторые проблемы с нашими контейнерами Docker, которые не запускали игры, но мы решили пока игнорировать их, потому что, хотя он и медленнее собирал данные, это не было значительной разницей во времени. Если один компьютер выйдет из строя и отключится от сети, сервер зависнет, ожидая поступления данных от сбитой машины. Когда мы решили использовать генетический алгоритм, нам нужно было, чтобы он работал без остановки и продолжал работать с каждым поколением.Если работник не отвечает, сервер никогда не сможет перейти к следующему поколению, потому что он ждал, пока появятся оставшиеся игры. Для нас не имело смысла следить за компьютерами по очереди весь день, поэтому мы добавили способ тайм-аут, если мы не получили ответ от контейнера по прошествии определенного периода времени.

В конце концов, примерно через четыре дня после запуска и остановки генетического алгоритма, он наконец заработал. Запустив генетический алгоритм и убедившись, что он работает, мы решили изменить состав нашей команды в пользу того, который, по нашему мнению, может повысить наш процент побед.Когда мы начали запускать генетический алгоритм и настроили гены, которыми мы хотели манипулировать, как команда, мы просмотрели их и скорректировали их до чисел, которые, по нашему мнению, имели смысл для запуска генетического алгоритма. В то время мы решили манипулировать примерно 25 компонентами и условиями, «генами» из наших весов Farm, Hunt и Retreat. Это изменение в сочетании с новым выбором героев, который мы использовали для команды противника, снизило наш процент побед с 98% до 80%. В то время как генетический алгоритм медленно повышал процент побед, мы поговорили как команда и решили, что, если мы сможем повысить его, переключая или добавляя героев на ранней стадии, его стоит протестировать.После переключения начальные 80% приблизились к 90%.

Пока мы наблюдали за ботом, мы знали, что время истекает и он недостаточно быстро растет. Хотя это было рискованное решение, которое могло привести к потенциально резкому снижению процента побед, мы решили скорректировать скорость изменения с 10% вероятности мутации и 10% частоты мутации до 15% и 25% соответственно. Мы подсчитали, что в самой идеальной ситуации для того, чтобы избавиться от бесполезного гена, потребуется не менее тридцати поколений или не менее одной недели.Мы хотели уменьшить это число и полагали, что если мы увеличим его вдвое, то увидим более высокие темпы изменений, к лучшему или к худшему. После нескольких дней наблюдения за результатами наш риск окупился, и бот увидел более быстрое и последовательное увеличение числа побед.

Рост приспособленности с течением времени

Когда мы были уверены в результате, мы начали добавлять больше генов, которыми можно было бы управлять из других весов конечного автомата. Еще одна проблема, с которой мы столкнулись на протяжении всего проекта, которую не смогли решить, заключалась в том, как играть на ранних этапах игры и как играть ближе к концу.В DotA стили игры между ними кардинально отличаются. Поведение, которое важно на раннем этапе, менее важно, поскольку игра длится дольше, и наоборот. До этого момента наша стратегия заключалась в том, чтобы обменять немного более слабое начало игры на более сильное завершение. Мы несколько раз пытались настроить веса, но даже если бы они играли лучше в начале, измененные веса не смогли бы в конце концов снизить общий выигрыш. Теперь, когда у нас есть рабочий генетический алгоритм, мы добавили различные множители к здоровью, чтобы он мог его регулировать, но также решили добавить множители в зависимости от того, насколько силен герой.Герои переходят с 1 по 25 уровень и становятся сильнее по мере повышения уровня. Вручную нам никогда не удавалось эффективно манипулировать весами, чтобы можно было вносить корректировки в начале и в конце игры. С генетическим алгоритмом мы теперь могли предоставить компьютеру решать, когда играть по-другому.

После очередной смены героя мы остановились на нашем окончательном составе и продолжили работу генетического алгоритма. За несколько дней до начала турнира мы увидели, что бот наконец достиг 99% винрейта для одного поколения, но это снизило следующее поколение до 96%.В то время как наши быстрые манипуляции с генами создали мощного бота, как только он станет все ближе и ближе к теоретическому пику, частота мутаций в 25% сразу изменится на очень большую и снизится процент выигрыша. Мы решили, что для сохранения нашего винрейта нам необходимо замедлить мутацию. Вероятность мутации снизилась до 7%, а частота мутации - до 15%.

Когда мы еще раз изменили наш генетический алгоритм, мы решили пойти на еще один риск. До этого момента мы брали пять лучших генов от каждого героя в качестве родителей, разводили их и использовали потомство для следующего поколения.Хотя это сработало для нас, классически мы не должны были использовать генетический алгоритм. В генетическом алгоритме все гены должны иметь шанс быть выбранными, но мы активно выбирали, какие из них использовать. Важность использования ботов с более низким показателем выигрыша - разнообразие. Хотя в поколении он, возможно, не работал так же хорошо, в будущем поколении его гены могут сыграть важную роль в увеличении процента выигрышей. Чтобы убедиться, что у этих генов с более низким процентом выигрышей есть шанс быть выбранными, мы сопоставили все гены, что позволило повысить вероятность быть выбранным с более высоким процентом выигрыша, при этом давая шанс более низким показателям выигрыша, хотя и меньший.

Мы также обсуждали изменение стратегии. Было необходимо взять гены от каждого отдельного бота, но мы считали важным взять все гены от одной «команды» ботов. На первый взгляд, бот может показаться, что у него меньший потенциал, но как часть команды его гены могли быть важным ключом к победе. Мы думали о преимуществах перехода от отдельных ботов к только племенным командам, но не могли оправдать потерю более мощных генов героев. Когда мы пришли к выводу, что должны продолжать использовать ту же стратегию выбора отдельных ботов, нам в голову пришла мысль.Что, если мы сделаем и то, и другое? Взятие отдельных генов было, несомненно, важно, но, скрещивая ботов из одной команды с более сильными отдельными ботами, мы полагали, что сможем раскрыть потенциал обоих миров.

Генетический алгоритм, кажется, улучшил бота, хотя его стиль игры значительно отличается от исходной негенетической версии. В то время как раньше мы были намного агрессивнее, теперь мы играем более консервативно и стремимся к победе в основном за счет разрушения построек и победы в отдельных командных боях.Старший бот будет чаще объединяться в команду, заставляя ботов противника реагировать и приводя к большему количеству драк. Если мы продолжим работу над проектом, я считаю, что следующим шагом будет борьба бота с самим собой и с более старой негенетической версией бота.

Благодаря этому проекту я смог выучить несколько языков программирования, а также познакомиться с Docker и узнать о важности документации при работе в команде. Причина, по которой я решил работать над этим проектом, заключалась не столько в интересе к DotA2, сколько в попытке понять машинное обучение.Я слышал этот термин несколько раз, читал о нем, но не имел реального понимания того, что он влечет за собой и как его на самом деле программировать. Участие в этом проекте дало мне уникальную возможность поработать с машинным обучением и улучшило мое понимание программирования в целом.

.

Смотрите также