Errors with custom made Chain Lightning

Level 3
Joined
Jun 17, 2015
Messages
53
I tried to make Chain Lightning Spell by my self to add more effects (slow, stun etc) but i got some errors:
- Lightning Effect only affect to primary target, secondary, third target doesnt have it

Fixed the bounce damage and lightning on first, secondary units problem, now lightning between 2nd and 3rd unit wont happen

My triggers:
  • Chain Lightning
  • Events
    • Unit - A unit Starts the effect of an ability
  • Conditions
    • (Ability being cast) Equal to (==) Chain Lightning
  • Actions
    • Set ChainLightning_Caster = (Casting unit)
    • Set ChainLightning_Hit[1] = (Target unit of ability being cast)
    • Set ChainLightning_Point[0] = (Position of ChainLightning_Caster)
    • Set ChainLightning_Point[1] = (Position of (Target unit of ability being cast))
    • Unit - Cause ChainLightning_Caster to damage ChainLightning_Hit[1], dealing 100.00 damage of attack type Chaos and damage type Universal
    • Special Effect - Create a special effect attached to the origin of ChainLightning_Hit[1] using Abilities\Weapons\Bolt\BoltImpact.mdl
    • Special Effect - Destroy (Last created special effect)
    • Lightning - Create a Chain Lightning - Primary lightning effect from source ChainLightning_Point[0] to target ChainLightning_Point[1]
    • Set ChainLightning_SFX[1] = (Last created lightning effect)
    • Trigger - Turn on Chain Lightning Bounce <gen>
  • Chain Lightning Bounce
  • Events
    • Time - Every 0.30 seconds of game time
  • Conditions
  • Actions
    • Set ChainLightning_Group[1] = (Units within 400.00 of (Position of ChainLightning_Hit[1]) matching (((((Matching unit) is A structure) Not equal to (!=) True) and ((Matching unit) Not equal to (!=) ChainLightning_Hit[1])) and ((((Matching unit) is alive) Equal to (==) True) and (((Matchin
      • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in ChainLightning_Group[1]) Equal to (==) 0
        • Then - Actions
          • Lightning - Destroy ChainLightning_SFX[1]
          • Unit Group - Remove all units from ChainLightning_Group[1]
          • Custom script: call DestroyGroup (udg_ChainLightning_Group[1])
          • Custom script: call RemoveLocation(udg_ChainLightning_Point[1])
          • Set ChainLightning_Caster = No unit
          • Set ChainLightning_Hit[1] = No unit
          • Trigger - Turn off (This trigger)
        • Else - Actions
          • Unit Group - Pick every unit in (Random 1 units from ChainLightning_Group[1]) and do (Actions)
            • Loop - Actions
              • Lightning - Destroy ChainLightning_SFX[1]
              • Set ChainLightning_Hit[2] = (Picked unit)
              • Set ChainLightning_Point[2] = (Position of (Picked unit))
              • Unit - Cause ChainLightning_Caster to damage ChainLightning_Hit[2], dealing 100.00 damage of attack type Chaos and damage type Universal
              • Special Effect - Create a special effect attached to the origin of ChainLightning_Hit[2] using Abilities\Weapons\Bolt\BoltImpact.mdl
              • Special Effect - Destroy (Last created special effect)
              • Lightning - Create a Chain Lightning - Secondary lightning effect from source ChainLightning_Point[1] to target ChainLightning_Point[2]
              • Set ChainLightning_SFX[2] = (Last created lightning effect)
              • Trigger - Turn on Chain Lightning Bounce 2 <gen>
              • Trigger - Turn off (This trigger)
  • Chain Lightning Bounce 2
  • Events
    • Time - Every 0.50 seconds of game time
  • Conditions
  • Actions
    • Set ChainLightning_Group[2] = (Units within 400.00 of (Position of ChainLightning_Hit[2]) matching (((((Matching unit) is A structure) Not equal to (!=) True) and (((Matching unit) Not equal to (!=) ChainLightning_Hit[1]) and ((Matching unit) Not equal to (!=) ChainLightning_Hit[2]))) and
      • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in ChainLightning_Group[2]) Equal to (==) 0
        • Then - Actions
          • Unit Group - Remove all units from ChainLightning_Group[2]
          • Custom script: call DestroyGroup (udg_ChainLightning_Group[1])
          • Custom script: call DestroyGroup (udg_ChainLightning_Group[2])
          • Custom script: call RemoveLocation(udg_ChainLightning_Point[1])
          • Custom script: call RemoveLocation(udg_ChainLightning_Point[2])
          • Set ChainLightning_Caster = No unit
          • Set ChainLightning_Caster = No unit
          • Set ChainLightning_Hit[1] = No unit
          • Set ChainLightning_Hit[2] = No unit
          • Lightning - Destroy ChainLightning_SFX[2]
          • Trigger - Turn off (This trigger)
        • Else - Actions
          • Unit Group - Pick every unit in (Random 1 units from ChainLightning_Group[2]) and do (Actions)
            • Loop - Actions
              • Lightning - Destroy ChainLightning_SFX[2]
              • Set ChainLightning_Hit[3] = (Picked unit)
              • Set ChainLightning_Point[3] = (Position of (Picked unit))
              • Unit - Cause ChainLightning_Caster to damage ChainLightning_Hit[3], dealing 100.00 damage of attack type Chaos and damage type Universal
              • Special Effect - Create a special effect attached to the origin of ChainLightning_Hit[3] using Abilities\Weapons\Bolt\BoltImpact.mdl
              • Lightning - Create a Chain Lightning - Secondary lightning effect from source ChainLightning_Point[2] to target ChainLightning_Point[3]
              • Lightning - Destroy (Last created lightning effect)
              • -------- REMOVE POINTS AND GROUPS --------
              • Unit Group - Remove all units from ChainLightning_Group[2]
              • Special Effect - Destroy (Last created special effect)
              • Custom script: call DestroyGroup (udg_ChainLightning_Group[1])
              • Custom script: call DestroyGroup (udg_ChainLightning_Group[2])
              • Custom script: call DestroyGroup (udg_ChainLightning_Group[3])
              • Custom script: call RemoveLocation(udg_ChainLightning_Point[1])
              • Custom script: call RemoveLocation(udg_ChainLightning_Point[2])
              • Custom script: call RemoveLocation(udg_ChainLightning_Point[3])
              • Set ChainLightning_Caster = No unit
              • Set ChainLightning_Hit[1] = No unit
              • Set ChainLightning_Hit[2] = No unit
              • Set ChainLightning_Hit[3] = No unit
              • Trigger - Turn off (This trigger)
 
Last edited:
Level 12
Joined
May 22, 2015
Messages
1,051
That trigger is very hard to read. I don't know if all of the code is even displayed on screen lol. I think it could be cleaned up to be a little nicer. Also note that the spell isn't going to work properly if you cast it with another unit in a short period of time.

Anyway, I think this might be causing your problem:
((Matching unit) Equal to (==) ChainLightning_Hit[1]) and ((Matching unit) Equal to (==) ChainLightning_Hit[2])

I don't think this can ever be true, so it always gives you an empty group. I think you want those to be Not Equal To.
 
Level 25
Joined
May 11, 2007
Messages
4,660
I tried to make Chain Lightning Spell by my self to add more effects (slow, stun etc) but i got some errors:
- I made it to bounce max 3 units, only bounce 1
- Lightning Effect only affect to primary target, secondary, third target doesnt have it
- Damage only did to primary, and bounce 1

Now im stuck and dont know where to fix it, please help me..

My triggers:
  • Chain Lightning
  • Events
    • Unit - A unit Starts the effect of an ability
  • Conditions
    • (Ability being cast) Equal to (==) Bounce Lightning
  • Actions
    • Set ChainLightning_Caster = (Casting unit)
    • Set ChainLightning_Hit[1] = (Target unit of ability being cast)
    • Set ChainLightning_Point[0] = (Position of ChainLightning_Caster)
    • Set ChainLightning_Point[1] = (Position of (Target unit of ability being cast))
    • Unit - Cause ChainLightning_Caster to damage ChainLightning_Hit[1], dealing 100.00 damage of attack type Chaos and damage type Universal
    • Special Effect - Create a special effect attached to the origin of ChainLightning_Hit[1] using Abilities\Weapons\Bolt\BoltImpact.mdl
    • Special Effect - Destroy (Last created special effect)
    • Lightning - Create a Chain Lightning - Primary lightning effect from source ChainLightning_Point[0] to target ChainLightning_Point[1]
    • Set ChainLightning_SFX[1] = (Last created lightning effect)
    • Trigger - Turn on Chain Lightning Bounce <gen>
  • Chain Lightning Bounce
  • Events
    • Time - Every 0.30 seconds of game time
  • Conditions
  • Actions
    • Set ChainLightning_Group[1] = (Units within 400.00 of (Position of ChainLightning_Hit[1]) matching (((((Matching unit) is A structure) Not equal to (!=) True) and ((Matching unit) Not equal to (!=) ChainLightning_Hit[1])) and ((((Matching unit) is alive) Equal to (==) True) and (((Matchin
      • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in ChainLightning_Group[1]) Equal to (==) 0
        • Then - Actions
          • Lightning - Destroy ChainLightning_SFX[1]
          • Trigger - Turn off (This trigger) //You do turn the trigger of two times, why?
          • Custom script: call DestroyGroup (udg_ChainLightning_Group[1])
          • Custom script: call RemoveLocation(udg_ChainLightning_Point[1])
          • Set ChainLightning_Caster = No unit
          • Set ChainLightning_Hit[1] = No unit
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • //ok, so time to PICK EVERYONE in the unit group of 1 random unit from a unit group.
  • //Use Set tempUnit = random unit from ChainLighting_Group[1] instead.
    • Unit Group - Pick every unit in (Random 1 units from ChainLightning_Group[1]) and do (Actions)
      • Loop - Actions
        • Lightning - Destroy ChainLightning_SFX[1]
        • Set ChainLightning_Hit[2] = (Picked unit)
        • Set ChainLightning_Point[2] = (Position of (Picked unit))
        • Unit - Cause ChainLightning_Caster to damage ChainLightning_Hit[2], dealing 100.00 damage of attack type Chaos and damage type Universal
        • Lightning - Create a Chain Lightning - Secondary lightning effect from source ChainLightning_Point[1] to target ChainLightning_Point[2]
        • Set ChainLightning_SFX[2] = (Last created lightning effect)
        • Set ChainLightning_Group[2] = (Units within 400.00 of (Position of ChainLightning_Hit[2]) matching (((((Matching unit) is A structure) Not equal to (!=) True) and (((Matching unit) Equal to (==) ChainLightning_Hit[1]) and ((Matching unit) Equal to (==) ChainLightning_Hit[2]))) //Here you check if the unit is 1 and 2, can that even happen? and shouldn't it be "NOT" ??
  • and ((((Mat
    • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
      • If - Conditions
        • (Number of units in ChainLightning_Group[2]) Equal to (==) 0
      • Then - Actions
        • Trigger - Turn off (This trigger)
        • Custom script: call DestroyGroup (udg_ChainLightning_Group[1])
        • Custom script: call DestroyGroup (udg_ChainLightning_Group[2])
        • Custom script: call RemoveLocation(udg_ChainLightning_Point[1])
        • Custom script: call RemoveLocation(udg_ChainLightning_Point[2])
        • Set ChainLightning_Caster = No unit
        • Set ChainLightning_Caster = No unit
        • Set ChainLightning_Hit[1] = No unit
        • Set ChainLightning_Hit[2] = No unit
        • Lightning - Destroy ChainLightning_SFX[2]
        • Trigger - Turn off (This trigger)
      • Else - Actions
        • Unit Group - Pick every unit in (Random 1 units from ChainLightning_Group[2]) and do (Actions)
          • Loop - Actions
            • Lightning - Destroy ChainLightning_SFX[2]
            • Set ChainLightning_Hit[3] = (Picked unit)
            • Set ChainLightning_Point[3] = (Position of (Picked unit))
            • Unit - Cause ChainLightning_Caster to damage ChainLightning_Hit[3], dealing 100.00 damage of attack type Chaos and damage type Universal
            • Lightning - Create a Chain Lightning - Secondary lightning effect from source ChainLightning_Point[2] to target ChainLightning_Point[3]
            • Lightning - Destroy (Last created lightning effect)
            • Custom script: call DestroyGroup (udg_ChainLightning_Group[1])
            • Custom script: call DestroyGroup (udg_ChainLightning_Group[2])
            • Custom script: call DestroyGroup (udg_ChainLightning_Group[3])
            • Custom script: call RemoveLocation(udg_ChainLightning_Point[1])
            • Custom script: call RemoveLocation(udg_ChainLightning_Point[2])
            • Custom script: call RemoveLocation(udg_ChainLightning_Point[3])
            • Set ChainLightning_Caster = No unit
            • Set ChainLightning_Hit[1] = No unit
            • Set ChainLightning_Hit[2] = No unit
            • Set ChainLightning_Hit[3] = No unit
            • Trigger - Turn off (This trigger)

CTRL + F // to find the questions.
 
Level 3
Joined
Jun 17, 2015
Messages
53
Anyway, I think this might be causing your problem:
((Matching unit) Equal to (==) ChainLightning_Hit[1]) and ((Matching unit) Equal to (==) ChainLightning_Hit[2])

I don't think this can ever be true, so it always gives you an empty group. I think you want those to be Not Equal To.

oh thank u so much, a big mistake here :ogre_love:

For example:
First Trigger that deals damage and create lightning, then loop
Second Trigger: loop that check 1 random unit, if dont have any unit = close. If has 1 then deal dmg and check for another unit
 
Top