Dota 2 Rot Ability v1.0

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
Description

This is a unique creation of the Rot ability of Pudge in Dota 2...

INGAME SCREENSHOTS



228981-albums7784-picture92799.jpg



TRIGGERS




  • Setup
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- ROT DUMMIES --------
      • Set RotDummyCaster = Dummy
      • Set RotDummyCloud = Cloud
      • -------- BUFFS --------
      • Set RotBuff1 = Rot (For Pudge)
      • Set RotBuff2 = Rot (For Enemies)
      • -------- DUMMY ABILITY --------
      • Set RotDummyBuff = Rot Slow (For Pudge)
      • Set RotDummySlow = Rot Slow (For Enemies)
      • -------- THE BASE ABILITY OF ROT (LEARN) --------
      • Set RotLearnAbility = Rot (Learn)
      • -------- THE ON ABILITY OF ROT --------
      • Set RotOnAbility = Rot (Active_On)
      • Set RotOnOrderId = berserk
      • -------- THE OFF ABILITY OF ROT --------
      • Set RotOffAbility = Rot (Active_Off)
      • Set RotOffOrderId = revive
      • -------- ABILITY LEVELS --------
      • Set RotMaxLevel = 4
      • Set RotDamage[1] = 35.00
      • Set RotDamage[2] = 60.00
      • Set RotDamage[3] = 85.00
      • Set RotDamage[4] = 110.00


  • RotLearn
    • Events
      • Unit - A unit Learns a skill
    • Conditions
      • (Learned Hero Skill) Equal to Rot (Learn)
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Level of RotLearnAbility for (Triggering unit)) Equal to 1
        • Then - Actions
          • Unit - Add RotOnAbility to (Triggering unit)
        • Else - Actions
      • Unit - Set level of RotOnAbility for (Triggering unit) to (Level of RotLearnAbility for (Triggering unit))


  • RotOn
    • Events
      • Unit - A unit Is issued an order with no target
    • Conditions
      • (Issued order) Equal to (Order(RotOnOrderId))
    • Actions
      • Set RotInt[0] = (RotInt[0] + 1)
      • Set RotCaster[RotInt[0]] = (Triggering unit)
      • Set RotPlayer[RotInt[0]] = (Owner of RotCaster[RotInt[0]])
      • Set RotLevel[RotInt[0]] = (Level of RotLearnAbility for RotCaster[RotInt[0]])
      • Set RotRadius[RotInt[0]] = 200.00
      • Set RotterPoint[RotInt[0]] = (Position of RotCaster[RotInt[0]])
      • Set RotClouds[RotInt[0]] = (Random 0 units from (Units in (Playable map area)))
      • Set RotCount[RotInt[0]] = 0
      • Unit - Remove RotOnAbility from RotCaster[RotInt[0]]
      • Unit - Add RotOffAbility to RotCaster[RotInt[0]]
      • For each (Integer RotInt[3]) from 0 to 7, do (Actions)
        • Loop - Actions
          • Set TempPoint = (RotterPoint[RotInt[0]] offset by 90.00 towards ((Real(RotInt[3])) x 45.00) degrees)
          • Unit - Create 1 RotDummyCloud for RotPlayer[RotInt[0]] at TempPoint facing Default building facing degrees
          • Unit - Add RotDummySlow to (Last created unit)
          • Unit Group - Add (Last created unit) to RotClouds[RotInt[0]]
          • Custom script: call RemoveLocation(udg_TempPoint)
      • Set TempPoints[3] = (Position of RotCaster[RotInt[0]])
      • Unit - Create 1 RotDummyCaster for Neutral Hostile at TempPoints[3] facing Default building facing degrees
      • Unit - Add RotDummyBuff to (Last created unit)
      • Unit - Order (Last created unit) to Undead Necromancer - Cripple RotCaster[RotInt[0]]
      • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
      • Custom script: call RemoveLocation(udg_TempPoints[3])
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • RotInt[0] Equal to 1
        • Then - Actions
          • Trigger - Turn on RotLoop <gen>
        • Else - Actions


  • RotLoop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer RotInt[1]) from 1 to RotInt[0], do (Actions)
        • Loop - Actions
          • Set RotterPoint[RotInt[1]] = (Position of RotCaster[RotInt[1]])
          • Unit Group - Pick every unit in RotClouds[RotInt[1]] and do (Actions)
            • Loop - Actions
              • Set TempPoints[0] = (RotterPoint[RotInt[1]] offset by 90.00 towards ((Real(RotCount[RotInt[1]])) x 45.00) degrees)
              • Set RotPicked = (Picked unit)
              • Unit - Move RotPicked instantly to TempPoints[0]
              • Set RotPicked = No unit
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • RotCount[RotInt[1]] Less than 7
                • Then - Actions
                  • Set RotCount[RotInt[1]] = (RotCount[RotInt[1]] + 1)
                • Else - Actions
                  • Set RotCount[RotInt[1]] = 0
              • Custom script: call RemoveLocation(udg_TempPoints[0])
          • Set RotRadiusGroup[RotInt[1]] = (Units within RotRadius[RotInt[1]] of RotterPoint[RotInt[1]])
          • Unit Group - Pick every unit in RotRadiusGroup[RotInt[1]] and do (Actions)
            • Loop - Actions
              • Set RotPicked = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (RotPicked is alive) Equal to True
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • RotPicked Not equal to RotCaster[RotInt[1]]
                      • (RotPicked has buff Cripple) Equal to False
                      • (Unit-type of RotPicked) Not equal to RotDummyCloud
                      • (Unit-type of RotPicked) Not equal to RotDummyCaster
                    • Then - Actions
                      • Unit - Order (Random unit from RotClouds[RotInt[1]]) to Undead Necromancer - Cripple RotPicked
                    • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Or - Any (Conditions) are true
                        • Conditions
                          • (RotPicked belongs to an ally of RotPlayer[RotInt[1]]) Equal to False
                          • RotPicked Equal to RotCaster[RotInt[1]]
                    • Then - Actions
                      • Unit - Cause RotCaster[RotInt[1]] to damage RotPicked, dealing (RotDamage[RotLevel[RotInt[1]]] x 0.03) damage of attack type Spells and damage type Magic
                    • Else - Actions
                • Else - Actions
          • Custom script: call DestroyGroup(udg_RotRadiusGroup[udg_RotInt[1]])
          • Custom script: call RemoveLocation(udg_RotterPoint[udg_RotInt[1]])


  • RotOff
    • Events
      • Unit - A unit Is issued an order with no target
    • Conditions
      • (Issued order) Equal to (Order(RotOffOrderId))
    • Actions
      • For each (Integer RotInt[2]) from 1 to RotInt[0], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • RotCaster[RotInt[2]] Equal to (Triggering unit)
            • Then - Actions
              • Unit - Remove RotBuff1 buff from RotCaster[RotInt[2]]
              • Unit - Remove RotOffAbility from RotCaster[RotInt[2]]
              • Unit - Add RotOnAbility to RotCaster[RotInt[2]]
              • Unit - Set level of RotOnAbility for RotCaster[RotInt[2]] to (Level of RotLearnAbility for RotCaster[RotInt[2]])
              • Unit Group - Pick every unit in RotClouds[RotInt[2]] and do (Actions)
                • Loop - Actions
                  • Set RotPicked = (Picked unit)
                  • Unit - Remove RotPicked from the game
              • Custom script: call DestroyGroup(udg_RotClouds[udg_RotInt[2]])
              • Set RotCount[RotInt[2]] = 0
              • Set RotCaster[RotInt[2]] = RotCaster[RotInt[0]]
              • Set RotCount[RotInt[2]] = RotCount[RotInt[0]]
              • Set RotDamage[RotInt[2]] = RotDamage[RotInt[0]]
              • Set RotLevel[RotInt[2]] = RotLevel[RotInt[0]]
              • Set RotPlayer[RotInt[2]] = RotPlayer[RotInt[0]]
              • Set RotRadius[RotInt[2]] = RotRadius[RotInt[0]]
              • Set RotCaster[RotInt[0]] = No unit
              • Set RotInt[0] = (RotInt[0] - 1)
              • Set RotInt[1] = (RotInt[1] - 1)
              • Set RotInt[2] = (RotInt[2] - 1)
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • RotInt[0] Equal to 0
        • Then - Actions
          • Trigger - Turn off RotLoop <gen>
        • Else - Actions


  • RotCheckDeath
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Level of RotLearnAbility for (Triggering unit)) Not equal to 0
    • Actions
      • Trigger - Run RotOff <gen> (ignoring conditions)



USAGE

- Copy the PudgeRot folder to your map.
- Make sure your turn on "Automatically create unknown variables while pasting trigger data."

VERSIONS
* Version 1.0 - Initial release

"Don't forget! Credits for use."

Keywords:
rot, pudge, dota 2
Contents

Dota 2 Pudge's Rot Ability (Map)

Reviews
12th Dec 2015 IcemanBo: For long time as NeedsFix. Rejected. 18:16, 30th Jan 2015 Maker: Issues with the spell are too numerous for me to go through one by one. These include but are not limited to -Unneeded arrays within arrays -Moving 7...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: For long time as NeedsFix. Rejected.

18:16, 30th Jan 2015
Maker: Issues with the spell are too numerous
for me to go through one by one.
These include but are not limited to
-Unneeded arrays within arrays
-Moving 7 dummies per instance every 0.03 seconds
-Picking random dummy caster
-Filtering out dummy units from unit group picks
-Trigger being on when they are not needed
 
People love Pudge, haha.
--
  • Unit - Set level of RotOnAbility for (Triggering unit) to (Level of RotLearnAbility for (Triggering unit))
You use this three times? I suggest at least you merge the first two after the first ITE because you do it either way. The third time is understandable.

I suggest you not set RotPicked to no unit (aka. nulling), since it will be used again. Global nulling is reserved for arrayed variables. I like the loop formula though. I also suggest you only use one Rot dummy for slowing universally. That will save a lot of unit creation and unneeded actions.

P.S. The trigger you posted for Rot Off is Rot Loop's.
 
Level 13
Joined
Jul 16, 2012
Messages
680
Use INGAME Screenshot......

  • Trigger - Turn off (This trigger)
Why you turn off this trigger?...
.... this is better call DestroyTrigger( GetTriggeringTrigger())

  • For each (Integer RotInt[3]) from 0 to 7, do (Actions)
So you starting in 0 to 7?
must be 1 to 8........ so readable

in trigger loop
  • Unit - Create 1 RotDummyCaster for RotPlayer[RotInt[1]] at TempPoints[1] facing Default building facing degrees
So you think this is good... :/ nah should be look in Scorescreen
you will give a overwhelming score
and this dummy only a slow so... you dont need damage
change to RotPlayer[RotInt[1]] to Neutral Passive
REMEMBER: If you dont need damage those dummies, keep using neutral passive
 
Level 12
Joined
Oct 16, 2010
Messages
681
nice... 6 triggers? really?:p Rot is such a super simple spell... why the hell u need 6 triggers for it?

RotInt shouldn't be an array since its just an indexer of instances
I doubt that u use about 8000 Temporary Integers at the same time.

make RotInstance, TempInt1 , TempInt2 ... instead
same goes for TempPoints..

  • Set RotClouds[RotInt[0]] = (Random 0 units from (Units in (Playable map area)))
thats nonsense..

AFAIK if you remove an ability that is on a heros learn list and readd it, it will still be on the learn page so why to use 1 more ability for it?

  • Set RotPicked = (Picked unit)
  • Unit - Move RotPicked instantly to TempPoints[0]
  • Set RotPicked = No unit
why? use directly (picked unit) if u don't use it more then once..

  • Set RotPicked = (Picked unit)
  • Unit - Remove RotPicked from the game
same...

  • Unit - Order (Random unit from RotClouds[RotInt[1]]) to Undead Necromancer - Cripple RotPicked
don't u have a caster for that? why need for a random unit?...

  • Set RotCaster[RotInt[2]] = RotCaster[RotInt[0]]
  • Set RotCount[RotInt[2]] = RotCount[RotInt[0]]
  • Set RotDamage[RotInt[2]] = RotDamage[RotInt[0]]
  • Set RotLevel[RotInt[2]] = RotLevel[RotInt[0]]
  • Set RotPlayer[RotInt[2]] = RotPlayer[RotInt[0]]
  • Set RotRadius[RotInt[2]] = RotRadius[RotInt[0]
care to explain?Oo

this is just bad, I really got fed up with these "pudge" spells
 

Kazeon

Hosted Project: EC
Level 33
Joined
Oct 12, 2011
Messages
3,445
I tot we can use Immolation to make the rot damage, and add unit into trigger when nearby enemy takes damage. After that, slow the target?

Yeah, actually, this ability doesn't need to be coded. And you can use endurance aura for the slow effect (negative value for movement factor field).
 
Top