Help Support Our Growing Community

DOTAFire is a community that lives to help every Dota 2 player take their game to the next level by having open access to all our tools and resources. Please consider supporting us by whitelisting us in your ad blocker!

Want to support DOTAFire with an ad-free experience? You can support us ad-free for less than $1 a month!

Go Ad-Free
Smitefire logo

Join the leading DOTA 2 community.
Create and share Hero Guides and Builds.

Create an MFN Account






Or

Elfansoer's Blog
Blog Posts: 9     Views: 20727     Comments: 6
Elfansoer
Show "lua" From:
DotA 2
Off Topic
January 22, 2018

Ability Lua Tutorial 1: Ability Form

Views: 2889 Elfansoer
Okay, since this is my very first tutorial, there may be some mistakes. Just go along with me and ask some question, and we'll be fine. After a lot of considerations (mostly in sleeping, but still), I decided to take this one as the first tutorial.

Ability Form



I'm pretty sure that you guys are already an expert in designing unique abilities and explain them to us, but how do you explain your abilities to Dota 2 engine?
You can tell the machine about your abilities by using a certain registration form. With this, there'll be more clarity for the machine about the description of your abilities, what they can do and what they cannot do.

Now the form, here you go.

Random Guy: Dafuq is that?

Relax, I'll explain them one by one. Just copy it to your editor, and save it as:
"<heroname>_<abilityname>.txt"
Where to? Anywhere, for now.

Hey, don't just read it. Copy and save it, get your hands dirty.

Now, here's the guide to fill the form. The form above has been filled with an abili…
Read More
January 23, 2018

Registering and Testing Ability

Time to make the dream come true.

EDIT: Some notes has been edited due to github repository change.

Dota 2 Addon: Ability Lua Example


Valve actually made their own tutorial on how to create custom abilities using lua. Well, "giving examples" is more accurate, but still it's very useful. The tutorial is an addon (custom game) named

"ability_lua_example"

.

To play the addon, simply open Dota 2, then on your console (make sure you enabled it first), put:
Code:
dota_launch_custom_game lua_ability_example hero_demo_main

Go with the flow (Lina recommended; she's hot), and voila: it looks like a hero demo! Go play with her and everything seems normal, except for the fact that she has 5 abilities.

Random guy: Okay, now what?

If you still didn't notice it, here's the hint: all of her abilities are written in Lua, and you may see (also edit) the script file(s).
The addon files are located on:
Code:
"<YourSteamLibrary>/dota 2 beta/game/dota_addons/lu

Read More
January 25, 2018

Antimage: Spell Shield Lua


Let's get our hands dirty.

EDIT: Some links have been updated due to github repository change.

Ability Form Review


Take a brief look on the ability's .txt file. It's quite short, since it's a simple ability.
Notice that the ability has been renamed as "antimage_spell_shield_lua" in order to avoid collision with the real one.
It is a basic ability with a passive behavior, and nothing else. No need for cast points, unit targetting, spell immunity, etc etc. It also has just one ability specials, which defines the magic resistance bonus on each level.
In short, it's short.

Introducing: Main Lua File


Open up a text-editor, create new file and save it as "antimage_spell_shield_lua.lua", placed according to the .txt file. This will be the main script file, which defines what the ability does. Let's begin with the keypoints.

Class Identifier


You should generally want this particular line at the start of your lua files. This defines the start of a class for c…
Read More
January 26, 2018

Troll Warlord's Fervor


a stack neverflow

EDIT: Some links have been updated due to github repository change.

Overview


There's not much to discuss for Fervor's base .txt and main lua. As a passive, Fervor does not require targetting filter and other important values, so the txt file is pretty much similar to Spell Shield. There is one difference, however, that it states "SpellDispellable" as no. This is optional, since it only affects the tooltip.
The ability file is also as simple as Spell Shield. A copy-paste, in fact, since the ability is not required to do anything other than spawning the modifier.

The actual actions happened at modifier instead, so let's focus on that one.

Modifier: Characteristics


This modifier should appear at buff bar, hence we need to show it. Since it is not on the background anymore, its characteristics should be specified, such as:
  • Is it hidden?
  • Is it a debuff? (Otherwise is a buff)
  • Is it can be purged?
  • Is it removed on death?

So far, Spell Shiel…
Read More
January 29, 2018

Ogre Magi's Fireblast


Straight to the action

EDIT: Some links have been updated due to github repository change.

Previously we've been dealt with passive abilities, which tends to do their action on their modifiers. Now, this unit-targetted ability will have actions that is defined in the main lua instead; modifier will be a simple tag without action.

Ability Form (.txt file)


The base .txt filled with things that have been covered in the first tutorial. Fireblast is a unit-targeted ability which target enemies that may be heroes or creeps, and deals magical damage that may be dispelled by strong dispel but cannot pierce spell immunity.

A question may be raised as to why the damage section is empty even though Fireblast do damages its target. The thing is, it does not have considerable impact as long as your code follows this form. If the form has "AbilityDamage" value, the code may call "Ability:GetAbilityDamage()" to retrieve it. If the form uses "AbilitySpecial" instead, then…
Read More
February 05, 2018

Chaos Knight's Chaos Bolt


Playing with projectile

EDIT: Some links have been updated due to github repository change.

Ability Form: Precache


I've been avoiding aesthetics up until now, but finally it's unavoidable anymore. If you look at the base .txt file, everything seems normal excluding that "precache" key-value.

Okay, here's the thing about precache: the engine is just pure lazy. It won't load any resources (such as particles and sounds) unless it is explicitly required. This 'precache' is a way to ensure the particle is required 'explicitly'. Spawning a hero is another one, but even the engine won't automatically load his/her voice until they're triggered to speak.
Particle not loaded means it won't show up. Got it?

Knowing a particle's path would require a Workshop Tools or a GCFScape, so if you don't want to be bothered by those, simply use the path I set there. The most essential particle is the "chaos_knight_chaos_bolt.vpcf" one; the rest is optional.

Logic: Tracking…
Read More

April 15, 2018

Slardar: Slithereen Crush


Search around

Preface


It's been a while, eh? Don't worry, I'm still pretty much alive (at least physically, but inside...).

So, I've been tweaking around github and decided to split between real version of Dota 2 abilities and tutorial version. Meaning, there are 2 implementations for each ability created in different github branch.

Why the split? I thought that for beginners, it would be better if they just understand basic functions explained in this tutorial, and the ability scripts should only show what's essential for them. Meanwhile, the real version of the ability tends to have a lot of fuss and fancy APIs which may confuse the learners.

I've moved tutorial version of the abilities from "master" branch to "tutorial" branch. Previous links have been updated to the new links, so make sure you get the correct version.

In short, to download ability scripts, go to branch tutorial in the github to get the 'easy' version, and go to branch master to ge…
Read More
August 02, 2018

Slark: Dark Pact


Waiting in interval

Tutorial Will be Moved


It's not that I wanted to, but apparently this blog isn't suitable for code-heavy writings. So, I decided to move the tutorial into the GitHub's wiki page.

Don't worry, I'll still be here if you have critics or questions regarding the tutorial.

So, rather than this post being empty, I'll write out the overview instead.

Overview


So, Dark Pact will teach us about how to use modifier's interval function; OnIntervalThink. Upon cast, Dark Pact will have a delay, and after that, continuously purges the caster.

There are 2 intervals; the delay and the continuous purge/damage. Both need to share the logic on one function; OnIntervalThink. In this case, we use boolean to check which interval invokes the function.

How it should be implemented? Here's the full tutorial: Slark's Dark Pact.

Conclusion


Next, we're going to have Linear Projectiles and How You Use Them, using Mirana's Sacred Arrow.
Comments, Critics and Questions…
Read More

DOTAFire is the place to find the perfect build guide to take your game to the next level. Learn how to play a new hero, or fine tune your favorite DotA hero’s build and strategy.

Copyright © 2019 DOTAFire | All Rights Reserved