Как поменять панораму в доте 2

Обновлено: 04.07.2024

Итак вы открыли workshop, взяли в руки гайды и что? Ничего не понятно.
Как прилепить способность к герою? Стоп… А где вообще герой находится?
Сейчас мы обговорим эти моменты, потому что когда начинал я мне всего этого жуть как не хватало.
Сразу скажу под словом «проект» я подразумеваю полные играбельные исходники вашей карты. То бишь проект это карта либо на стадии разработки, либо уже разработанная.

Краткий словарь, чтобы не путались:

Партикль – эффект в игре. Если для вас будет понятно – спецэффект. Допустим когда Абаддон кидает щит, вокруг тела героя появляется прозрачный щит, это и есть партикль.
Панорама – игровой интерфейс, который картостроитель разрабатывает самостоятельно. Например: магазины способностей, видимые таймеры отсчитывающие время и прочее…
Кастомный – созданный картостроителем с нуля.
Оверрайдить, оверрайднутый – взятый на основе старого и слегка модифицированный. Допустим Миране можно изменить силу атаки и первую способность, мы просто берем старую мирану и переписываем всего 2 строки (атаку, и первую способность) остальное автоматически наследуется.
КВ – система ключ и значение. Например как будет выглядеть на КВ урон способности:

– говорит о том, что ключ это урон, а значение это урон. Здесь у способности 4 уровня, а значит 4 значения.
API – функция в ЛУА коде, которая позволяет совершать действия. Допустим, нанести урон, присудить победу игроку или воспроизвести звук.

1.1 Строение проекта, где что лежит.
Итак, для начала я покажу вам строение проекта. Где лежат все файлы и откуда что брать.
Создавая любой проект в редакторе, а именно действие происходит после нажатия кнопки “Create Empty Addon” (создать пустой проект).
Моментально создаются две папки: обе папки носят название вашего проекта, но пути к ним разные. Одна папка создается в директории content, другая в game, и обе отвечают за разные части нашего проекта.


1.1.1 Папка content.
Путь: Steam/steamapps/common/dota 2 beta / content / dota_addons / название проекта.
Здесь хранятся созданные партикли, модели и сам ландшафт карты с расширением vmap.
Имеется в виду когда карта создается, все партикли к которым вы указали путь будут обработаны здесь и затем перенесены в основную папку.
Отступление: Допустим вы создали партикль, изначально он имеет расширение vpcf. С этим расширением вы можете его изменять в редакторе партиклей, однако после пробного запуска карты, он дублируется в папку game с расширением vpcf_c и тут уже его нельзя редактировать, его будет читать непосредственно в игре. С панорамой такой же эффект, разрабатывается она непосредственно в папке content, однако компилируясь переходит в папку game, где приобретает другое расширение файлов.

То есть контент это своего рода подготовочная платформа. Здесь все хранится в сыром виде, а после обработки редактором все переносится в оригинальную папку проекта.

Путь к карте content/maps
Путь к текстуркам content/materials
Путь к кастомным партиклям content/particles

Путь: Steam/steamapps/common/dota 2 beta / game /dota_addons/название проекта
Здесь святая святых вашего проекта. Здесь хранятся все ваши скрипты, файлы локализации, иконки и все преобразованные файлы с папки контент.
Начнем с самого сложного, со скриптов.
Папка scripts содержит в себе 3 папки.

Npc – папка содержащая ваших героев, кастомные способности, перезаписанных героев и все что может двигаться и атаковать. Тут в текстовом варианте содержатся ваши юниты, герои, способности.

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

Теперь мирана будет иметь 4 новые способности, взамен старых.
Абсолютно таким же способом можно редактировать атаку, защиту и все параметры у юнита. Подробнее смотри в ссылке, которая выше.

Там рассматриваются основные параметры предмета, и даются базовые движки предметов такие как криты, орб, сплеш, лайфстил, блок урона, ауры и прочее. Хотя если вы очень хорошо знаете карту Жизнь на арене и много раз её играли, рекомендую скачать проект с гитхаба и детально рассмотреть файл предметов, способностей и прочего у себя на компьютере. Это очень интересно смотреть как другой автор реализовал ту или иную фичу у себя.


Npc_units_custom.txt – файл, содержащий в себе всех КАСТОМНЫХ юнитов. Это могут быть призванные существа, монстры, боссы и прочая нечисть не геройского типа.

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

Папка npc/vscripts
Здесь хранятся все ваши луа файлы. Это и весь игровой движок, и различные луа способности, которые вы создали.
Здесь скрипты можно распределять как угодно по папкам, поэтому здесь по сути нет архитектуры. Каждый автор упорядочивает по-разному.
Addon_game_mode.lua – тот самый основной файл, с которого все начинается. Он есть всегда и удалять его нельзя. Он отвечает за инициализацию вашего мода.
Настоятельно рекомендую установить проект barebones. Найти его можно в поиске на гитхабе.

Папка npc/shops
Внутри файлы отвечают за то, какие предметы вы будете видеть в магазине непосредственно в игре. Туда вставляются уже готовые кастомные предметы из файла npc_items_custom.txt

Пишите, чего тут не хватает, буду дополнять.

2. Коды, скрипты и их разновидности.
Всего две разновидности скриптов - datadriven и lua.
Луа это достаточно распространенный в разработке игр язык программирования, он очень удобен как раз для доты2.
Datadriven это система "Пемеренная" "Значение". То есть каждой переменной соответствует своё значение.

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


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

Итак все луа скрипты, как вы знаете, лежат в папке /vscripts
А датадривен в /npc

Вся работа в скриптах выглядит как работа в sublime. Есть подсветка кода для LUA. Удобство и подсветка синтаксиса – прежде всего.

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

в нем:
*.vmap - это файл вашей карты (в моем случае это test.vmap)
custom_ui_manifest.xml - файл конфигурации UI для вашей кастомки
custom_loading_screen.xml - файл кастомного загрузочного экрана вашей кастомки
custom_loading_screen.css - файл стилей для загрузочного экрана вашей кастомки (можно назвать как угодно, но чтобы не путаться назовем его так)

Итак, теперь про директории по порядку:
1) maps - содержит все карты вашей кастомки
2) panorama - содержит все файлы, необходимые для вашего UI
2.1) images - папка с картинками
2.2) layout - папка с xml файлами (для тех кто знаком с web'ом - аналог html - файлы разметки)
2.3) scripts - папка с вашими скриптами js(javascript) или ts(typescript)
2.4) styles - папка с стилями

Для чего нужно содержание папок maps и images можете догадаться сами, это не сложно, мы же перейдем сразу к содержимому layout

XML - это язык разметки, он нужен для того чтобы размечать некую информацию на сегменты, является прародителем html.
Сам XML ничего особо из себя не представляет, это просто набор тегов и информация в них. Как же тогда отображаются элементы у вас на экране?
Все просто - интерпретатор. Интерпретатор считывает информацию из вашего файла, он знает что делать с информацией в ваших тегах и как её представить на экране.
Теперь к тематике доты.
Основным тегом в доте является тег <Panel>, да и вообще, в доте, по заявлению самих Valve - любой элемент это Panel, и опять же, по заявлению из
документации по панораме - Panel - аналог <div> в html.
Существует несколько готовых видов специализированных панелей, которые представлены тут:

так же имеет дополнительный атрибут "scaling" отвечающий за отображение изображения при несовпадении размеров Image панели с самим изображением.
узнать какие параметры принимает вы можете узнать из ссылки выше.

3) Label - поле с неизменяемым(без учета скриптов, но об этом потом) текстом, соответственно содержит обязательный(по аналогии с картинкой) атрибут "text"
в котором, как вы уже догадались можно писать этот самый текст, но это ещё не всё! Label поддерживает некоторые html теги,такие как <br> <a> <h1> <img> и другие, с полным списком вы можете ознакомится по ссылке выше.

4) TextEntry - поле с изменяемым текстом (т.е. можно редактировать ручками!). В общем ничего особого, html теги не поддерживает, имеет параметры:
"maxchars" - максимальное количество вводимых символов
"placeholder" - "подложка", это как когда вы на сайте пытаетесь ввести в поле где написано email свою почту, а когда вы начинаете печатать слово email
магическим способом исчезает.
"oninputsubmit" - при подтверждении ввода выполняет то что в теле параметра, является одним из listener'ов event'ов, но об этом чуть позже.

5) DropDown - Выпадающий список, аналог select в html, для полей используются не option, а другие панели, например Label, имеет параметр "oninputsubmit", который отрабатывает при выборе определенного поля из списка


6) ToggleButton - аналог checkbox в html, по простому - поле с галочкой, имеет 2 основных параметра:
"checked" - если true - голочка стоит, если false - не стоит
"text" - текст, тот что справа.

7) RadioButton - xor выбор, но для вас это ничего не скажет, в общем - "выбираем что-то одно из предложенного". Имеет 3 основных параметра, "checked" и "text" как у ToggleButton
, а так же "group", который указывает, с какими кнопками он использует общий выбор, т.е. если вы выбрали 1 кнопку из группы a, то остальные становятся не выбранными.

8) DOTAHeroImage - то же саоме что и Image, только выдает нам статичный портрет персонажа, есть 3 основных параметра:
"heroid" - указывает на то, что надо взять изображение героя с id указанном в значении
"heroname" - то же что и выше, но не по id, а по имени, пример, "npc_dota_hero_sven"
"heroimagestyle" - имеет 3 вида значений -
landscape - изображение 128х72(то что используется в игровой таблице),
portrait - 71x94(то что используется при выборе персонажа),
icon - 32х32 - изображение на миникарте

9) DOTAAvatarImage - то же самое, что и выше, только не изображение героя, а аватарка игрока, имеет 1 параметр:
"steamid" - steamid игрока(число), есть одно доп значение 'local' - возвращает id игрока на том клиенте, на котором исполняется команда

10)DOTAItemImage - то же самое что и с героями, но возвращает изображение предмета имеет 1 параметр "itemname" - название предмета

11)DOTAAbilityImage - то же самое что и с героями, но возвращает изображение умения имеет 1 параметр "abilityname" - название умения

12)DOTAUserName - то же самое что и пункт 9, но возвращает не аватарку игрока, а его имя.

Но так же вы можете найти панели, которые не перечислены в основной документации, например, можете порыскать здесь.
Там есть панели, которые не описаны в документации, но тем не менее есть в клиенте и, возможно, доступны в кастомках, например,<DOTAChat> или <DOTATopBar>.

Ну что же, самую сложную(нет) часть мы разобрали. Обратимся немного к CSS и JS, и продолжим с панорамой.
Так как CSS почти ничем не отличается от обычного, то смело идите смотреть русскоязычные гайды о каскадных таблицах стилей, но
так же они претерпели небольшие изменения, о которых вы можете узнать отсюда

Ну что же, прдолжаем в XML, на очереди параметры - это такие штуки, которые дают интерпретатору понять, что делать с этим элементом, помимо того, что разместить его в рабочей области

Начнем с самого простого это id и class
они нужны для того, чтобы выбрать нужные элементы, основное различие - id можно помечать только 1 объект(ну вообще в реалиях интерпретатора доты нет, но о контекстах как-нибудь в другой раз)
и вы всегда будете обращаться к именно одному этому элементу; классы же позволяют вам объеденить несколько элементов в одну группу, чтобы придать им некоторые общие свойства.

src - ссылка на ресурс - описана выше в Image.

style - (никогда не пользуйтесь!) позволяет указать стили прямо в элементе, например <Panel style="margin-top: 10px;"></Panel>

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

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

На этом предположу, что теории вполне достаточно (переписал в доступном, надеюсь, виде чуть ли не всю документацию от Valve),
преидем к практике.

Итак, поехали!
напоминаю мы находимся в папке panorama и вот относительно неё все пути будут прописаны дальше
Первым делом создаем основные файлы, с которыми мы будем работать
generalPanel.xml в папке layout/custom_game

generalPanel.js в папке scripts/custom_game и оставляем пока пустым
generalPanel.css в папке styles/custom_game тоже пока пустое

если у вас ещё нет custom_ui_manifest, то создаем его, если есть просто добавляем строчку
<CustomUIElement type="Hud" layoutfile="file:///layout/custom_game/generalPanel.xml" />

в итоге, содержимое должно выглядеть примерно так:

я хочу сделать окошечко, чтобы:
1)оно было красного цвета
2)с закругленными краями
3)появлялось сверху и постепенно
4)при наведении на него оно меняло цвет на синий

первым делом идем в generalPanel.css
изначально элемент привязан к левому верхнему краю родителя и имеет размер 0 по ширине и высоте, начнем с того, что назначим ему размер и цвет и скругляем края, для этого пишем

теперь сделаем так, чтобы при наведении цвет менялся на синий, а при нажатии на желтый, для этого служит псевдокласс
"hover" - при наведении

Возможности:
1) Интерактивный дизайн (изменяется при наведении\клике)
2) Передача инфы из JS в Lua.


  • [li] layout/custom_game/custom_ui_manifest.xml - настройки\конфиг интерфейса[/li]
    [li] layout/custom_game/test.xml - описывает структуру элементов ( теги и атрибуты как в html ) [/li]
    [li] scripts/custom_game/test.js -JavaScript [/li]
    [li] styles/custom_game/test.css - таблицы стилей [/li]

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

img

Update 10.10.2020

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

Прошлый способ:
Идем в D:\steam\steamapps\common\dota 2 beta\game\dota\panorama\videos и ищем файл "ti10_background.webm", удаляем его, качаем любую картинку в нормальном качестве и разрешении, конвертируем её в gif, вставляем уже гифку в эту же папку, меняем название на "ti10_background.webm".

Вот так оно выглядит:

S2n5z93TO4E.jpg

Если у вас не отображается картина, то нужно поставить в настройках видео галочку:

Читайте также: