I downloaded SimulationCraft to see what gear is used in the BiS T14H configuration, but I wasn't able to find the exact gear. Since my interface isn't finished yet, I started hardcoding a BiS configuration in my own code, and soon realized that describing gear configurations is kind of a complicated.
I came up with a pretty simple notation to describe gear:
Code: Select all
r = 76692 # Delicate Primordial Ruby: +160 Agility
p = 76680 # Glinting Imperial Amethyst: +80 Agility, +160 Hit
86925 >eh +76884 +p # [509] Eternal Blossom Headpiece (Heroic)
86953 # [509] Choker of the Unleashed Storm (Heroic)
86927 >em +p "Secret Tiger Claw" # [509] Eternal Blossom Spaulders (Heroic)
86963 Swordguard # [509] Legbreaker Greatcloak (Heroic)
86923 "Glorious Stats" # [509] Eternal Blossom Raiment (Heroic)
86995 >eh "Greater Agility" # [509] Smooth Beetle Wristbands (Heroic)
86924 >hm "Super Strength" Springs # [509] Eternal Blossom Grips (Heroic)
87180 >he +rr Socket Frag # [509] Stalker's Cord of Eternal Autumn (Heroic)
90504 +rp Shadowleather # [516] Legguards of Failing Purification (Heroic Elite)
86984 >ec +r Blurred # [509] Treads of Deadly Secretions (Heroic)
90503 >tm # [516] Regail's Band of the Endless (Heroic Elite)
86974 >ec # [509] Painful Thorned Ring (Heroic)
87057 # [502] Bottle of Infinite Stars (Heroic)
87167 # [509] Terror in the Mists (Heroic)
87156 >ec +89873 "Dancing Steel" # [509] Gao-Rei, Staff of the Legendary Protector (Heroic)
Syntax:
Code: Select all
anything after # = comments
>XY = reforge from X to Y (e = exp, c = crit, h = hit, t = haste, etc...)
+key/id = add a gem by define (at top) or inline blizzard item id
any remaining text defines Enchant, Tinker, or Mod (like extra socket)
I produced the reforging using my exhaustive reforger with the following objective/constraints:
Code: Select all
new ReforgeAlgo().atLeast(StatT.HIT, 2540).atLeast(StatT.EXP, 2540).setWeight(StatT.MASTERY, 1.00).setWeight(StatT.CRIT, 0.90).setWeight(StatT.HASTE, 0.80).dontReforge(StatT.MASTERY);
Which produced:
Code: Select all
Critical Strike 4858
Hit 2544
Haste 825
Expertise 2544
Mastery 8239
For some unknown reason, I am about -900 secondary stat different from the "Gear Summary" information at the bottom of Druid_Feral_T14H.simc
My basic cat rotation currently looks the following, which is pretty close, but not yet verbatim to your script, but it's getting there.
Code: Select all
if (cfg.use_hero && HEROISM.clickable() && willExpire(ttl, 60000)) {
HEROISM.click();
}
if (cfg.use_pot && pot_clickable() && (HEROISM.up() || (bitw() && BERSERK.up()) || willExpire(ttl, 45000))) {
pot_click();
berserk_macro();
}
if (bitw() && rip_tick_left > 0 && ripTimeMin() < Math.max(1000, timeToCast(FB))) {
if (combo > 0 && rip_extends == 0) tf_assist(FB);
tf_assist(generator(false));
}
final int sr_time = sr_time();
// thrash on ooc
if (oocKey.exists && (thrash_tick_left < 2)) {
if (sr_time == 0 && !willEnergyCap()) SR.click();
//wantDoC_ns_en(false, 5);
THRASH.click();
}
// free ravage consumes ooc :(
if (can_pvpRavage() && !oocKey.exists) {
RAVAGE.click();
}
// dont waste ps procs outside of berserk
if (spec.talent_doc && cfg.dont_waste_ps && doc_charges < 2 && willExpire(ps_time(), 1000) && berserk_time() == 0) {
HT.click();
}
// tf and berserk
if (TF.clickable() && sr_time > 0 && oocKey.exists ? energy <= 20 : energy + TF_ENERGY <= energyMax) {
tf_macro();
if (BERSERK.clickable() && (ttl > BERSERK_CD + BERSERK_DUR || pot_up())) {
berserk_macro();
}
}
if (willExpire(ttl, BERSERK_DUR) && BERSERK.clickable()) {
berserk_macro();
}
// agressive SR
if (ttl > 3000) {
if (sr_time == 0) {
SR.click();
} else if (sr_time < ttl && sr_time < 4000 && combo > 0 && rip_tick_left >= 2) {
SR.click();
}
}
// normal finisher
if (combo == 5) {
if (rip_tick_left == 0 || (bitw() ? ttl > 20000 && ripTickDmgAvgNew() > cfg.ripClipMultiplier * ripTickDmgAvg : maxRipTicksLeft() <= 4)) {
wantDoC_ns_en(true, -1);
RIP.click();
/*
} else if (!bitw() && maxRipTicksLeft() <= 4) {
// rip clip
if (oocKey.exists) {
THRASH.click();
} else {
RIP.click();
}
*/
} else {
FB.click();
}
}
if (RAKE.clickable()) {
if (rake_tick_left == 0) {
// initial rake
RAKE.click();
} else {
double newDmg = rakeTickDmgAvgNew();
if (newDmg > cfg.rakeClipMultiplier * rakeTickDmgAvg) {
// clip rake
RAKE.click();
} else if (rake_tick_index > 0 && newDmg >= rakeTickDmgAvg && rakeTickDmgAvgFuture(CAT_GCD) < rakeTickDmgAvg) {
// the next rake sux, shit is fading
RAKE.click();
}
}
}
// combo builder
if (combo < 5) {
if (BERSERK.up() && KOTJ.clickable()) {
KOTJ.click(); // fucking gcd
}
generator(cfg.use_rake_as_generator).click();
}
if (spec.talent_hotw && HOTW.clickable() && !BERSERK.up() && hotwLogic != null) {
altGear.equip();
HOTW.click();
top.push(hotwLogic);
}
if (shouldFF()) {
FF.click();
}
I don't know Troll base stats yet, so these numbers are for Night Elf using the gear configuration above, for a 45-55m hp target (~7.2 minute combat time):
Code: Select all
Median = 119082
Mean = 119017 +/- 102
Min = 110224
Max = 128557
Mean Time = 7.2 min +/- 446 ms
I need to track down that 900 secondary different, add more latency emulation, and mirror your action list better.
Edit: some detailed stats from averaging together 10 runs
Code: Select all
Rake Uptime = 92.98%
Rip Uptime = 89.59%
+SR (only Melee) = 99.81% (4769 of 4778)
+SR (except Melee) = 98.77% (6097 of 6173)
+DoC (only Rip Ticks) = 63.04% (1211 of 1921)
+DoC (only Rake Ticks) = 72.75% (964 of 1325)
Name Count Hit Crit Crit% Overall
Rip`5# 1921 43037 88999 40.81% [ 23.73%]
Melee 4778 13928 32927 40.12% [ 20.58%]
Rake# 1325 50514 106676 39.47% [ 19.25%]
Shred 1185 54262 110229 38.82% [ 18.00%]
FB`5 193 79532 175670 68.91% [ 5.62%]
Rake 374 47712 101611 40.91% [ 5.21%]
Thrash# 793 22828 47759 39.47% [ 5.18%]
Thrash 166 31755 66912 36.75% [ 1.48%]
Cobalt Frag Bomb 76 31539 65162 11.84% [ 0.54%]
Ravage 10 102571 188249 90.00% [ 0.36%]
FB`4 2 0 79065 100.00% [ 0.03%]
FB`3 1 0 59525 100.00% [ 0.01%]
FB`1 1 0 23018 100.00% [ 0.00%]
Rip`5 126 0 0 0.00% [ 0.00%] // rip application
Dancing Steel PPM 107 30.555%
Swordguard ICD 79 27.637%
Bottle of Infinite Stars ICD 89 42.333%
Terror in the Mists ICD 40 19.244%
Waiting 2.4m [ 34.32%] 0
Shred 2.0m [ 29.35%] 122 1.0s
HT 49s [ 11.80%] 35 1.4s
Rake 34s [ 8.18%] 34 1.0s
FB 21s [ 5.05%] 21 1.0s
SR 18s [ 4.33%] 18 1.0s
Thrash 16s [ 3.85%] 16 1.0s
Rip 12s [ 2.89%] 12 1.0s
Ravage 1.0s [ 0.24%] 1 1.0s
Edit 2: this is DoC, open with Ravage, pre pot/SR/2xDoC, all raid buffs, 300 agi food, 1000 agi flask, heroism, but no symbosis/stormlash/skull banner/etc...
Edit 3: textual dump:
http://raffy.antistupid.com/wow/catsim/Dump4.txt