06.05.2018 vanBonzens Monk Rotation [WIP]

5 posts Page 1 of 1
vanBonzen
Posts: 4
Joined: 03 May 2018, 07:56


Hey Guys,

I really appreciate feedback, so feel free to comment down below.

NOTE: It is mandatory to take the 'Energizing Elixir' Talent and play a cutom opening Rotation aswell for which I would suggest to go for:
ChiWave (Prepull) -> TigerPalm -> TouchOfDeath -> StormEarth+RisingSunKick -> EnergizingElixir+StrikeOfTheWindlord -> FistsOfFury -> BlackOutKick! (with T21 4 Set Bonus) -> WhirlingDragonPunch

UPDATE 03.05.2018:
- Advanced 'Blackout Kick Mechanic'.
- Integrated Storm, Earth and Fire into Rotation.
- Changed 'Energizing Elixir' to be a glowing CD for the momment.
- Commented and refractored code.
- Reduced downtime

UPDATE 04.05.2018
- New: Added 'Fist of the Fury' case which the Rotation realized to late, causig the marker to appear very late.
- Change: Advanced 'Storm Earth and Fire' CD realization.
- Change: Added case to 'Blackout Kick' Mechanic.

UPDATE 05.05.2018
After letting my Routine run vs. the downloadable I saw some weakspots, it should have a advantage of about 5% DPS as of now, there is still some minor room for cases where the 'Blackout Kick' proc seems to be suitable as well as some unused 'Chi Wave's
- Removed: 4 inefficent 'Blackout Kick' cases.

  1. -- Auras
  2. local _HeavyStagger = 124273;
  3. local _ModerateStagger = 124274;
  4. local _Shuffle = 115307;
  5. local _ElusiveBrewAura = 128939;
  6. local _TigerPower = 125359;
  7.  
  8. -- Spells
  9. local _KegSmash = 121253;
  10. local _Jab = 100780;
  11. local _ExpelHarm = 115072;
  12. local _TigerPalm = 100787;
  13. local _ElusiveBrew = 115308;
  14. local _PurifyingBrew = 119582;
  15. local _BlackoutKick = 100784;
  16. local _ChiExplosion = 157676;
  17. local _FistsofFury = 113656;
  18. local _StrikeoftheWindlord = 205320;
  19. local _WhirlingDragonPunch = 152175;
  20. local _TigerPalm = 100780;
  21. local _RisingSunKick = 107428;
  22. local _ChiWave = 115098;
  23. local _BlackoutKick = 100784;
  24. local _BlackoutKickAura = 116768;
  25. local _MarkoftheCrane = 228287;
  26. local _SpinningCraneKick = 101546;
  27. local _StormEarthandFire = 137639;
  28. local _Serenity = 152173;
  29. local _RushingJadeWind = 116847;
  30. local _ChiBurst = 123986;
  31. local _TouchofDeath = 115080;
  32. local _Ascension = 115396;
  33. local _MasteryComboStrikes = 115636;
  34. local _Afterlife = 116092;
  35. local _HealingSphere = 125355;
  36. local _TouchofKarma = 122470;
  37. local _EnergizingElixir = 115288;
  38. local _Roll = 109132;
  39. local _Celerity = 115173;
  40. local _HitCombo = 196740;
  41. local _HitComboAura = 196741;
  42. local _Transcendence = 101643;
  43. local _TranscendenceTransfer = 119996;
  44.  
  45. -- Hit Combo Spells
  46. local _HitComboAbilities = {
  47.     [_BlackoutKick] = 1,
  48.     [_ChiWave] = 1,
  49.     [_FistsofFury] = 1,
  50.     [_RisingSunKick] = 1,
  51.     [_TigerPalm] = 1,
  52.     [_TouchofDeath] = 1,
  53.     [_StrikeoftheWindlord] = 1,
  54. }
  55.  
  56. -- Initialization
  57. MaxDps.Monk = {};
  58.  
  59. function MaxDps.Monk.CheckTalents()
  60. end
  61.  
  62. -- Check for Spec
  63. function MaxDps:EnableRotationModule(mode)
  64.     mode = mode or 1;
  65.     self.Description = 'Monk [Windwalker]';
  66.     self.ModuleOnEnable = MaxDps.Monk.CheckTalents;
  67.     if mode == 1 then
  68.         self.NextSpell = MaxDps.Monk.Brewmaster;
  69.     end;
  70.     if mode == 2 then
  71.         self.NextSpell = MaxDps.Monk.Mistweaver;
  72.     end;
  73.     if mode == 3 then
  74.         self.NextSpell = MaxDps.Monk.Windwalker;
  75.     end;
  76.     self:RegisterEvent('UNIT_SPELLCAST_SUCCEEDED');
  77.     self.lastSpellId = 0;
  78. end
  79.  
  80. -- Set last casted Spell
  81. function MaxDps:UNIT_SPELLCAST_SUCCEEDED(event, unitID, spell, rank, lineID, spellID)
  82.     if unitID == 'player' and _HitComboAbilities[spellID] == 1 then
  83.         self.lastSpellId = spellID;
  84.     end
  85. end
  86.  
  87. -- If Player is off Spec, do nothing
  88. function MaxDps.Monk.Brewmaster(_, timeShift, currentSpell, gcd, talents)
  89.     return nil;
  90. end
  91.  
  92. function MaxDps.Monk.Mistweaver(_, timeShift, currentSpell, gcd, talents)
  93.     return nil;
  94. end
  95.  
  96. -- Main Rotation Algorithms
  97. function MaxDps.Monk.Windwalker(_, timeShift, currentSpell, gcd, talents)
  98.  
  99.     -- locals to remove redundancy
  100.     local chi = UnitPower('player', SPELL_POWER_CHI);
  101.     local energy = UnitPower('player', SPELL_POWER_ENERGY);
  102.     local energyMax = UnitPowerMax('player', SPELL_POWER_ENERGY);
  103.     local hit, hitCharges = MaxDps:Aura(_HitComboAura, timeShift);
  104.     local rsk, rskCd = MaxDps:SpellAvailable(_RisingSunKick, timeShift);
  105.     local fotf, fotfCd = MaxDps:SpellAvailable(_FistsofFury, timeShift);
  106.     local sotwl = MaxDps:SpellAvailable(_StrikeoftheWindlord, timeShift);
  107.     local elixir = MaxDps:SpellAvailable(_EnergizingElixir, timeShift);
  108.     local seaf = MaxDps:SpellAvailable(_StormEarthandFire, timeShift);
  109.     local chiWave, chiWaveCd = MaxDps:SpellAvailable(_ChiWave, timeShift);
  110.     local blackout, blackoutCd = MaxDps:SpellAvailable(_BlackoutKick, timeShift);
  111.     local whirling, whirlingCd = MaxDps:SpellAvailable(_WhirlingDragonPunch, timeShift);
  112.     local canBlackout = MaxDps:Aura(_BlackoutKickAura, timeShift) or (blackout and chi > 0);
  113.    
  114. -- Touch of Deatch Glow
  115.     MaxDps:GlowCooldown(_TouchofDeath, MaxDps:SpellAvailable(_TouchofDeath, timeShift));
  116.    
  117.     -- Energizing Elixir
  118.     -- if talents[_EnergizingElixir] and (energy < 50 and chi < 3) and MaxDps:SpellAvailable(_EnergizingElixir, timeShift) then
  119.         MaxDps:GlowCooldown(_EnergizingElixir, MaxDps:SpellAvailable(_EnergizingElixir, timeShift));
  120.     -- end
  121.    
  122.     -- Storm Earth and Fire
  123.     if (fotfCd < 2 and chi > 2 and seaf) then
  124.         -- MaxDps:GlowCooldown(_StormEarthandFire, MaxDps:SpellAvailable(_StormEarthandFire, timeShift));
  125.         return _StormEarthandFire
  126.     end
  127.    
  128.     -- Tiger Palm
  129.     if ((chi < 4 and (energyMax - energy < 20)) and (not hit or MaxDps.lastSpellId ~= _TigerPalm) and (energy >= 50))
  130.     or ((not rsk and not fotf and not whirling and not chiWave and MaxDps.lastSpellId ~= _BlackoutKick) and (chi < 2))
  131.     or (chi == 0 and MaxDps.lastSpellId ~= _TigerPalm and not MaxDps:SpellAvailable(_EnergizingElixir, timeShift) and not canBlackout)
  132.     or (MaxDps.lastSpellId == _BlackoutKick and not elixir and rskCd > 2 and fotfCd > 2 and not chiWave and not whirling and energy > 10)
  133.     then
  134.         return _TigerPalm;
  135.     end
  136.    
  137.     -- Rising Sun Kick
  138.     if (rsk and chi >= 2) and (not hit or MaxDps.lastSpellId ~= _RisingSunKick) then
  139.         return _RisingSunKick;
  140.     end
  141.    
  142.     -- Fists of Fury
  143.     if (fotf and chi >= 3 and not rsk)
  144.     or (fotfCd < 2 and chi > 2 and not seaf)
  145.     then
  146.         return _FistsofFury;
  147.     end
  148.    
  149.     -- Whirling Dragon Punch
  150.     if talents[_WhirlingDragonPunch]
  151.         and not fotf
  152.         and not rsk
  153.         and MaxDps:SpellAvailable(_WhirlingDragonPunch, timeShift)
  154.     then
  155.         return _WhirlingDragonPunch;
  156.     end
  157.    
  158.     -- Strike of the Windlord
  159.     if MaxDps:SpellAvailable(_StrikeoftheWindlord, timeShift)
  160.         and chi >= 2
  161.         and not fotf
  162.         and not rsk
  163.         and not whirling
  164.     then
  165.             return _StrikeoftheWindlord;
  166.     end
  167.    
  168.     -- Blackout Kick
  169.     if ((canBlackout and (chi > 3 or (fotfCd > 3 and chi > 1))) and
  170.         (not hit or MaxDps.lastSpellId ~= _BlackoutKick))  
  171.     --or ((canBlackout and not whirling and MaxDps.lastSpellId ~= _BlackoutKick) and (not rsk and chi >=2) and (not sotwl and chi >= 2) and
  172.         --(not fotf or (chi < 2 and fotf)) and not (fotfCd < 3 and chi > 2) and not (MaxDps.lastSpellId ~= _BlackoutKick and energy >= 50) and (chi > 1 or MaxDps:Aura(_BlackoutKickAura, timeShift)))
  173.     --or (((chi == 1 or (chi == 2 and rskCd > 1)) and canBlackout and not chiWave and MaxDps.lastSpellId ~= _BlackoutKick and not elixir) -- and not whirling
  174.     --and (energy < 50 or MaxDps.lastSpellId == _TigerPalm))
  175.     --or ((chi == 0 and canBlackout and not elixir) and (not chiWave or whirling) and (energy < 50 or MaxDps.lastSpellId == _TigerPalm))
  176.     --or (canBlackout and not rsk and not whirling and not chiWave and fotfCd > 1.5 and energy > 40 and MaxDps.lastSpellId ~= _BlackoutKick)
  177.     or ((chi == 0 and not elixir) and MaxDps:Aura(_BlackoutKickAura, timeShift) and (not chiWave or whirling) and MaxDps.lastSpellId ~= _BlackoutKick)
  178.     or (MaxDps:Aura(_BlackoutKickAura, timeShift) and (MaxDps.lastSpellId == _TigerPalm or energy < 50) and chi >= 3 and rskCd > 1 and fotfCd > 1 and not whirling and not chiWave)
  179.     or (MaxDps:Aura(_BlackoutKickAura, timeShift) and chi == 0 and energy < 45 and not rsk and not fotf and not whirling and not chiWave and not elixir)
  180.     then
  181.         return _BlackoutKick;
  182.     end
  183.    
  184.     -- Chi Wave
  185.     if talents[_ChiWave] and MaxDps:SpellAvailable(_ChiWave, timeShift)
  186.     or (not canBlackout and (not rsk or chi < 2) and not fotf and chiWave and energy < 50 and not whirling and not elixir)
  187.     then
  188.         return _ChiWave;
  189.     end
  190.    
  191.     -- Alternative Cases
  192.     if hit and MaxDps.lastSpellId == _TigerPalm then
  193.         return nil;
  194.     else
  195.         if energy >= 45
  196.         then
  197.             return _TigerPalm;
  198.         else
  199.             return nil;
  200.         end
  201.        
  202.     end
  203.    
  204. end

Kind regards

vanBonzen
Last edited by vanBonzen on 05 May 2018, 21:49, edited 6 times in total.
vanBonzen
Posts: 4
Joined: 03 May 2018, 07:56


--- UPDATED ---
vanBonzen
Posts: 4
Joined: 03 May 2018, 07:56


--- UPDATED ---
vanBonzen
Posts: 4
Joined: 03 May 2018, 07:56


--- UPDATED ---
Kaminaris
Site Admin
Posts: 290
Joined: 25 Jun 2017, 03:45


You know you don't need to modify the addon?
viewtopic.php?f=4&t=4

Check this out as custom rotation:
  1.  
  2. -- Main Rotation Algorithms
  3. function(_, timeShift, currentSpell, gcd, talents)
  4.      
  5.      -- Auras
  6.     local _HeavyStagger = 124273;
  7.     local _ModerateStagger = 124274;
  8.     local _Shuffle = 115307;
  9.     local _ElusiveBrewAura = 128939;
  10.     local _TigerPower = 125359;
  11.      
  12.     -- Spells
  13.     local _KegSmash = 121253;
  14.     local _Jab = 100780;
  15.     local _ExpelHarm = 115072;
  16.     local _TigerPalm = 100787;
  17.     local _ElusiveBrew = 115308;
  18.     local _PurifyingBrew = 119582;
  19.     local _BlackoutKick = 100784;
  20.     local _ChiExplosion = 157676;
  21.     local _FistsofFury = 113656;
  22.     local _StrikeoftheWindlord = 205320;
  23.     local _WhirlingDragonPunch = 152175;
  24.     local _TigerPalm = 100780;
  25.     local _RisingSunKick = 107428;
  26.     local _ChiWave = 115098;
  27.     local _BlackoutKick = 100784;
  28.     local _BlackoutKickAura = 116768;
  29.     local _MarkoftheCrane = 228287;
  30.     local _SpinningCraneKick = 101546;
  31.     local _StormEarthandFire = 137639;
  32.     local _Serenity = 152173;
  33.     local _RushingJadeWind = 116847;
  34.     local _ChiBurst = 123986;
  35.     local _TouchofDeath = 115080;
  36.     local _Ascension = 115396;
  37.     local _MasteryComboStrikes = 115636;
  38.     local _Afterlife = 116092;
  39.     local _HealingSphere = 125355;
  40.     local _TouchofKarma = 122470;
  41.     local _EnergizingElixir = 115288;
  42.     local _Roll = 109132;
  43.     local _Celerity = 115173;
  44.     local _HitCombo = 196740;
  45.     local _HitComboAura = 196741;
  46.     local _Transcendence = 101643;
  47.     local _TranscendenceTransfer = 119996;
  48.  
  49.     -- locals to remove redundancy
  50.     local chi = UnitPower('player', SPELL_POWER_CHI);
  51.     local energy = UnitPower('player', SPELL_POWER_ENERGY);
  52.     local energyMax = UnitPowerMax('player', SPELL_POWER_ENERGY);
  53.     local hit, hitCharges = MaxDps:Aura(_HitComboAura, timeShift);
  54.     local rsk, rskCd = MaxDps:SpellAvailable(_RisingSunKick, timeShift);
  55.     local fotf, fotfCd = MaxDps:SpellAvailable(_FistsofFury, timeShift);
  56.     local sotwl = MaxDps:SpellAvailable(_StrikeoftheWindlord, timeShift);
  57.     local elixir = MaxDps:SpellAvailable(_EnergizingElixir, timeShift);
  58.     local seaf = MaxDps:SpellAvailable(_StormEarthandFire, timeShift);
  59.     local chiWave, chiWaveCd = MaxDps:SpellAvailable(_ChiWave, timeShift);
  60.     local blackout, blackoutCd = MaxDps:SpellAvailable(_BlackoutKick, timeShift);
  61.     local whirling, whirlingCd = MaxDps:SpellAvailable(_WhirlingDragonPunch, timeShift);
  62.     local canBlackout = MaxDps:Aura(_BlackoutKickAura, timeShift) or (blackout and chi > 0);
  63.    
  64.     -- Touch of Deatch Glow
  65.     MaxDps:GlowCooldown(_TouchofDeath, MaxDps:SpellAvailable(_TouchofDeath, timeShift));
  66.    
  67.     -- Energizing Elixir
  68.     MaxDps:GlowCooldown(_EnergizingElixir, talents[_EnergizingElixir] and MaxDps:SpellAvailable(_EnergizingElixir, timeShift));
  69.    
  70.     -- Storm Earth and Fire
  71.     if (fotfCd < 2 and chi > 2 and seaf) then
  72.         -- MaxDps:GlowCooldown(_StormEarthandFire, MaxDps:SpellAvailable(_StormEarthandFire, timeShift));
  73.         return _StormEarthandFire
  74.     end
  75.    
  76.     -- Tiger Palm
  77.     if ((chi < 4 and (energyMax - energy < 20)) and (not hit or MaxDps.lastSpellId ~= _TigerPalm) and (energy >= 50))
  78.     or ((not rsk and not fotf and not whirling and not chiWave and MaxDps.lastSpellId ~= _BlackoutKick) and (chi < 2))
  79.     or (chi == 0 and MaxDps.lastSpellId ~= _TigerPalm and not MaxDps:SpellAvailable(_EnergizingElixir, timeShift) and not canBlackout)
  80.     or (MaxDps.lastSpellId == _BlackoutKick and not elixir and rskCd > 2 and fotfCd > 2 and not chiWave and not whirling and energy > 10)
  81.     then
  82.         return _TigerPalm;
  83.     end
  84.    
  85.     -- Rising Sun Kick
  86.     if (rsk and chi >= 2) and (not hit or MaxDps.lastSpellId ~= _RisingSunKick) then
  87.         return _RisingSunKick;
  88.     end
  89.    
  90.     -- Fists of Fury
  91.     if (fotf and chi >= 3 and not rsk)
  92.     or (fotfCd < 2 and chi > 2 and not seaf)
  93.     then
  94.         return _FistsofFury;
  95.     end
  96.    
  97.     -- Whirling Dragon Punch
  98.     if talents[_WhirlingDragonPunch]
  99.         and not fotf
  100.         and not rsk
  101.         and MaxDps:SpellAvailable(_WhirlingDragonPunch, timeShift)
  102.     then
  103.         return _WhirlingDragonPunch;
  104.     end
  105.    
  106.     -- Strike of the Windlord
  107.     if MaxDps:SpellAvailable(_StrikeoftheWindlord, timeShift)
  108.         and chi >= 2
  109.         and not fotf
  110.         and not rsk
  111.         and not whirling
  112.     then
  113.         return _StrikeoftheWindlord;
  114.     end
  115.    
  116.     -- Blackout Kick
  117.     if ((canBlackout and (chi > 3 or (fotfCd > 3 and chi > 1))) and
  118.         (not hit or MaxDps.lastSpellId ~= _BlackoutKick))  
  119.     --or ((canBlackout and not whirling and MaxDps.lastSpellId ~= _BlackoutKick) and (not rsk and chi >=2) and (not sotwl and chi >= 2) and
  120.         --(not fotf or (chi < 2 and fotf)) and not (fotfCd < 3 and chi > 2) and not (MaxDps.lastSpellId ~= _BlackoutKick and energy >= 50) and (chi > 1 or MaxDps:Aura(_BlackoutKickAura, timeShift)))
  121.     --or (((chi == 1 or (chi == 2 and rskCd > 1)) and canBlackout and not chiWave and MaxDps.lastSpellId ~= _BlackoutKick and not elixir) -- and not whirling
  122.     --and (energy < 50 or MaxDps.lastSpellId == _TigerPalm))
  123.     --or ((chi == 0 and canBlackout and not elixir) and (not chiWave or whirling) and (energy < 50 or MaxDps.lastSpellId == _TigerPalm))
  124.     --or (canBlackout and not rsk and not whirling and not chiWave and fotfCd > 1.5 and energy > 40 and MaxDps.lastSpellId ~= _BlackoutKick)
  125.     or ((chi == 0 and not elixir) and MaxDps:Aura(_BlackoutKickAura, timeShift) and (not chiWave or whirling) and MaxDps.lastSpellId ~= _BlackoutKick)
  126.     or (MaxDps:Aura(_BlackoutKickAura, timeShift) and (MaxDps.lastSpellId == _TigerPalm or energy < 50) and chi >= 3 and rskCd > 1 and fotfCd > 1 and not whirling and not chiWave)
  127.     or (MaxDps:Aura(_BlackoutKickAura, timeShift) and chi == 0 and energy < 45 and not rsk and not fotf and not whirling and not chiWave and not elixir)
  128.     then
  129.         return _BlackoutKick;
  130.     end
  131.    
  132.     -- Chi Wave
  133.     if talents[_ChiWave] and MaxDps:SpellAvailable(_ChiWave, timeShift)
  134.     or (not canBlackout and (not rsk or chi < 2) and not fotf and chiWave and energy < 50 and not whirling and not elixir)
  135.     then
  136.         return _ChiWave;
  137.     end
  138.    
  139.     -- Alternative Cases
  140.     if hit and MaxDps.lastSpellId == _TigerPalm then
  141.         return nil;
  142.     else
  143.         if energy >= 45
  144.         then
  145.             return _TigerPalm;
  146.         else
  147.             return nil;
  148.         end
  149.        
  150.     end
  151.    
  152. end
5 posts Page 1 of 1
drogie łóżka stolik kawowy stół dębowy rozkładany