• Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • YourRaidingBuddy - Coming Soon

    Discussion in 'Combat Routines' started by Xcesius, May 20, 2015.

    1. wolfrain62

      wolfrain62 Member

      Joined:
      Aug 22, 2014
      Messages:
      137
      Likes Received:
      0
      Trophy Points:
      16
      Forgot I commented out armor crush to test something. If you could delete the // in front of //await HutonRefresh(); it will cast armor crush.
       
    2. Xcesius

      Xcesius Community Developer

      Joined:
      May 1, 2011
      Messages:
      2,050
      Likes Received:
      61
      Trophy Points:
      48
      Hi wolfrain62,

      Done!
       
    3. zazey

      zazey Member

      Joined:
      Jun 15, 2012
      Messages:
      71
      Likes Received:
      1
      Trophy Points:
      8
      Monk rotation doesn't seem to be working at all for me. Targets a mob, runs to it, does nothing. Is MNK implemented yet?
       
    4. Xcesius

      Xcesius Community Developer

      Joined:
      May 1, 2011
      Messages:
      2,050
      Likes Received:
      61
      Trophy Points:
      48
      Hi zazey,

      No one has started on one, so no :p
       
    5. zazey

      zazey Member

      Joined:
      Jun 15, 2012
      Messages:
      71
      Likes Received:
      1
      Trophy Points:
      8
      Ah my bad, I just saw the file in YRB with some data that looked like a rotation to me. I'll get the most optimal rotation put up here so it can be of use to anyone with the skills to code it. Side note though Xcesius: Would a monk rotation be capable of moving to targets back and flank for certain skills?
       
    6. tichy

      tichy Member

      Joined:
      Jun 6, 2015
      Messages:
      142
      Likes Received:
      3
      Trophy Points:
      18
      Ninja rotation is pretty amaze! Definitely can "three finger" expert duties with it!
       
    7. tichy

      tichy Member

      Joined:
      Jun 6, 2015
      Messages:
      142
      Likes Received:
      3
      Trophy Points:
      18
      MAd error in latest

      ...NVM appears to be working now..
       
      Last edited: Jul 4, 2015
    8. stewiethecat

      stewiethecat Member

      Joined:
      Feb 4, 2011
      Messages:
      454
      Likes Received:
      0
      Trophy Points:
      16
      For anyone using the Warrior routine I am still polishing but It's great for situational tanking.

      Default Rotation - Storm's Eye, Storm's Path, Butcher's Block in Defiance (I use this rotation for when I have full hate on my targets and stack debuffs) Standard single target tanking rotation.

      Specialhotkey - Heavy Swing, Skull Sunder, Butcher's Block in Defiance (Enmity Rotation)

      Specialhotkey 1- Fracture, Fell Cleave, Storm's Path, 2x Butcher's Block Deliverance dps rotation. (Swaps Defiance to Deliverance for maximum dps. Great for off tank situations or high level farming)

      MutliTargert - Steel Cyclone, Overpower, Flash in Defiance (I suggest some practice to get used to this. I activate this hotkey after I have my mobs set in place, takes some getting used to, but very effective for Aoe tanking)

      Uses light cds Bloodbath, Featherfoot, etc. Major tanking cds are not implemented as I like to use those at my own discretion.

      Make sure once you activate a certain rotation. You turn it off before activating another rotation.
      have to ask xcesius how to fix this.

      feel free to comment of leave any suggestions for improvement. Dont forget to Rep if you Like :)
       
    9. wolfrain62

      wolfrain62 Member

      Joined:
      Aug 22, 2014
      Messages:
      137
      Likes Received:
      0
      Trophy Points:
      16
      Is the ninja skill death blossom not in the spell list of YRB? Trying to add AoE into the mix and it never casts Death Blossom even if that's the only spell i put in the rotation. Also how do I add new ninjitsu? I added Doton to be casted when 3+ enemies are around which it does but when ninjutsu goes on cooldown it tires to spam jin.
       
      Last edited: Jul 5, 2015
    10. hanzzz

      hanzzz New Member

      Joined:
      Oct 9, 2014
      Messages:
      2
      Likes Received:
      0
      Trophy Points:
      1
      Thank you for the rundown.

       
    11. heinzskies

      heinzskies Member

      Joined:
      Sep 7, 2014
      Messages:
      57
      Likes Received:
      2
      Trophy Points:
      8
      Dark Knight Profile, Remove all pulling logic. It's unreliable. It's a raiding buddy not a zombie.
      You can change the range back to 2.5 if you changed it.
      Code:
      // By HeinzSkies
      
      using System.Threading.Tasks;
      using System.Windows.Forms;
      using ff14bot;
      using ff14bot.Enums;
      using ff14bot.Managers;
      using ff14bot.Objects;
      using YourRaidingBuddy.Books;
      using YourRaidingBuddy.Helpers;
      using HotkeyManager = YourRaidingBuddy.Managers.HotkeyManager;
      
      namespace YourRaidingBuddy.Rotations
      {
          public class DarkKnight : Root
          {
      
              private static LocalPlayer Me
              {
                  get { return Core.Player; }
              }
      
              public override ClassJobType[] Class
              {
                  get
                  {
                      return new[]
                      {
                          ClassJobType.DarkKnight
                      };
                  }
              }
      
              public override void OnInitialize()
              {
                  ;
              }
      
              public static async Task<bool> AutoMode()
              {
                  if (!Me.CurrentTarget.IsViable())
                  {
                      return false;
                  }
                  Unit.UpdatePriorities(0, 15);
                  return await AutoRotation();
              }
      
              public static async Task<bool> HotkeyMode()
              {
                  if (!Me.CurrentTarget.IsViable())
                  {
                      return false;
                  }
                  Unit.UpdatePriorities(0, 15);
                  return await HotkeyRotation();
              }
      
              public static async Task<bool> AutoRotation()
              {
                  if (await Darkside()) return true;
                  if (await Aoe()) return true;
                  if (await DotRotation()) return true;
                  if (await FinishedRotation()) return true;
                  if (HotkeyManager.IsKeyDown(Keys.LShiftKey))
                  {
                      if (await EnmityRotation()) return true;
                  }
                  else
                  {
                      if (await DpsRotation()) return true;
                  }
                  if (await OffGcdRotation()) return true;
                  if (await MpGeneratorRotation()) return true;
      
                  return false;
              }
      
              public static async Task<bool> HotkeyRotation()
              {
                  if (await Darkside()) return true;
                  if (await Aoe()) return true;
                  if (await DotRotation()) return true;
                  if (await FinishedRotation()) return true;
                  if (HotkeyManager.IsKeyDown(Keys.LShiftKey))
                  {
                      if (await EnmityRotation()) return true;
                  }
                  else
                  {
                      if (await DpsRotation()) return true;
                  }
                  if (await OffGcdRotation()) return true;
                  if (await MpGeneratorRotation()) return true;
      
                  return false;
              }
      
              public static async Task<bool> Darkside()
              {
                  if (await Spell.NoneGcdCast("Darkside", Me, () => !Me.HasAura("Darkside") && Me.CurrentManaPercent > 90))
                      return true;
      
                  return false;
              }
      
              public static async Task<bool> DpsRotation()
              {
                  if (await Spell.CastSpell("Syphon Strike", () => Actionmanager.LastSpell.Name == "Hard Slash")) return true;
                  if (await Spell.CastSpell("Hard Slash", () => true)) return true;
      
                  return false;
              }
      
              // We always want to finished out combo.
              public static async Task<bool> FinishedRotation()
              {
                  await DarkArts();
      
                  if (
                      await
                          Spell.CastSpell("Souleater",
                              () =>
                                  Actionmanager.LastSpell.Name == "Syphon Strike" &&
                                  (((Me.CurrentTarget.HasAura("Delirium", true, 4000) ||
                                     Me.CurrentTarget.HasAura("Dragon Kick", true, 4000)) &&
                                    (Me.CurrentHealthPercent < 70 && Me.HasAura("Grit"))) || Me.HasAura("Dark Arts"))))
                      return true;
                  if (
                      await
                          Spell.ApplyCast("Delirium", Me.CurrentTarget, () => Actionmanager.LastSpell.Name == "Syphon Strike"))
                      return true;
      
                  return await Spell.CastSpell("Power Slash", () => Actionmanager.LastSpell.Name == "Spinning Slash");
              }
      
              public static async Task<bool> DarkArts()
              {
                  // Using it at Mana > 70% means that we never interrupt more important stuff like Power Slash or Unleash. Which both trigger at 50%.
                  await
                      Spell.NoneGcdCast("Dark Arts", Me,
                          () =>
                              Actionmanager.LastSpell.Name == "Syphon Strike" && Me.CurrentManaPercent > 70 &&
                              (Me.CurrentTarget.HasAura("Delirium", true, 4000) ||
                               Me.CurrentTarget.HasAura("Dragon Kick", true, 4000)));
                  await
                      Spell.NoneGcdCast("Dark Arts", Me,
                          () => Actionmanager.LastSpell.Name == "Spinning Slash" && Me.CurrentManaPercent > 50);
      
                  return false;
              }
      
              public static async Task<bool> Aoe()
              {
                  return
                      await
                          Spell.CastSpell("Unleash", Me,
                              () =>
                                  ((Me.CurrentManaPercent > 50 && VariableBook.HostileUnitsCount > 2) || Me.HasAura("Unleash")) &&
                                  Actionmanager.LastSpell.Name != "Syphon Strike" &&
                                  Actionmanager.LastSpell.Name != "Hard Slash" &&
                                  Actionmanager.LastSpell.Name != "Spinning Slash");
              }
      
              public static async Task<bool> DotRotation()
              {
                  if (await Spell.ApplyCast("Scourge",
                      Me.CurrentTarget, () => !Me.CurrentTarget.HasAura("Scourge", true, 4000) &&
                                              Actionmanager.LastSpell.Name != "Syphon Strike" &&
                                              Actionmanager.LastSpell.Name != "Hard Slash" &&
                                              Actionmanager.LastSpell.Name != "Spinning Slash" &&
                                              Me.CurrentTarget.CurrentHealth > 3000)) return true;
      
                  return false;
              }
      
              // Currently without a way to detect enmity, we will use hotkey to trigger this.
              public static async Task<bool> EnmityRotation()
              {
                  if (await Spell.CastSpell("Spinning Slash", () => Actionmanager.LastSpell.Name == "Hard Slash"))
                      return true;
                  if (await Spell.CastSpell("Hard Slash", () => true)) return true;
                  return false;
              }
      
              public static async Task<bool> OffGcdRotation()
              {
                  // Offensive
                  await Spell.CastLocation("Salted Earth", Me.CurrentTarget, () => true);
                  await Spell.NoneGcdCast("Reprisal", Me.CurrentTarget, () => true);
                  await Spell.NoneGcdCast("Low Blow", Me.CurrentTarget, () => true);
      
                  // Need to solve this problem for an increase in dps.
                  // Leaving it like this allow it to be much more flexible.
                  //await Spell.NoneGcdCast("Plunge", Me.CurrentTarget, () => Me.CurrentTarget.Distance(Me) > 10);
      
                  // Defensive
                  await Spell.NoneGcdCast("Dark Dance", Me, () => Me.CurrentTarget.Distance(Me) < 3);
      
                  return false;
              }
      
              public static async Task<bool> MpGeneratorRotation()
              {
                  await
                      Spell.NoneGcdCast("Blood Weapon", Me,
                          () => Me.CurrentManaPercent < 90 && Me.CurrentTarget.Distance(Me) < 3);
                  await
                      Spell.NoneGcdCast("Blood Price", Me,
                          () => Me.CurrentManaPercent < 70 && VariableBook.HostileUnitsTargettingMeCount > 0);
                  await
                      Spell.NoneGcdCast("Carve and Spit", Me.CurrentTarget,
                          () => !Me.HasAura("Dark Arts") && Me.CurrentManaPercent < 50 && Me.CurrentTarget.Distance(Me) < 3);
                  await
                      Spell.NoneGcdCast("Sole Survivor", Me.CurrentTarget,
                          () =>
                              (Me.CurrentManaPercent < 70 || Me.CurrentHealthPercent < 70) &&
                              Me.CurrentTarget.Distance(Me) < 3 && Me.CurrentTarget.CurrentHealth < 5000);
      
                  return false;
              }
          }
      }
       
    12. VirgilS

      VirgilS New Member

      Joined:
      Mar 28, 2015
      Messages:
      18
      Likes Received:
      2
      Trophy Points:
      0
      I just started testing this and grabbed my WAR 50 for it, not real sure what I am doing just as a warning, and if you guys could show me how to make the copy paste go into that scrolling box that would be great too

      this is what I got everytime I tried to change rotations using hotkeys [18:04:54.960 N] [YourRaidingBuddy] Clearing HeavySwing because EmptySpell

      this is what I got after finishing a fight,

      [18:05:43.245 D] Buddy.Coroutines.CoroutineUnhandledException: Exception was thrown by coroutine ---> System.NullReferenceException: Object reference not set to an instance of an object.
      at YourRaidingBuddy.Rotations.Warrior.<WarriorRotation>b__5a() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Rotations\Jobs\Warrior.cs:line 118
      at YourRaidingBuddy.Helpers.Spell.<CastNew>d__25.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Core\Helpers\Spell.cs:line 442
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
      at YourRaidingBuddy.Helpers.Spell.<CastSpell>d__1c.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Core\Helpers\Spell.cs:line 387
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
      at YourRaidingBuddy.Rotations.Warrior.<WarriorRotation>d__68.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Rotations\Jobs\Warrior.cs:line 118
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
      at YourRaidingBuddy.Rotations.Warrior.<HotkeyMode>d__6b.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Rotations\Jobs\Warrior.cs:line 132
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at TreeSharp.ActionRunCoroutine....()
      --- End of inner exception stack trace ---
      at Buddy.Coroutines.Coroutine.CheckPostConditions(Boolean shouldBeCanceled)
      at Buddy.Coroutines.Coroutine.Resume(Boolean forStop)
      at Buddy.Coroutines.Coroutine.Resume()
      at TreeSharp.ActionRunCoroutine.Run(Object context)
      at TreeSharp.Action.RunAction(Object context)
      at TreeSharp.Action.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at TreeSharp.PrioritySelector.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at ff14bot.Behavior.HookExecutor.Run(Object context)
      at TreeSharp.Action.RunAction(Object context)
      at TreeSharp.Action.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at TreeSharp.PrioritySelector.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at ff14bot.Behavior.HookExecutor.Run(Object context)
      at TreeSharp.Action.RunAction(Object context)
      at TreeSharp.Action.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at TreeSharp.PrioritySelector.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at TreeSharp.Decorator.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at TreeSharp.Decorator.<Execute>d__0.MoveNext()
      at TreeSharp.Composite.Tick(Object context)
      at ff14bot.TreeRoot.() --> System.NullReferenceException: Object reference not set to an instance of an object.
      at YourRaidingBuddy.Rotations.Warrior.<WarriorRotation>b__5a() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Rotations\Jobs\Warrior.cs:line 118
      at YourRaidingBuddy.Helpers.Spell.<CastNew>d__25.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Core\Helpers\Spell.cs:line 442
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
      at YourRaidingBuddy.Helpers.Spell.<CastSpell>d__1c.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Core\Helpers\Spell.cs:line 387
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
      at YourRaidingBuddy.Rotations.Warrior.<WarriorRotation>d__68.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Rotations\Jobs\Warrior.cs:line 118
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
      at YourRaidingBuddy.Rotations.Warrior.<HotkeyMode>d__6b.MoveNext() in c:\Users\Virgil\Desktop\RebornBuddy\Routines\YourRaidingBuddy\Rotations\Jobs\Warrior.cs:line 132
      --- End of stack trace from previous location where exception was thrown ---
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
      at TreeSharp.ActionRunCoroutine....()
       
    13. Mathikk

      Mathikk New Member

      Joined:
      Oct 14, 2012
      Messages:
      99
      Likes Received:
      0
      Trophy Points:
      0
      }
      await Spell.CastSpell("Ruin III", () => Me.HasAura("Dreadwyrm Trance"));
      await Spell.CastSpell("Deathflare", () => Me.HasAura("Dreadwyrm Trance", true, 3000));

      return false;
      }


      sorry im a noob at this but i am trying to get it to use deathflare when 3 seconds are let on dreadwyrm trance with this code its doing it instantly
       
    14. stewiethecat

      stewiethecat Member

      Joined:
      Feb 4, 2011
      Messages:
      454
      Likes Received:
      0
      Trophy Points:
      16
      VirgiS go back a page it should explain how I set up warrior. Your problem might be that, when you activate a specific rotation through hotkey, you have to press it again to shut it off before selecting another. And if you want to post a proper log, you can click Go Advanced, which will bring up more options, one of them being to attach a file. Once you do that, your log folder is in your Rebornbuddy/Logs


      Edit: I see what you mean with the errors, but the errors don't seem to affect the performance of the routine, at least not for me
       
      Last edited: Jul 5, 2015
    15. Xcesius

      Xcesius Community Developer

      Joined:
      May 1, 2011
      Messages:
      2,050
      Likes Received:
      61
      Trophy Points:
      48
      Hi VirgilS

      I've fixed those null errors in latest version!

      Hi Mathikk,

      I'm still working on Summoner, but that's correct.


      New update out -->


      • Updated DarkKnight
      • Updated Warrior
      • Resolved some null errors on Warrior.cs
       
    16. wolfrain62

      wolfrain62 Member

      Joined:
      Aug 22, 2014
      Messages:
      137
      Likes Received:
      0
      Trophy Points:
      16
      New Ninja Update.

      Added AoE:
      1. Load up Reborn Buddy
      2. Select YourRaidingBuddy Rotuine
      3. Click Combat Settings in RebornBuddy console
      4. With YourRaidingBuddy GUI open select Hotkey Settings
      5. Next to Hotkey Mode Selection use the drop down list to select Hotkey Mode
      6. Next to Modifire Key use the drop down list to select witch ever key you want
      7. Next to Multi-Target (AoE) Key select witch ever key you want
      8. Press Save and Exit
      9. With FFXIV as your active window press your mod+multitarget keys you selected and if the conditions are met you should do the AoE rotation.

      AoE Conditions:
      Will Cast Doton if there are 3+ targets in range and the current target you have selected is above 10k hp (The HP number may need to be edited but keeping it like this for now)
      Will Cast Death Blossom if there are 5+ targets in range.
      Still need to add Kassatsu support for AoE (Will probably need someone better at this then me to get it to work properly.)

      Also added Second Wind will use it if you drop below 30% hp.

      Next Up:
      Try to optimize armor crush
      Try to optimize Off GCD Weaving
      Try to add Kassatsu to AoE

      Code:
      using System;
      using System.Linq;
      using System.Threading.Tasks;
      using System.Windows.Media;
      using Buddy.Coroutines;
      using ff14bot;
      using ff14bot.Enums;
      using ff14bot.Helpers;
      using ff14bot.Managers;
      using ff14bot.Objects;
      using YourRaidingBuddy.Helpers;
      using YourRaidingBuddy.Settings;
      using TreeSharp;
      using System.Collections.Generic;
      using YourRaidingBuddy.Books;
      using YourRaidingBuddy.Interfaces.Settings;
      
      namespace YourRaidingBuddy.Rotations
      {
          public class Ninja : Root
          {
              private static LocalPlayer Me { get { return Core.Player; } } //Core.Player.CurrentTarget as BattleCharacter
      
              public override ClassJobType[] Class
              {
                  get { return new[] { ClassJobType.Ninja, ClassJobType.Rogue }; }
              }
      
              private const int MobHp = 3000;
              private const int BuffHp = 8000;
              public override void OnInitialize()
              {
                  ;
              }
      
              #region NewRotation
              public static async Task<bool> AutoMode()
              {
                  if (!Me.CurrentTarget.IsViable())
                      return false;
                  return await NinjaRotation();
              }
      
              public static async Task<bool> HotkeyMode()
              {
                  if (!Me.CurrentTarget.IsViable())
                      return false;
                  if (VariableBook.HkmMultiTarget) await NinjaAoE();
                  return await NinjaRotation();
              }
      
      
      
      
              public static async Task<bool> NinjaRotation()
              {
                  if (Managers.HotkeyManager.IsKeyDown(System.Windows.Forms.Keys.LShiftKey))
                  {
                      await EmergHuton();
                  }
                  await DoNinjutsu();
                  await HutonRefresh();
                  await DancingEdge();
                  await Shadow();
                  await SingleTarget();
                  await NoneGCD();
      
                  return false;
              }
      	
      	public static async Task<bool> NinjaAoE()
      	{
      		if (VariableBook.HostileUnitsCount >= 3 && Core.Me.CurrentTarget.CurrentHealth >= 10000)
      		{
      			await CastDoton(); 
      		}
      		if (VariableBook.HostileUnitsCount >= 5)
      		{
      			await Spell.CastSpell("Death Blossom", Me, () => true);
      		}
      
      	  return false;
      	}
              public static async Task<bool> EmergHuton()
              {
                  await Spell.CastSpell("Armor Crush", () => Actionmanager.LastSpell.Name == "Gust Slash");
                  await Spell.CastSpell("Gust Slash", () => Actionmanager.LastSpell.Name == "Spinning Edge");
                  await Spell.CastSpell("Spinning Edge", () => true);
                  return false;
              }
              public static async Task<bool> HutonRefresh()
              {
                  if (!Me.HasAura("Duality") && !Core.Me.HasAura("Huton", true, 24000) && Actionmanager.LastSpell.Name == "Gust Slash")
                  {
                      return await Spell.CastSpell("Armor Crush", () => true);
                  }
      
                  return false;
              }
      
              public static async Task<bool> DancingEdge()
              {
                  if (!Me.HasAura("Duality") && !Me.CurrentTarget.HasAura("Dancing Edge", true, 4000) && !Me.CurrentTarget.HasAura("Dancing Edge", false, 4000) && !Me.CurrentTarget.HasAura("Storm's Eye", false) && Actionmanager.LastSpell.Name == "Gust Slash")
                  {
                      return await Spell.CastSpell("Dancing Edge", () => true);
                  }
      
                  return false;
              }
      
              public static async Task<bool> Shadow()
              {
      
                  if ((!Me.CurrentTarget.HasAura("Shadow Fang", true, 4000) || !Me.CurrentTarget.HasAura("Shadow Fang", true)) && Me.CurrentTarget.HasAura("Dancing Edge", true) && Actionmanager.LastSpell.Name == "Spinning Edge" && Core.Me.CurrentTarget.CurrentHealth >= MobHp)
                  {
                      return await Spell.CastSpell("Shadow Fang", () => true);
                  }
                  return false;
              }
      
      
              public static async Task<bool> SingleTarget()
              {
                  await Spell.CastSpell("Aeolian Edge", () => Me.HasAura("Duality") || Actionmanager.LastSpell.Name == "Gust Slash");
                  await Spell.CastSpell("Gust Slash", () => Actionmanager.LastSpell.Name == "Spinning Edge");
                  await Spell.CastSpell("Mutilate", () => Me.CurrentTarget.HasAura(AuraBook.ShadowFang) && (!Me.CurrentTarget.HasAura(AuraBook.Mutilate, true, 4000) || !Me.CurrentTarget.HasAura(AuraBook.Mutilate)) && Core.Me.CurrentTarget.CurrentHealth >= MobHp);
                  await Spell.CastSpell("Spinning Edge", () => true);
      
                  return false;
              }
      
              public static async Task<bool> NoneGCD()
              {
                  await Spell.NoneGcdCast("Trick Attack", Me.CurrentTarget, () => Me.HasAura(AuraBook.Suiton) && Me.CurrentTarget.IsBehind);
                  await Spell.NoneGcdCast("Internal Release", Me, () => !Me.HasAura(AuraBook.InternalRelease) && Core.Me.CurrentTarget.CurrentHealth >= BuffHp);
                  await Spell.NoneGcdCast("Blood for Blood", Me, () => !Me.HasAura("Blood for Blood") && Core.Me.CurrentTarget.CurrentHealth >= BuffHp);
                  await Spell.NoneGcdCast("Invigorate", Me, () => Me.CurrentTP < 550);
      	    await Spell.NoneGcdCast("Second Wind", Me, () => Me.CurrentHealthPercent <= 30);
                  await Spell.NoneGcdCast("Jugulate", Me.CurrentTarget, () => Me.CurrentTarget.HasAura(AuraBook.Mutilate));
                  await Spell.NoneGcdCast("Mug", Me.CurrentTarget, () => Me.CurrentTarget.HasAura(AuraBook.ShadowFang));
                  await Spell.NoneGcdCast("Duality", Me, () => Actionmanager.LastSpell.Name == "Gust Slash" && Me.CurrentTarget.HasAura(AuraBook.ShadowFang, true, 5000) && Me.CurrentTarget.HasAura(AuraBook.DancingEdge, true, 5000));
                  await Spell.NoneGcdCast("Dream Within a Dream", Me.CurrentTarget, () => Me.CurrentTarget.HasAura("Vulnerability Up"));
                  await Spell.NoneGcdCast("Assassinate", Me.CurrentTarget, () => true);
      
                  return false;
      
              }
              #endregion
      
              #region Ninjatsu Copied From Kupo Credits Masta
      
              private static bool HasBleedingDebuff()
              {
      
                  return Me.CurrentTarget.HasAura("Storm's Eye", false, 2000) || Me.CurrentTarget.HasAura("Dancing Edge");
      
              }
      
      
      
      
              private static readonly SpellData Jin = DataManager.GetSpellData(2263);
              private static readonly SpellData Chi = DataManager.GetSpellData(2261);
              private static readonly SpellData Ten = DataManager.GetSpellData(2259);
              private static readonly SpellData Ninjutsu = DataManager.GetSpellData(2260);
              private static readonly SpellData Jugulate = DataManager.GetSpellData(2251);
      
              private static readonly SpellData Kassatsu = DataManager.GetSpellData(2264);
      
              private static readonly SpellData Trick_Attack = DataManager.GetSpellData(2258);
              private static readonly SpellData Sneak_Attack = DataManager.GetSpellData(2250);
      
              public static HashSet<uint> OverrideBackstabIds = new HashSet<uint>()
              {
                  3240//Cloud of darkness
              };
      
      
              private const int HutonRecast = 8000;
              internal static async Task<bool> DoNinjutsu()
              {
      
      
                  //Exit early if player was inputting something
                  if (Core.Player.HasAura("Mudra"))
                      return true;
      
                  if (Actionmanager.CanCastOrQueue(Jin, null))
                  {
                      if (!Core.Player.HasAura("Huton", true, HutonRecast))
                      {
                          Logger.Write("YourRaidingBuddy Casting " + "Huton" + "Chi Combo!");
                          await CastHuton();
                          return false;
                      }
      
                      var curTarget = Core.Target as BattleCharacter;
                      if (curTarget == null)
                          return false;
      
                      //  if (curTarget.TimeToDeath() <= 3)
                      //       return false;
      
                      //Suiton
                      var taCD = Trick_Attack.Cooldown;
                      //We can start casting suiton before trick attack is ready cause its going to take some time
                      if (taCD.TotalMilliseconds <= 1300)
                      {
                          if (!await CastSuiton())
                              return false;
      
                          if (!(Kassatsu.Cooldown.TotalMilliseconds <= 0) || !Core.Player.HasTarget)
                              return false;
      
                          if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Kassatsu, null) && Me.CurrentTarget.HasAura("Shadow Fang") && Me.CurrentTarget.HasAura(492)))
                          {
                              Logger.Write("YourRaidingBuddy Casting " + "Raiton");
                              if (Me.CurrentTarget.HasAura(492)) await CastRaiton();
                          }
      
      
                          return false;
      
                      }
      
                      if (taCD.TotalSeconds >= 5)
                      {
                          await CastRaiton();
                      }
      
      
                      return false;
                  }
      
      
      
                  if (Actionmanager.CanCastOrQueue(Chi, null) && Me.CurrentTarget.HasAura("Shadow Fang"))
                  {
                      Logger.Write("YourRaidingBuddy Casting " + "Raiton");
                      await CastRaiton();
                      return false;
                  }
      
                  if (Actionmanager.CanCastOrQueue(Ten, null))
                  {
                      Logger.Write("YourRaidingBuddy Casting " + "Ten" + "Ninjutsu!");
      
                      {
                          await Coroutine.Wait(2000, () => Actionmanager.DoAction(Ten, null));
                          await CastNinjutsu();
                          return false;
                      }
                  }
      
      
      
      
                  return false;
              }
      
              private static async Task CastHuton()
              {
                  if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Jin, null)))
                  {
                      if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Chi, null)))
                      {
                          if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Ten, null)))
                          {
                              await CastNinjutsu();
                          }
                      }
                  }
              }
      
      
      	private static async Task<bool> CastDoton()
      	{
      	 
      	if (Actionmanager.CanCastOrQueue(Jin, null))
              {	 
      	    if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Jin, null)))
      	    { 
                  	if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Ten, null)))
      	    	{ 
      	    		if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Chi, null)))
                  		{
                      	 return await CastNinjutsu();
                  		}
                  	}
      	    }
      	
        	 }
      		return false;
      	}
      	
              private static async Task<bool> CastRaiton()
              {
                  if (!await Coroutine.Wait(2000, () => Actionmanager.DoAction(Ten, null))) return false;
                  if (await Coroutine.Wait(2000, () => Actionmanager.DoAction(Chi, null)))
                  {
                      return await CastNinjutsu();
                  }
                  return false;
              }
      
              private static async Task<bool> CastSuiton()
              {
                  if (!await Coroutine.Wait(2000, () => Actionmanager.DoAction(Ten, null))) return false;
                  if (!await Coroutine.Wait(2000, () => Actionmanager.DoAction(Chi, null))) return false;
                  if (!await Coroutine.Wait(2000, () => Actionmanager.DoAction(Jin, null))) return false;
      
      
                  if (await CastNinjutsu())
                  {
                      return await Coroutine.Wait(2000, () => Core.Player.HasAura("Suiton"));
                  }
      
                  return false;
              }
      
      
              private static async Task<bool> CastNinjutsu()
              {
                  if (await Coroutine.Wait(2000, () => Core.Player.HasAura("Mudra")))
                  {
                      bool possibly = false;
                      while (Core.Player.HasAura("Mudra"))
                      {
                          if (Core.Player.HasTarget)
                          {
                              if (Actionmanager.DoAction(Ninjutsu, Core.Target))
                              {
                                  possibly = true;
                              }
                          }
                          if (!Core.Player.InCombat)
                              return false;
      
                          await Coroutine.Yield();
                      }
                      await Coroutine.Wait(2000, () => Ninjutsu.Cooldown.TotalSeconds > 10);
                      return possibly;
                  }
                  return false;
              }
      
              #endregion
          }
      }
      
       
      Last edited: Jul 6, 2015
    17. Xcesius

      Xcesius Community Developer

      Joined:
      May 1, 2011
      Messages:
      2,050
      Likes Received:
      61
      Trophy Points:
      48
      Updated.
       
    18. heinzskies

      heinzskies Member

      Joined:
      Sep 7, 2014
      Messages:
      57
      Likes Received:
      2
      Trophy Points:
      8
      We need to have a central place of these dot cooldown. People are using 3000 or 4000 for checking. We should have 1 place for all of this.
       
    19. Mathikk

      Mathikk New Member

      Joined:
      Oct 14, 2012
      Messages:
      99
      Likes Received:
      0
      Trophy Points:
      0
      i do not understand then because it is casting deathflare instantly instead of letting dreadwyrm trance go down to 3 seconds
       
    20. Mathikk

      Mathikk New Member

      Joined:
      Oct 14, 2012
      Messages:
      99
      Likes Received:
      0
      Trophy Points:
      0
      i guess if your working on summoner i will work on the monk code but i don't know how to make it so attacks are done by your position on the npc
       

    Share This Page