• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!
  • ✅ The POLL for Hive's Texturing Contest #34 is OPEN! Vote for the TOP 3 SKINS! 🔗Click here to cast your vote!
  • ✅ The POLL for Hive's Techtree Contest #20 is OPEN! Vote for the TOP 3 FACTIONS! 🔗Click here to cast your vote!

Help me! JAWS are eating me.

Status
Not open for further replies.
Use GroupClear if you're using a static global group, use the other one if your using a dynamically allocated group.

The only issue I know on dynamic handles are allocation and destruction overhead... I don't know anything about it being unusable, back when we used Local Handle Vars, dynamically allocated groups had no bugs (or it was yet to be discovered).
 
Okay, I request a vJASS spell, something that 'whirls'(sucks enemies to the edge of the specimen and makes them go in circles, disabling everything(please make this one silence and disable attack too)) some units.

API
unit - caster
integer - FunctionInt( just add this as an argument, I'll point it to the Damage Mod)
real damage
unit dummy( the specimen)
boolean damageAllies
boolean damageEnemies
boolean damageStructures
boolean damage(may or may not whirl) people around the whirled(*)
^required real AoE(circumference from the whirled to pick people and damage them)
^required boolean whirl encountered too(add to the whirl list encountered and damaged units)
^required string Target SFX(on people around the whirled list)

real circumference(how large the people are picked from)
real whirl speed(how fast people go in circles)
string Whirled SFX(effect on whirled people)
string SFX(effect on the specimen)
boolean killspecimenatend(Well, yeah)
real duration


*Not the specimen, but the people going in circles. Yup, allows damaging units around them.
If for example enemies are not to be damaged, they aren't added to the whirl list for Christmas.
 
Were talking vjass right? Can I make it a global instead? Or are you planning to make it random perhaps?
 
Okay so I request yet another spell.

Dream Vortex
Creates a vortex at the caster's position. Groups enemies and damages them per second. Every second, regroups the enemies and deals damage multiplied by the number of units in the group.

The vortex moves with the caster. Damage interval is 1 second. Creates lightning at every enemy leading to the vortex.

API
unit caster
real damage
real radius
real duration
 
  • Weave
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Weave
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Weave_Index Equal to 0
        • Then - Actions
          • Trigger - Turn on Weave Loop <gen>
        • Else - Actions
      • Set TempInteger = (3 + ((Intelligence of (Triggering unit) (Include bonuses)) / 100))
      • Set TempPoint = (Position of (Triggering unit))
      • For each (Integer A) from 1 to 3, do (Actions)
        • Loop - Actions
          • Set Weave_Index = (Weave_Index + 1)
          • Set Weave_Caster[Weave_Index] = (Triggering unit)
          • Unit - Create 1 Dreamform Protectors for (Owner of Weave_Caster[Weave_Index]) at TempPoint facing Default building facing degrees
          • Set Weave_Dummy[Weave_Index] = (Last created unit)
          • Unit - Add a 10.00 second Generic expiration timer to Weave_Dummy[Weave_Index]
          • Set Weave_Duration[Weave_Index] = 10.00
      • Custom script: call RemoveLocation(udg_TempPoint)
  • Weave Loop
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer A) from 1 to Weave_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Weave_Duration[A] Greater than 0.00
            • Then - Actions
              • Set Weave_Duration[A] = (Weave_Duration[A] - 1.00)
              • Set OffsetLoc = (Position of Weave_Caster[A])
              • Set TempPoint = (OffsetLoc offset by (Random real number between 150.00 and 550.00) towards (Random real number between 0.00 and 359.00) degrees)
              • Unit - Order Weave_Dummy[A] to Move To TempPoint
              • Custom script: call RemoveLocation(udg_OffsetLoc)
              • Custom script: call RemoveLocation(udg_TempPoint)
              • Game - Display to (All players) the text: (String(Weave_Duration[A]))
            • Else - Actions
              • Custom script: call KillUnit(udg_Weave_Dummy[udg_A])
              • Custom script: set udg_Weave_Dummy[udg_A] = null
              • Custom script: set udg_Weave_Caster[udg_A] = null
              • Set Weave_Caster[A] = Weave_Caster[Weave_Index]
              • Set Weave_Dummy[A] = Weave_Dummy[Weave_Index]
              • Set Weave_Duration[A] = Weave_Duration[Weave_Index]
              • Set Weave_Index = (Weave_Index - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Weave_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
Revert to GUI, nothing in v/JASS works for me.

So I need to know why 'Weave_Duration' is always 0.00 even if it is clearly set to 10.00.
 
After Christmas, I'll post it here (not finished debugging it yet hoho!) so Malhorne or Jad could improve efficiency.

@Jad: Come on Jad, resume your projects puhliz!
 
Um.. okay, I'll try digging pages.

JASS:
- unit caster -> The damager
- real x1 -> The x of the start position
- real y1 -> The y of the start position
- real x2 -> The x of the end position
- real y2 -> The y of the end position
- real dmg -> The damage of the missile
- integer functionInt -> Just add this as an argument.
- string LineSfx -> The effect on the ground
- boolean LineSfxScale -> If the ground effect scales with AoE
- real area -> The area of effect
- real Speed -> The speed in unit/second
- real Area inc per interval -> The increment of the area of effect per interval
- real speed inc per interval -> The speed of the missile per interval
- dummy -> the missile, if there is.
- boolean hitAlly -> Hit ally
- boolean hitEnemy -> Hit enemy
- boolean hitCaster -> Hit the caster
- boolean hitStructures -> Hit the structures
- attacktype a_type -> The attack type
- damagetype d_type -> The damage type
- boolean Dummy scale -> If the dummy scales with the area of effect.
- real interval -> How long before you calculate things(current x/y, next coords)
- boolean DummyMovesAlong -> if the dummy moves with the wave.
- string target unit sfx -> effect on units hit by the spell.
- boolean hitUnitMoreThanOnce -> with the interval.
- boolean killatend -> for the dummy.

'Wave System'.

That would be legendary, thank you.

E: Submitting it to the spells section would give it a DC!
 
You can create a dummy for the line sfx? Will it lag that much?

E: Okay, remove that, it's ridiculous. Thanks.

E2: Also, if you know how to simulate default projectiles (arcing mind-boggling business regarding models with no bone names), let me know because I need a target missile/ area missile too.
 
Yes, vJASS of course. No, not the two options, only the line sfx scale since the dummy should prove to be powerful enough.

Anyways can you add some trigger that is ran every time the wave spawns an additional layer? So you know, debuffing targets would be easy. If possible, have these vars for use:

unit caster
group targets (the units hit by the last wave layer)
unit dummy (the projectile/etc dummy in case effects need to be tinkered with)

It's executed upon every interval, right after the dummy is moved.

It should be an argument:
JASS:
trigger additional actions - runs after dummy is moved and units are damaged

And sorry if either the words are not clear or the spell is too taxing, but I'll use it in almost every hero.
 
JASS:
- unit caster -> The damager
- real x1 -> The x of the start position
- real y1 -> The y of the start position
- real x2 -> The x of the end position
- real y2 -> The y of the end position
- real dmg -> The damage of the missile
- integer functionInt -> Just add this as an argument.
- integer FunctionInt2 -> Same as above.
- string LineSfx -> The effect on the ground
- boolean LineSfxScale -> If the ground effect scales with AoE
- real area -> The area of effect
- real Speed -> The speed in unit/second
- real Area inc per interval -> The increment of the area of effect per interval
- real speed inc per interval -> The speed of the missile per interval
- unit dummy -> the missile, if there is.
- boolean hitAlly -> Hit ally
- boolean hitEnemy -> Hit enemy
- boolean hitCaster -> Hit the caster
- boolean hitStructures -> Hit the structures
- boolean hitheroes -> Hit the Heroes(will only hit depending on hitAlly and hitEnemy)
- attacktype a_type -> The attack type
- damagetype d_type -> The damage type
- boolean Dummy scale -> If the dummy scales with the area of effect.
- real interval -> How long before you calculate things(current x/y, next coords)
- boolean DummyMovesAlong -> if the dummy moves with the wave.
- string target unit sfx -> effect on units hit by the spell.
- boolean hitUnitMoreThanOnce -> with the interval.
- boolean killatend -> for the dummy.
- trigger onhit -> before the damage is dealt. (yeah, before, to be safe)
- trigger onend -> ran after the instance ends.
- group spellenders -> a unit group. loop through their types, when any unit type of the group are encountered within the line damage''s AoE, immediately stops the line damage.
- real interval increment -> the frequency added to the interval skip time every.. interval. Like an increment of 1.00 subtracts a second from the interval, allowing it to be faster by a second.
- unit type spellbooster -> a unit type that boosts spell damage by "spellboost"% when encountered in the AoE
- real spellboost -> upon encountering a spell booster, boosts damage by this percentage.
- real damageincrement -> damage added (percentage) upon hitting people with the spell.
- real damageincrement cap -> max damage added(percentage)(damage increment and cap will reduce damage when below 1.00, hence being like Ezreal''s ult, 1.00 being 100%)
- boolean explodeonend -> if the line damage explodes on-end.
- real explodeonendradius -> if the above boolean is true, the radius for the explosion.
- real endexplosiondamage -> if the above boolean is true, the damage for the explosion.
- boolean spellbooster_activates explode on end -> if upon encountering a spell booster, sets explode on end to true.

In the 'onhit' and 'onend' triggers, there will be four variables available:
JASS:
- integer instance -> the instance of the line damage in which the trigger is ran.
- unit caster -> the caster of the current instance.
- unit damage -> the damage of the current line damage instance.
- unit damage group -> if it's on-hit, the current group that is picked up for damage. If it's on-end, it's the last group that was picked for damage.

Any changes made in these triggers should be applied to the main system. For example, the spell has ended and runs 'onend'. In 'onend', I change the target x/y coords. The spell then continues from there. Another example would be, if I change 'damage' to something more or less, the instance's damage would be changed.

Please add some comments to the this.var block, so I would know what to do. Aside from that, please keep the onend and endtrigger intact.
If you can, please don't make that long list a pure argument one. Can you instead do it like KB3D? Hundreds of variables with some requirements? Because a long line is very confusing.
 
Status
Not open for further replies.
Back
Top