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

FelMaster - static PVE destruction CC based on SimCraft's script

this a destro cc only?

Nope, all 3 talents specs are supported. The previous version was actually a showcase for destro locks only.

About PvP: I need to work on a new Helper class to manage people on battlegrounds (think about multi dotting in affliction and fearing people like crazy, keeping silence/death coil for healers => detect nearby ennemy healers, etc.). Stay tuned, as always...
 
Anyway we could get an option to disable casting Doomguard on CD? and AoE support would be amazing :)
 
Anyway we could get an option to disable casting Doomguard on CD? and AoE support would be amazing :)

Yeah, AoE stuff is on my todo list.

I've recently added the concept of 'burst levels' on the core. This will be available on next release. The idea is that you first define in the CC settings if you want to manage your cooldowns yourself or let the CC do it. Then when you start the bot, it will create two temp in-game macros you can display on your UI:

1. Increase burst level by 1
2. Reset burst level to 0

Giving a small example about this:

When burst=0, the bot will only focus on the main rotation (felhunter, no meta, no trinket, no doomroflguard).
Press the macro button once and you'll switch to burst=1, causing the rotation to implement felguard, trinket and meta.
Press it again and you'll move to burst=2, causing the rotation to still include metamorphis & co, but also pop doomguard.

This could also work for a tanking CC, assuming that the 'burst macro' would become a panic button.
 
So excited about your continued work on this CC. I got tired of being on my rogue and seeing the massive aoe damage demo puts out.
 
Updated to 1.2.1 and added some new rotations (thanks everyone!)

SC.PlayerCountBuff(name): returns player buff stack count (like shadow priest's orbs)
Added bursting logic
Added some more settings
Settings are now saved per character instead of one single file
SC.TargetCountDebuff(name): returns player debuff stack count on target
SC.BurstLevel: returns current burst level (default 0)
SC.CombatTimeElapsed: returns time elapsed since combat started
SC.UseBagItem(name): uses item in player's bags if not on cooldown
SC.UseEngineerGloves: uses engineer's gloves enchant (1min cooldown pseudo trinket)
Fixed SC.PlayerHasBuff when buff has no duration
Fixed facing math bug

AOE behaviors and helpers:
SC.CountEnnemiesInRange(WoWPoint fromLocation, double maxRange): returns number of hostile units in range of given location
SC.GetSpellRadius(name): returns spell's area radius
SC.CastSpellAtLocation: casts a spell at a given location (like hunter's trap throwing)
SC.CastSpellAtTargetLocation: exactly the same as the previous one, but on your current target location.
SC.CastAreaSpell: automatically find packed units and cast an area spell on them. Does nothing if not enough targets
SC.ChannelAreaSpell: same as the previous one, but channels an area spell (like rain of fire)

About burst levels:
- The idea is to split your common rotation and your burst one. It allows the user to pop every cooldown needed on burst phases.
- You can manage burst phases by yourself or let the bot handle your cooldowns on the class settings panel
- If managing them by yourself, you'll find two general in-game macros once you started the bot.
- Macro 'burst more': increase burst level by one
- Macro 'reset burst': reset burst level to 0
- Burst level is automatically reset to 0 after you leave combat
- If the bot is managing your burst level, it will wait 10 seconds after entering combat before bursting.

Example:
I've added the demonology warlock burst sequence in two levels:
burst=1: pop trinkets and short/medium cooldowns
burst=2: pop doomguard (10min cooldown)

Code example:
Code:
return new Sequence(
	//this is the burst phase pre-rotation. Called if and only if SC.BurstLevel > 0
	SC.BurstSequence(
		SC.CastSpell("Doomguard", a => true, "Doomguard - burst!"),
	),

	//and here's our normal rotation, which is always called, even while bursting
	new PrioritySelector(
		SC.CastSpell("Shadow Bolt", a => true, "Shadow Bolt"),
		SC.CastSpell("Fel Flame", a => Me.IsMoving, "Fel flame while moving")
	)
);

Please switch to this thread for comments/questions/etc: http://www.thebuddyforum.com/honorb...ing-cc-lazyraider-combat-bots.html#post344038

The current thread is no more related to this CC.
 
Awesome! Did I read a post that you were going to set up a SVN so we can keep updated easily?
 
Just checking, but you do know that HB has supported the spell queue system for a few releases now yes?

SpellManager.CanCast(WoWSpell spell, WoWUnit target, bool checkRange, bool checkMoving, bool accountForLagTolerance)

By default CanCast will account for lag tolerance (the spell queue system). If its not "responsive" enough, please let me know. It increased my ele shaman DPS from 16k back up to 22-24k (what I can do manually) using Singular's ele shaman code.
 
Yeah Apoc, I saw that. I may be implementing stuff already existing, but at least I know exactly how each of my core functions are working. I can remember some temp bugs related to cooldowns, player items and unit auras in the HB API.

Nothing against your work, I truly admire it... I just want something reliable through HB updates without having to guess how some getter actually works, or how could I design a temp workaround.

I wanted to do a similar project using pure lua rotations (nothing new here) but I guess I'm loving that ObjectManager too much to get rid of it.

I also know that memory reading would be more efficient than talking to the lua engine. I'm fine with the idea of having a greedy CC. I'm aiming at responsiveness, not hardware performance.

Last point, it's a quite fun experiment.
 
As far as how it works;

Code:
            if (accountForLagTolerance && StyxWoW.Me.ChanneledCastingSpellId == 0)
            {
                if (StyxWoW.Me.IsCasting && StyxWoW.Me.CurrentCastTimeLeft.TotalMilliseconds > 500)
                    return false;
            }
            else
            {
                if (StyxWoW.Me.IsCasting)
                    return false;
            }

Basically; if the spell queue is to be used, just make sure there's nothing being channeled, and the time left on the cast is < 500ms (yes, we wrap the API, no, it won't break).

After that check, are movement and CD checks.

Code:
            // This calls a Lua func that checks for all 'required' conditionals. Mana, runes, reactive conditions, etc.
            return !spell.Cooldown && spell.CanCast;

Lastly; WoWSpell already implements your Lua calls, in a much "safer" manner.

Code:
        // BUGFIX: This was using the 'name' of the spell, which is in english. Which causes it to break on non-english clients
        public bool CanCast { get { return Lua.GetReturnVal<bool>("return IsUsableSpell(select(1, GetSpellInfo("+Id+")))", 0); } }

public bool Cooldown { get { return Lua.GetReturnVal<float>(string.Format("return GetSpellCooldown({0})", Id), 1) != 0; } }

As for the aura bugs, its actually next on my todo list of things to fix. That one has some "odd" bugs. (We read the aura tables manually, so we have the exact same info the Lua funcs do, not entirely sure why ours don't update properly.)
 
Thanks for the snippets.

I'm localizing spell/aura names as much as possible (tested on french client with accents). I also fully escape (char to \xxx code) every single localized string before calling them through LUA. The result is really as nice as relying on id's, even though lua strings are getting quite big.
 
Well, do keep in mind that HB has a localized DB for spells. (Any WoWSpell.Name is automatically localized to English, so you really don't need to mess around with it)

Edit; that includes aura/buff/etc names, as they're just spells as well.
 
Just checking, but you do know that HB has supported the spell queue system for a few releases now yes?

SpellManager.CanCast(WoWSpell spell, WoWUnit target, bool checkRange, bool checkMoving, bool accountForLagTolerance)

By default CanCast will account for lag tolerance (the spell queue system). If its not "responsive" enough, please let me know. It increased my ele shaman DPS from 16k back up to 22-24k (what I can do manually) using Singular's ele shaman code.

I must be missing something cause for me singular ele doesn't do any rotation at all in it's current state.... just sets there
 
I'll have to commit the working version. (I only wrote enough to test the spell queue system, but yea, I'll get around to finishing it today at some point)

Also; please stay on topic. Not trying to hijack cowdude's thread here.
 
Last edited:
Great CC, but need update. U must add shadowflame in melee range and add options for manualy use cooldown (doomguard)
 
hello Cowdude ,

i think u can help me , i realy like ur job on rotations , but i have a little problem on Simple Demonology rotation i just tried get off the pet summon but if i delete it dont work, can u make this, no pets, i want to chose one for diferent fights please.
Thanks and congratulations.

Cya
 
hello Cowdude ,

i think u can help me , i realy like ur job on rotations , but i have a little problem on Simple Demonology rotation i just tried get off the pet summon but if i delete it dont work, can u make this, no pets, i want to chose one for diferent fights please.
Thanks and congratulations.

Cya

hey Barga I have not seen Cowdude around in a very long time... maybe someone has a more updated profile for you to use I have no idea. Gl to ya.
 
I'm having massive issues using this on the latest REV, keeps freezing bot and and not attacking, tries to summon pet, even though I have him out.
 

Attachments

I have a question, I have not really dived into CC coding at all so I was wondering. Where would i add in (and how) when my Destro lock casts demon soul he also casts the orc racial and life blood? Thanks in advance.
 
Back
Top