Thanks for that. If it helps, here is a great place with plenty of information to see what you can improve The Ninja Superthread Also, can we have an option to use dancing edge or not? If a warrior is in the party, then they should be doing the combo anyway
For some reason i couldn't add just that line in i add to add the moving manager line as well i found in the scholar.cs private async Task<bool> Protect() { if (!MovementManager.IsMoving && !Core.Player.HasAura(MySpells.CrossClass.Protect.Name)) { return await MySpells.CrossClass.Protect.Cast(); } return false; } Why would that not work just as ? private async Task<bool> Protect() { if (!Core.Player.HasAura(MySpells.CrossClass.Protect.Name) { return await MySpells.CrossClass.Protect.Cast(); } return false; } -------------------------------------------------------------------------------------------------------------------------------------- After messing around with the files for a few hours I'm really starting to figure out how to build out the methods/rotations the way I want, so thanks for the help so far. I do have a few random questions if and when you get a chance besides the Is.moving one above. I finally got secondwind to work below. What is the difference between adding the ! before the core piece. ie if (!Core.player) like I did above for protect and the one below here that works w/o it ? private async Task<bool> SecondWind() { if (Core.Player.CurrentHealthPercent < 70 && !MovementManager.IsMoving) { return await MySpells.CrossClass.SecondWind.Cast(); } return false; } Secondly is there a way where i can overright the toggle override in the utlimasettings.cs so that I dont have to remove if the statements for every cross class skill i want to use in the methods ?
I don't comment much but thanks for working on this. I've been using it on pug/lancer I've been leveling and everything has been fine thus far. I hope you work on healing soon since Magitek is discontinued and theres no active project now with healing updates .
! In C# means "not" so an if check of if(Core.player) and if(!Core.player) would be checking that you are the current player in the first one and checking if you are "NOT" the current player in the second one. You'll also see some checks of != meaning "not equal"
gotcha thanks makes a lot of sense now, why the !moving would check to make sure your not moving before casting!, still not sure why i had to add that line though i would assume without it it would just keep tryign to cast protect whether you were moving or not, hmmm
Sorry I haven't been around much. Been doing holiday related things and about to leave town again for a few days for the actual holiday. Once the New Year rolls around I should be able to sit back down and start cranking stuff out faster. I think it only attempts Pre-Combat once (per check) so if it tries to cast Protect (the DoAction actually happens) it just assumes it worked and moves on (whereas in Combat/Combat Buffs it would pulse again immediately and see the HasAura is still False and try again, although that leads to spell lockout/spamming while moving). The !IsMoving helps it to wait until it's actually possible to cast before doing so. I plan on altering the cast method again soon, this time to automatically check IsMoving (for relevant spells) so that it won't be necessary to have to plug it into each individual method like that though. One of my end-goals with Ultima is trying to make everything as simple and straight-forward as possible so that if the community wants to make their own small adjustments (like you are) it's easy (or if I suddenly died/disappeared, it'd be much easier for someone to pick up the CR vs the situation we were stuck in with the old CRs, not that I plan on doing that lol).
Thanks for all the updates Endus. Tested out the monk routine again; its definitely an improvement, but there's a couple of tweaks that should improve dps by another 5-10%. If it feels like nitpicking, I apologize, but some things just feel awkward while using it. In terms of rotation, Monk is less straightforward than say, bard, or even ninja (although I'm sure there's technical aspects to coding mudras that make it a pain). The positionals change is good, but if you're on the wrong side, then the de/buff move should only be used if the relevant de/buff is gone (or has like, <2s left). For example, if I'm behind, and DK debuff has 4s left, using Bootshine is better even though DK will fall off before it gets refreshed. In the right position, Bootshine/True Strike are 50-80% stronger than the respective buff move, so they're worth using even if that means losing 10% damage for an attack or two. In regards to Demolish, similar deal, but different numbers. Use Snap Punch on the side unless Demolish is gone completely. From behind, I'd refresh Demolish if it has <8s left. I'm sure someone else has done the math for at which point its better, but its not a big difference as long as it falls into the general range of 'refresh demolish from behind every other rotation'. For Touch of Death, I'm not exactly sure what you did. For my edits on magitek, I just set it to only cast if Greased Lightning was >10s. Honestly its such a small part of your rotation damage, rather than dealing with a bunch of conditions all over the place I just wanted to make sure it never cost me GL stacks. I'd add a quick line for Fists of Fire, with a condition that your health should be 100%. Sometimes people forget to activate it, and sometimes they'll switch to Fists of Earth, and might not want to switch back automatically until they're topped off. Fist of Earth is a little trickier for a bot, like all damage mitigation, since you can't predict damage, and the only thing you can look at (Healthpercent), is of questionable utility since the damage already happened. Other than that, DoT health requirements I guess, although that applies for all classes. Its probably better to scale the number depending on the duration of the dot; for example, if I set requiredDoThealth = 10k, then demolish gets used >10k and touch of death gets used >15k. Same with Shadow Fang and Mutilation for ninja. Mostly small changes, that I doubt people outside end-game raiding would notice much. No rush, have a happy holidays and thanks for all the hard work.
Let me preface by saying I am quite the novice when it comes to C++, but have learned a good bit just messing around and tweaking certain rotations/methods to my liking. Most of what you ask I'm pretty sure can be done and are good ideas outside of some particular target switches/PB etc. If anyone wants to add the fire/earth toggle , the code is below, note you can change the % to whatever you like. 1). In the rotations/methods folder/ need to make the following edit to the monk.cs file. private async Task<bool> FistsOfEarth() { if (!Core.Player.HasAura(MySpells.FistsOfEarth.Name) && Core.Player.CurrentHealthPercent <= 75) { return await MySpells.FistsOfEarth.Cast(); } return false; } ------------------------------------------------------------------ private async Task<bool> FistsOfFire() { if (!Core.Player.HasAura(MySpells.FistsOfFire.Name) && Core.Player.CurrentHealthPercent >= 76) { return await MySpells.FistsOfFire.Cast(); } return false; } -------------------------------------------------------------- 2. In the Rotations/Behaviors/Combatbuff monk.cs file make the following edit. Then remove if (await FistsOfEarth()) return true; from the Precombat.monk.cs file public override async Task<bool> CombatBuffLvL46() { if (await Invigorate()) return true; if (await ShoulderTackle()) return true; if (await InternalRelease()) return true; if (await BloodForBlood()) return true; if (await HowlingFist()) return true; if (await SteelPeak()) return true; if (await Haymaker()) return true; if (await MercyStroke()) return true; if (await FistsOfFire()) return true; if (await FistsOfEarth()) return true; return await Ultima.SummonChocobo(); } I would post my own files but I've made a ton of tweaks for heals/cross class abilities/movement etc. Hopefully this helps
Yeah, I've been using custom version of Magitek right now for monk, with the changes I stated and several other more personal tweaks. Some of them are personal preferences, like hotkeys for AoE and stuff, which aren't applicable for a general routine. I mentioned the changes that should be universal and objective improvements.
May have been mentioned earlier but I missed it. I'm having trouble attempting to enable second wind and featherfoot (I'm new and haven't leveled lancer yet) for Ninja. It doesn't let me tick the boxes for them. Are they just not implemented yet or is something wrong?
they are not implemented yet but I can code them in for yo if you like. What lvl is your ninja and at what % do you want them to go off at ?
Hey, I'll have to check with Endus to make sure he's ok with it, but if you're interested in helping him continue work on coding this CR, let him and myself know so I can possibly get you access to the source code. Do you have experience with C# and Visual Studio? Do you have experience getting things off of a TFS server? Let me know.
is it just me but this routine doesnt stop attacking until i'm dead which really defeats the purpose of any routines since its purpose is to survive?
i didnt realise i made a typo that made what i was asking about senseless. what i was asking is that the routine doesn't 'rest' it just keeps on atttacking mob after mob until my hp goes 0.
i cant seem to click on anything in combat settings. the boxes do not get ticked, but i can untick them. am i doing something wrong?