• Visit Rebornbuddy
  • Beta Testers Needed for new Custom Class FightThisWay

    Discussion in 'Honorbuddy Forum' started by Kamilche, Oct 1, 2012.

    1. Kamilche

      Kamilche New Member

      Joined:
      Oct 2, 2010
      Messages:
      551
      Likes Received:
      30
      Trophy Points:
      0
      I have developed a custom class called 'FightThisWay'. Like Singular and CLU, this is an 'all things to all people' class that handles combat, pulling, etc.

      I need beta testers for it. The code is small, clean (all code in 1 file), and unlike CLU and Singular, uses text files to handle the rotations. This keeps the rotations easy to understand, so you don't have to be a rocket scientist to change it. I could use the community's help in polishing this!

      All classes and specs are done, but the rotations could use polishing.

      Here's what's great about it:

      1. Easily customizable - simply change the data file to change your play style. Like to open with Rain of Fire? No problem! Like to heal as soon at you get below 100, instead of below 70? Piece of cake. Do you want to never EVER use a certain spell? Just remove those lines.
      2. Change combat style at runtime. After making your changes and saving them, FightThisWay automatically notices the file has changed, and reload it at runtime. There's no need to stop and restart HonorBuddy, to preview changes.
      3. Access spells that aren't currently available in HonorBuddy's Spell Manager. All the missing druid and warlock spells are here, and ready to rock!
      4. Customizing it makes you play different than everyone else, so it's less obvious that you're playing with a bot.
      5. Innovative use of the scroll key to handle automatic movement and facing. When the scroll lock key is on, no movement, targeting, or facing is performed, so you can control it yourself. When the scroll lock key is off, everything's automatic. This comes in handy when you want to do dungeons with others, and want it to handle the rotation, while you handle the movement and game mechanics. With scroll lock on, you can 'steer' the bot, and make target choices yourself. If nature calls and you need a quick bio break, turn scroll lock off and let it do its thing.
      6. Works in all dungeons! For the lower level dungeons, you can pretty much ignore it and assume good stuff's happening. For the higher level trickier dungeons, there are large stretches where it can play unattended, but you will eventually need to come back to manually steer out of Mannoroth's fel flames.
      7. When in party, it automatically follows the tank when out of combat, and your current target when in combat.
      8. When in a party in combat, it automatically rezzes any dead tank or healers, if it can - Death Knight 'Raise Ally', warlock 'Soulstone', druid 'Rebirth', etc. It happens so fast you often don't notice someone went down before they've popped back up again.
      9. In party out of combat, it does the 'cheap' rez on everyone, regardless of whether they're a tank or healer - 'Revive' for druids, 'Redemption' for paladins, etc.
      10. It uses a weighting system during combat, and will stop what it's doing and go save the healer, if it must. If it's a tank and it's losing aggro, it will drop the current mob and target the mob he lost aggro on. When things get wild during combat, I just hit 'scroll lock' and let the bot handle it. My bear runs around like he's rabid, regaining aggro on the things he lost it on, far faster than I could have.
      11. It uses a weighting system to pick who to heal, as well. Some classes should never off-heal - feral druid comes to mind, because it breaks form. But for some classes, it's appropriate - tanks can occasionally toss a heal to the worst hurt player, to take the load off the healer, for instance. The worst hurt player pops to the top, with an extra 10 points given if they're a tank or healer, so they're prioritized first in healing.
      12. It can optionally pull only groups of monsters, ignoring onesie-twosies. This is great when farming for cloth, such as the trogg packs in Deepholm.

      I use this a lot when in dungeons. It takes all the 'reflex' work out of partying with others, and let's me concentrate on game mechanics, steering, and chat. However, it's also useful for leveling - when out of party, it will do it all.

      The data files end up being a 'laundry list' of how to play your class. The first action that has all the conditions met and executes successfully, wins this round - it stops there, and starts at the top of the file again.

      • Lines that start with two dashes are comments.
      • The commands are broken up into three sections - @COMBAT, @PULL, and @REST. @COMBAT contains what to do when fighting a mob. @PULL contains what to do when pulling a mob. @REST contains what to do when you're otherwise idle.
      • Every line that starts in column 1 on the left, is a command to be executed. All the lines that are indented under that, are conditions that must be true, for that command to be executed.
      • All the conditions indented under a command must be true, for the command to be executed. If the conditions aren't all true, the command will be skipped, and FightThisWay starts looking at the next command in the list.
      • If all the conditions are true, the command is executed. If the command executed successfully, FightThisWay stops there, and starts again at the top.
      • If all the conditions are true, but the command didn't execute (spell on cooldown, for instance), FightThisWay will continue looking down the list for a command to execute.
      • If there are no conditions listed, the command will be executed, but may still return false, causing FightThisWay to continue looking down the list for the next command to execute.

      Every condition starts with one of the following prefixes. If a condition doesn't start with one of these prefixes, 'Target' is assumed.
      • Me - the player
      • Tank - the tank when in party, the player when not in a party.
      • Healer - the healer when in party.
      • Target - the mob you're targeting
      • Heal - the party member most in need of healing
      • Pet - your pet
      • Revive - a dead person
      • Cleanse - a diseased person

      Here's a sample data file - the ever-popular Paladin tank, coded up as a FightThisWay text file.
      Let's go over the '@COMBAT' section of the Paladin Tank in more detail.

      1. It will heal the player ('Me'), if his health is getting too low.
      2. With Heal.Cast Flash of Light, we're casting flash of light on the player whose most in need of healing, only if their health is under 50%. This is the 'take the load off the healer' method I mentioned earlier.
      3. Next, it will remove diseases from the player, if applicable.
      4. Paladin tanks don't have a 'rebirth during combat', so that section is empty.
      5. Next comes targeting - the 'GrabAggro' line causes it to target any mobs it may be losing aggro on. This should only be used for tank classes, when scroll lock is off. For everyone else, 'FindBetterTarget' will find a new target if the current target is dead, or a pet, etc.
      6. Ranged spells that should be cast while running to the target - in this case 'Speed of Light', to increase your run speed towards the target.
      7. Movement - Me.FollowTarget causes you to move to within melee range if you're a melee class, or 20 yards if you're a ranged class.
      8. Stuns are next - disable the current target, if you're fighting a bunch of 'em.
      9. Now, come all the spells that go against target. Notice most of them say just the spellname, such as 'Judgment', instead of 'Target.Cast Judgment.' If you ever see a condition without a prefix, 'Target' is assumed.
      10. If we're fighting more than 1 mob, the target is in melee range, and I'm not running, cast 'Consecration.'
      11. Also cast 'Reckoning' if we have loose or no aggro.
      12. Perform combat buffs such as Blessing of Kings, if we don't already have it, and get the right seals up depending on the situation.
      13. Then come the interrupts, if the target is casting a spell, and that spell is interruptable.
      14. Then comes the normal damage dealers, prioritized in the order you want to see them. If one is on cooldown, it will just fall through to the next, as you'll recall.

      Code:
      --====================================================================
      @COMBAT
      --====================================================================
      
      -----------------------------------------------------------------------
      -- Healing spells 
      -----------------------------------------------------------------------
      --Divine Protection
      --	Me.Health < 70
      Flash of Light
      	Me.StackCount("Selfless Healer") >= 3
      	Me.Health < 80
      Word of Glory
      	Me.Health < 70
      	Me.StackCount("Bastion of Glory") = 1
      Eternal Flame
      	Me.Health < 70
      	Me.HasAura("Bastion of Glory") = 1
      Flash of Light
      	Me.HasAura("Supplication") = 1
      	Me.Health < 70
      Word of Glory
      	Me.Health < 60
      Guardian of Ancient Kings
      	Me.Health < 60
      Ardent Defender
      	Me.Health < 50
      Heal.Cast Flash of Light
      	Heal.Health < 50
      Me.Cast Lay on Hands
      	Me.Health < 40
      Divine Shield
      	Me.Health < 40
      
      Me.Cleanse
      	Me.IsDiseased = 1
      
      -----------------------------------------------------------------------
      -- Rebirth
      -----------------------------------------------------------------------
      
      -----------------------------------------------------------------------
      -- Targeting
      -----------------------------------------------------------------------
      Me.GrabAggro
      	Me.InParty = 1
      	Me.ScrollLock = 0
      
      Me.FindBetterTarget
      	Me.InParty = 0
      
      Me.FindBetterTarget
      	Me.InParty = 0
      
      -----------------------------------------------------------------------
      -- Ranged spells (cast while running)
      -----------------------------------------------------------------------
      Judgment
      	Target.Distance > 10
      Speed of Light
      	Target.Distance > 10
      
      -----------------------------------------------------------------------
      -- Movement
      -----------------------------------------------------------------------
      Me.FollowTarget
      
      -----------------------------------------------------------------------
      -- Stuns
      -----------------------------------------------------------------------
      Fist of Justice
      	Target.AddsCount > 1
      Rebuke
      	Target.Health > 35
      	Target.IsCasting = 1
      	Target.Interruptable = 1
      	Target.Distance < 5
      
      -----------------------------------------------------------------------
      -- AOE
      -----------------------------------------------------------------------
      Consecration
      	Target.AddsCount > 1
      	Target.Distance < 5
      	Me.IsMoving = 0
      
      
      -----------------------------------------------------------------------
      -- Combat Debuffs
      -----------------------------------------------------------------------
      Reckoning
      	Target.Aggro < 4
      
      -----------------------------------------------------------------------
      -- Combat buffs
      -----------------------------------------------------------------------
      Me.Cast Blessing of Kings
      	Me.HasAura("Legacy of the Emperor") = 0
      	Me.HasAura("Mark of the Wild") = 0
      	Me.HasAura("Blessing of Kings") = 0
      
      Me.Cast Righteous Fury
      	Me.HasAura("Righteous Fury") = 0
      
      Me.Cast Seal of Righteousness
      	Me.HasAura("Seal of Righteousness") = 0
      	Target.AddsCount > 1
      
      Me.Cast Seal of Truth
      	Me.HasAura("Seal of Truth") = 0
      	Target.AddsCount <= 1
      
      Avenging Wrath
      
      -----------------------------------------------------------------------
      -- Runners
      -----------------------------------------------------------------------
      
      -----------------------------------------------------------------------
      -- Interrupts
      -----------------------------------------------------------------------
      Rebuke
      	Target.Distance < 5
      	Target.IsCasting = 1
      	Target.Interruptable = 1
      
      -----------------------------------------------------------------------
      -- Freebies
      -----------------------------------------------------------------------
      
      -----------------------------------------------------------------------
      -- Normal attack rotation
      -----------------------------------------------------------------------
      Shield of the Righteous
      	Me.HasAura("Divine Purpose") = 1
      Crusader Strike
      	Target.AddsCount = 1
      Hammer of the Righteous
      	Target.AddsCount > 1
      Judgment
      Avenger's Shield
      	Me.HasAura("Grand Crusader") = 1
      Hammer of the Righteous
      	Target.HasAura("Weakened Blows") = 0
      Avenger's Shield
      --Shield of the Righteous
      --	Me.HolyPower >= 3
      Hammer of Wrath
      Consecration
      	Target.Distance < 5
      	Me.IsMoving = 0
      Holy Wrath
      	Target.AddsCount > 1
      
      Me.AutoAttack
      
      --====================================================================
      @PULL
      --====================================================================
      
      Avenger's Shield
      Judgment
      Exorcism
      
      Me.FollowTarget
      
      Me.AutoAttack
      
      --====================================================================
      @REST
      --====================================================================
      
      Me.Eat
      	Me.Health < 50
      --Divine Protection
      --	Me.Health < 70
      Guardian of Ancient Kings
      	Me.Health < 60
      Word of Glory
      	Me.Health < 50
      	Me.HasAura("Bastion of Glory") = 1
      Eternal Flame
      	Me.Health < 50
      	Me.HasAura("Bastion of Glory") = 1
      Ardent Defender
      	Me.Health < 30
      Me.Cast Flash of Light
      	Me.Health < 30
      Me.Cast Lay on Hands
      	Me.Health < 30
      Divine Shield
      	Me.Health < 20
      Heal.Cast Flash of Light
      	Heal.Health < 50
      
      Me.Cleanse
      	Me.IsDiseased = 1
      
      Revive.CastOnce Redemption
      	Revive.Dead = 1
      
      Me.FollowTarget
      
      Download Link:
      FTW
       
      Last edited: Oct 13, 2012
      Mupp, Gnobiwan, Exmortem and 3 others like this.
    2. zeldrak

      zeldrak Well-Known Member

      Joined:
      Oct 25, 2010
      Messages:
      3,516
      Likes Received:
      25
      Trophy Points:
      48
      This, on paper, sounds extremely promising. It's simple and clean, so it should be fast. I don't know anything about coding, but I do know how to read and comprehend, and this was really easy to follow along and understand. The last time I coded something was in BASIC, which as we all know is an archaic language nowadays.

      Some questions come up, of course, and the primary one being the self/party/raid buffs. I know it checks for it, but is it possible that it may get stuck in a loop and keep casting the buff like some of the other CCs do at times? With healing, HB has had some issues in the last few updates with it being slow, so would this impact your CC? Also, with HB not picking up things that need to be dispelled, how will this pick them up to be dispelled? I've also read that HB is having, or has had, an issue with tracking which auras you have, so how does this impact the CC if the bot is possibly having an issue picking up the aura needed as one of the conditions listed? Those are some of the questions off the top of my head.

      I'd love to give it a shot, and perhaps even make a combat routine to plug in and try out seeing as how simple this looks and reads.
       
      Last edited: Oct 1, 2012
    3. olivete

      olivete Member

      Joined:
      Jul 9, 2012
      Messages:
      305
      Likes Received:
      1
      Trophy Points:
      18
      Man.......... I dont even know what to say.

      Those things you creating will change the way we all bot.

      If this baby does all you said it does (and I will test start to test in few minutes) then, all my god! This is the perfect cc. I am really tired to see small errors in other CCs and not be able to fix cause I am not a code pro.

      If needed I can try help with DK Frost, this is my main class.

      Thanks alot man, really really!!!!
       
    4. Unemployed

      Unemployed New Member

      Joined:
      Sep 30, 2012
      Messages:
      21
      Likes Received:
      0
      Trophy Points:
      0
      Hi,

      This sounds very promising indeed, i would be more than willing to test many of the classes you state it currently supports plus also thrash things out on my main priest.

      I look forward to testing it out.

      Regards
      Unemployed :)
       
    5. Haley

      Haley New Member

      Joined:
      Feb 1, 2010
      Messages:
      152
      Likes Received:
      3
      Trophy Points:
      0
      would love to test with my DK - unholy and frost
       
    6. randomstraw

      randomstraw Community Developer

      Joined:
      Jul 17, 2012
      Messages:
      1,611
      Likes Received:
      10
      Trophy Points:
      38
      i can help with the warrior. although i'm no experienced tank.

      drop a pm. ;)
       
    7. SkyHigh

      SkyHigh Member

      Joined:
      Apr 15, 2010
      Messages:
      396
      Likes Received:
      4
      Trophy Points:
      18
      I'd like to give it a whirl, ww monk here.
       
    8. Hawkiz

      Hawkiz Banned

      Joined:
      Feb 1, 2012
      Messages:
      571
      Likes Received:
      0
      Trophy Points:
      0
      is nobody missing shamans :D ?
      fair enough, but i do!
       
    9. Brentus

      Brentus New Member

      Joined:
      Nov 29, 2011
      Messages:
      132
      Likes Received:
      0
      Trophy Points:
      0
      Il give it a go if u want i raided hardmodes and was duelist last season my frost dk. I have also tested out a few of the other ccs for other members and help them improve performance.
       
    10. SmokyDeath

      SmokyDeath New Member

      Joined:
      Sep 21, 2011
      Messages:
      2
      Likes Received:
      0
      Trophy Points:
      0
      I would love to help you out with testing of this, sounds so, wait for it........., LEGENDARY!
       
    11. lota7

      lota7 Member

      Joined:
      Nov 23, 2010
      Messages:
      108
      Likes Received:
      2
      Trophy Points:
      18
      I'd like to help in this. Sounds like a new age in customclasses.
      I have all the classes across my multiple accounts doing dungeonbuddy, BGbuddy and farming.
      Can help with whatever class/spec you guys needfeedback on.
       
    12. weischbier

      weischbier Guest

      If you would like me to help you out with frost dk, pm me.

      greetz

      Weischbier
       
      Last edited by a moderator: Oct 1, 2012
    13. Kamilche

      Kamilche New Member

      Joined:
      Oct 2, 2010
      Messages:
      551
      Likes Received:
      30
      Trophy Points:
      0
      Thanks for replying in depth.

      That endless loop of casting MoTW or Blessing of Kings, is caused by a simple oversight in other custom classes. What do you, as a person, do before casting that? You make sure you don't already have it, OR blessing of kings, OR legacy of the emperor, because they all do the same thing, and they overwrite each other. So the bit where it says 'Blessing of Kings', by putting all those conditions under it, you ensure you don't have any of those auras, before casting that buff.

      The code is constructed so that it goes as fast as possible. Each round, it picks out a few choice bits - the person nearest death, the tank, the healer, you, someone dead, and makes these people available to the class. It does this once, before it executes the data file. Let's give an example: Let's say there are 3 times you would cast lifebloom, and one time you would cast rejuvenation during combat. The "aura" conditions, "tank" checks, "health" checks - ALL the conditions, prefixes, and actions - have been determined by that point. It can then traipse through the action list really quickly. A less-clever custom class might check your health every time before it casts those spells, which wastes CPU cycles.

      Regarding dispelling, there are some things that can be dispelled, and some that can't. If it can't be dispelled, it won't present that as a person needing to be cleansed, to the class. That list will probably require tweaking, based on the missing classes and specs you saw in the first post. I'm certainly open for suggestions!

      The Auras! Wow, almost everything in WoW is tracked via auras. I'm not surprised some custom classes get it wrong - they don't always have the name you expect, and they might not be applied to the person you think. Also, sometimes you have 'permanent' auras, that have a 'time remaining' of 0. There are tools built in that will let you do things in game, such as dump all the auras on you and your current target, to the chat window. That way you can examine in depth what is going on with the auras, when developing a data file for that class. Here's an example: Windwalker Monks have an ability called 'Touch of Death', that instantly kills mobs with your health or less. However - that is proc'ed by an aura on YOU, called 'Death Note'. When you have 'Death Note' on you, you can cast 'Touch of Death' on the target. You'd think you'd have to check that on the target, but it fools ya. Another example: Monks always have an aura called '*****ling Jade Aura' on them. If you're not casting it, its 'AuraExpiring' value is 0. If you are casting it, it's higher. You can't just do a 'HasAura' check, because that condition would always succeed! Instead, you have to do an 'AuraExpiring' check, and make sure it's > 0, to get what you want.

      There is logging in the custom class, which you can set to 0 to disable logging, or a higher number, to get more. One of the logging levels tracks your auras - whenever you get one, or one drops off, it will print a line in the chat window. It's amazing to walk through town with that turned on - you see all tons of weirdly-named auras popping on and off. That's when you realize, WoW controls a lot of their game world, via auras. So it's important to get to know them, when creating a data file for your class.

      I haven't had problems with healing slowdowns using it - I like to raid heal using FTW on my resto druid, because sometimes I need to go afk for a bio break. It does good stuff while I'm gone - but it won't save you from 'Blood of the Earth.' Going afk while dungeoning or raiding is very situational - you gotta know what's coming up. If you're coming up on goo on the ground you gotta get out of, or a teleporter you need to take, you need to hang around and control it yourself. If you know it's a simple monster slaughter for the next 10 fights, you can relax, and let FTW do the driving.

      When I get home tonight, I'll bundle it up and ship it off to everyone who has expressed interest. Thanks for helping!
       
      Last edited: Oct 1, 2012
    14. no1knowsy

      no1knowsy Well-Known Member

      Joined:
      Feb 28, 2010
      Messages:
      3,927
      Likes Received:
      57
      Trophy Points:
      48
      I would enjoy having a look at your code if you don't mind.
      I like to potential here.
       
    15. zeldrak

      zeldrak Well-Known Member

      Joined:
      Oct 25, 2010
      Messages:
      3,516
      Likes Received:
      25
      Trophy Points:
      48
      Sounds like you've got it hashed out and nailed down. I, personally, can't wait to test drive this CC. If it works as well as it sounds, this may be a new way to create CCs in general, and your coding could be the cornerstone. We shall see how it all goes down.

      A lot of the things you said make a lot of sense, so I hope it all goes well.
       
    16. handnavi

      handnavi Well-Known Member Buddy Store Developer

      Joined:
      Jan 15, 2010
      Messages:
      2,489
      Likes Received:
      59
      Trophy Points:
      48
      AW: Beta Testers Needed for new Custom Class FightThisWay

      I would like to look into it. ;)
       
    17. Kowpye

      Kowpye Member

      Joined:
      Jun 11, 2012
      Messages:
      367
      Likes Received:
      3
      Trophy Points:
      18
      I PM'd you -- let me know if you need frost dk / prot and arms warrior for testing
       
    18. Ama

      Ama New Member

      Joined:
      Jun 6, 2011
      Messages:
      1,171
      Likes Received:
      33
      Trophy Points:
      0
      Sounds cool. I like the name...

      BASIC would probably be a lot easier for people with little coding experience too.
       
    19. TheGuv

      TheGuv New Member

      Joined:
      Apr 10, 2012
      Messages:
      37
      Likes Received:
      1
      Trophy Points:
      0
      Hi ama

      Would love to help no worries
       
    20. zeldrak

      zeldrak Well-Known Member

      Joined:
      Oct 25, 2010
      Messages:
      3,516
      Likes Received:
      25
      Trophy Points:
      48
      Was hoping this would be out now, so I could give it a spin, but something must have come up to prevent you from posting it. I'll keep waiting to see it and use it. Good luck on things.
       

    Share This Page