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

[Trigger] How to check if a buff is dispelled?

Status
Not open for further replies.
Level 8
Joined
Jun 13, 2008
Messages
346
I made a spell which infects the target with a dispellable effect. I wanna make some additions like if this buff is dispelled on the target, then want it to do some blah blah...
do I have to do this in my own loop or create an another trigger to check this? And how to do it? should I go with "if xxx buff is removed is true, then do yyy" logic or something else? helps are appreciated.
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
You can check if a unit has a buff:
"if ((unit) has (buff) equal to true) then"
But I think you want the event "A unit's buff is dispelled"
In that case you can use my Effect Over Time System to create the buff.
You will have a few new events including "A effect over time is dispelled"
An effect over time (or EOT in short) can be used, next to many other things, for buffs.

However the current version in the spell section is heavely outdated and has not got the event yet.

In this post I sent the latest version on which I am working.
There might be a few DisplayText() actions and a few bugs in it but I am working hard to finish the 2.0 version.
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
In my system the trigger would be like this:
  • Dispell event
    • Events
      • Game - EOT_Event_An_EOT_Is_Dispelled becomes Equal to 1.00
    • Conditions
      • EOT_Param_Buff Equal to Black Arrow
    • Actions
      • Game - Display to (All players) the text: Black arrow has bee...
  • [\TRIGGER]
  • However you cannot know who dispelled the buff.
  • That is only implemented in my 1.2d version :D (for now)
  • To create an eot you just copy one of the examples.
  • They are not hard to understand.
  • I will write a small tut with what you can do when I release it.
  • The problem is that even before I finished my ideas, I already made more... Other people also give me suggestions and the ones that sound good are also gonna be in it... I just "finished" version 2.0 6 times I think :D
 
Level 8
Joined
Jun 13, 2008
Messages
346
there it is Wietlol...in case if you wanna see my spell, I added it to your latest EOT system. and added floating damage system so you can see how my spell works.
So to be clear again, if an unit dispells this debuf, it shouldn't be just disappear. It should affect another unit nearby just like the spell usually does.
 

Attachments

  • Effect Over Time System 2.0.1.w3x
    86.6 KB · Views: 45
Level 24
Joined
Aug 1, 2013
Messages
4,657
In that case you can use my Effect Over Time System to create the buff.
You will have a few new events including "A effect over time is dispelled"
An effect over time (or EOT in short) can be used, next to many other things, for buffs.
This means that you must create the spell with the EOT System.
You cannot completely check when a buff has been dispelled.
Either you have a grouped event (dispelled, expired, changed target, etc.) or you have a system like mine which can detect dispells of the buffs that are made through this system:

  • Necrotic Plague
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Arcane Plague
    • Actions
      • Custom script: call EOT_Null_Variables()
      • Set EOT_Param_Source = (Triggering unit)
      • Set EOT_Param_Target = (Target unit of ability being cast)
      • Set EOT_Param_Duration = 9.00
      • Set EOT_Param_Interval = 3.00
      • Set EOT_Param_Buff = Custom Arcane Plague
      • Set EOT_Param_Buff_Holder = Arcane Plague (Buff Holder)
      • Set EOT_Param_Special_Effect_Model = Environment\LargeBuildingFire\LargeBuildingFire2.mdl
      • Set TempAbility = (Ability being cast)
      • Custom script: set udg_TempInteger = udg_TempAbility
      • Set EOT_Param_Type = (Real(TempInteger))
      • Set DOT_Damage = (50.00 x (Real((Level of (Ability being cast) for (Triggering unit)))))
      • Set DOT_Attack_Type = Spells
      • Set DOT_Damage_Type = Normal
      • Trigger - Run EOT_Trigger_Create_EOT (ignoring conditions)
      • -------- start with 3 stacks --------
      • Custom script: call EOT_Save_Integer(0, 3)
  • Necrotic Plague Jump On Expire
    • Events
      • Game - EOT_Event_An_EOT_Has_Expired becomes Equal to 0.00
    • Conditions
    • Actions
      • Set TempAbility = Arcane Plague
      • Custom script: set udg_TempInteger = udg_TempAbility
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • EOT_Param_Type Equal to (Real(TempInteger))
        • Then - Actions
          • Set TempBoolean = False
          • Set TempLocation = (Position of EOT_Param_Target)
          • Custom script: set bj_wantDestroyGroup = true
          • Unit Group - Pick every unit in (Units within 250.00 of TempLocation) and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempBoolean Equal to False
                  • ((Picked unit) is A structure) Equal to False
                  • (Picked unit) Not equal to EOT_Param_Target
                  • ((Picked unit) is alive) Equal to True
                  • ((Picked unit) belongs to an enemy of (Owner of EOT_Param_Source)) Equal to True
                • Then - Actions
                  • Set TempBoolean = True
                  • Set EOT_Param_Target = (Picked unit)
                  • Set EOT_Param_Remaining_Duration = 9.00
                  • Set EOT_Param_Expire = False
                  • Custom script: call EOT_Save_Integer(0, EOT_Load_Integer(0) + 1)
                  • Game - Display to (All players) the text: (The new target = + (Name of EOT_Param_Target))
                  • Custom script: set udg_TempInteger = EOT_Load_Integer(0)
                  • Game - Display to (All players) the text: (Current stacks are + (String(TempInteger)))
                • Else - Actions
          • Custom script: call RemoveLocation(udg_TempLocation)
        • Else - Actions
  • Necrotic Plague Jump On Dispell
    • Events
      • Game - EOT_Event_An_EOT_Is_Dispelled becomes Equal to 0.00
    • Conditions
    • Actions
      • Set TempAbility = Arcane Plague
      • Custom script: set udg_TempInteger = udg_TempAbility
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • EOT_Param_Type Equal to (Real(TempInteger))
        • Then - Actions
          • Custom script: set udg_TempInteger = EOT_Load_Integer(0)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TempInteger Greater than 1
            • Then - Actions
              • Set TempBoolean = False
              • Set TempLocation = (Position of EOT_Param_Target)
              • Custom script: set bj_wantDestroyGroup = true
              • Unit Group - Pick every unit in (Units within 250.00 of TempLocation) and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TempBoolean Equal to False
                      • ((Picked unit) is A structure) Equal to False
                      • (Picked unit) Not equal to EOT_Param_Target
                      • ((Picked unit) is alive) Equal to True
                      • ((Picked unit) belongs to an enemy of (Owner of EOT_Param_Source)) Equal to True
                    • Then - Actions
                      • Set TempBoolean = True
                      • Set EOT_Param_Target = (Picked unit)
                      • Set EOT_Param_Remaining_Duration = 9.00
                      • Set EOT_Param_Destroy = False
                      • Trigger - Run EOT_Trigger_Save_Data (ignoring conditions)
                      • Custom script: call EOT_Save_Integer(0, EOT_Load_Integer(0) - 1)
                      • Game - Display to (All players) the text: (The new target = + (Name of EOT_Param_Target))
                      • Custom script: set udg_TempInteger = EOT_Load_Integer(0)
                      • Game - Display to (All players) the text: (Current stacks are + (String(TempInteger)))
                    • Else - Actions
              • Custom script: call RemoveLocation(udg_TempLocation)
            • Else - Actions
        • Else - Actions
  • Necrotic Plague Jump On Death
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • Set EOT_Param_Target = (Triggering unit)
      • Set TempAbility = Arcane Plague
      • Custom script: set udg_TempInteger = udg_TempAbility
      • Set EOT_Param_Type = (Real(TempInteger))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Evaluate EOT_Trigger_Get_Data conditions) Equal to True
        • Then - Actions
          • Set TempBoolean = False
          • Set TempLocation = (Position of EOT_Param_Target)
          • Custom script: set bj_wantDestroyGroup = true
          • Unit Group - Pick every unit in (Units within 250.00 of TempLocation) and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempBoolean Equal to False
                  • ((Picked unit) is A structure) Equal to False
                  • (Picked unit) Not equal to EOT_Param_Target
                  • ((Picked unit) is alive) Equal to True
                  • ((Picked unit) belongs to an enemy of (Owner of EOT_Param_Source)) Equal to True
                • Then - Actions
                  • Set TempBoolean = True
                  • Set EOT_Param_Target = (Picked unit)
                  • Set EOT_Param_Remaining_Duration = 9.00
                  • Trigger - Run EOT_Trigger_Save_Data (ignoring conditions)
                  • Custom script: call EOT_Save_Integer(0, EOT_Load_Integer(0) + 1)
                  • Game - Display to (All players) the text: (The new target = + (Name of EOT_Param_Target))
                  • Custom script: set udg_TempInteger = EOT_Load_Integer(0)
                  • Game - Display to (All players) the text: (Current stacks are + (String(TempInteger)))
                • Else - Actions
          • Custom script: call RemoveLocation(udg_TempLocation)
        • Else - Actions
 

Attachments

  • ArcanePlague.w3x
    52 KB · Views: 40
Level 8
Joined
Jun 13, 2008
Messages
346
I don't know if its because of that but your spell didn't work :(...at least it doesn't act like mine...it doesnt take 9 seconds on new target after the jump and if I cast the spell again it doesn't do anything....btw it wanted i and newUnit variables to be defined so I did inside their functions....so don't know if this caused that or not:S:S
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
The map I gave in the attachment works... as long as 2 of the same effects are not active on the same target... I think that you need another condition inside the loop "Picked unit has buff "Arcane Plague" equal to false"... but then it should work.
I don't know how much you editted on the spell but it didn't like it.
 
Level 8
Joined
Jun 13, 2008
Messages
346
Either you didn't look to the map I uploaded to see how it works or you didn't check your map before uploading it. Maybe you messed up with stack logic?...but in fact its just have to act like damage multiplying thats all....just like in my map....first target gets 50 damage every 3 seconds for 9 seconds, then effect expires and jumps to another target nearby, then this new target gets 2X50=100 damage....third target gets 3X50=150 damage...and so on. but your spell has kinda another problem...after the first jump the duration of the effect on the new target expires too early not 9 seconds and jumps after that doesn't even deal damage...only putting effect on unit.
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
You did not upload a map since I posted how to make it.
But the map that I sent works... I only did not increase the damage according to the stacks.
In this map the damage is (50 X number-of-stacks)
It also has that extra condition that checks if the target has already got the effect.

However I did not change anything about its functionality...
The unit gets the effect for 9 seconds and when it changes target, it will properly deal damage to the other one.

(The death event didn't work though.)
(It is a bit different from what you had before but as I told you, the system is not yet finished...will be within a week I hope.)
 

Attachments

  • ArcanePlague.w3x
    52.7 KB · Views: 46
Level 8
Joined
Jun 13, 2008
Messages
346
Jump on death is working if you're talking about that....whats not working is jump on dispel and looks like it will never be because we add an ability to units. an ability cannot go away just by casting dispel magic, abolish magic or disenchant on that unit.
but right now, spell is working great...but it doesn't work better than what I've done so far:)...not until if you come up with a working solution about jump on dispel.
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
I don't add an ability to a unit... at least I don't keep it on the unit. I remove it immediately. The problem is that buff dispel skips aura buffs by default.

However with auras is the only way to properly add a buff to a unit.
If I would use a normal ability like slow and cast it on a unit, the other buffs made by the same parent-ability-type are removed as well as the new one.

Next to that, there are a few more bugs in WC3's buffs and buff dispels.
That's why you should trigger all dispel abilities yourself anyway.

In this example map I also made the blood mage have dispel magic.
However you should remove the part above the "Skip remaining actions" as well as that action. Because dispel magic should not remove all buffs... even though the tooltip sais so.
 

Attachments

  • ArcanePlague.w3x
    51.4 KB · Views: 49
Level 8
Joined
Jun 13, 2008
Messages
346
it somehow stops to jump after three dispel magic cast.

btw I was trying to achieve this with my own spell and kinda close to it. the problem is, each jump after the dispel, damage has to lose 1 stack which means it should deal "that moments damage-50" damage just like the original spell's approach. I managed to make it jump but damage messes up it deals "I guess" max integer value and couldn't figure it out why. you may wanna look to this guys.

to remind again, this is the spell I wanna fully do:http://www.wowhead.com/spell=70337/necrotic-plague

edit:eredar sorcerer can cast abolish magic only 3 times due to limited mana...so you may wanna change abolish magic's mana cost to 0:p
 

Attachments

  • Necrotic Plague with Dispel Jump.w3x
    31.5 KB · Views: 47
Level 24
Joined
Aug 1, 2013
Messages
4,657
it somehow stops to jump after three dispel magic cast.
  • -------- start with 3 stacks --------
If this effect is dispeled, it will lose a stack and jump to a nearby unit.
When there are 0 stacks... what do you want to let it do?
I mean this ability is already OP in WC3.

btw I was trying to achieve this with my own spell and kinda close to it. the problem is, each jump after the dispel, damage has to lose 1 stack which means it should deal "that moments damage-50" damage just like the original spell's approach. I managed to make it jump but damage messes up it deals "I guess" max integer value and couldn't figure it out why. you may wanna look to this guys.

to remind again, this is the spell I wanna fully do:http://www.wowhead.com/spell=70337/necrotic-plague

edit:eredar sorcerer can cast abolish magic only 3 times due to limited mana...so you may wanna change abolish magic's mana cost to 0:p
About your own spell... I don't really know where the problem is.
It could be because you set the integer to integer + 1.

Also...
1. Make a new map.
2. Make 2 abilities based of Human - Slow
3. Give both abilities a different buff.
4. Start the map and cast both abilities on one unit.
5. Realize why I use auras :)
No offense but be carefull when you create more spells with the same parent-ability-type.
 
Level 8
Joined
Jun 13, 2008
Messages
346
yes you're right problem is about this process
  • Hashtable - Save (Integer2 + 1) as 1 of (Key (Last created unit)) in ACPlague
I need to change it to something so It can save the latest stored damage value-50...because I want it to lose a stack which means every dispel is going to cause -50 damage.

You asked whats gonna happen if someone dispels this effect at the beginning?...is it always gonna stay at 0 stack?....well...yes:).....thats the point actually...it has to be kept at zero effect so it cannot hurt anyone until unit whos dispels this effect goes away or becomes out of mana...thats The Lich King's spell...so it has to be OP:)
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
Ah I see...
Set damage = 50*stacks.
When stacks are -1 then it deals -50 damage.

I never played WoW a lot so I don't really know it's abilities.
In the On-Dispel trigger in the map I showed you. You can see that there is a condition that checks how many stacks there are left. "TempInteger greater than 1"... when the stacks are 1 they will become 0 and thus the effect will be dispelled.
You just have to change that part
 
Level 8
Joined
Jun 13, 2008
Messages
346
I need to stop those stacks to go below 0 after dispels....when stacks are below 0, damage still continues to be set 50...no matter what value stacks are...0,-1,-2....50*negative integer always returns 50 somehow so as a result, between [0,-infinite) spell keeps cause 50 damage..but it shouldn't do anything.
1) spells stack count cannot go below 0...it should stay 0 if dispel continues.
2)0. stack should cause 0 damage to units not to keep cause 50 damage.

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • TempInteger Less than or equal to 0
    • Then - Actions
      • Set TempInteger = 0
    • Else - Actions
      • Set TempInteger = (TempInteger - 1)
this stopped stacks to go below 1 so worked but how the hell it still cause 50 damage in 0. stack I have no idea...how the result of 50*0=50 I wonder?:)
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
Ah that is a bit of a problem caused by me :D

I thought "When damage will not be dealt... there is no reason to deal the damage actually."
So When your damage is 0 or lower it will not save it.
I forgot that people might remove the damage.

Go to the DOT Extension and find this:
JASS:
function DOT_Save_Data takes nothing returns boolean
    if udg_DOT_Damage <= 0. then
        return false
    endif
    
    call EOT_Save_Real(-1, udg_DOT_Damage)
    call EOT_Save_Integer(-2, ConvertAttackTypeReverse(udg_DOT_Attack_Type))
    call EOT_Save_Integer(-3, ConvertDamageTypeReverse(udg_DOT_Damage_Type))
    
    return false
endfunction

Remove the first 3 lines.

Also in the function above you should change if udg_DOT_Damage <= 0. then to this if udg_DOT_Damage == 0. then
 
Level 8
Joined
Jun 13, 2008
Messages
346
Awesome Wietlol...definitely gonna use this over mine:)....can I ask for some improvements again?:p

you know command aura...buff that increases attack damage in %x......I set its level to max and every level increases attack damage more. So every time necrotic plague jumps...or in othersaying stack increases, the level of this aura on the caster increases...its perfectly working so far....but I want to use your EOT system also in this effect.

I want this aura's duration to be 30 seconds....and every jump is gonna reset the remaining time of the buff....means its gonna start to count from 30 sec again. so with this, it can be a perfect example for your system with this last addon?

By the way, if I cast the spell twice on the same target, stack count messes up right after the jump despite spell's being MUI and all....don't know if you ever realized that.
 

Attachments

  • Necrotic Plague with attack modify.w3x
    63.1 KB · Views: 96
Level 24
Joined
Aug 1, 2013
Messages
4,657
Awesome Wietlol...definitely gonna use this over mine:)
That is why I create systems... to replace the current systems/workarounds :D

you know command aura...buff that increases attack damage in %x......I set its level to max and every level increases attack damage more. So every time necrotic plague jumps...or in othersaying stack increases, the level of this aura on the caster increases...its perfectly working so far....but I want to use your EOT system also in this effect.
Do you want to show a buff on the caster or not?

I want this aura's duration to be 30 seconds....and every jump is gonna reset the remaining time of the buff....means its gonna start to count from 30 sec again. so with this, it can be a perfect example for your system with this last addon?
I actually would make it infinite and be removed when the arcane plague is removed but what the hell.

By the way, if I cast the spell twice on the same target, stack count messes up right after the jump despite spell's being MUI and all....don't know if you ever realized that.
Yea the new one replaces the old one.
And when you have casted it it will have its stacks reset to 3.
You could load the integer from the hashtable and add 3 to it instead of setting it to 3.
Multiple effects on the same target is not supported.
And hard to handle. You do not want to be able to do that.
The system as it is is in fact already only for advanced users.
It offers great opportunities but you have to be able to use it.
I on the other hand am the maker of it :D I do not only use it in this way, I use it on a very advanced way.
Take the forked lightning for example. That is a combination of Forked Lightning and Chain Lightning.
That is only a spell that I want to just show off :D the real spells will be revealed when I release my dungeon map.
 
Level 8
Joined
Jun 13, 2008
Messages
346
hmm yea I want to show the buff on the caster:)...30 sec for duration is fair enough but it has to start over in every jump so it still kinda infinite:p...and for the twice cast stuff...well if it replaces the old effect then its ok...what doesnt seem work is stack count after that so if its can be fixed then its ok:)
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
Stack count is something you editted after you uploaded the map.
Removing the attack damage buff was not hard... however I saw that Buff_Holder_Level doesnt work... because I do not add the ability and auras are slow in response.

I attached the map with the Plague Siphon in it.
However you already added some stuff in yours.
What I have changed is added some abilities (ripped your 100 level aura to 25 because all values after that are just the same.)

I added a second creation in the cast:
  • Necrotic Plague
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Arcane Plague
    • Actions
      • Custom script: call EOT_Set_Default_Variables()
      • Set EOT_Param_Source = (Triggering unit)
      • Set EOT_Param_Target = (Target unit of ability being cast)
      • Set EOT_Param_Duration = 15.00
      • Set EOT_Param_Interval = 5.00
      • Set EOT_Param_Buff = Custom Arcane Plague
      • Set EOT_Param_Buff_Holder = Arcane Plague (Buff Holder)
      • Set EOT_Param_Special_Effect_Model = Environment\LargeBuildingFire\LargeBuildingFire2.mdl
      • Set TempAbility = (Ability being cast)
      • Custom script: set udg_TempInteger = udg_TempAbility
      • Set EOT_Param_Type = (Real(TempInteger))
      • -------- start with 1 stack --------
      • Set TempInteger = 1
      • Set DOT_Damage = (50.00 x (Real(TempInteger)))
      • Set DOT_Attack_Type = Chaos
      • Set DOT_Damage_Type = Shadow Strike
      • Trigger - Run EOT_Trigger_Create_EOT (ignoring conditions)
      • Custom script: call EOT_Save_Integer(0, udg_TempInteger)
      • -------- --------------------------------------------------- --------
      • -------- Create Command Aura for caster --------
      • -------- --------------------------------------------------- --------
      • Custom script: call EOT_Set_Default_Variables()
      • -------- set the target to the source --------
      • Set EOT_Param_Source = (Triggering unit)
      • Set EOT_Param_Target = EOT_Param_Source
      • -------- interval is disabled by default --------
      • Set EOT_Param_Duration = 30.00
      • Set EOT_Param_Interval = 3.00
      • Set EOT_Param_Hidden = True
      • Set EOT_Param_Buff = Custom Plague Siphon
      • Set EOT_Param_Ability = Plague Siphon (Spell Book)
      • Set EOT_Param_Ability_Level = 1
      • -------- set a 0.1 increased type to make it unique but still have Arcane Plague as the type --------
      • Custom script: set udg_TempInteger = udg_TempAbility
      • Set EOT_Param_Type = ((Real(TempInteger)) + 0.10)
      • Set DOT_Damage = 0.00
      • Trigger - Run EOT_Trigger_Create_EOT (ignoring conditions)
I added a level update because Buff_Holder_Level doesnt work:
  • Plague Siphon Update Level
    • Events
      • Game - EOT_Event_On_Interval becomes Equal to 0.00
    • Conditions
    • Actions
      • Set TempAbility = Arcane Plague
      • Custom script: set udg_TempInteger = udg_TempAbility
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • EOT_Param_Type Equal to ((Real(TempInteger)) + 0.10)
        • Then - Actions
          • Unit - Set level of Plague Siphon (Effect) for EOT_Param_Target to EOT_Param_Ability_Level
        • Else - Actions
And I added this behind the save in each jump trigger:
  • -------- ---------------------------------------------------- --------
  • -------- Update Command Aura for caster --------
  • -------- ---------------------------------------------------- --------
  • Custom script: call EOT_Save_To_Cache(0)
  • Custom script: call EOT_Set_Default_Variables()
  • -------- set the target to the source --------
  • Set EOT_Param_Target = TempUnit
  • Custom script: set udg_TempInteger2 = udg_TempAbility
  • Set EOT_Param_Type = ((Real(TempInteger2)) + 0.10)
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • (Evaluate EOT_Trigger_Get_Data conditions) Equal to True
    • Then - Actions
      • Set EOT_Param_Remaining_Duration = 30.00
      • Set EOT_Param_Ability_Level = TempInteger
      • Trigger - Run EOT_Trigger_Save_Data (ignoring conditions)
    • Else - Actions
      • Custom script: call EOT_Set_Default_Variables()
      • Set EOT_Param_Source = TempUnit
      • Set EOT_Param_Target = EOT_Param_Source
      • -------- interval is disabled by default --------
      • Set EOT_Param_Duration = 30.00
      • Set EOT_Param_Interval = 3.00
      • Set EOT_Param_Hidden = True
      • Set EOT_Param_Buff = Custom Plague Siphon
      • Set EOT_Param_Ability = Plague Siphon (Spell Book)
      • Set EOT_Param_Ability_Level = 1
      • -------- set a 0.1 increased type to make it unique but still have Arcane Plague as the type --------
      • Custom script: set udg_TempInteger = udg_TempAbility
      • Set EOT_Param_Type = ((Real(TempInteger)) + 0.10)
      • Set DOT_Damage = 0.00
      • Trigger - Run EOT_Trigger_Create_EOT (ignoring conditions)
  • Custom script: call EOT_Load_From_Cache(0)
Note that I use TempUnit which is set just before the pick units in group.
  • Set TempUnit = EOT_Param_Source
You now make use of the EOT cache because you have to use the EOT_Param data twice in the same call.

Try removing the Save_Data call for Arcane Plague.
You will notice that everything works except the damage.
When the end of an interval, dispel, destroy, etc is reached, the EOT updates itself. (extensions do not that is why you have to call it.)

However you want to change the param variables to create/update the EOT "Plague Siphon".
So you save the data in the cache with index 0 and retrieve that data after you are done with the creation/update of the other EOTs.
(you can use this index again as long as you do not have multiple ones active)
 

Attachments

  • Necrotic Plague with attack modify.w3x
    67.6 KB · Views: 54
Level 8
Joined
Jun 13, 2008
Messages
346
Now I begin to understand what you're doing:)
whats that interval for? and do we have to use spellbook for this?...because I want to show the aura on the caster...and aura actually has to be added in first jump not the beginning of the spell(not that important though:p)
but one real problem is dispel magic decreases the level of plague siphon...because it decreases the value of tempInteger and plague siphon's level is dependant to it. But in fact, jump on dispel just like other two should increase the level of plague siphon instead of decreasing it.
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
I think I lost logic :D

However you can remove the create Plague Siphon from the cast of Arcane Plague.
And you can change "Set EOT_Param_Ability_Level = TempInteger" to "set EOT_Param_Ability_Level = TempInteger + 2" inside the dispell one.

(You might want to change the "Set EOT_Param_Ability_Level = 1" at the bottom of every jump to "Set EOT_Param_Ability_Level = TempInteger" as well.)
 
Level 8
Joined
Jun 13, 2008
Messages
346
And you can change "Set EOT_Param_Ability_Level = TempInteger" to "set EOT_Param_Ability_Level = TempInteger + 2" inside the dispell one.

Well this doesnt work because if we keep cast dispel it keeps stopping TempInteger to go below 1. which results plague siphon's level to cannot go above 3.

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • TempInteger Less than or equal to 1
    • Then - Actions
      • Set TempInteger = 1
    • Else - Actions
      • Set TempInteger = (TempInteger - 1)
we need to think something different on dispel...using another variable maybe?
 
Level 24
Joined
Aug 1, 2013
Messages
4,657
no no no no no

dont change the tempinteger.
just change the "Set EOT_Param_Ability_Level = TempInteger" to "Set EOT_Param_Ability_Level = EOT_Param_Ability_Level + 1" on every jump.
And change "Set EOT_Param_Ability_Level = 1" to "Set EOT_Param_Ability_Level = TempInteger".
That will do almost exacly as you want.
Don't change anything in the Arcane Plague stuff.
 
Level 8
Joined
Jun 13, 2008
Messages
346
aaaaaand its completed:p......couldn't make dont add plague siphon at the start step though...
I now can do other buff remover spells just like yours right? abolish magic, disenchant etc.? remove all except expiration timer buffs would work with same logic.
and for the last one, your system is still not compatible with my other spell, remorseless winter right?...otherwise Im gonna change it with timers.
 
Level 8
Joined
Jun 13, 2008
Messages
346
After I added Plague Siphon effect (command aura that increasing level in every jump) to necrotic plague in EOT 2.2 it worked but I think it made the spell buggy.

  • Custom script: call EOT_Save_To_Cache(0)
  • Custom script: call EOT_Set_Default_Variables()
  • Set EOT_Param_Target = TempUnit
  • Custom script: set udg_TempInteger2 = udg_TempAbility
  • Set EOT_Param_Type = TempInteger2
  • Set EOT_Param_Subtype = 1
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • (Evaluate EOT_Trigger_Get_Data conditions) Equal to True
    • Then - Actions
      • Set EOT_Param_Remaining_Duration = 30.00
      • Set EOT_Param_Ability_Level = (EOT_Param_Ability_Level + 1)
      • Trigger - Run EOT_Trigger_Save_Data (ignoring conditions)
    • Else - Actions
      • Custom script: call EOT_Set_Default_Variables()
      • Set EOT_Param_Source = TempUnit
      • Set EOT_Param_Target = EOT_Param_Source
      • -------- interval is disabled by default --------
      • Set EOT_Param_Duration = 30.00
      • Set EOT_Param_Interval = 3.00
      • Set EOT_Param_Hidden = True
      • Set EOT_Param_Buff = Custom Plague Siphon
      • Set EOT_Param_Ability = Plague Siphon (Effect)
      • Set EOT_Param_Ability_Level = TempInteger
      • -------- set a 0.1 increased type to make it unique but still have Arcane Plague as the type --------
      • Custom script: set udg_TempInteger = udg_TempAbility
      • Set EOT_Param_Type = TempInteger
      • Set EOT_Param_Subtype = 1
      • Set DOT_Damage = 0.00
      • Trigger - Run EOT_Trigger_Create_EOT (ignoring conditions)
  • Custom script: call EOT_Load_From_Cache(0)
sometimes spell tries to jump to a corpse....or it jumps from the corpse and when that happens, I see that it doesnt deal damage. but as I said, this does not happen everytime....can't think of a problem since you're the system's creator Wietlol....but to give you a clue, this trigger might've caused that.(didn't test before I added plague siphon, though...so this bug might happen with spell's default ver. you released in EOT 2.2)
 
Status
Not open for further replies.
Top