• 🏆 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!

Geyser v0.5 GUI/MUI

Description
Summons a blast of water, throwing surrounding enemies in the air, at a targeted area. If unit, which is under the effect of Geyser, have less than 15% hit point, then it will explode area around itself, dealing damage and stuning.

Documentation
  • Set G_MaxHeight[G_CastCount] = 500.00
Sets the maximum height of units

How to import:

Import next objects into your map:

Units: Geyser Caster
Abilities: Geyser, Geyser(Dummy), Geyser Wave, Fly Trick.
Effects: Geyser.
Triggers: Geyser Main, Geyser Loop, Geyser Explosion.



  • Geyser Main
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Geyser
    • Actions
      • Set G_CastCount = (G_CastCount + 1)
      • Set G_TargetPoint = (Target point of ability being cast)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • G_CastCount Equal to G_RemoveCount
        • Then - Actions
          • Custom script: call DestroyGroup(udg_G_UnitGroup[udg_G_CastCount])
          • Custom script: set udg_G_UnitGroup[udg_G_CastCount] = null
        • Else - Actions
      • Set G_MaxHeight[G_CastCount] = 500.00
      • Set G_UnitGroup[G_CastCount] = (Units within 200.00 of G_TargetPoint matching ((((Matching unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True) and ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and (((Matchin
      • Unit Group - Pick every unit in G_UnitGroup[G_CastCount] and do (Actions)
        • Loop - Actions
          • Trigger - Add to Geyser Explosion <gen> the event (Unit - (Picked unit) Takes damage)
          • Unit - Add Fly Trick to (Picked unit)
          • Unit - Pause (Picked unit)
          • Unit - Turn collision for (Picked unit) Off
          • Unit - Cause (Triggering unit) to damage (Picked unit), dealing (100.00 x (Real((Level of Geyser for (Triggering unit))))) damage of attack type Spells and damage type Universal
      • Unit - Create 1 Geyser Caster for (Owner of (Triggering unit)) at G_TargetPoint facing Default building facing (270.0) degrees
      • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
      • Unit - Add Geyser (Dummy) to (Last created unit)
      • Unit - Order (Last created unit) to Human Mountain King - Thunder Clap
      • Custom script: call RemoveLocation(udg_G_TargetPoint)
      • Custom script: set udg_G_TargetPoint = null
  • Geyser Loop
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • For each (Integer A) from 1 to G_CastCount, do (Actions)
        • Loop - Actions
          • Set G_CurrentHeight[(Integer A)] = (G_CurrentHeight[(Integer A)] + 50.00)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Number of units in G_UnitGroup[(Integer A)]) Greater than 0
            • Then - Actions
              • Unit Group - Pick every unit in G_UnitGroup[(Integer A)] and do (Actions)
                • Loop - Actions
                  • Animation - Change (Picked unit) flying height to G_CurrentHeight[(Integer A)] at 1000.00
                  • Special Effect - Create a special effect attached to the origin of (Picked unit) using Objects\Spawnmodels\Naga\NagaDeath\NagaDeath.mdl
                  • Special Effect - Destroy (Last created special effect)
            • Else - Actions
              • Unit Group - Add all units of G_UnitGroup[G_CastCount] to G_UnitGroup[(Integer A)]
              • Set G_CurrentHeight[(Integer A)] = G_CurrentHeight[G_CastCount]
              • Set G_CastCount = (G_CastCount - 1)
              • Set G_RemoveCount = (Integer A)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • G_CurrentHeight[(Integer A)] Greater than or equal to G_MaxHeight[(Integer A)]
            • Then - Actions
              • Set G_CurrentHeight[(Integer A)] = 0.00
              • Unit Group - Pick every unit in G_UnitGroup[(Integer A)] and do (Actions)
                • Loop - Actions
                  • Animation - Change (Picked unit) flying height to (Default flying height of (Picked unit)) at 1000.00
                  • Unit - Remove Fly Trick from (Picked unit)
                  • Unit - Unpause (Picked unit)
                  • Unit - Turn collision for (Picked unit) On
              • Unit Group - Remove all units from G_UnitGroup[(Integer A)]
              • Unit Group - Add all units of G_UnitGroup[G_CastCount] to G_UnitGroup[(Integer A)]
              • Set G_CurrentHeight[(Integer A)] = G_CurrentHeight[G_CastCount]
              • Set G_CastCount = (G_CastCount - 1)
              • Set G_RemoveCount = (Integer A)
            • Else - Actions
  • Geyser Explosion
    • Events
    • Conditions
      • ((Triggering unit) has buff Geyser ) Equal to True
      • (Life of (Triggering unit)) Less than or equal to ((Max life of (Triggering unit)) x 0.15)
      • ((Triggering unit) belongs to an enemy of (Owner of (Damage source))) Equal to True
    • Actions
      • Set G_TargetPoint = (Position of (Triggering unit))
      • Custom script: set bj_wantDestroyGroup = true
      • Unit Group - Pick every unit in (Units within 250.00 of G_TargetPoint matching ((((Matching unit) belongs to an enemy of (Owner of (Damage source))) Equal to True) and ((((Matching unit) is A structure) Equal to False) and (((Matching unit) is alive) Equal to True)))) and do (Actions)
        • Loop - Actions
          • Unit - Create 1 Geyser Caster for (Owner of (Damage source)) at G_TargetPoint facing Default building facing (270.0) degrees
          • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
          • Unit - Add Geyser Wave to (Last created unit)
          • Unit - Order (Last created unit) to Human Mountain King - Storm Bolt (Picked unit)
      • Special Effect - Create a special effect at G_TargetPoint using Objects\Spawnmodels\Naga\NagaDeath\NagaDeath.mdl
      • Special Effect - Destroy (Last created special effect)
      • Trigger - Turn off (This trigger)
      • Unit - Cause (Damage source) to damage (Triggering unit), dealing ((Life of (Triggering unit)) + 1.00) damage of attack type Spells and damage type Universal
      • Trigger - Turn on (This trigger)
      • Custom script: call RemoveLocation(udg_G_TargetPoint)
      • Custom script: set udg_G_TargetPoint = null
Spell is MUI
v0.5:
Now it can be opened in standart WE
v0.4:
Removed point leaks
Removed food cost from dummy
v0.3:
Fixed MUI
Removed some global variables
v0.2:
Now Geyser does not affect magic immune units
Some minor code changes
v0.1:
First Release


Keywords:
geyser water wave blast
Contents

Geyser v0.5 (Map)

Reviews
20:13, 2nd Mar 2010 The_Reborn_Devil: The triggering looks ok. Status: Approved Rating: Useful

Moderator

M

Moderator

20:13, 2nd Mar 2010
The_Reborn_Devil:
The triggering looks ok.


Status: Approved
Rating: Useful
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
  • Do nothing
Remove this.

  • Animation - Change (Picked unit) flying height to (Default flying height of (Picked unit)) at 1000.00
Make it 0, it will change the unit flying height instantly.

  • For each (Integer A) from 1 to G_CastCount, do (Actions)
I would suggest you to use custom global integer variable.

- A timer of 0.03 might be better.
- You can always use an buff when detecting if a unit life becomes less than 15%.
- No documentation (violates one of THW spell rules)
- I think the thing with the 15% life is too imbalanced, but that is just an opinion.

3/5 rate with a neutral vote.
 
Level 7
Joined
Dec 19, 2009
Messages
249
1-The spell provide only one level
2-No documentation
3-what is the point of that? the thing below the turn off wont happen , no?
  • Trigger - Turn off (This trigger)
  • Unit - Cause (Damage source) to damage (Triggering unit), dealing (Max life of (Triggering unit)) damage of attack type Spells and damage type Universal
  • Trigger - Turn on (This trigger)
 
Level 19
Joined
Feb 4, 2009
Messages
1,313
I really like GUI but making GUI spells which require JNGP is not that smart

and without being able to test your map I can tell you that it will cause bugs

if you make this:
  • Events
    • Time - Elapsed game time is 1.00 seconds
  • Conditions
  • Actions
    • Set g2 = g
    • Custom script: call DestroyGroup(udg_g)
    • Set u = Footman 0000 <gen>
    • Unit Group - Add u to g
    • Unit Group - Add u to g2
    • Game - Display to (All players) for 0.00 seconds the text: (String((Number of units in g)))
    • Game - Display to (All players) for 0.00 seconds the text: (String((Number of units in g2)))
both groups will be destroyed and therefore unable to store and units
it will display "0" twice on your screen

this will work:
  • Actions
    • Unit Group - Remove all units from g2
    • Unit Group - Add all units of g to g2
    • Unit Group - Remove all units from g
same goes for locations:
  • test
    • Events
      • Time - Elapsed game time is 1.00 seconds
    • Conditions
    • Actions
      • Set loc = (Point(1337.00, 1337.00))
      • Set loc2 = loc
      • Game - Display to (All players) the text: (String((Y of loc2)))
      • Custom script: call RemoveLocation(udg_loc)
      • Game - Display to (All players) the text: (String((Y of loc2)))
this will display 1337 and then 0
but I did not destroy loc so how could that happen?
both locations are somehow "linked" together so both will face the same destiny and be destroyed :grin:

I'd recommend to use real values instead since they won't leak anyway
if you still want to use the GUI functions you will need a single location to do this:
  • Actions
    • Set loc = (Point(x, y))
    • Custom script: call RemoveLocation(udg_loc)
this way you can also make it compatible with the standard world editor

try not to use the "unit takes damage" event since there usually are better ways and you will leak an event

and you don't have to null global variables cause they will be reused anyway
 

Attachments

  • screenshot.jpg
    screenshot.jpg
    444.5 KB · Views: 169
Level 17
Joined
Sep 8, 2007
Messages
994
I haven't seen this spell ingame since it obviously can't be opened with my JGNP ...
but I dunno if I should feel screwed or honored. 2 guys copying my spell "Geyser" from my spellpack in its concept just one after the other.
But well, since I quitted actively producing spells I don't really care ... just saying "this was my idea!!!!" although it isn't makes me mad <.<
(I might be wrong with my copycat-assumption since I couldn't check it ingame, though!)
 
Top