• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Charge v1.00

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
  • Like
Reactions: Klingo
SOMEONE ELSE REVIEW PLEASE
see the 10th post...

Level 10 Tooltip:

Note:
Unit cannot pass trough any buildings/units/unwalkable terrain ( you can try to get to Tome book without destroying towers but it should not work)
Effects:
All effects are units (change model file to change effect)
Size of effects will get bigger by level
Editable in object editor:
Range,Damage,Stun Duration,cooldown,mana cost
Editable in trigger editor:
Minimum range,speed (current periodic event 0.06),range of steps (current range 100)
How to copy:
Just copy/pase from map to map but don´t close the editor (so do it by Ctrl + O or File > Open Map...)
  • .Map initialization
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Hashtable - Create a hashtable
      • Set HT = (Last created hashtable)
      • Player Group - Pick every player in (All players) and do (Actions)
        • Loop - Actions
          • Player - Disable WIND WALK (to go trough units) for (Picked player)
  • S 001 EVENT
    • Events
      • Unit - A unit Begins casting an ability
    • Conditions
      • (Ability being cast) Equal to Charge (to trigger and cast the spell)
    • Actions
      • Set POINT[0] = (Position of (Triggering unit))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Load (Key 001 BOOLEAN) of (Key (Triggering unit)) from HT) Equal to False
        • Then - Actions
          • Hashtable - Save True as (Key 001 BOOLEAN) of (Key (Picked unit)) in HT
          • Set POINT[1] = (Target point of ability being cast)
          • Hashtable - Save (((Integer((Distance between POINT[0] and POINT[1]))) / 100) + 1) as (Key 001 STEPS) of (Key (Triggering unit)) in HT
          • Hashtable - Save (Angle from POINT[0] to POINT[1]) as (Key 001 ANGLE) of (Key (Triggering unit)) in HT
          • Custom script: call RemoveLocation(udg_POINT[1])
          • Animation - Change (Triggering unit)'s vertex coloring to (0.00%, 0.00%, 0.00%) with 100.00% transparency
          • Player - Enable WIND WALK (to go trough units) for (Triggering player)
          • Custom script: call IssueImmediateOrderBJ( GetTriggerUnit(), "windwalk" )
          • Player - Disable WIND WALK (to go trough units) for (Triggering player)
          • Unit Group - Add (Triggering unit) to GROUP[1]
          • Unit - Make (Triggering unit) Invulnerable
        • Else - Actions
          • -------- < LAST MOVE > --------
          • -------- this is the last step of charge,if more than 6 steps of charge were done the spell will be casted --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load (Key 001 STEPS DONE) of (Key (Triggering unit)) from HT) Greater than 6
            • Then - Actions
              • -------- < LAST MOVE EFFECT > --------
              • Unit - Create 1 LAST MOVE EFFECT for Neutral Passive at POINT[0] facing (Facing of (Triggering unit)) degrees
              • Unit - Kill (Last created unit)
              • Animation - Change (Last created unit)'s size to ((((Real((Level of Charge (to trigger and cast the spell) for (Triggering unit)))) x 7.50) + 75.00)%, 0.00%, 0.00%) of its original size
            • Else - Actions
              • Unit - Order (Triggering unit) to Stop
          • Unit - Remove Wind Walk buff from (Triggering unit)
          • Animation - Change (Triggering unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
          • Hashtable - Clear all child hashtables of child (Key (Triggering unit)) in HT
          • Unit - Make (Triggering unit) Vulnerable
      • Custom script: call RemoveLocation(udg_POINT[0])
      • -------- TRIGGER INFO: --------
      • -------- < This trigger will trigger and cast the spel if 001 STEPS DONE is more than 6,each step is equal to 100 range > --------
      • -------- you can change "Unit - A unit Begins casting an ability" if you dont like it --------
      • -------- 001 BOOLEAN set to True means that spell was begin casteing before and that now it can be casted to targeted point,instead of chargeing to targeted point --------
      • -------- Wind Walk Enable,<use>,Disable makes Waind Walk´s icon hidden and makes unit go trough units --------
  • S 001 RUN
    • Events
      • Time - Every 0.06 seconds of game time
    • Conditions
      • (GROUP[1] is empty) Equal to False
    • Actions
      • Unit Group - Pick every unit in GROUP[1] and do (Actions)
        • Loop - Actions
          • -------- < MOVING > --------
          • Set INT[0] = (Load (Key 001 STEPS) of (Key (Picked unit)) from HT)
          • Set INT[1] = (Load (Key 001 STEPS DONE) of (Key (Picked unit)) from HT)
          • Set RE[0] = (Load (Key 001 ANGLE) of (Key (Picked unit)) from HT)
          • Set POINT[0] = (Position of (Picked unit))
          • Set POINT[1] = (POINT[0] offset by 100.00 towards RE[0] degrees)
          • Unit - Move (Picked unit) instantly to POINT[1], facing RE[0] degrees
          • Set POINT[2] = (Position of (Picked unit))
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Distance between POINT[1] and POINT[2]) Less than 0.01
            • Then - Actions
              • Hashtable - Save (INT[0] - 1) as (Key 001 STEPS) of (Key (Picked unit)) in HT
              • Hashtable - Save (INT[1] + 1) as (Key 001 STEPS DONE) of (Key (Picked unit)) in HT
              • -------- < MOVING EFFECT > --------
              • Unit - Create 1 MOVING EFFECT for Neutral Passive at POINT[0] facing RE[0] degrees
              • Unit - Add a 0.40 second Generic expiration timer to (Last created unit)
              • Animation - Change (Last created unit)'s size to ((((Real((Level of Charge (to trigger and cast the spell) for (Picked unit)))) x 5.00) + 50.00)%, 0.00%, 0.00%) of its original size
            • Else - Actions
              • Unit - Move (Picked unit) instantly to POINT[0], facing RE[0] degrees
              • Hashtable - Save 0 as (Key 001 STEPS) of (Key (Picked unit)) in HT
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load (Key 001 STEPS) of (Key (Picked unit)) from HT) Equal to 0
            • Then - Actions
              • Unit Group - Remove (Picked unit) from GROUP[1]
              • Set POINT[3] = (POINT[2] offset by 0.01 towards RE[0] degrees)
              • Trigger - Turn off S 001 minimum range <gen>
              • Custom script: call IssuePointOrderLocBJ( GetEnumUnit(), "dreadlordinferno", udg_POINT[3] )
              • Trigger - Turn on S 001 minimum range <gen>
              • Custom script: call RemoveLocation(udg_POINT[3])
            • Else - Actions
          • Custom script: call RemoveLocation(udg_POINT[0])
          • Custom script: call RemoveLocation(udg_POINT[1])
          • Custom script: call RemoveLocation(udg_POINT[2])
      • -------- TRIGGER INFO: --------
      • -------- < this trigger moves unit to targeted point until his steps are set to 0 > --------
      • -------- ( 1 step is equal to 100 range ) --------
      • -------- "(Distance between POINT[1] and POINT[2]) Less than 0.011" is here to check if unit is near wall/building/unwalkable terrain --------
      • -------- Disable/Remove it if you want unit to go trough walls/buildins/unwalkable terrain,but you will have to turn off collusion instead useing Wind Walk --------
      • -------- WARNING: increaseing periodi event of this trigger can make the spell but if unit can cast it while chargeing (like this its impossible because unit stops every 0.06 seconds --------
      • -------- pauseing unit would make Wind Walk ability disabled --------
  • S 001 minimum range
    • Events
      • Unit - A unit Is issued an order targeting a point
    • Conditions
      • (Issued order) Equal to (Order(dreadlordinferno))
    • Actions
      • Trigger - Turn off (This trigger)
      • Set POINT[0] = (Position of (Triggering unit))
      • Set POINT[1] = (Target point of issued order)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Distance between POINT[0] and POINT[1]) Less than 700.00
        • Then - Actions
          • Unit - Pause (Triggering unit)
          • Unit - Unpause (Triggering unit)
          • Unit - Order (Triggering unit) to Stop
          • Unit - Move (Triggering unit) instantly to POINT[0]
          • Game - Force (Triggering player) to press the key Y
          • Animation - Change Granite Golem 0015 <gen>'s vertex coloring to (100.00%, 100.00%, 100.00%) with 0.00% transparency
          • Custom script: if (GetLocalPlayer() == GetTriggerPlayer()) then
          • Sound - Play Error <gen>
          • Custom script: endif
        • Else - Actions
      • Custom script: call RemoveLocation(udg_POINT[1])
      • Custom script: call RemoveLocation(udg_POINT[2])
      • Trigger - Turn on (This trigger)
      • -------- ----------------------------------------------------------------------------------------------< TRRIGGER INFO >---------------------------------------------------------------------------------------------- --------
      • -------- <this trigger makes that spell has minimum range 700> --------
      • -------- unpause/pause is needed to make unit stop at this event --------
      • -------- turn off/on trigger is needed because after unpause unit will be ordered to cast "dreadlordinferno" again --------
      • -------- if you dont want this trigger than you can remove the "001 STEPS DONE" since anyone will be allowed to make less than 7 steps --------
      • -------- ( 1 step is equal to 100 range ) --------
  • S 001 remove effect
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to MOVING EFFECT
    • Actions
      • Unit - Remove (Triggering unit) from the game
      • -------- this trigger is needed to make effect removed and better looking --------

none


Feel free to COMMENT xD

i hope you like it :D





Keywords:
charge, speed, fast, move
Contents

Spell (Map)

Reviews
12:31, 13th Jul 2010 TriggerHappy: You're using the wrong cast event. You are also doing a lot of weird things like pausing the units, forcing hotkeys, and disabling and enabling spells for players. Really they're all quite useless.

Moderator

M

Moderator

12:31, 13th Jul 2010
TriggerHappy:

You're using the wrong cast event.
You are also doing a lot of weird things like pausing the units, forcing hotkeys, and disabling and enabling spells for players. Really they're all quite useless.
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
  • Unit - Add a 0.40 second Generic expiration timer to (Last created unit)
Remove/kills the dummy, last trigger is completly useless with this.

  • Custom script: if (GetLocalPlayer() == GetTriggerPlayer()) then
    • Sound - Play Error <gen>
    • Custom script: endif
Can and will cause desync in multiplayer.

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
    • (Distance between POINT[0] and POINT[1]) Less than 700.00
You can't imagine how annoying this is.. better remove it.

  • Custom script: call IssuePointOrderLocBJ( GetEnumUnit(), "dreadlordinferno", udg_POINT[3] )
Will only confuse people, better use the GUI function.
 
Level 13
Joined
Mar 4, 2009
Messages
1,156
well , your spell is rigged.
what you mean?

1.)
  • Unit - Add a 0.40 second Generic expiration timer to (Last created unit)
Remove/kills the dummy, last trigger is completly useless with this.
2.)
  • Custom script: if (GetLocalPlayer() == GetTriggerPlayer()) then
    • Sound - Play Error <gen>
    • Custom script: endif
Can and will cause desync in multiplayer.
3.)
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
    • (Distance between POINT[0] and POINT[1]) Less than 700.00
You can't imagine how annoying this is.. better remove it.
4.)
  • Custom script: call IssuePointOrderLocBJ( GetEnumUnit(), "dreadlordinferno", udg_POINT[3] )
Will only confuse people, better use the GUI function.
1.)
not true
if i just kill him it will stay to long
if i dont remove him after 0.40 sec it will again stay to long because it will decay
(and i cant fix it with changeing death type)
2.)
how to fix it?,or i just remove it?
3.)
its easy to remove/decrease but it should be a part of this spell because i think its stupid that you can charge to 100 range -.-
4.)
GUI sucks in that -.- instead typeing a string ID i have to list all that s... and find it -.- (il make it if needed,but it should´t be hard to get it like this)
 
Last edited:
Level 13
Joined
Mar 4, 2009
Messages
1,156
Cant see leaks btw nice concept t^
ty
Use |n to change line in tooltip description.
next time xD
Maybe try 0.03 instead of 0.06 in the looping trigger.
nah,its fine as it is and if someone wants it he can change it
I mean , 1500 damage , 10 seconds stun , High cast range (it's normal for your spell) Plus low cooldown. Maybe you should balance a bit your spell.
its easy to change if you want to...all in object editor..i know its a bit unbalanced but all balance of spell depends on map itself anyway

1.)
You're using the wrong cast event.
2.)
You are also doing a lot of weird things like pausing the units,
3.)
forcing hotkeys,
4.)
and disabling and enabling spells for players.
5.)
Really they're all quite useless.

1.)
ok il change it -.-
Edit: Actually the event is fine and if i change it it will bug the spell ,so there is no reason to use another event (didnt see any rules about that)
2.)
that is the only way i know to make unit stop at that event, (event at trigger "S 001 minimum range")
please show me better way if you know it
3.)
i did it so that it looks like a real minimum range of spell
4.)
i just disable>use>enable Wind Walk to make icon of Wind Walk invisible
please show me better way to make unit go trough units but not buildings too
5.)
if its useless i would not do that!,remove it and see if the spell would be normal
you should of check if its useless or not if you want to review someone´s spell


dont be afraid of weird things..... :D
the only thing i should fix is sound error (i guess)
 
Last edited:

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,198
Ok, I agree with trigger happy on many points.

pausing the units
I agree, this is probably unnescescary. The reason it does not stop is cause of when the event runs, instead of inturpting the triggering order it instead ques up any issued orders to the unit (cause the event triggering order still has to be fully issued). The most common work around without pausing the unit is to simly run a timer with 0 timeout which runs code to issue a new order to the unit, or atleast that is what I have seen. The whole problem though is what about qued order stacks, will both these methods not disrupt the que which can be annoying...

forcing hotkeys
This can be bug prone. For example if he shift qued up the order of the ability it could result in him suddenly having a totally different and unrelated unit casting or getting ready to use an ability which would be annoying as hell and clearly a bug. When forcing a player to press a hotkey you have to make sure that the unit is currently active in his interface (which I can only imagine happens if it is the only unit selected as he could be tabing through a group).

disabling and enabling spells for players
This is unnescescary and just hogs up unit ability data. Instead add the dummy windwalk to the hero and get him to cast it then remove it. If it still causes problems then add a disabled speelbook ability containing the windwalk ability and get the hero to use it and finally remove the permantly disabled spellbook ability. Remember that you can only choose so many abilities in the object editor for a hero and thus those slots are important and might be required by potential users.

What TriggerHappy did not point out is the fact you are always executing code 16.66... times a second which is a source of wasted processor time when added up the entire game. Instead of checking if the group is empty 16.66 times a second before running the code, just run the code but when you do make the group empty turn the trigger off so it runs 0 times a second. When you add a unit to the group you can then turn the trigger back on. The result is thousands of saved executions over the course of a game and each execution nolonger needs to evaluate a condition saving time when it is in use as well.

The problem is this spell is not very unique. Infact, hundreds of people have made this exact sort of spell before and many of them have used JASS and more efficent programming techniques (avoiding unnescescary hashtable lookups) to achieve a more usable and efficent product. Although I have to say you do have the potential to become a pretty good GUI trigger maker so do not be put off by the rejection, just this concept has been done too many people, of which some of them use scripting techniques which are unable to be reproduced in GUI efficently.
 
Level 13
Joined
Mar 4, 2009
Messages
1,156
Ok, I agree with trigger happy on many points.


1.) - stopping unit when issued an order
I agree, this is probably unnescescary. The reason it does not stop is cause of when the event runs, instead of inturpting the triggering order it instead ques up any issued orders to the unit (cause the event triggering order still has to be fully issued). The most common work around without pausing the unit is to simly run a timer with 0 timeout which runs code to issue a new order to the unit, or atleast that is what I have seen. The whole problem though is what about qued order stacks, will both these methods not disrupt the que which can be annoying...


2.) - hotkey
This can be bug prone. For example if he shift qued up the order of the ability it could result in him suddenly having a totally different and unrelated unit casting or getting ready to use an ability which would be annoying as hell and clearly a bug. When forcing a player to press a hotkey you have to make sure that the unit is currently active in his interface (which I can only imagine happens if it is the only unit selected as he could be tabing through a group).

3.) - wind walk
This is unnescescary and just hogs up unit ability data. Instead add the dummy windwalk to the hero and get him to cast it then remove it. If it still causes problems then add a disabled speelbook ability containing the windwalk ability and get the hero to use it and finally remove the permantly disabled spellbook ability. Remember that you can only choose so many abilities in the object editor for a hero and thus those slots are important and might be required by potential users.

4.)
What TriggerHappy did not point out is the fact you are always executing code 16.66... times a second which is a source of wasted processor time when added up the entire game. Instead of checking if the group is empty 16.66 times a second before running the code, just run the code but when you do make the group empty turn the trigger off so it runs 0 times a second. When you add a unit to the group you can then turn the trigger back on. The result is thousands of saved executions over the course of a game and each execution nolonger needs to evaluate a condition saving time when it is in use as well.

5.)
The problem is this spell is not very unique. Infact, hundreds of people have made this exact sort of spell before and many of them have used JASS and more efficent programming techniques (avoiding unnescescary hashtable lookups) to achieve a more usable and efficent product. Although I have to say you do have the potential to become a pretty good GUI trigger maker so do not be put off by the rejection, just this concept has been done too many people, of which some of them use scripting techniques which are unable to be reproduced in GUI efficently.

1.)
(just a question,can any sort of JASS make it without timer? )
i can do it with timer but i tough this is a good solution to avoid it :p
2.)
than i guess i will have to use blink to trigger the spell because it has minimum range at ability data
3.)
i think abilities in spellbook cannot be ordered to units...
(il check it again ...)
4.)
i tough checking 1 condition cant be a problem,well il do it that way,
5.)
true,but i think my effects are nice xD,actually i was a bit bored too and see how to actually make spells :D
-JASS (better bud harder...)
its a program language and i dont like to read it,also you have to be careful about everyy step,but i guess its not that hard when you get a hold of it


update 1.01

blink will be used like a triggering ability with minimum range
-no minimum range trigger,yeah the trigger does sux
-Run trigger will be off when the group is empty and on when the goup is not empty
-im not sure how to do this wind walk thing,il try it will spellbook
-im not sure will i be able to update this at all xD
 
Top