CustomGames.ru - Dota 2 пользовательские игры

[Гайд] "Я полный новичок и хочу разобраться" - вам сюда [24.12.16 edited]

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Se7eN

  • Продвинутый
  • 298
  • Мощь: 11
  • King
Ваш первый раз. Много информации для самых новичков.

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

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

Партикль – эффект в игре. Если для вас будет понятно – спецэффект. Допустим когда Абаддон кидает щит, вокруг тела героя появляется прозрачный щит, это и есть партикль.
Панорама – игровой интерфейс, который картостроитель разрабатывает самостоятельно. Например: магазины способностей, видимые таймеры отсчитывающие время и прочее…
Кастомный – созданный картостроителем с нуля.
Оверрайдить, оверрайднутый – взятый на основе старого и слегка модифицированный. Допустим Миране можно изменить силу атаки и первую способность, мы просто берем старую мирану и переписываем всего 2 строки (атаку, и первую способность) остальное автоматически наследуется.
КВ – система ключ и значение. Например как будет выглядеть на КВ урон способности:
Код
“damage” “500 600 700 800”
– говорит о том, что ключ это урон, а значение это урон. Здесь у способности 4 уровня, а значит 4 значения.
API – функция в ЛУА коде, которая позволяет совершать действия. Допустим, нанести урон, присудить победу игроку или воспроизвести звук.

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

Краткое мини-отступление: те, кто делает проекты, обычно хранят их на сайте github.com. Этот сайт работает как система контроля версии и снабжен комментариями. Это не только позволяет разрабатывать проект командой, но и откатывать изменения даже на несколько версии назад, чтобы поправить какие-либо незамеченные вами баги.
github.com/ZLOY5/LiA - проект жизни на арене на гитхабе. Ориентироваться по нему научитесь, как только дочитаете гайд.


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

1.1.2 Папка game

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

Npc – папка содержащая ваших героев, кастомные способности, перезаписанных героев и все что может двигаться и атаковать. Тут в текстовом варианте содержатся ваши юниты, герои, способности.
 
ФАЙЛЫ ПАПКИ:
herolist – дота имеет предопределенный список героев при начале игры. В этом файле он как раз и редактируется. То есть здесь можно поставить то, что при пике будет доступен, например, только инвокер и мипо. Оставить стандартный распик дотки можно просто не трогая этот файл. Выглядит файл изнутри так: github.com/ZLOY5/.../npc/herolist.txt .
Зайдите и посмотрите. Напротив имен героев стоит цифра 1, значит он доступен для выбора в игре. Если стоит 0, значит, его не будет видно при выборе героя.

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

Npc_heroes_custom.txt – задумали модифицировать стандартных или сделать нестандартных героев? В таком случае вам придётся очень плотно поработать с этим файлом. 
Смотрите файл: github.com/ZLOY5/...heroes_custom.txt
Допустим вы хотите просто поменять способности миране, выглядеть будет это так:
Код
"npc_dota_hero_mirana_shooter" //здесь может быть что угодно, это просто имя нового героя, которого мы собираемся оверрайднуть
{
"override_hero" "npc_dota_hero_mirana" //кого будем перезаписывать? Судя по всему, мирану

"Ability1" "ancient_priestess_surge_of_intelligence"
"Ability2" "ancient_priestess_spirit_link"                 
"Ability3" "ancient_priestess_mana_shield"
"Ability4" "ancient_priestess_ritual_protection"
}

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


Npc_items_custom.txt – файл для создания предметов.
github.com/ZLOY5/..._items_custom.txt - сразу смотрим файл и вникаем. Это предметы из жизни на арене.

Делаются почти так же как и способности, разве что им айди надо прописывать и класс предмета. Остальное все абсолютно не изменилось. 
Подробный исчерпывающий гайд по предметам от Noya:
moddota.com/forum.../datadriven-items

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


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

Как создавать юнитов? У нас есть переведенный гайд:
customgames.ru/fo...x.php?topic=162.0

Ссылка на всех юнитов с жизни на арене:
github.com/ZLOY5/..._units_custom.txt

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

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

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

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

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

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

Луа предоставляет нам широкий спектр возможностей. К тому же Valve любезно предоставили нам свои API-функции.
developer.valvesoftware.com/...from_Lua


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

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

3. Рекомендуемый софт
Sublime - github.com/bharga...-Sublime-Packages
notepad++ notepad-plus-plus.org/...ad/v6.9.2.html
barebones github.com/bmddota/barebones

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

barebones - уникальный аддон, с изучения которого рекомендуется начинать картостроения. Много здесь уже сделано за вас, и поверьте тут есть всё что вам нужно. Это как фундамент для дома, зайдя на него уже можно создавать готовый продукт. Дополнительным преимуществом этого аддона является наличие библиотек таймера, физики и отображения уведомлений. Для новичков это будет очень дельно.
« Последнее редактирование: 24-12-2016, 16:17:25 от Se7eN »

Оффлайн Se7eN

  • Продвинутый
  • 298
  • Мощь: 11
  • King
Резервирую пост, для дополнений

Заказывайте моменты, которые хотите осветить для себя, будем потихоньку дополнять

Если старички зайдут сюда, вспомните какой момент было тяжелее всего освоить и пишите сюда
« Последнее редактирование: 01-06-2016, 08:47:43 от Se7eN »

Оффлайн erbol

  • 8
  • Мощь: 0
Se7eN,

Как то по моему слишком много разного материала в кучке

Если говорить о выборе героя в начале игры, то нужно сказать по моему что dota имеет предопределенный список героев и функцию выбора нужного героя из меню

Состав меню определяется из таблицы "CustomHeroList" которая находится в файле herolist.txt в папке npc

Оффлайн Se7eN

  • Продвинутый
  • 298
  • Мощь: 11
  • King
Это основы основ, которые люди, придя в редактор, собирают по крупицам. Гайд еще далеко не закончен, я буду добавлять материалы по мере необходимости

Оффлайн erbol

  • 8
  • Мощь: 0
В папке dota_addons очень много примеров работы с таблицами в текстовых файлах

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Статейка хорошая, сам хотел подобную написать, когда на форуме каждый день одни и те же вопросы задавали новички, но мои руки так и не дошли до этого дела :)

Позволь вставить свои пять копеек: 
Notepad хороший редактор, мне его интерфейс и гамма цветовая ближе по духу, но он отстает в функциональности от Sublime: насколько мне известно, в Notepad нельзя работать с деревом проекта (открыть папку проекта) и там нет поиска по функциям. Кроме того, под Sublime энтузиасты реализовали специальный пакет, ориентированный именно на API workshop`a. Сам недавно перешел на последний.

К чему все это говорю - можешь добавить Sublime в раздел "Необходимый софт", как альтернативу. Ну и перечень стрельнуть с moddote. И как по мне, это все же не "Необходимый софт", а "Рекомендуемый".
« Последнее редактирование: 21-06-2016, 12:59:40 от Илья »

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Можно еще добавить инфу об npc_abilities_override.txt

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Можно добавить инфу по таймерам. Например там же, где ты про barebones рассказываешь.

Оффлайн poppi;]

  • 14
  • Мощь: 0
  • Пытаюсь разобраться в скриптах :(
Я всё сделал как в гайде, но у меня при стадии пика только стандартные герои. Что делать? :'( :'(

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Если, к примеру, в npc_heroes_custom.txt сделать так:

Код
"npc_dota_hero_bloodseeker"
{
"Ability1" "my_ability_name"
}

То это поменяет 1ю абилку сикера на абилку my_ability_name, которая должна быть описана в npc_abilities_custom.txt, либо в npc_abilities_override.txt. Думаю, сообразишь дальше.

Оффлайн poppi;]

  • 14
  • Мощь: 0
  • Пытаюсь разобраться в скриптах :(
Илья, я всё сделал как ты сказал но ничего не получилось :'(

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Скинь содержимое  своего npc_heroes_custom.txt, а так же содержимое того файла, где твоя абилка прописана.

Оффлайн poppi;]

  • 14
  • Мощь: 0
  • Пытаюсь разобраться в скриптах :(
Илья, вот мой npc_heroes_custom.txt
// Dota Heroes File
// NOTE: This is not for creating new heroes, this is for taking a currently existing hero as a template and overriding
// the specified key-value combinations.  Use override_hero <hero_to_override> for this.
"DOTAHeroes"
{
"npc_dota_hero_bloodseeker"
   {
      "Ability1"            "example_ability"
    }
}




А это абилка.
Спойлер
Код
"example_ability"
  {
    "ID"              "18552"
    "AbilityBehavior"       "DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED"
    "BaseClass"           "ability_datadriven"
    "AbilityTextureName"      "holdout_blade_fury"

    // Stats
    //-------------------------------------------------------------------------------------------------------------
    "AbilityCastRange"        "1000"
    "AbilityCastPoint"        "0.0"
    "AbilityCooldown"       "30.0"
    "AbilityChannelTime"      "2.0 1.8 1.6 1.5"
    "AbilityUnitDamageType"     "DAMAGE_TYPE_PURE"
    "AbilityCastAnimation"      "ACT_DOTA_DISABLED"
    "AbilityDamage"         "300 500 700 1000"
   
    "precache"
    {
      "particle"          "particles/econ/generic/generic_aoe_explosion_sphere_1/generic_aoe_explosion_sphere_1.vpcf"
      "soundfile"         "soundevents/game_sounds_heroes/game_sounds_gyrocopter.vsndevts"
    }

    // Item Info
    //-------------------------------------------------------------------------------------------------------------
    "AbilityManaCost"       "150"
    "SideShop"            "1"
   
    "OnSpellStart"
    {
      "ApplyModifier"
      {
        "Target"    "CASTER"
        "ModifierName"  "modifier_channel_start"
      }
      "FireSound"
      {
        "EffectName"    "Hero_Gyrocopter.CallDown.Fire"
        "Target"      "CASTER"
      }
    }
   
    "OnChannelSucceeded"
    {
      "RemoveModifier"
      {
        "Target"        "CASTER"
        "ModifierName"      "modifier_channel_start"
      }
      "AttachEffect"
      {
        "EffectName"      "particles/econ/generic/generic_aoe_explosion_sphere_1/generic_aoe_explosion_sphere_1.vpcf"
        "EffectAttachType"    "follow_origin"
        "EffectRadius"      "%radius"
        "EffectDurationScale" "1"
        "EffectLifeDurationScale" "1"
        "EffectColorA"      "255 0 0"
        "EffectColorB"      "255 0 0"
        "Target"      "CASTER"
      }
     
      "Damage"
      {
        "Type"          "DAMAGE_TYPE_PURE"
        "Damage"        "%damage"
        "Target"
        {
          "Center"      "CASTER"
          "Radius"      "%radius"
          "Teams"       "DOTA_UNIT_TARGET_TEAM_ENEMY"
          "Types"       "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
        }
      }
     
      "Knockback"
      {
        "Center"  "CASTER"
        "Target"
        {
          "Center"  "CASTER"
          "Radius"  "%radius"
          "Teams"   "DOTA_UNIT_TARGET_TEAM_ENEMY"
        }
        "Duration"  "%duration"
        "Distance"  "%distance"
        "Height"  "%height"
      }
     
      "FireSound"
      {
        "EffectName"    "Hero_Gyrocopter.CallDown.Damage"
        "Target"      "CASTER"
      }
    }
   
    "OnChannelFinish"
    {
      "RemoveModifier"
      {
        "Target"        "CASTER"
        "ModifierName"      "modifier_channel_start"
      }
    }
   
    "OnChannelInterrupted"
    {
      "RemoveModifier"
      {
        "Target"    "CASTER"
        "ModifierName"  "modifier_channel_start"
      }
    }
   
    "Modifiers"
    {
      "modifier_channel_start"
      {
        "OnCreated"
        {
          "AttachEffect"
          {
            "IsHidden" "1"
            "EffectName"    "particles/test_particle/channel_field_2.vpcf"//"gyro_calldown_marker_c"//"gyrocopter_call_down"
            "EffectAttachType"  "follow_origin"
            "Target"      "CASTER"
           
            "EffectRadius"      "%radius"
            "EffectColorA"      "255 0 0"
            "EffectColorB"      "255 0 0"
         
            "ControlPoints"
            {
              "00"    "50 100 5"
            }
          }
        }
      }
    }
   
    // Special 
    //-------------------------------------------------------------------------------------------------------------
    "AbilitySpecial"
    {
      "01"
      {
        "var_type"        "FIELD_FLOAT"
        "duration"        "0.5"
      }
     
      "02"
      {
        "var_type"        "FIELD_INTEGER"
        "damage"        "400 600 800 1000"
      }
     
      "03"
      {
        "var_type"        "FIELD_INTEGER"
        "radius"        "550 550 600 650"
      }
     
      "04"
      {
        "var_type"        "FIELD_INTEGER"
        "distance"        "400 500 600 700"
      }
     
      "05"
      {
        "var_type"        "FIELD_INTEGER"
        "height"        "100 200 300 400"
      }
    }
  }
[свернуть]
Я взял её из кастомки barebones
« Последнее редактирование: 13-12-2016, 19:35:26 от -ExotiC- »

Оффлайн poppi;]

  • 14
  • Мощь: 0
  • Пытаюсь разобраться в скриптах :(
Сейчас вобще у блуда первого скила нету :'( :'(

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Сейчас вобще у блуда первого скила нету :'( :'(
Используй СПОЙЛЕЕЕЕР.