Custom Abilities начало.

doter.ua

Продвинутый
17 Авг 2014
280
5
ability_datadriven


baf58ec2fa0ea917920035853c864c8d.png
Предисловие:
Для полноценного гайда за один присест времени нету, буду добавлять фрагментами.
Часть 1


Статья ориентирована на тех, кто уже делал скилы сам или по предыдущим гайдам (на основе существующих "BaseClass" "ability_name")
Первым делом нужно указать "BaseClass" "ability_datadriven"
Следующее, что нужно сделать - сохранить (добавить в закладки) два ресурса:
[list type=decimal]
[li]http://hex6.se/dota/modifier_functions.txt[/li]
[li]https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Abilities_Data_Driven[/li]
[/list]
По сути это ссылки на одно и то же, но в первой более удобная структура (есть понятные заметки-инструкции), а вторая (вики), в отличии от первой, обновляется. Если не смогли найти что-нибудь в первой - пробуйте на вики.
Просто так начать кодить будет непросто. Вначале можно искать чужие примеры (GitHub, Holdout и т.д.), и переделывать их.
Сам принцип работы с Key Value подразумевает, что вы знаете некоторые value которые можно подставить, или знаете где их взять (если забыли как они пишутся).
Например: одним из первых параметров, которые нужно будет указать, это поведение абилки (англ. behavior) "AbilityBehavior". Так с ходу сложно предположить, что вообще туда можно подставить, но если в первой из ссылок воспользоваться поиском по слову behavior (для chrome Ctrl + F), то можно увидеть, что есть список констант (зарезервированных разработчиками значений).
Для наглядности скрин:
b01dcc77d36ff13dfc28d04c7a4b41d5.png
Там есть английские комменты, но все мы играли в доту, и даже без них понимаем, какая абилка использует DOTA_ABILITY_BEHAVIOR_PASSIVE или DOTA_ABILITY_BEHAVIOR_AOE. (забегая на перед, скажу, что можно использовать несколько поведений в одной абилке, разделяя значения символом "|")

Первую часть пилил в браузере (стим не запускал, уже поздно и мне влом 8)), поэтому в основном сухая теория, во второй планирую показать простую абилку.
Пока буду искать время для второй части советую изучить первую ссылку, особенно верх и низ (в центре куча модифаеров, их можно не задрачивать :D)

Часть 2


1. Разберем пару свойств (ключей):

  • [li]"AbilityTextureName" - иконка. Указав "treant_living_armor", получим
    images
    [/li]
    [li]"AbilityUnitTargetTeam" фракции (команды), на которых будет действовать заклинание, например: "DOTA_UNIT_TARGET_TEAM_ENEMY" на врагов. [/li]
    [li]"AbilityUnitTargetType" типы юнитов, на которых будет действовать заклинание, например: "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" на героев и на крипов[/li]
Остальные разберем в процессе написания самих скилов. А сейчас стоит отметить две ключевых штуки: Events и Actions по сути из них строится вся структура абилок.
Код:
Event 
{
  Action
}
- когда происходит событие, будут выполняться действия, которые мы указали.
Вот список значений из второй ссылки (Вики)
Events
OnChannelFinish
OnChannelInterrupted
OnChannelSucceeded
OnOwnerDied
OnOwnerSpawned
OnProjectileFinish
OnProjectileHitUnit
OnSpellStart
OnToggleOff
OnToggleOn
OnUpgrade
OnAbilityEndChannel
OnAbilityStart
OnAttack
OnAttackAllied
OnAttackFailed
OnCreated
OnEquip
OnHealReceived
OnHealthGained
OnHeroKilled
OnManaGained
OnOrder
OnProjectileDodge
OnRespawn
OnSpentMana
OnStateChanged
OnTeleported
OnTeleporting
OnUnitMoved
У Actions тоже есть список, но я не буду копировать его, просто в качестве примера возьму один элемент:
fb655d2b30b196795b8aeb6636ebc9db.png
Где Heal - название, а под ним перечисляются свойства: HealAmount и Target.
Код:
 Название
{
  "Свойство"   "значение"
}
Не обязательно использовать все свойства (Обычно по логике видно, без каких будет работать) Например у Damage есть необязательные свойства минДмг и МаксДмг, а вот без Таргета (цель) работать не будет :)
В общем хватит теории делаем простую абилку: будем наносить урон по таргету.
4138a3f81101885f85c2de9462606e4e.gif
Сделаю вид, что вы уже прочитали в каком-либо гайде (а они есть) о том, как\где создавать абилку и добавлять ее к герою.
Где-то в файле npc_abilities_custom.txt пишем:
Код:
"DOTAAbilities"
{
	"Version"		"1"

	"my_mega_ability"
	 {
		"BaseClass"       	    "ability_datadriven"
		"AbilityBehavior"        "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
		"AbilityUnitTargetTeam"   "DOTA_UNIT_TARGET_TEAM_BOTH"
     	"AbilityUnitTargetType"   "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP"
		"AbilityTextureName"  	"viper_viper_strike"

		"AbilityCastRange" 		"1000"
		"AbilityCooldown"		"1"
		
		"OnSpellStart"
		{
			"Damage"
			{
				"Damage" 		 "100"
				"Type"		"DAMAGE_TYPE_MAGICAL"
				"Target"		"TARGET"
			}
		}
	}
}
"OnSpellStart" - на старте заклинания.
Значения Type" "DAMAGE_TYPE_MAGICAL" можно посмотреть в разделе констант: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Constants

В следующей части добавим анимацию, как вы могли заметить, хп отнимается моментально и не понятно кто нанес урон.
To be continue . . .
 
Последнее редактирование модератором:

quantt

Новичок
9 Авг 2015
3
0
Привет друг, у меня есть вопрос. Можно ли как-то увести исходники скилов(Нашел мод с интересными скилами но хреновой реализацией)?( 1-й День занимаюсь картостоением, прости если вопрос тупой ::) )
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Привет друг, у меня есть вопрос. Можно ли как-то увести исходники скилов(Нашел мод с интересными скилами но хреновой реализацией)?( 1-й День занимаюсь картостоением, прости если вопрос тупой ::) )
Вполне можно. Качаешь мод в воркшопе, качаешь GFC Scape, идешь в Steam\steamapps\workshop\content\570\ ищешь папку по id мода, открываешь GFC Scapом и распаковываешь. Пожалуйста, скрипты и абилки доступны полностью с комментами.
 
Последнее редактирование модератором:

doter.ua

Продвинутый
17 Авг 2014
280
5
CryDeS, а потом в стиме появляются клоны твоей карты с постфиксом multiplier x20 и онлайном больше чем в твоем оригинале, который становится мусором. Не все используют чужие исходники в подобных целях, но таких достаточно.
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
[quote author=doter.ua link=topic=69.msg1330#msg1330 date=1439193606]
CryDeS, а потом в стиме появляются клоны твоей карты с постфиксом multiplier x20 и онлайном больше чем в твоем оригинале, который становится мусором. Не все используют чужие исходники в подобных целях, но таких достаточно.
[/quote]
Я знаю что не все используют исходники для обучения, но что уж поделать если почти все прозрачно.
Да и у меня вообще мнение, что если используют мое и переделывают - пожалуйста, мне не особо жалко. Но всякие multiplier'ы я все же не очень понимаю, скучные же они, чисто на разок сыграть. А если после multiplierа твою карту бросили, ну значит карта была не так интересна, верно?
 

Slavko

Продвинутый
22 Июн 2015
224
4
doter.ua, значит разработчик заслужил, раз не догадался немного доработать свою карту первым :)
 

vanjavs

Новичок
15 Сен 2015
6
0
[quote author=doter.ua link=topic=69.msg334#msg334 date=1411677995]
ability_datadriven



baf58ec2fa0ea917920035853c864c8d.png
Предисловие:
Для полноценного гайда за один присест времени нету, буду добавлять фрагментами.
Часть 1


Статья ориентирована на тех, кто уже делал скилы сам или по предыдущим гайдам (на основе существующих "BaseClass" "ability_name")
Первым делом нужно указать "BaseClass" "ability_datadriven"
Следующее, что нужно сделать - сохранить (добавить в закладки) два ресурса:
По сути это ссылки на одно и то же, но в первой более удобная структура (есть понятные заметки-инструкции), а вторая (вики), в отличии от первой, обновляется. Если не смогли найти что-нибудь в первой - пробуйте на вики.
Просто так начать кодить будет непросто. Вначале можно искать чужие примеры (GitHub, Holdout и т.д.), и переделывать их.
Сам принцип работы с Key Value подразумевает, что вы знаете некоторые value которые можно подставить, или знаете где их взять (если забыли как они пишутся).
Например: одним из первых параметров, которые нужно будет указать, это поведение абилки (англ. behavior) "AbilityBehavior". Так с ходу сложно предположить, что вообще туда можно подставить, но если в первой из ссылок воспользоваться поиском по слову behavior (для chrome Ctrl + F), то можно увидеть, что есть список констант (зарезервированных разработчиками значений).
Для наглядности скрин:
b01dcc77d36ff13dfc28d04c7a4b41d5.png
Там есть английские комменты, но все мы играли в доту, и даже без них понимаем, какая абилка использует DOTA_ABILITY_BEHAVIOR_PASSIVE или DOTA_ABILITY_BEHAVIOR_AOE. (забегая на перед, скажу, что можно использовать несколько поведений в одной абилке, разделяя значения символом "|")

Первую часть пилил в браузере (стим не запускал, уже поздно и мне влом 8) ), поэтому в основном сухая теория, во второй планирую показать простую абилку.
Пока буду искать время для второй части советую изучить первую ссылку, особенно верх и низ (в центре куча модифаеров, их можно не задрачивать :D )

Часть 2


1. Разберем пару свойств (ключей):

  • [li]"AbilityTextureName" - иконка. Указав "treant_living_armor", получим
    images
    [/li]
    [li]"AbilityUnitTargetTeam" фракции (команды), на которых будет действовать заклинание, например: "DOTA_UNIT_TARGET_TEAM_ENEMY" на врагов. [/li]
    [li]"AbilityUnitTargetType" типы юнитов, на которых будет действовать заклинание, например: "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP" на героев и на крипов[/li]
Остальные разберем в процессе написания самих скилов. А сейчас стоит отметить две ключевых штуки: Events и Actions по сути из них строится вся структура абилок.
Код:
Event 
{
  Action
}
- когда происходит событие, будут выполняться действия, которые мы указали.
Вот список значений из второй ссылки (Вики)
Events
OnChannelFinish
OnChannelInterrupted
OnChannelSucceeded
OnOwnerDied
OnOwnerSpawned
OnProjectileFinish
OnProjectileHitUnit
OnSpellStart
OnToggleOff
OnToggleOn
OnUpgrade
OnAbilityEndChannel
OnAbilityStart
OnAttack
OnAttackAllied
OnAttackFailed
OnCreated
OnEquip
OnHealReceived
OnHealthGained
OnHeroKilled
OnManaGained
OnOrder
OnProjectileDodge
OnRespawn
OnSpentMana
OnStateChanged
OnTeleported
OnTeleporting
OnUnitMoved
У Actions тоже есть список, но я не буду копировать его, просто в качестве примера возьму один элемент:
fb655d2b30b196795b8aeb6636ebc9db.png
Где Heal - название, а под ним перечисляются свойства: HealAmount и Target.
Код:
 Название
{
  "Свойство"   "значение"
}
Не обязательно использовать все свойства (Обычно по логике видно, без каких будет работать) Например у Damage есть необязательные свойства минДмг и МаксДмг, а вот без Таргета (цель) работать не будет :)
В общем хватит теории делаем простую абилку: будем наносить урон по таргету.
4138a3f81101885f85c2de9462606e4e.gif
Сделаю вид, что вы уже прочитали в каком-либо гайде (а они есть) о том, как\где создавать абилку и добавлять ее к герою.
Где-то в файле npc_abilities_custom.txt пишем:
Код:
"DOTAAbilities"
{
  "Version"   "1"

  "my_mega_ability"
  {
   "BaseClass"            "ability_datadriven"
   "AbilityBehavior"        "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
   "AbilityUnitTargetTeam"   "DOTA_UNIT_TARGET_TEAM_BOTH"
      "AbilityUnitTargetType"   "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_CREEP"
   "AbilityTextureName"    "viper_viper_strike"

   "AbilityCastRange"    "1000"
   "AbilityCooldown"   "1"
   
   "OnSpellStart"
   {
     "Damage"
     {
      "Damage"    "100"
      "Type"   "DAMAGE_TYPE_MAGICAL"
      "Target"   "TARGET"
     }
   }
  }
}
"OnSpellStart" - на старте заклинания.
Значения Type" "DAMAGE_TYPE_MAGICAL" можно посмотреть в разделе констант: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Constants

В следующей части добавим анимацию, как вы могли заметить, хп отнимается моментально и не понятно кто нанес урон.
To be continue . . .
[/quote]





А "тутор" будет продолжен, или все "Прошла любовь, завяли помидоры"(как-то так)? :-X
 
Последнее редактирование модератором:
Реклама: