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

Spell: Living Bomb Request

Status
Not open for further replies.
Level 3
Joined
May 28, 2012
Messages
32
Hey dear spell makers I need a spell done for my project pls!

The spell should deal damage over 3 seconds. After the duration of the dot it should explode and deal damage again to him and nearby enemies.

If the target is dotted he should has a buff because of the following function:

If the spell is casted on the same targed again (which is dotted) the previously dot timer should end so the explode damage is instantly dealt and refresh the dot timer.

I'm waiting hopefully and would be very grateful.
 
Last edited:
Level 37
Joined
Jul 22, 2015
Messages
3,485
Here you go! You didn't specify if you wanted it to support multiple levels, so I just went with 1 level.

I put text messages for myself so I can make sure certain features were working. I also made the damage really low so I can spam it.


  • Living Bomb Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set LB_AoE = 100.00
      • Set LB_DoTDamage = 1.00
      • Set LB_AoEDamage = 2.00
  • Living Bomb Init
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Living Bomb
    • Actions
      • Set LB_Index = (LB_Index + 1)
      • Set LB_Caster[LB_Index] = (Triggering unit)
      • Set LB_Target[LB_Index] = (Target unit of ability being cast)
      • Set LB_TargetLoc[LB_Index] = (Position of LB_Target[LB_Index])
      • Set LB_Counter[LB_Index] = 0.00
      • Game - Display to (All players) for 3.00 seconds the text: (Living Bomb (Index + ((String(LB_Index)) + () + (has been applied to + ((String((Unit-type of LB_Target[LB_Index]))) + .)))))
      • -------- ------------------------------------------------------------------------------------------- --------
      • -------- Checking to see if the unit already has Living Bomb debuff --------
      • -------- ------------------------------------------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (LB_Target[LB_Index] has buff Living Bomb ) Equal to True
        • Then - Actions
          • -------- ---------------------------------------------------------------------------------------------------------------------------- --------
          • -------- If true, pick all units within LB_AoE of LB_TargetLoc and deal LB_AoEDamage --------
          • -------- ---------------------------------------------------------------------------------------------------------------------------- --------
          • Set LB_Group[LB_Index] = (Units within LB_AoE of LB_TargetLoc[LB_Index] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of LB_Caster[LB_Index])) Equal to True))))
          • Unit Group - Pick every unit in LB_Group[LB_Index] and do (Actions)
            • Loop - Actions
              • Set LB_PickedUnit = (Picked unit)
              • Special Effect - Create a special effect attached to the origin of LB_Target[LB_Index] using Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
              • Special Effect - Destroy (Last created special effect)
              • Unit - Cause LB_Caster[LB_Index] to damage LB_PickedUnit, dealing LB_AoEDamage damage of attack type Spells and damage type Fire
          • Game - Display to (All players) for 8.00 seconds the text: (Living Bomb has been reapplied to + ((String((Unit-type of LB_Target[LB_Index]))) + (! + ( AoE damage of + ((String(LB_AoEDamage)) + has been dealt to nearby units. Living Bomb DoT has also been refreshed.)))))
          • Custom script: call DestroyGroup (udg_LB_Group[udg_LB_Loop])
          • Custom script: call RemoveLocation (udg_LB_TargetLoc[udg_LB_Loop])
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • LB_Index Equal to 1
        • Then - Actions
          • Trigger - Turn on Living Bomb Loop <gen>
        • Else - Actions
  • Living Bomb Loop
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer LB_Loop) from 1 to LB_Index, do (Actions)
        • Loop - Actions
          • -------- ------------------------------------------------------------------------------- --------
          • -------- Deal LB_DoTDamage every second to LB_Target --------
          • -------- ------------------------------------------------------------------------------- --------
          • Unit - Cause LB_Caster[LB_Loop] to damage LB_Target[LB_Loop], dealing LB_DoTDamage damage of attack type Spells and damage type Fire
          • -------- --------------------------------------------------------------------- --------
          • -------- Checks amount of seconds that has passed --------
          • -------- --------------------------------------------------------------------- --------
          • Set LB_Counter[LB_Loop] = (LB_Counter[LB_Loop] + 1.00)
          • Game - Display to (All players) for 8.00 seconds the text: (Living Bomb (Index + ((String(LB_Index)) + () + (duration: + ((String(LB_Counter[LB_Loop])) + second(s))))))
          • -------- --------------------------------------------------------------------------------------------------- --------
          • -------- Checks if LB_Counter is equal to the max duration of the debuff --------
          • -------- If so, commence Recyles --------
          • -------- --------------------------------------------------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • LB_Counter[LB_Loop] Greater than or equal to 3.00
            • Then - Actions
              • Set LB_Caster[LB_Loop] = LB_Caster[LB_Index]
              • Set LB_Target[LB_Loop] = LB_Target[LB_Index]
              • Set LB_Counter[LB_Loop] = LB_Counter[LB_Index]
              • Set LB_Index = (LB_Index - 1)
              • Set LB_Loop = (LB_Loop - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • LB_Index Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions
 

Attachments

  • Living Bomb.w3x
    21.5 KB · Views: 87
Level 3
Joined
May 28, 2012
Messages
32
Thank you very much for your VERY fast reply :D!
Here you go! You didn't specify if you wanted it to support multiple levels, so I just went with 1 level.

Yea I guess I wasnt precise enough :/ my bad. But nevermind I can change this by myself.

Defently + rep for your fast reply and for taking your time to help me!

There is one more thing I actually wanted in this Spell. Could u add an explosion damage when the dot timer is over?

One example: Triggering Unit casts Living Bomb on a Unit -> Unit is buffed with Living Bomb and taking damage over 3 seconds -> After the 3 seconds the explosion damage appears.

Now the complicated function: Triggering Unit casts Living Bomb on a Unit which is already buffed with "Living Bomb" -> Deals explosion damage instantly, refreshs the timer to 3 seconds and after the end of the timer the explosion damage is done again.
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
Thank you very much for your VERY fast reply :D!


Yea I guess I wasnt precise enough :/ my bad. But nevermind I can change this by myself.

Defently + rep for your fast reply and for taking your time to help me!

No problem!

There is one more thing I actually wanted in this Spell. Could u add an explosion damage when the dot timer is over?

One example: Triggering Unit casts Living Bomb on a Unit -> Unit is buffed with Living Bomb and taking damage over 3 seconds -> After the 3 seconds the explosion damage appears.

Now the complicated function: Triggering Unit casts Living Bomb on a Unit which is already buffed with "Living Bomb" -> Deals explosion damage instantly, refreshs the timer to 3 seconds and after the end of the timer the explosion damage is done again.

Ohh my bad. I totally missed that in your original post. Unfortunately, I wont be by my computer until Friday evening or Saturday afternoon. If no one has done it by then, I can add the new feature.

EDIT: Here you go man! Since you said you were going to make the level up ability yourself, I assumed you're pretty comfortable with the Trigger Editor. Just copy this format and put it in under the If nest that checks if the Counter is greater than or equal to 3.

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • LB_Counter[LB_Loop] Greater than or equal to 3.00
    • Then - Actions
      • Set LB_Group[LB_Loop] = (Units within LB_AoE of LB_TargetLoc[LB_Loop] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of LB_Caster[LB_Loop])) Equal to True))))
      • Unit Group - Pick every unit in LB_Group[LB_Loop] and do (Actions)
        • Loop - Actions
          • Set LB_PickedUnit = (Picked unit)
          • Special Effect - Create a special effect attached to the origin of LB_Target[LB_Loop] using Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
          • Special Effect - Destroy (Last created special effect)
          • Unit - Cause LB_Caster[LB_Loop] to damage LB_PickedUnit, dealing LB_AoEDamage damage of attack type Spells and damage type Fire
      • Custom script: call DestroyGroup (udg_LB_Group[udg_LB_Loop])
      • Custom script: call RemoveLocation (udg_LB_TargetLoc[udg_LB_Loop])
Also, change the two custom scripts in the Init trigger to this xP
  • Custom script: call DestroyGroup (udg_LB_Group[udg_LB_Index])
  • Custom script: call RemoveLocation (udg_LB_TargetLoc[udg_LB_Index])
 
Last edited:
Level 3
Joined
May 28, 2012
Messages
32
Uh great! i will test it now^^

EDIT: I have changed the [LB_Index] to [LB_Loop] in the "Loop Trigger" and the Custom Scripts to [LB_Index] in the "Init Trigger".

Result: If I cast Living Bomb on a unit and wait 3 seconds -> the explosion damage apears.
If I cast Living Bomb on a unit which already is buffed with Living Bomb -> the explosion damage appears, the timer is refreshed BUT after the timer there is no explosion damage again.
 
Level 37
Joined
Jul 22, 2015
Messages
3,485
Uh great! i will test it now^^

EDIT: I have changed the [LB_Index] to [LB_Loop] in the "Loop Trigger" and the Custom Scripts to [LB_Index] in the "Init Trigger".

Result: If I cast Living Bomb on a unit and wait 3 seconds -> the explosion damage apears.
If I cast Living Bomb on a unit which already is buffed with Living Bomb -> the explosion damage appears, the timer is refreshed BUT after the timer there is no explosion damage again.

Works perfectly fine on my end. You must have done something wrong D: post the triggers?
 
Level 3
Joined
May 28, 2012
Messages
32
Here are the triggers:

  • Living Bomb Init
    • Ereignisse
      • Einheit - A unit Startet den Effekt einer Fähigkeit
    • Bedingungen
      • (Ability being cast) Gleich Living Bomb
    • Aktionen
      • Set LB_Index = (LB_Index + 1)
      • Set LB_Caster[LB_Index] = (Triggering unit)
      • Set LB_Target[LB_Index] = (Target unit of ability being cast)
      • Set LB_TargetLoc[LB_Index] = (Position of LB_Target[LB_Index])
      • Set LB_Counter[LB_Index] = 0.00
      • Spiel - Display to (All players) for 3.00 seconds the text: (Living Bomb (Index + ((String(LB_Index)) + () + (has been applied to + ((String((Unit-type of LB_Target[LB_Index]))) + .)))))
      • -------- ------------------------------------------------------------------------------------------- --------
      • -------- Checking to see if the unit already has Living Bomb debuff --------
      • -------- ------------------------------------------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • 'IF'-Bedingungen
          • (LB_Target[LB_Index] has buff Living Bomb ) Gleich True
        • 'THEN'-Aktionen
          • -------- ---------------------------------------------------------------------------------------------------------------------------- --------
          • -------- If true, pick all units within LB_AoE of LB_TargetLoc and deal LB_AoEDamage --------
          • -------- ---------------------------------------------------------------------------------------------------------------------------- --------
          • Set LB_Group[LB_Index] = (Units within LB_AoE of LB_TargetLoc[LB_Index] matching ((((Matching unit) is Ein Gebäude) Gleich False) and ((((Matching unit) is alive) Gleich True) and (((Matching unit) belongs to an enemy of (Owner of LB_Caster[LB_Index])) Gleich True))))
          • Einheitengruppe - Pick every unit in LB_Group[LB_Index] and do (Actions)
            • Schleifen - Aktionen
              • Set LB_PickedUnit = (Picked unit)
              • Spezialeffekt - Create a special effect attached to the origin of LB_Target[LB_Index] using Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
              • Spezialeffekt - Destroy (Last created special effect)
              • Einheit - Cause LB_Caster[LB_Index] to damage LB_PickedUnit, dealing LB_AoEDamage damage of attack type Zaubersprüche and damage type Feuer
          • Spiel - Display to (All players) for 8.00 seconds the text: (Living Bomb has been reapplied to + ((String((Unit-type of LB_Target[LB_Index]))) + (! + ( AoE damage of + ((String(LB_AoEDamage)) + has been dealt to nearby units. Living Bomb DoT has also been refreshed.)))))
          • Custom script: call DestroyGroup (udg_LB_Group[udg_LB_Index])
          • Custom script: call RemoveLocation (udg_LB_TargetLoc[udg_LB_Index])
        • 'ELSE'-Aktionen
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • 'IF'-Bedingungen
          • LB_Index Gleich 1
        • 'THEN'-Aktionen
          • Auslöser - Turn on Living Bomb Loop <gen>
        • 'ELSE'-Aktionen
  • Living Bomb Loop
    • Ereignisse
      • Zeit - Every 1.00 seconds of game time
    • Bedingungen
    • Aktionen
      • For each (Integer LB_Loop) from 1 to LB_Index, do (Actions)
        • Schleifen - Aktionen
          • -------- ------------------------------------------------------------------------------- --------
          • -------- Deal LB_DoTDamage every second to LB_Target --------
          • -------- ------------------------------------------------------------------------------- --------
          • Einheit - Cause LB_Caster[LB_Loop] to damage LB_Target[LB_Loop], dealing LB_DoTDamage damage of attack type Zaubersprüche and damage type Feuer
          • -------- --------------------------------------------------------------------- --------
          • -------- Checks amount of seconds that has passed --------
          • -------- --------------------------------------------------------------------- --------
          • Set LB_Counter[LB_Loop] = (LB_Counter[LB_Loop] + 1.00)
          • Spiel - Display to (All players) for 8.00 seconds the text: (Living Bomb (Index + ((String(LB_Index)) + () + (duration: + ((String(LB_Counter[LB_Loop])) + second(s))))))
          • -------- --------------------------------------------------------------------------------------------------- --------
          • -------- Checks if LB_Counter is equal to the max duration of the debuff --------
          • -------- If so, commence Recyles --------
          • -------- --------------------------------------------------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • 'IF'-Bedingungen
              • LB_Counter[LB_Loop] Größer gleich 3.00
            • 'THEN'-Aktionen
              • Set LB_Group[LB_Loop] = (Units within LB_AoE of LB_TargetLoc[LB_Loop] matching ((((Matching unit) is Ein Gebäude) Gleich False) and ((((Matching unit) is alive) Gleich True) and (((Matching unit) belongs to an enemy of (Owner of LB_Caster[LB_Loop])) Gleich True))))
              • Einheitengruppe - Pick every unit in LB_Group[LB_Loop] and do (Actions)
                • Schleifen - Aktionen
                  • Set LB_PickedUnit = (Picked unit)
                  • Spezialeffekt - Create a special effect attached to the origin of LB_Target[LB_Loop] using Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
                  • Spezialeffekt - Destroy (Last created special effect)
                  • Einheit - Cause LB_Caster[LB_Loop] to damage LB_PickedUnit, dealing LB_AoEDamage damage of attack type Zaubersprüche and damage type Feuer
              • Custom script: call DestroyGroup (udg_LB_Group[udg_LB_Loop])
              • Custom script: call RemoveLocation (udg_LB_TargetLoc[udg_LB_Loop])
              • Set LB_Caster[LB_Loop] = LB_Caster[LB_Index]
              • Set LB_Target[LB_Loop] = LB_Target[LB_Index]
              • Set LB_Counter[LB_Loop] = LB_Counter[LB_Index]
              • Set LB_Index = (LB_Index - 1)
              • Set LB_Loop = (LB_Loop - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • 'IF'-Bedingungen
                  • LB_Index Gleich 0
                • 'THEN'-Aktionen
                  • Auslöser - Turn off (This trigger)
                • 'ELSE'-Aktionen
            • 'ELSE'-Aktionen
 
Last edited:
Level 37
Joined
Jul 22, 2015
Messages
3,485
Here are the triggers:

  • Living Bomb Init
    • Ereignisse
      • Einheit - A unit Startet den Effekt einer Fähigkeit
    • Bedingungen
      • (Ability being cast) Gleich Living Bomb
    • Aktionen
      • Set LB_Index = (LB_Index + 1)
      • Set LB_Caster[LB_Index] = (Triggering unit)
      • Set LB_Target[LB_Index] = (Target unit of ability being cast)
      • Set LB_TargetLoc[LB_Index] = (Position of LB_Target[LB_Index])
      • Set LB_Counter[LB_Index] = 0.00
      • Spiel - Display to (All players) for 3.00 seconds the text: (Living Bomb (Index + ((String(LB_Index)) + () + (has been applied to + ((String((Unit-type of LB_Target[LB_Index]))) + .)))))
      • -------- ------------------------------------------------------------------------------------------- --------
      • -------- Checking to see if the unit already has Living Bomb debuff --------
      • -------- ------------------------------------------------------------------------------------------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • 'IF'-Bedingungen
          • (LB_Target[LB_Index] has buff Living Bomb ) Gleich True
        • 'THEN'-Aktionen
          • -------- ---------------------------------------------------------------------------------------------------------------------------- --------
          • -------- If true, pick all units within LB_AoE of LB_TargetLoc and deal LB_AoEDamage --------
          • -------- ---------------------------------------------------------------------------------------------------------------------------- --------
          • Set LB_Group[LB_Index] = (Units within LB_AoE of LB_TargetLoc[LB_Index] matching ((((Matching unit) is Ein Gebäude) Gleich False) and ((((Matching unit) is alive) Gleich True) and (((Matching unit) belongs to an enemy of (Owner of LB_Caster[LB_Index])) Gleich True))))
          • Einheitengruppe - Pick every unit in LB_Group[LB_Index] and do (Actions)
            • Schleifen - Aktionen
              • Set LB_PickedUnit = (Picked unit)
              • Spezialeffekt - Create a special effect attached to the origin of LB_Target[LB_Index] using Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
              • Spezialeffekt - Destroy (Last created special effect)
              • Einheit - Cause LB_Caster[LB_Index] to damage LB_PickedUnit, dealing LB_AoEDamage damage of attack type Zaubersprüche and damage type Feuer
          • Spiel - Display to (All players) for 8.00 seconds the text: (Living Bomb has been reapplied to + ((String((Unit-type of LB_Target[LB_Index]))) + (! + ( AoE damage of + ((String(LB_AoEDamage)) + has been dealt to nearby units. Living Bomb DoT has also been refreshed.)))))
          • Custom script: call DestroyGroup (udg_LB_Group[udg_LB_Index])
          • Custom script: call RemoveLocation (udg_LB_TargetLoc[udg_LB_Index])
        • 'ELSE'-Aktionen
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • 'IF'-Bedingungen
          • LB_Index Gleich 1
        • 'THEN'-Aktionen
          • Auslöser - Turn on Living Bomb Loop <gen>
        • 'ELSE'-Aktionen
  • Living Bomb Loop
    • Ereignisse
      • Zeit - Every 1.00 seconds of game time
    • Bedingungen
    • Aktionen
      • For each (Integer LB_Loop) from 1 to LB_Index, do (Actions)
        • Schleifen - Aktionen
          • -------- ------------------------------------------------------------------------------- --------
          • -------- Deal LB_DoTDamage every second to LB_Target --------
          • -------- ------------------------------------------------------------------------------- --------
          • Einheit - Cause LB_Caster[LB_Loop] to damage LB_Target[LB_Loop], dealing LB_DoTDamage damage of attack type Zaubersprüche and damage type Feuer
          • -------- --------------------------------------------------------------------- --------
          • -------- Checks amount of seconds that has passed --------
          • -------- --------------------------------------------------------------------- --------
          • Set LB_Counter[LB_Loop] = (LB_Counter[LB_Loop] + 1.00)
          • Spiel - Display to (All players) for 8.00 seconds the text: (Living Bomb (Index + ((String(LB_Index)) + () + (duration: + ((String(LB_Counter[LB_Loop])) + second(s))))))
          • -------- --------------------------------------------------------------------------------------------------- --------
          • -------- Checks if LB_Counter is equal to the max duration of the debuff --------
          • -------- If so, commence Recyles --------
          • -------- --------------------------------------------------------------------------------------------------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • 'IF'-Bedingungen
              • LB_Counter[LB_Loop] Größer gleich 3.00
            • 'THEN'-Aktionen
              • Set LB_Group[LB_Loop] = (Units within LB_AoE of LB_TargetLoc[LB_Loop] matching ((((Matching unit) is Ein Gebäude) Gleich False) and ((((Matching unit) is alive) Gleich True) and (((Matching unit) belongs to an enemy of (Owner of LB_Caster[LB_Loop])) Gleich True))))
              • Einheitengruppe - Pick every unit in LB_Group[LB_Loop] and do (Actions)
                • Schleifen - Aktionen
                  • Set LB_PickedUnit = (Picked unit)
                  • Spezialeffekt - Create a special effect attached to the origin of LB_Target[LB_Loop] using Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
                  • Spezialeffekt - Destroy (Last created special effect)
                  • Einheit - Cause LB_Caster[LB_Loop] to damage LB_PickedUnit, dealing LB_AoEDamage damage of attack type Zaubersprüche and damage type Feuer
              • Custom script: call DestroyGroup (udg_LB_Group[udg_LB_Loop])
              • Custom script: call RemoveLocation (udg_LB_TargetLoc[udg_LB_Loop])
              • Set LB_Caster[LB_Loop] = LB_Caster[LB_Index]
              • Set LB_Target[LB_Loop] = LB_Target[LB_Index]
              • Set LB_Counter[LB_Loop] = LB_Counter[LB_Index]
              • Set LB_Index = (LB_Index - 1)
              • Set LB_Loop = (LB_Loop - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • 'IF'-Bedingungen
                  • LB_Index Gleich 0
                • 'THEN'-Aktionen
                  • Auslöser - Turn off (This trigger)
                • 'ELSE'-Aktionen
            • 'ELSE'-Aktionen

Odd everything looks good. Here just use my version.
 

Attachments

  • Living Bomb.w3x
    22.3 KB · Views: 53
Status
Not open for further replies.
Top