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

Se7eN

Друзья CG
22 Ноя 2014
324
6
Ваш первый раз. Много информации для самых новичков.

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

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

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

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

Краткое мини-отступление: те, кто делает проекты, обычно хранят их на сайте github.com. Этот сайт работает как система контроля версии и снабжен комментариями. Это не только позволяет разрабатывать проект командой, но и откатывать изменения даже на несколько версии назад, чтобы поправить какие-либо незамеченные вами баги.
https://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 – дота имеет предопределенный список героев при начале игры. В этом файле он как раз и редактируется. То есть здесь можно поставить то, что при пике будет доступен, например, только инвокер и мипо. Оставить стандартный распик дотки можно просто не трогая этот файл. Выглядит файл изнутри так: https://github.com/ZLOY5/LiA/blob/master/game/dota_addons/life_in_arena/scripts/npc/herolist.txt .
Зайдите и посмотрите. Напротив имен героев стоит цифра 1, значит он доступен для выбора в игре. Если стоит 0, значит, его не будет видно при выборе героя.

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

Npc_heroes_custom.txt – задумали модифицировать стандартных или сделать нестандартных героев? В таком случае вам придётся очень плотно поработать с этим файлом.
Смотрите файл: https://github.com/ZLOY5/LiA/blob/master/game/dota_addons/life_in_arena/scripts/npc/npc_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 – файл для создания предметов.
https://github.com/ZLOY5/LiA/blob/master/game/dota_addons/life_in_arena/scripts/npc/npc_items_custom.txt - сразу смотрим файл и вникаем. Это предметы из жизни на арене.

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

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


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

Как создавать юнитов? У нас есть переведенный гайд:
https://customgames.ru/forum/index.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 - https://github.com/bhargavrpatel/Dota-2-Sublime-Packages
notepad++ notepad-plus-plus.org/...ad/v6.9.2.html
barebones github.com/bmddota/barebones

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

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

Se7eN

Друзья CG
22 Ноя 2014
324
6
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Резервирую пост, для дополнений

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

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

erbol

Новичок
20 Апр 2016
8
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Se7eN,

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

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

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

Se7eN

Друзья CG
22 Ноя 2014
324
6
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

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

erbol

Новичок
20 Апр 2016
8
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

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

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
35
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

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

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

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

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
35
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Можно еще добавить инфу об npc_abilities_override.txt
 

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
35
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

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

poppi;]

Пользователь
12 Дек 2016
14
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Я всё сделал как в гайде, но у меня при стадии пика только стандартные герои. Что делать? :'( :'(
 

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
35
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Если, к примеру, в 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;]

Пользователь
12 Дек 2016
14
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Илья, я всё сделал как ты сказал но ничего не получилось :'(
 

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
35
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Скинь содержимое своего npc_heroes_custom.txt, а так же содержимое того файла, где твоя абилка прописана.
 

poppi;]

Пользователь
12 Дек 2016
14
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Илья, вот мой 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
 
Последнее редактирование модератором:

poppi;]

Пользователь
12 Дек 2016
14
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Сейчас вобще у блуда первого скила нету :'( :'(
 

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
35
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Раз нету, значит не работает твоя абилка. Где ты её описываешь? В каком файле?

Кроме того, ID для абилок не нужен.


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

poppi;]

Пользователь
12 Дек 2016
14
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Раз нету, значит не работает твоя абилка. Где ты её описываешь? В каком файле?

Кроме того, ID для абилок не нужен.


Я бы посоветовал тебе пока просто попробовать какому-нибудь герою дать скилы другого героя.
Когда этот шаг получится выполнить, тогда попробуй сделать свою простенькую абилку и плавно повышай её сложность, приближаясь к абилке, что ты скинул. Так ты сумеешь разобраться в коде.
Хорошо, спасибо. И ещё где названия всех абилок находится?
 
Последнее редактирование модератором:

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
35
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Обычно с помощью GFScape распаковывают pack01_dir.vpk и там смотрят npc_abilities.txt.
 

poppi;]

Пользователь
12 Дек 2016
14
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Обычно с помощью GFScape распаковывают pack01_dir.vpk и там смотрят npc_abilities.txt.
А можите сказать у меня будет работать этот герой?
"npc_dota_hero_drow_ranger"
{
"AbilityLayout" "5"
"Ability1" "orb_ability_example"
"Ability3" "TestSysAura"
"Ability5" "creature_acid_spray"

"AttributePrimary" "DOTA_ATTRIBUTE_AGILITY"
"AttributeBaseAgility" "60"
"AttributeAgilityGain" "10"
 
Последнее редактирование модератором:

poppi;]

Пользователь
12 Дек 2016
14
0
Re: [Гайд] "Я полный новичок и хочу разобраться" - вам сюда

Обычно с помощью GFScape распаковывают pack01_dir.vpk и там смотрят npc_abilities.txt.
А где найти этот файл? В инете нету
 
Последнее редактирование модератором:
Реклама: