How to get your GUI spell approved

Level 35
Joined
Mar 6, 2006
Messages
9,243

How to get your GUI spell approved


Introduction

When uploading a spell, it might not be clear what are the key points moderators look at when reviewing a spell. Often it takes several versions and reviews to get a spell approved. The first time a moderator takes a look at your spell, it might get rejected due to simple things.

Uploading your spell in as complete stage as possible increases you chances to get your spell approved sooner.

Triggers


Leaks

The spell must be leak free. The most common leaks are location leaks (position of...) and unit groups.
Information about leaks and how to get rid of them here: http://www.hiveworkshop.com/forums/triggers-scripts-269/things-leak-35124/

Multi-instanceability

Also known as MUI. The spell must work with more than one unit using it at the same time. Always place two or more casters in your test map. If the ability is not passive, cast the spell with both units almost at the same time. The spell should work flawlessly.

Systems to help you make MUI, pick your favourite:
http://www.hiveworkshop.com/forums/spells-569/gui-unit-indexer-1-2-0-2-a-197329/
http://www.hiveworkshop.com/forums/spells-569/gui-dynamic-indexing-template-144325/
http://www.hiveworkshop.com/forums/trigger-gui-editor-tutorials-279/hashtables-mui-133407/
http://www.hiveworkshop.com/forums/...orials-279/visualize-dynamic-indexing-241896/

If you are using waits, there is a good chance your spell is not MUI and will get rejected. Use timers or a looping trigger instead.



  • Example
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Animate Dead
    • Actions
      • Set unit = (Triggering unit)
      • Wait 2.00 seconds
      • Unit - Kill unit

Efficiency

Though efficiency is not that important in GUI, it can still make a difference between an approved an a rejected spell.

Repeated function calls
Whenever there is something inside brackets, it is a function call.
  • Unit - Kill (Triggering unit)
Triggering unit is in brackets, so it calls a function. Repeated function calls should be avoided.



  • Untitled Trigger 018
    • Events
    • Conditions
    • Actions
      • Unit - Add Acid Bomb to (Triggering unit)
      • Hero - Set (Triggering unit) Hero-level to 2, Hide level-up graphics
      • Unit - Make (Triggering unit) Invulnerable
      • Unit - Kill (Triggering unit)
->
  • Untitled Trigger 018
    • Events
    • Conditions
    • Actions
      • Set u = (Triggering unit)
      • Unit - Add Acid Bomb to u
      • Hero - Set u Hero-level to 2, Hide level-up graphics
      • Unit - Make u Invulnerable
      • Unit - Kill u


Triggers that are on for no reason
These include looping triggers most often. Usually looping triggers shouldn't be on if there are no active instances of the spell. Make sure you turn them off.
  • Trigger - Turn off (*trigger*)

Another example, if you detect the death of dummy units with a trigger, then turn off the trigger if there are no dummies in the map.

Level support

Abilities must support more than one level. For example you can increase the damage of the spell:
  • Unit - Cause (Triggering unit) to damage (Target unit of ability being cast), dealing (20.00 + (10.00 x (Real((Level of Storm Bolt for (Triggering unit)))))) damage...
You shouold also use the ability level at the time of casting, if you have a periodic loop, you must store the ability level.

Debugging tip

Use debugging messages. If you are using triggers that turn off for example, place a debug message right before you turn the trigger off:

  • Game - Display to (All players) for 5.00 seconds the text: Debug message
  • Trigger - Turn off (This trigger)

Use the Game - Display to... for debugging your spell. You can display the value of real and integers, unit types and so on, or just some string.

Object editor


Abilities

Make sure the tooltips do not suck. Look at standard Blizzard abilities for reference. Try to use proper grammar.
Make sure the hotkeys are correct and pay attention to the ability icon position.
You should use active icons for active spells and passive icons for passive spells. Passive icons look like they are pressed down.
Some might find "rainbow tooltips" annoying, so try to avoid using too many colours.

If you are using Channel as the base ability, add about a second of Follow though time. During that time, the caster won't auto-attack, it will keep casting the ability. Adjust the time so that the caster has enough time to end the casting animation, but doesn't start another loop of the animation.

Units

If you are using a dummy, make sure it is set up correctly. Most common mistakes are giving it vision when it shouldn't and not setting it to Can't raise, does not decay.

If your dummy unit has Locust ability, it doesn't need invulnerability ability since Locust makes it invulnerable.

Dummy casters should have Art - Animation - Cast Point set to 0.000, so that they cast the ability instantly. of course, if you want delayed casting, you can adjust the value.

Other


Uploading

The spell must have an in-game screenshot.
Describe what your spell does in the description.
Use a proper name for your ability. Include a version number. The version number should be 1.0 or at least close to it. if you upload v0.01, it signals that it might go through significant changes, so a moderator might skip it. Also, only completed abilities should be uploaded.
It is a good idea to have a change log, so people can see what has been changed between version. Very useful when a moderator checks your spell.

Test map

Always add two or more units with your ability into the map so that the one who reviews your spell won't have to add units himself.
Make sure you have included importing instructions in the map file.
Put triggers that belong to your ability/system into one folder. Put unrelated triggers in other folder(s).
 
Last edited by a moderator:
You should also mention how using PolledWait/TriggerSleepAction is bad too.

There are also cases when users do something like this:

  • If (x == 1) Then
    • do something with 'blarg'
  • else
    • If (x == 2) Then
      • do something with 'foo'
    • else
      • If (x == 3) Then
        • do something with 'aybabtu'
      • else
        • If (x == 4) Then
          • do something with 'banana'
        • else
Instead, they should be saving 'blarg', 'foo', 'aybabtu', and 'banana' in an array:

  • Set array[1] = 'blarg'
  • Set array[2] = 'foo'
  • Set array[3] = 'aybabtu'
  • Set array[4] = 'banana'
And do this instead:

  • Do something with array[x]
I see this quite often, so I think it's worth mentioning.
 
Level 14
Joined
Nov 18, 2007
Messages
1,084
For the Triggers section, state that the user should only use arrays if they're actually going to use it as an array or like what Magtheridon96 stated, not to save variable space.

For the Units section, I suggest saying that the user mostly only needs to create one dummy unit to cast an ability on multiple units. The exceptions would be for abilities that are channeling and a few other random ones like Impale.

For the Test Map section, you could tell them to add different test units to allow better testing of the spell, like putting magic-immune units, flying units, mechanical units, etc.
 
Level 18
Joined
Jan 1, 2011
Messages
1,392
Under the Other Category I would add that the triggers must be posted and in english.
And perhaps mention originality, if a system/spell already exists there is no reason to create another.
Credits for sure, like say someone used bribe's indexer, credits should be given. Also people shouldn't modify other's resources and repost it.

Otherwise, great tutorial ;p
 
Top