You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _articles/abilities/ability-keyvalues.md
+12-9Lines changed: 12 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,9 @@ steamId: '76561198046984233'
5
5
date: 10.12.2014
6
6
---
7
7
8
+
# Ability KeyValues
9
+
10
+
8
11
<!--
9
12
TODO: Some categories are missing:
10
13
[](##damage "Damage type of the ability")
@@ -98,7 +101,7 @@ Example:
98
101
|DOTA_ABILITY_BEHAVIOR_AUTOCAST|Can be cast automatically.<br/>Usually doesn't work by itself in anything that is not an ATTACK ability.|
99
102
|DOTA_ABILITY_BEHAVIOR_HIDDEN|Can't be cast, and won't show up on the HUD.|
100
103
|DOTA_ABILITY_BEHAVIOR_AOE|Can draw a radius where the ability will have effect.<br/>Like POINT, but with an area of effect display.<br/>Makes use of `AOERadius`.|
101
-
|DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE|CAnnot be learned by clicking on the HUD.<br/>Example: Invoker's abilities.|
104
+
|DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE|Cannot be learned by clicking on the HUD.<br/>Example: Invoker's abilities.|
102
105
|DOTA_ABILITY_BEHAVIOR_ITEM|Ability is tied to an item. There is no need to use this, the game will internally assign this behavior to any `"item_datadriven"`.|
103
106
|DOTA_ABILITY_BEHAVIOR_DIRECTIONAL|Has a direction from the hero.<br/>Examples: Mirana's Arrow, or Pudge's Hook.|
104
107
|DOTA_ABILITY_BEHAVIOR_IMMEDIATE|Can be used instantly, without going into the action queue.|
@@ -107,7 +110,7 @@ Example:
107
110
|DOTA_ABILITY_BEHAVIOR_ROOT_DISABLES|Cannot be used when rooted.|
108
111
|DOTA_ABILITY_BEHAVIOR_UNRESTRICTED|Ability is allowed when commands are restricted.<br/>Example: Lifestealer's Consume.|
109
112
|DOTA_ABILITY_BEHAVIOR_DONT_ALERT_TARGET|Does not alert enemies when target-cast on them.<br/>Example: Spirit Breaker's Charge.|
110
-
|DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT|Should not resume movement when it completes.<br/>Only applicable ot no-target, non-immediate abilities.|
113
+
|DOTA_ABILITY_BEHAVIOR_DONT_RESUME_MOVEMENT|Should not resume movement when it completes.<br/>Only applicable to no-target, non-immediate abilities.|
111
114
|DOTA_ABILITY_BEHAVIOR_DONT_RESUME_ATTACK|Ability should not resume command-attacking the previous target when it completes.<br/>Only applicable to no-target, non-immediate abilities and unit-target abilities.|
112
115
|DOTA_ABILITY_BEHAVIOR_NORMAL_WHEN_STOLEN|Ability still uses its normal cast point when stolen.<br/>Examples: Meepo's Poof, Furion's Teleport.|
The following behaviors will generate a line in the ability tooltip. You want at least one of 1 behavior of this list. The rest of the ability behaviors don't have any UI support yet.
125
+
The following behaviors will generate a line in the ability tooltip. You want at least one behavior of this list. The rest of the ability behaviors don't have any UI support yet.
123
126
124
127
The UI can only show one behavior tooltip, but internally it will behave as expected, as long two contradicting keys are not used together (like *NO_TARGET* with *UNIT_TARGET*).
@@ -172,7 +175,7 @@ At which level the ability can first be learned. This takes negative values, to
172
175
173
176
### LevelsBetweenUpgrades
174
177
175
-
How many levels to wait to be able to learnt he next rank.
178
+
How many levels to wait to be able to learn the next rank.
176
179
177
180
*Example*:
178
181
```
@@ -189,7 +192,7 @@ Max level of the heroes can be changed using the Lua `SetCustomHeroMaxLevel(MAX_
189
192
190
193
The icon file name that should be used in the UI for this ability. You can reutilize the icon from another just by putting that ability name here if desired. The internal name of every default dota ability can be found in: [Built-In Ability Names](https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Ability_Names).
191
194
192
-
To use your own icons, place them in `resources/flash3/images/spellicons` in you game addon folder, and just directly refer to the image name without the path or the extension.
195
+
To use your own icons, place them in `resources/flash3/images/spellicons` in your game addon folder, and just directly refer to the image name without the path or the extension.
193
196
194
197
**Format**: 128x128 PNG
195
198
```
@@ -264,11 +267,11 @@ Flags allow targeting units that are ignored by default (for example, magic immu
264
267
|DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS|Ignores units with `"IsAncient" "1"` defined.<br/>Example: Hand of Midas.|
265
268
|DOTA_UNIT_TARGET_FLAG_NOT_CREEP_HERO|Ignores units with `"ConsideredHero" "1"` defined.<br/>Examples: Astral Imprisonment, Disruption, Sunder.|
266
269
|DOTA_UNIT_TARGET_FLAG_NOT_DOMINATED|Ignores units with `MODIFIER_STATE_DOMINATED`.|
267
-
|DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS|Ignores untis with `MODIFIER_PROPERTY_IS_ILLUSION`.|
270
+
|DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS|Ignores units with `MODIFIER_PROPERTY_IS_ILLUSION`.|
268
271
|DOTA_UNIT_TARGET_FLAG_NOT_NIGHTMARED|Ignores units with `MODIFIER_STATE_NIGHTMARED`.|
269
272
|DOTA_UNIT_TARGET_FLAG_NOT_SUMMONED|Ignores units created through the `SpawnUnit`[action](https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Abilities_Data_Driven#Actions).|
270
273
|DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD|Units with `MODIFIER_STATE_OUT_OF_GAME`.|
271
-
|DOTA_UNIT_TARGET_FLAG_PLAYER_CONTROLLED|Units controllable by a player, accesible with [Lua](https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/API)'s `IsControllableByAnyPlayer()`.|
274
+
|DOTA_UNIT_TARGET_FLAG_PLAYER_CONTROLLED|Units controllable by a player, accessible with [Lua](https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/API)'s `IsControllableByAnyPlayer()`.|
272
275
|DOTA_UNIT_TARGET_FLAG_PREFER_ENEMIES|Prioritizes units over trees when both are selectable.|
273
276
274
277
**Clean list**:
@@ -396,7 +399,7 @@ Instead of the `"Radius"` keyvalue, which only takes one parameter, `Line` takes
396
399
397
400
#### ScriptSelectPoints
398
401
399
-
Its use is very rare, normally when the targeting is complex we would just use `RunScript` lua and do all the acitons inside the script.
402
+
Its use is very rare, normally when the targeting is complex we would just use `RunScript` lua and do all the actions inside the script.
Copy file name to clipboardExpand all lines: _articles/abilities/abilityduration-tooltips.md
+6-3Lines changed: 6 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,9 @@ steamId: '76561198046984233'
5
5
date: 15.12.2014
6
6
---
7
7
8
+
# AbilityDuration tooltips
9
+
10
+
8
11
**TL;DR:** AbilityDuration is a fairly useless keyvalue because whoever coded it forgot to make an automatic tooltip like with `AbilityDamage`. Use a "duration" AbilityValue and connect it with lua instead.
9
12
10
13
Imagine you want to have an ability apply a modifier for some seconds, duration changing with levels.
@@ -17,15 +20,15 @@ You can fall for the trap and do this:
17
20
18
21
And then have your modifier refer to %AbilityDuration in the "Duration" modifier key. All fine for now.
19
22
20
-
But when when you want to indicate that your ability lasts for said duration, this AbilityDuration doesn't generate a **"DURATION:"** tooltip by itself, so you have 3 options:
23
+
But when you want to indicate that your ability lasts for said duration, this AbilityDuration doesn't generate a **"DURATION:"** tooltip by itself, so you have 3 options:
21
24
22
25
**Option 1.** Write "Last 3 seconds at level 1 and then 2 at level 2 and 3" in the _Description.
23
26
24
27
This is bad for the reasons explained before.
25
28
26
-
**Option 2*.** Have a "duration" AbilityValue in addition to the "AbilityDuration" and keep both values syncronized.
29
+
**Option 2*.** Have a "duration" AbilityValue in addition to the "AbilityDuration" and keep both values synchronized.
27
30
28
-
Suboptimal but decent solution, as it allows you to use ability:GetAbilityDuration() which takes takes its value from AbilityDuration.
31
+
Suboptimal but decent solution, as it allows you to use ability:GetAbilityDuration() which takes its value from AbilityDuration.
29
32
30
33
**Option 3.** Remove AbilityDuration, only keep the AbilityValue. Best way as far as I can tell.
Copy file name to clipboardExpand all lines: _articles/abilities/datadriven/all-about-the-target.md
+5-2Lines changed: 5 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,9 @@ steamId: '76561198046984233'
5
5
date: 23.01.2015
6
6
---
7
7
8
+
# All about the Target
9
+
10
+
8
11
I wanted to review a very old thread which was posted almost one year ago but still isn't completely well documented anywhere:
9
12
10
13
> "Target" is one bitch of a key.
@@ -19,7 +22,7 @@ Quoting the [wiki](https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tool
19
22
20
23
This thread intends to compile every Target-related decision.
21
24
22
-
To test everything and get results, I used some simple scrips to test which parameters are seen in each event context. The KV and Lua Scripts are found in the second post, which also contains all the debug data.
25
+
To test everything and get results, I used some simple scripts to test which parameters are seen in each event context. The KV and Lua Scripts are found in the second post, which also contains all the debug data.
23
26
24
27
After running many tests with different ability behaviors, here's what I got:
Copy file name to clipboardExpand all lines: _articles/abilities/datadriven/apply-hero-and-creep-modifier-durations.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,9 @@ steamId: '76561198046984233'
5
5
date: 15.01.2015
6
6
---
7
7
8
+
# Apply Hero and Creep modifier durations
9
+
10
+
8
11
I came up with this method after kritth showed us that you can directly add a `"Duration"` key value to an `"ApplyModifier"` block and the use of the `"Target"` block without a Radius (defaulting to 0).
9
12
10
13
Basically, abusing the datadriven system we can do this on any event:
Copy file name to clipboardExpand all lines: _articles/abilities/datadriven/channeling-animations.md
+5-2Lines changed: 5 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,10 @@ steamId: '76561198046984233'
5
5
date: 18.01.2015
6
6
---
7
7
8
-
### Short Version:
8
+
# Channeling Animations
9
+
10
+
11
+
## Short Version:
9
12
10
13
ApplyModifier with short duration in a OnThinkInterval, channeling modifier has an OverrideAnimation with a ACT_ from the [Action List](https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Actions_List) or with the method explained later.
11
14
@@ -36,7 +39,7 @@ ApplyModifier with short duration in a OnThinkInterval, channeling modifier has
Copy file name to clipboardExpand all lines: _articles/abilities/datadriven/datadriven-ability-events-modifiers.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,14 +5,17 @@ steamId: '76561198046984233'
5
5
date: 10.12.2014
6
6
---
7
7
8
+
# DataDriven Ability Events & Modifiers
9
+
10
+
8
11
A guide that tries to cover every Ability & Modifier Event of the *ability_datadriven* system, with examples.
9
12
10
13

11
14
12
15
<aname="start"></a>
13
16
This is an Intermediate guide that expects some knowledge of the most common first-level keyvalues. If unsure about the meaning of any of them, check the [DataDriven Ability Breakdown](/abilities/ability-keyvalues).
14
17
15
-
###Introduction
18
+
## Introduction
16
19
17
20
In the Data Driven system, an Event is something that triggers when a particular in-game event occurs, for example, finishing the cast of an ability.
Copy file name to clipboardExpand all lines: _articles/abilities/datadriven/illusion-ability-example.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,9 @@ steamId: '76561198046984233'
5
5
date: 11.01.2015
6
6
---
7
7
8
+
# Illusion Ability Example
9
+
10
+
8
11
This is a lua script to properly create an illusion.
9
12
10
13
Note: Datadriven Modifiers with "AllowIllusionDuplicate" aren't automatically created with this method and need to be added manually in lua. In this same script we also attempt to add the datadriven version of `modifier_metamorphosis` which can also be found [here in the SpellLibrary](https://github.com/Pizzalol/SpellLibrary/blob/SpellLibrary/game/dota_addons/spelllibrary/scripts/npc/abilities/terrorblade_metamorphosis_datadriven.txt)
@@ -55,7 +58,7 @@ function ConjureImage( event )
55
58
end
56
59
end
57
60
58
-
-- Add our datadriven Metamorphosis modifier if appropiate
61
+
-- Add our datadriven Metamorphosis modifier if appropriate
59
62
-- You can add other buffs that want to be passed to illusions this way
60
63
ifcaster:HasModifier("modifier_metamorphosis") then
0 commit comments