System TimedLightning

Flare

Stops copies me!
Staff member
Ace still owe me a 20+ rep
He really should've said that you had to be the creator, kinda lame to be rewarded for someone else's work :p

But meh, this should be approved.
Not just yet ^_^ One more update that I know I should do, I'll probably get around to it when I get home (half-day because of Munster vs. All Blacks match FTW! :D)

EDIT: Updated, me thinks be just about complete, just had to do a little bit of tweaking
 

Frozenhelfir

set Gwypaas = Guhveepaws
All of my lightning is comming out green, how do I prevent this? The link I'm using is:
JASS:
call TL_Unit("CLPB", t, u, 1, true, .5,.5)
 

Flare

Stops copies me!
Staff member
Ye, I had that issue before when importing into other maps (which is extremely strange, considering there shouldn't be anything different between the demo map and the target map)

Gonna have another look into it now that you've reminded me of it :p

EDIT: Found the culprit - was setting the current blue value to the tint increment value... Seems to work just fine now, please let me know if it persists. I guess that's reason enough to not make 600-line code monstrosities :D
 

CPTMuscles

New Member
Very cool system. It's just what I needed.

I found a typo in the TLRingCallback function:

JASS:
set x1 = a.Cx + a.a1cos<i> * a.curdist
set y1 = a.Cy + a.a1sin<i> * a.curdist
set x2 = a.Cy + a.a2cos<i> * a.curdist
set y2 = a.Cy + a.a2sin<i> * a.curdist</i></i></i></i>


The third line should use a.Cx instead of y. Was causing funky circles when passing certain values in. Looks great after the fix.
 

Flare

Stops copies me!
Staff member
Very cool system. It's just what I needed.
Thanks - it's nice to see that people are making use of this :)

I found a typo in the TLRingCallback function:
Thanks for pointing it out, and I've fixed it now. Really should've tested the Ring function properly, using same value for center X/Y wasn't really the best idea...
 

Frozenhelfir

set Gwypaas = Guhveepaws
[del]I have a unit that creates a lightning ring around it when created. I want it to disappear when it dies. I have a question of efficiency. There may be a lot of these units on the map as they can be easily massed although someone only needs a few of them to fulfill all of their uses. Would it be efficient to recycle the lightning periodically by recreating it every 2 seconds or so and if the unit dies, don't recreate it? Or would there be a better way to do this?[/del]

EDIT: Nevermind, I'm a retard...

JASS:
call TL_DestroyRing (index)
 

MasterOfRa

New Member
Excellent library, I've used it for several spells, and the fade over time is awesome. I suggest adding the possibility to make lightning the moves over time, as in you input the start xyz and end xyz points, and over the duration,
slide the start and end xyz points to the second xyz locations.
 

Flare

Stops copies me!
Staff member
Excellent library, I've used it for several spells, and the fade over time is awesome. I suggest adding the possibility to make lightning the moves over time, as in you input the start xyz and end xyz points, and over the duration,
slide the start and end xyz points to the second xyz locations.
Thanks - if I get around to it and bother to open World Editor, that wouldn't be a bad addition, but it would make for a really long, drawn-out function (probably around 15 arguments :eek:). It'll be something to consider, but I don't really do much coding (or anything WC3-related) anymore :(

Although, strictly speaking, it's doable without having to update the system - it'd be inefficient (by comparison, although the system itself probably isn't as good as it could be), but you could do TL_Unit (or TL_Coord/Loc2Unit) and move the unit(s) around so that the lightning would follow. Granted it'd be a bit tedious, but it's the most immediate solution :p
 

elpini0

New Member
ho ho ho ho!!! :D

I DID IT!! :cool: I CREATED A DAMAGE AURA THAT GIVES BOUNTY!! Whatsmore, I added a TIMED LIGHTNING EFFECT using ONLY GUI!!:D look:

IF YOU DON'T CARE ABOUT MY OWN SUFFERING, JUMP TO THE BOTTOM OF THE POST

Spell created: Pain Aura
Objective: Create a permanent inmolation that in stead of making X damage every 1 second, makes 1 damage every (1/X) seconds.
Based on: Unholy Aura (at first i used negative life regen, but then i realized about the bounty issue)
Spell set-up:
-Set the increase of Life Regen and movement speed of the spell to zero.
-Set the affected units to YOURSELF

Now, you might be wondering why do i do this. The answer:

-At first I tried (after several failed attempts of modifying auras, triggers and buffs) applying the aura only to enemies. This way I could make a periodic event every (1/X) seconds that picks up every unit with the buff Pain Aura and deal 1 damage (trigger example)

Trigger:
  • PainAura
    • Events
      • Time - Every 0.06 seconds of game time
    • Conditions
    • Actions
      • Unit group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • If ((Picked unit) has buff Pain Aura ) Equal to True
            • Then - Actions
              • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) - 1.00)
            • Else - Actions


Then I realized that GUI triggers didn't offer me the possibility of identifying who the owner of the aura is. :banghead: So after testing different combinations of triggers and breaking my ass out thinking of alternatives, I thought of simply not getting bounty. :nuts:

Then, another idea cam to my mind: :D Creating a dummy that exploded using the gobling ability. But ERROR: :banghead: I came up with the same problem... There is no condition "((Adquired ability) is Pain Aura) Equal to True" or anything like that. :(

Finally, in my way through the huge corridors of GUI menus, bars and options, i came up with this::thup:

Trigger:
  • Unit group - Pick every unit in (Units within 512.00 of (Position of PainAuraCaster)) and do (Actions)


HAHA BINGO!!:cool: But how can we know who the caster of an aura that only affects to enemies is??:confused: Answer: we can't.:thdown:

:eek:IDEA!!:eek: Why not making my own heroe as target of the aura, then picking all units in map with the aura and making an effect??

The result: My trigger :D

Trigger:
  • Pain Aura
    • Events
      • Time - Every 0.06 seconds of game time
    • Conditions
    • Actions
      • -------- First, check which units in map have the aura --------
      • Unit group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Condiciones
              • If ) ((Picked unit) has buff Pain Aura ) Igual a True
            • Then - Actions
              • -------- Then, for each caster we set him as a variable --------
              • Set PainAuraCaster = (Picked unit)
              • -------- Aftwerwards, we pick all units within desired Aura range --------
              • Unit Group - Pick every unit in (Units within 900.00 of (Position of PainAuraCaster)) and do (Actions)
                • Loop - Actions
                  • -------- And now, our Aura effect, only affecting enemies --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Condiciones
                      • If ) ((Picked unit) is alive) Igual a True
                      • If ) ((Picked unit) belongs to an enemy of (Owner of PainAuraCaster)) Igual a True
                    • Then - Acciones
                      • -------- Using this great unit action, we grant that our hero gets his bounty --------
                      • Unit - Cause PainAuraCaster to damage (Picked unit), dealing (1.00 x (Real((Level of Pain Aura for PainAuraCaster)))) damage of attack type Spells and damage type &lt;desired type&gt;
                    • Else - Actions
            • Else - Actions


Whatsmore, once i managed to get my spell I decided to create a coooool effect, and i thought of lightning. But wow... :banghead: Problems everywhere...

First I tried with this:

Trigger:
  • Pain Aura
    • Events
      • Time - Every 0.06 seconds of game time
    • Conditions
    • Actions
      • -------- First, check which units in map have the aura --------
      • Unit group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Condiciones
              • If ) ((Picked unit) has buff Pain Aura ) Igual a True
            • Then - Actions
              • -------- Then, for each caster we set him as a variable --------
              • Set PainAuraCaster = (Picked unit)
              • -------- Aftwerwards, we pick all units within desired Aura range --------
              • Unit Group - Pick every unit in (Units within 900.00 of (Position of PainAuraCaster)) and do (Actions)
                • Loop - Actions
                  • -------- And now, our Aura effect, only affecting enemies --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Condiciones
                      • If ) ((Picked unit) is alive) Igual a True
                      • If ) ((Picked unit) belongs to an enemy of (Owner of PainAuraCaster)) Igual a True
                    • Then - Acciones
                      • -------- Using this great unit action, we grant that our hero gets his bounty --------
                      • Unit - Cause PainAuraCaster to damage (Picked unit), dealing (1.00 x (Real((Level of Pain Aura for PainAuraCaster)))) damage of attack type Spells and damage type &lt;desired type&gt;
                      • Lightning - Create a Lightning Chain - Main lightning effect from source (Position of PainAuraCaster) to target (Position of (Picked unit))
                      • Wait 0.06 seconds
                      • Lightning - Destroy (Last created lightning effect)
                    • Else - Actions
            • Else - Actions


When I tested this, guess what happened:

Lightnings didn't get removed. This is because while waiting 0.06 seconds, Last created lightning changes for more that 1 target.

Final trigger:

IF YOU DON'T CARE ABOUT MY OWN SUFFERING, START READING HERE

(At the Initialization trigger, do (Create Hashtable) -> (Set hastTable= (Last created Hashtable))
(Starting value of LightningNumber = 0)

Trigger:
  • Pain Aura
    • Events
      • Time - Every 0.06 seconds of game time
    • Conditions
    • Actions
      • -------- First, check which units in map have the aura --------
      • Unit group - Pick every unit in (Units in (Playable map area)) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Condiciones
              • If ) ((Picked unit) has buff Pain Aura ) Igual a True
            • Then - Actions
              • -------- Then, for each caster we set him as a variable --------
              • Set PainAuraCaster = (Picked unit)
              • -------- Aftwerwards, we pick all units within desired Aura range --------
              • Unit Group - Pick every unit in (Units within 900.00 of (Position of PainAuraCaster)) and do (Actions)
                • Loop - Actions
                  • -------- And now, our Aura effect, only affecting enemies --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Condiciones
                      • If ) ((Picked unit) is alive) Igual a True
                      • If ) ((Picked unit) belongs to an enemy of (Owner of PainAuraCaster)) Igual a True
                    • Then - Acciones
                      • -------- Using this great unit action, we grant that our hero gets his bounty --------
                      • Unit - Cause PainAuraCaster to damage (Picked unit), dealing (1.00 x (Real((Level of Pain Aura for PainAuraCaster)))) damage of attack type Spells and damage type &lt;desired type&gt;
                      • Lightning - Create a Lightning Chain - Main lightning effect from source (Position of PainAuraCaster) to target (Position of (Picked unit))
                      • Hashtable - Save Handle Of(Last created lightning effect) as 0 of LightningNumber in hashTable
                    • Else - Actions
                      • Set LightningNumber = (LightningNumber + 1)
                      • Trigger - Run Wait4 &lt;gen&gt; (checking conditions)
            • Else - Actions


Trigger:
  • Wait4
    • Events
    • Conditions
    • Actions
      • Wait 0.05 seconds
      • Trigger - Run LightningLoop &lt;gen&gt; (checking conditions)


Trigger:
  • LightningLoop
    • Events
    • Conditions
    • Actions
      • Set LightningNumber = (LightningNumber - 1)
      • Lightning - Destroy (Load 0 of LightningNumber in hashTable)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • LightningNumber Greater that 0
        • Then - Actions
          • Trigger - Run (This trigger) (checking conditions)
        • Else - Actions


How does this trigger work? Its quite simple:

Every 0.06 seconds happens this:
-1) For X units within range, you create X lightnings
-2) In order, you set a space in the hashTable containing each lightning ID

EXAMPLE OF HASHTABLE

..............................|...First lightning......|. Second lightning ..| ... | N lightning
AS(down) \\ OF(right) |..... created .........|...... created .........| ... | created
...............0..............| LightningNumber=0| LightningNumber=1 | ... | LightningNumber=N-1

This way, we now have N values in the positions 0 to N-1 of our hashTable.
-3) Our final result of LightningNumber was N, and we want to destroy the last lightning which has index N-1 in our hashTable. Thats why we make the inverse operation
-4) We loop the trigger to run N times, and finally set LightningNumber = 0.

DONE!! The result is very nice, and it doesn't require any JASS knowledge: only TIME and EFFORT.

I hope this information was interesting and useful for some people :cool:
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    The old shoutbox wasn't supported anymore. We updated xenForo, so it had to be replaced.
  • jonas jonas:
    let's see if everyone finds it... the nice thing about the shoutbox was I could check on it even while logged out, but the existence of this one is hidden when you're not logged in
  • Ghan Ghan:
    We can fix that.
  • Ghan Ghan:
    Chat should show on the sidebar when not logged in now.
  • Ghan Ghan:
    (You'll still need to log in to post messages)
  • Ghan Ghan:
    Test!
  • tom_mai78101 tom_mai78101:
    I must be in a test server.
  • tom_mai78101 tom_mai78101:
    Nice, Twitter tweets embedding now works
  • Wizard Wizard:
    Yup.
  • Ghan Ghan:
    Excellent.
  • Ghan Ghan:
    @tom_mai78101 Hello there.
  • Ghan Ghan:
    Tagging works in the chat too.
  • tom_mai78101 tom_mai78101:
    @Ghan Missed it.
  • Wizard Wizard:
    Still fixing things here and there. Added widgets to the portal, will make it match the ones here on the forum index tomorrow.
  • Ghan Ghan:
    The venerable World Editor Tutorials site has been converted to HTTPS at last.
  • jonas jonas:
    cool
  • jonas jonas:
    and I can even edit my messages, nice
  • seph ir oth seph ir oth:
    GENERAL CHIT CHAT, YOU ARE A BOLD ONE
  • Ghan Ghan:
    Hello there
  • The Helper The Helper:
    this new chatbox is great and the forum software update is great too
    +1
  • The Helper The Helper:
    upgrade has fixed forum registration spam problem
  • tom_mai78101 tom_mai78101:
    Something tells me we might be able to customize the chatbox a bit, considering that there's a gap under every message.
  • Wizard Wizard:
    Going to deploy a fix soon, just had to take some time for myself this weekend.
  • Varine Varine:
    Unbelievable. Time for yourself? How dare you!

    Staff online

    Members online

    Affiliates

    Hive Workshop
    Top