Duality is a buff i suppose. It lasts for 10 sec and makes the next weaponskill attack twice instead of once. It is Off the GCD. I even Tried this Code: await Spell.CastSpell("Duality", () => true); but it still didnt work.
Hi wolfrain62 Try this await Spell.NoneGcdCast("Duality", Me, () => true); await Spell.NoneGcdCast("Invigorate", Me, () => Me.CurrentTP < 550);
Xcesius, Thanks for such a prompt update to the routine. I spent some time last night laying out a routine that's going very well so far. I have one additional question: What is the best way to handle abilities when your character is high enough level to use them (level synced for FATEs, Trials, Dungeons, etc.)? For example, Royal Authority is a level 60 Paladin ability, and definitely is included in the routine for the job. However, if a player is level synced due to the restrictions of the content they're doing in game, the Paladin routine would continually use Fast Blade and Savage Blade without the Royal Authority finisher. Is there a way to determine if an ability is "available" without looking at the character's level? The reason I am trying not to use character level is because a number of job abilities (including all abilities in Heavensward) are quest rewards. While a player may be level 52, they may not yet have completed the quest for the level 52 job ability and trying to execute it in a routine that does so based on character level would likely cause issues (such as the one I mentioned in the paragraph above). Everything else I've been using to flesh out a robust routine for Paladins is working like a charm. I'm looking forward to tweaking it to perfection over a 3 day weekend!
Eminence I believe you are looking for this. Code: await Spell.CastSpell("Royal Authority", () => Actionmanager.LastSpell.Name == "Savage Blade" && Me.CurrentTarget.HasAura("Strength Down") && Me.CurrentTarget.HasAura("Goring Blade") && Core.Me.ClassLevel >= 60);
2) No, none of the UI settings of ninja works because I only added them to be examples. To access / use them, you need to use InternalSettings.Instance.Ninja.SettingHere If you have time can you post an example of how to get this working I have no idea where to start, just need a small snip to get me started.
wolfrain62, Thank you. This looks like what I needed. I'll give it a try later today after work. I appreciate the help.
Hey I have been working on warrior for a while and made some nice progress but i am getting some errors that are stopping the bot durring some fights. It's only happeneing with my cc using yourraidbuddy, im going to disable all addons and try again but looking over the log i dont think thats the issue Code: [18:33:09.902 D] System.NullReferenceException: Object reference not set to an instance of an object. at YourRaidingBuddy.Helpers.Unit.<>c__DisplayClass1.<NearbyUnitsNeedHealing>b__0(BattleCharacter x) in c:\Users\Jimbo Slice\Desktop\Games\RB\Routines\YourRaidingBuddy\Core\Helpers\Units.cs:line 60 at System.Linq.Enumerable.WhereListIterator`1.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) at YourRaidingBuddy.HealTargetingProvider.DefaultTargetWeight(List`1 units) in c:\Users\Jimbo Slice\Desktop\Games\RB\Routines\YourRaidingBuddy\HealingManager.cs:line 52 at YourRaidingBuddy.HealTargetingProvider.GetObjectsByWeight() in c:\Users\Jimbo Slice\Desktop\Games\RB\Routines\YourRaidingBuddy\HealingManager.cs:line 46 at ff14bot.NeoProfiles.Targeting.Pulse() at YourRaidingBuddy.Root.OnPulse() in c:\Users\Jimbo Slice\Desktop\Games\RB\Routines\YourRaidingBuddy\Root.cs:line 50 at YourRaidingBuddy.Root.Pulse() in c:\Users\Jimbo Slice\Desktop\Games\RB\Routines\YourRaidingBuddy\Root.cs:line 75 at ff14bot.Behavior.Pulsator.Pulse(PulseFlags CurrentPulseFlags) at ff14bot.TreeRoot.() seems to only really be an issue when im with party members
Here is my first version for the Dark Knight profile NOTE THAT THIS DOES NOT WORK WITH FATE BOT Please use it with MudAssist or the normal Combat Assist. It doesn't integrate with the UI at all. So you have to change the code if you need something(or just tell me). There's two mode, one when holding shift and one without holding shift Pulling Holding Shift Unmend > Plunge Released Shift Plunge > Unleash In Combat Holding Shift Power Slash Combo Released Shift Hard Slash > Syphon Strike > Delirium(if the monster doesn't have it) / Dark Arts(if your mana is above 90%) > Souleater (if delirium isn't used already). If you think is this not the optimal rotation then message me with the optimal rotation. I will try to get it working. This is Rotation/DarkKnight.cs Code: using System.Threading.Tasks; using System.Collections.Generic; using System.Windows.Media; using ff14bot; using ff14bot.Enums; using ff14bot.Managers; using ff14bot.Objects; using ff14bot.Helpers; using YourRaidingBuddy.Helpers; using YourRaidingBuddy.Settings; using YourRaidingBuddy.Books; using System.Windows.Forms; using System.Linq; using YourRaidingBuddy.Interfaces.Settings; namespace YourRaidingBuddy.Rotations { public class DarkKnight : Root { private static LocalPlayer Me { get { return Core.Player; } } //Core.Player.CurrentTarget as BattleCharacter public override ClassJobType[] Class { get { return new[] { ClassJobType.DarkKnight }; } } public override void OnInitialize() { ; } #region NewRotation public static async Task<bool> AutoMode() { if (!Me.CurrentTarget.IsViable()) return false; return await Rotation(); } public static async Task<bool> HotkeyMode() { if (!Me.CurrentTarget.IsViable()) return false; if (VariableBook.HkmMultiTarget) await Unleash(); return await Rotation(); } public static async Task<bool> Rotation() { if (Managers.HotkeyManager.IsKeyDown(System.Windows.Forms.Keys.LShiftKey)) { await PullSingle(); } else { await PullMultiple(); } await Unleash(); await Plunge(); await Darkside(); await DotRotation(); if (Managers.HotkeyManager.IsKeyDown(System.Windows.Forms.Keys.LShiftKey)) { await EnmityRotation(); } else { await DPSRotation(); } await OffGcdRotation(); await MPGeneratorRotation(); return false; } public static async Task<bool> Darkside() { await Spell.NoneGcdCast("Darkside", Me, () => !Me.HasAura("Darkside") && Me.CurrentManaPercent > 90); return false; } public static async Task<bool> DPSRotation() { await DarkArts(); await Spell.CastSpell("Souleater", () => Actionmanager.LastSpell.Name == "Syphon Strike" && Me.CurrentTarget.HasAura("Delirium", true, 4000)); await Spell.CastSpell("Delirium", () => Actionmanager.LastSpell.Name == "Syphon Strike" && !Me.CurrentTarget.HasAura("Delirium", true, 4000)); await Spell.CastSpell("Syphon Strike", () => Actionmanager.LastSpell.Name == "Hard Slash"); await Spell.CastSpell("Hard Slash", () => true); return false; } public static async Task<bool> DarkArts() { await Spell.NoneGcdCast("Dark Arts", Me, () => Actionmanager.LastSpell.Name == "Syphon Strike" && Me.CurrentManaPercent > 90 && Me.CurrentTarget.HasAura("Delirium", true, 4000)); return false; } static bool triggerUnleash = false; public static async Task<bool> Unleash() { if (triggerUnleash && Actionmanager.CanCast("Unleash", Me)) { await Spell.ApplyCast("Unleash", Me, () => true); triggerUnleash = false; } return false; } static bool triggerPlunge = false; public static async Task<bool> Plunge() { if (triggerPlunge && Actionmanager.CanCast("Plunge", Me.CurrentTarget)) { await Spell.NoneGcdCast("Plunge", Me.CurrentTarget, () => true); triggerPlunge = false; } return false; } public static async Task<bool> PullSingle() { if (Actionmanager.CanCast("Unmend", Me.CurrentTarget) && Me.CurrentTarget.Distance(Me) > 10) { await Spell.CastSpell("Unmend", () => true); triggerPlunge = true; } return false; } public static async Task<bool> PullMultiple() { if (Actionmanager.CanCast("Plunge", Me.CurrentTarget) && Me.CurrentTarget.Distance(Me) > 10) { await Spell.NoneGcdCast("Plunge", Me.CurrentTarget, () => true); triggerUnleash = true; } return false; } public static async Task<bool> DotRotation() { await Spell.ApplyCast("Scourge", Me.CurrentTarget, () => !Me.CurrentTarget.HasAura("Scourge", true, 4000)); return false; } // Currently without a way to detect enmity, we will use hotkey to trigger this. public static async Task<bool> EnmityRotation() { await Spell.CastSpell("Power Slash", () => Actionmanager.LastSpell.Name == "Spinning Slash"); await Spell.CastSpell("Spinning Slash", () => Actionmanager.LastSpell.Name == "Hard Slash"); await Spell.CastSpell("Hard Slash", () => 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, () => true); return false; } public static async Task<bool> MPGeneratorRotation() { await Spell.NoneGcdCast("Blood Weapon", Me, () => true); await Spell.NoneGcdCast("Blood Price", Me, () => true); await Spell.NoneGcdCast("Sole Survivor", Me, () => true); await Spell.NoneGcdCast("Carve and Spit", Me, () => true); return false; } #endregion } } Edit: I will add range to buff skill tomorrow as we don't want to buff before we go into a fight.
Love it working pretty well also if you can add Living dead if hp = -5 or 10% that would be great! kinda like an auto last stand mode lol
Hmm I can't seem to get targetting or movement to work - is this just not a functionality at the moment (i.e. currently just rotation?). NVM - I just read up - so settings for ninja aren't working?
looking for some help with this, Steel Cyclone wont go off at all. Have tried a few different ways to add this in. No Luck. On a plus side, once this is done, I can release this CR Code: await Spell.CastSpell("Defiance", Me, () => !Me.HasAura("Defiance")); await Spell.CastSpell("Steel Cyclone", Me.CurrentTarget, () => !Me.HasAura("Infuriated")); await Spell.CastSpell("Infuriate", Me, () => !Me.HasAura("Infuriated") && !Me.HasAura("Wrath") && !Me.HasAura("Wrath II") && !Me.HasAura("Wrath III") && !Me.HasAura("Wrath IV") && !Me.HasAura("Uncontrollable") && !Me.HasAura("Abandon") && !Me.HasAura("Abandon II") && !Me.HasAura("Abandon III") && !Me.HasAura("Abandon IV"));
Hi tichy, the only setting that is working for ninja right now is Kassatsu because that's the only one coded in.
should it not look like this? Code: await Spell.CastSpell("Steel Cyclone", () => Me.HasAura("Infuriated")); If i understand what the ! does. The way you currently have it will only cast if you do NOT have Infuriated up which you do need it up to use the skill.
You are correct. The way I remember ! is NOT. If NOTInuriated then blah blah blah. This is wrong, and your version would work, without the !.
I looked over the thread, but couldn't find anybody else with the issue. I can't "see" YourRaidingBuddy. It simply doesn't show up when I load up the bot, nor when I switch to Combat Assist or Mud Assist, the options are only Ultima and Kupo. I've done both an SVN checkout and tried copying said files. I followed Xcesius' (thank you for taking the time and effort to make the routine btw!) advice here: Here's what I've tried so far: 1) Fresh install of the latest working bot in a brand-new folder. 2) SVN Checkout (https://subversion.assembla.com/svn/team-random/) into a folder created that is exactly worded as YourRaidingBuddy in Routines folder of the bot. 3) Did a straight SVN Checkout to said folder (Routines) which creates a team-random folder instead of YourRaidingBuddy 4) Deleted/removed all Plugins, Botbases, and other Combat Routines No matter what I do, for whatever reason it doesn't seem to show up. If I move or alter Kupo or Ultima however, that's reflected. I've restarted my game client, the bot, and the computer numerous times all to no avail. I apologize to be asking such a basic question, but does anybody have any clue why I'm not able to use the routine? I'd try and find a log to post but there's no errors being thrown, the routine just seems like it's not there.
So you put it in the BotBases folder, not the Routines folder like the other Combat Routines then? EDIT: Just tried it, made a new folder in the BotBases directory called YourRaidingBuddy did an SVN checkout on it so all the proper files were inside the folder, restarted the bot. Still only shows Kupo and Ultima as the two options when loading up.
It goes in the Routines folder. Also assuming you did not edit any of the files after you did SVN checkout? Mine works All I did was create YourRaidingBuddy folder in the Rotuines folder Right clicked the new folder and clicked SVN checkout. Which extracted all the files into the folder.