• Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Ultima - The Ultimate Combat Routine

    Discussion in 'Combat Routines' started by Endus, Nov 25, 2014.

    1. exaccuss

      exaccuss Active Member

      Joined:
      Nov 10, 2013
      Messages:
      1,021
      Likes Received:
      6
      Trophy Points:
      38
      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 :)
       
      Last edited: Dec 19, 2014
    2. Eklipse

      Eklipse New Member

      Joined:
      Dec 13, 2014
      Messages:
      208
      Likes Received:
      0
      Trophy Points:
      0
      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 ?
       
      Last edited: Dec 20, 2014
    3. Trance101

      Trance101 Member

      Joined:
      May 24, 2014
      Messages:
      81
      Likes Received:
      1
      Trophy Points:
      8
      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 :(.
       
    4. Wheredidigo

      Wheredidigo Community Developer

      Joined:
      Dec 15, 2013
      Messages:
      417
      Likes Received:
      8
      Trophy Points:
      18
      ! 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"
       
    5. Eklipse

      Eklipse New Member

      Joined:
      Dec 13, 2014
      Messages:
      208
      Likes Received:
      0
      Trophy Points:
      0
      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
       
    6. Endus

      Endus Community Developer

      Joined:
      Jul 9, 2012
      Messages:
      458
      Likes Received:
      6
      Trophy Points:
      18
      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 :p lol).
       
      Last edited: Dec 22, 2014
    7. Azoth

      Azoth Member

      Joined:
      Mar 6, 2014
      Messages:
      470
      Likes Received:
      8
      Trophy Points:
      18
      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.
       
    8. Eklipse

      Eklipse New Member

      Joined:
      Dec 13, 2014
      Messages:
      208
      Likes Received:
      0
      Trophy Points:
      0
      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
       
      Last edited: Dec 23, 2014
    9. Azoth

      Azoth Member

      Joined:
      Mar 6, 2014
      Messages:
      470
      Likes Received:
      8
      Trophy Points:
      18
      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.
       
    10. Eklipse

      Eklipse New Member

      Joined:
      Dec 13, 2014
      Messages:
      208
      Likes Received:
      0
      Trophy Points:
      0

      cool would you mind posting your files, i'd like to see how you hotkey coded out the aoe piece ?
       
    11. Azoth

      Azoth Member

      Joined:
      Mar 6, 2014
      Messages:
      470
      Likes Received:
      8
      Trophy Points:
      18
      View attachment Monk.cs
      Basically I hold down 'R' if I want to aoe.
       
    12. exaccuss

      exaccuss Active Member

      Joined:
      Nov 10, 2013
      Messages:
      1,021
      Likes Received:
      6
      Trophy Points:
      38
      For ninja, could we have an option to use dancing edge or not?
       
    13. johblip

      johblip New Member

      Joined:
      Jun 19, 2013
      Messages:
      12
      Likes Received:
      1
      Trophy Points:
      3
      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?
       
    14. Eklipse

      Eklipse New Member

      Joined:
      Dec 13, 2014
      Messages:
      208
      Likes Received:
      0
      Trophy Points:
      0
      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 ?
       
    15. Wheredidigo

      Wheredidigo Community Developer

      Joined:
      Dec 15, 2013
      Messages:
      417
      Likes Received:
      8
      Trophy Points:
      18
      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.
       
    16. tides

      tides Member

      Joined:
      Dec 31, 2014
      Messages:
      57
      Likes Received:
      1
      Trophy Points:
      8
      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?
       
      Last edited: Jan 3, 2015
    17. Dgame

      Dgame Member

      Joined:
      Aug 19, 2014
      Messages:
      320
      Likes Received:
      0
      Trophy Points:
      16
      Depends on what you're fighting and gearset is.
       
    18. tides

      tides Member

      Joined:
      Dec 31, 2014
      Messages:
      57
      Likes Received:
      1
      Trophy Points:
      8
      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.
       
    19. exaccuss

      exaccuss Active Member

      Joined:
      Nov 10, 2013
      Messages:
      1,021
      Likes Received:
      6
      Trophy Points:
      38
      Could we get an option to use fuma shuriken instead of raiton?
       
    20. tides

      tides Member

      Joined:
      Dec 31, 2014
      Messages:
      57
      Likes Received:
      1
      Trophy Points:
      8
      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?
       

    Share This Page