What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
RebornBuddy Forums

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

YourRaidingBuddy - Coming Soon

Am I doing something wrong? I just got a DRK and I have the overlay on and my char does nothing and it says everything is disable and I have no clue what to do... ?
 
I will definitely donate to a working raiding CR. =)

As I've mentioned on the forums before, RBuddy has been a godsend for me as a working man with kids. Bot does all the stuff I hate or don't have time for and I get to enjoy the fun stuff. Would totally love a raiding CR to help me keep up with my friends who play full time.
 
hey I'm kinda new to tanking class, starting off with a dark knight, I want to ask which settings do I choose in this CR (or combine with Mud assist) in order to just like let my dark knight keep aggro on every mobs in dungeon? I'm sorry if this is a stupid question but I never play a tank before T_T
 
thanks for the hard work man but after the last update YourBuddy didnt work for me i dont know why but i like your CR i tryed new and clean install but still the same no Yourbuddy window on CR choice
 
yrb doesn't work because xcesius' whole trunk loaded into the folder. all you have to do is go into YRB folder and remove the honorbuddy folder that was uploaded inside. Should work after that
 
Thanks you, I was pulling the whole repository when I'm trying to update something since the beginning lol.
 
Checkout from https://subversion.assembla.com/svn/...rRaidingBuddy, revision HEAD, Fully recursive, Externals included
Unexpected HTTP status 405 'Method Not Allowed' on '/svn/...rRaidingBuddy'

Additional errors:
PROPFIND request on '/svn/...rRaidingBuddy' failed: 405 Method Not Allowed

You'll need to either click on the link and copy it out of the address bar, or right click and save/copy the address.
As of right now, you literally copied the ... as part of the address rather than having the full address. :p
 
Is it possible to add options to the overlay, such as display which hotkey/rotation is active? I enjoy using this with my warrior, but it would be nice if toggling a rotation would happen as soon as you hit another hotkey instead of toggling it off first before going to a different one (ex. switching from HK1 emnity combo to HK2 DPS combo doesn't require hitting HK1 first to toggle off before toggling HK2.) A thank you to everyone so far that has contributed to this great combat assist routine!
 
Been trying to use the Summoner profile and I notice that it won't attack outside of melee range. Seems to have the same problem when you switch to Bard. Is there a setting somewhere that we can change to allow max spell range?
 
anyway you can have the dark knight do Dark Arts + Split Carve move for more DPS

Seconding this. Adding DA Carve & Spit & Dark Passenger to the DPS single-target rotation and incorporating Abyssal Drain (for HP restoration)/Dark Passenger for large AoE trash pulls would be nice!
 
Seconding this. Adding DA Carve & Spit & Dark Passenger to the DPS single-target rotation and incorporating Abyssal Drain (for HP restoration)/Dark Passenger for large AoE trash pulls would be nice!


DA + Carve & Spit for DPS should be use for single target and Carve & Split should be use for AoE targetting in the next version.

Can anyone confirm as soon as possible if DP is an DPS increase? Else it won't make it into the next version.
 
DA + Carve & Spit for DPS should be use for single target and Carve & Split should be use for AoE targetting in the next version.

Can anyone confirm as soon as possible if DP is an DPS increase? Else it won't make it into the next version.

I've been keeping an eye on this topic https://www.reddit.com/r/ffxiv/comments/3ghg9f/i_am_currently_writing_a_drk_guide_and_i_want_to/, there is some input in the comments section. The guide will probably be ready for the following version after your next one.
 
I've been keeping an eye on this topic https://www.reddit.com/r/ffxiv/comments/3ghg9f/i_am_currently_writing_a_drk_guide_and_i_want_to/, there is some input in the comments section. The guide will probably be ready for the following version after your next one.

Try this

Code:
// By HeinzSkies

using System;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms;
using ff14bot;
using ff14bot.Enums;
using ff14bot.Helpers;
using ff14bot.Managers;
using ff14bot.Objects;
using YourRaidingBuddy.Books;
using YourRaidingBuddy.Helpers;
using YourRaidingBuddy.Interfaces.Settings;
using YourRaidingBuddy.Settings;
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 static SettingsG GeneralSettings
        {
            get { return InternalSettings.Instance.General; }
        }

        public static DarkKnightSetting DarkKnightSettings
        {
            get { return InternalSettings.Instance.DarkKnight; }
        }

        public override void OnInitialize()
        {
            
        }

        public static async Task<bool> AutoMode()
        {
            if (Unit.ExceptionCheck()) return true;
            Unit.UpdatePriorities(0, 5);
            return await AutoRotation();
        }

        public static async Task<bool> HotkeyMode()
        {
            if (Unit.ExceptionCheck()) return true;
            Unit.UpdatePriorities(0, 5);
            return await HotkeyRotation();
        }

        private static async Task<bool> AutoRotation()
        {
            if (await Darkside()) return true;
            if (!IsEnmityKeyDown() && await Aoe(false)) return true;
            if (await DotRotation()) return true;
            if (await FinishedRotation()) return true;
            if (IsEnmityKeyDown())
            {
                if (await EnmityRotation()) return true;
            }
            else
            {
                if (await DpsRotation()) return true;
            }

            if (GeneralSettings.Cooldowns == CooldownUse.Always)
            {
                if (await OffGcdRotation()) return true;
                if (await MpGeneratorRotation()) return true;
            }

            return false;
        }

        private static async Task<bool> HotkeyRotation()
        {
            if (await Darkside()) return true;
            if (VariableBook.HkmMultiTarget)
            {
                if (!IsEnmityKeyDown() && await Aoe(true)) return true;
            }
            if (await DotRotation()) return true;
            if (await FinishedRotation()) return true;
            if (IsEnmityKeyDown())
            {
                if (await EnmityRotation()) return true;
            }
            else
            {
                if (await DpsRotation()) return true;
            }
            if (VariableBook.HkmCooldowns)
            {
                if (await OffGcdRotation()) return true;
                if (await MpGeneratorRotation()) return true;
            }

            return false;
        }

        private static bool IsEnmityKeyDown()
        {
            return HotkeyManager.IsKeyDown(Keys.LShiftKey);
        }

        private static async Task<bool> Darkside()
        {
            return await
                Spell.NoneGcdCast("Darkside", Me,
                    () =>
                        DarkKnightSettings.UseDarkside && !Me.HasAura("Darkside") &&
                        Me.CurrentManaPercent > DarkKnightSettings.DarksideMpPercentage);
        }

        private 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.
        private static async Task<bool> FinishedRotation()
        {
            await DarkArts();

            if (
                await Spell.CastSpell("Souleater",
                    () => Actionmanager.LastSpell.Name == "Syphon Strike" &&
                          ((!ShouldApplyDelirium() &&
                            (Me.CurrentHealthPercent < DarkKnightSettings.SouleaterHpPercentage &&
                             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");
        }

        private static async Task<bool> DarkArts()
        {
            if (!DarkKnightSettings.UseDarkArts) return false;

            await Spell.NoneGcdCast("Dark Arts", Me,
                () =>
                    Actionmanager.LastSpell.Name == "Syphon Strike" &&
                    Me.CurrentManaPercent > DarkKnightSettings.DarkArtsSouleaterHpPercentage &&
                    !ShouldApplyDelirium() && !Me.HasAura("Dark Arts"));
            await Spell.NoneGcdCast("Dark Arts", Me,
                () =>
                    Actionmanager.LastSpell.Name == "Spinning Slash" &&
                    Me.CurrentManaPercent > DarkKnightSettings.DarkArtsPowerSlashHpPercentage &&
                    !Me.HasAura("Dark Arts"));

            return false;
        }

        private static bool ShouldApplyDelirium()
        {
            return !Me.CurrentTarget.HasAura("Delirium", false, 4000) && !Me.CurrentTarget.HasAura("Dragon Kick") &&
                   Me.ClassLevel >= 50 && DarkKnightSettings.UseDelirium;
        }

        private static async Task<bool> Aoe(bool force)
        {
            if (!force && !GeneralSettings.Aoe) return false;

            return await Spell.CastSpell("Unleash", Me,
                () =>
                    ((Me.CurrentManaPercent > 50 && ShouldAoe()) ||
                     Me.HasAura("Enhanced Unleash") || force));
        }

        private static bool ShouldAoe()
        {
            return VariableBook.HostileUnitsCount >= GeneralSettings.AoeCount;
        }

        private 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 != null && Me.CurrentTarget.CurrentHealth > 3000)))
                return true;

            return false;
        }

        // Currently without a way to detect enmity, we will use hotkey to trigger this.
        private 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;
        }

        private static bool TargetIsNear()
        {
            return Me.CurrentTarget.Distance(Me) - Me.CurrentTarget.CombatReach < 3;
        }

        private static async Task<bool> OffGcdRotation()
        {
            // Defensive that keeps you from dying
            await Spell.NoneGcdCast("Convalescence", Me,
                () =>
                    DarkKnightSettings.UseConvalescence &&
                    Me.CurrentHealthPercent < DarkKnightSettings.ConvalescenceHpPercentage &&
                    UnitIsTargettingMe());
            await Spell.NoneGcdCast("Shadow Wall", Me,
                () =>
                    DarkKnightSettings.UseShadowWall &&
                    Me.CurrentHealthPercent < DarkKnightSettings.ShadowWallHpPercentage &&
                    UnitIsTargettingMe());
            await Spell.NoneGcdCast("Shadowskin", Me,
                () =>
                    DarkKnightSettings.UseShadowskin &&
                    Me.CurrentHealthPercent < DarkKnightSettings.ShadowskinHpPercentage &&
                    UnitIsTargettingMe());
            await
                Spell.NoneGcdCast("Dark Mind", Me,
                    () =>
                        DarkKnightSettings.UseDarkMind &&
                        Me.CurrentHealthPercent < DarkKnightSettings.DarkMindHpPercentage &&
                        UnitIsTargettingMe());

            // Offensive by DPS
            await Spell.NoneGcdCast("Reprisal", Me.CurrentTarget, () => DarkKnightSettings.UseReprisal);
            await Spell.NoneGcdCast("Mercy Stroke", Me.CurrentTarget,
                () =>
                    DarkKnightSettings.UseMercyStroke &&
                    (Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealthPercent <= 20));
            await Spell.NoneGcdCast("Low Blow", Me.CurrentTarget, () => DarkKnightSettings.UseLowBlow);

            if (DarkKnightSettings.UseCarveAndSpit && DarkKnightSettings.UseDarkArts && !ShouldAoe())
            {
                await Spell.NoneGcdCast("Dark Arts", Me,
                    () => !Me.HasAura("Dark Arts") && Actionmanager.LastSpell.Name != "Syphon Strike" &&
                          Actionmanager.LastSpell.Name != "Spinning Slash" &&
                          Actionmanager.CanCast("Carve and Spit", Me.CurrentTarget));

                await Spell.NoneGcdCast("Carve and Spit", Me.CurrentTarget,
                    () =>
                        Me.HasAura("Dark Arts") &&
                        Actionmanager.LastSpell.Name != "Syphon Strike" &&
                        Actionmanager.LastSpell.Name != "Spinning Slash");
            }
            else if (DarkKnightSettings.UseCarveAndSpit)
            {
                await Spell.NoneGcdCast("Carve and Spit", Me.CurrentTarget,
                    () =>
                        (!Me.HasAura("Dark Arts") && Actionmanager.LastSpell.Name != "Syphon Strike" &&
                         Actionmanager.LastSpell.Name != "Spinning Slash" && Me.CurrentManaPercent < 50));
            }

            await Spell.NoneGcdCast("Dark Passenger", Me.CurrentTarget,
                   () =>
                       (!Me.HasAura("Dark Arts") && Actionmanager.LastSpell.Name != "Syphon Strike" &&
                        Actionmanager.LastSpell.Name != "Spinning Slash"));

            await
                Spell.CastLocation("Salted Earth", Me.CurrentTarget,
                    () => DarkKnightSettings.UseSaltedEarth && TargetIsNear());

            // Defensive
            await Spell.NoneGcdCast("Bloodbath", Me,
                () =>
                    DarkKnightSettings.UseBloodbath && TargetIsNear() &&
                    Me.CurrentHealthPercent < DarkKnightSettings.BloodbathHpPercentage);
            await Spell.NoneGcdCast("Dark Dance", Me,
                () =>
                    DarkKnightSettings.UseDarkDance &&
                    Me.CurrentHealthPercent < DarkKnightSettings.DarkDanceHpPercentage &&
                    UnitIsTargettingMe());
            await Spell.NoneGcdCast("Foresight", Me,
                () =>
                    DarkKnightSettings.UseForesight &&
                    Me.CurrentHealthPercent < DarkKnightSettings.ForesightHpPercentage &&
                    UnitIsTargettingMe());

            return false;
        }

        private static async Task<bool> MpGeneratorRotation()
        {
            await Spell.NoneGcdCast("Blood Weapon", Me,
                () =>
                    DarkKnightSettings.UseBloodWeapon &&
                    Me.CurrentManaPercent < DarkKnightSettings.BloodWeaponManaPercentage && TargetIsNear());
            await Spell.NoneGcdCast("Blood Price", Me,
                () =>
                    DarkKnightSettings.UseBloodPrice &&
                    Me.CurrentManaPercent < DarkKnightSettings.BloodPriceManaPercentage &&
                    UnitIsTargettingMe());
            await Spell.NoneGcdCast("Sole Survivor", Me.CurrentTarget,
                () => DarkKnightSettings.UseSoleSurvivor &&
                      (Me.CurrentManaPercent < DarkKnightSettings.SoleSurvivorManaPercentage ||
                       Me.CurrentHealthPercent < DarkKnightSettings.SoleSurvivorHpPercentage) &&
                      (Me.CurrentTarget != null && Me.CurrentTarget.CurrentHealth < 5000));

            return false;
        }

        private static bool UnitIsTargettingMe()
        {
            return VariableBook.HostileUnitsTargettingMeCount > 0;
        }
    }
}
 

Thanks, I will give this a go later when I get home and let you know how it works out!

update: Ran this routine through Alex 2 and Fractal Continuum: parsed at #3 for DPS in Alex 2 with Grit on the whole time and fending accessories; #1 in DPS at 735.23 in Fractal against the final boss with full slayer accessories and Grit turned off for the last half of the fight. Still using a law weapon, can't wait to get my hands on an esoteric!
 
Trying to make the Overlay menu more pleasant to the eye. Also, because text background is transparent, it is very hard to click the buttons as you have to exactly click on the font. So I made backgrounds not transparent.

What do you think about this:
View attachment Overlay.cs
View attachment Overlay.Designer.cs

Anyone knows:
1) How to make overlay displayed as soon as the routine starts, instead of being hidden as default
2) How to code so that overlay gets hidden if FFXIV window or RebornBuddy window aren't in focus?
3) Add a toggle in menu settings to choose between transparent and non transparent overlay button backgrounds (I might be able to figure this one out by myself)

Thanks
 
Back
Top