Sign in to follow this  
Followers 0
zagtastic

Enh -- Maximizing Shock DPS (WA Tracker)

12 posts in this topic

hey all.  i created an account here to share a WeakAuras custom group with you.  the purpose of this group is to track relative Flame Shock strengths and help the player maximize both FS and ES damage.

 

it does this by showing at any given time whether it is ideal to use Flame Shock or Earth Shock, and -- additionally -- how strong an FS cast at that moment would be in comparison to any existing FS.  this allows the user to intelligently determine when to refresh FS (which may be beneficial even without unleash flame buff), calculates when letting FS fall off is worth it, and generally facilitates more ES usage than the commonly used priority rules.  my expectation is that using this to determine whether to cast FS (or ES, if you make it that far down your priority queue) will at least marginally improve nearly any enh shammy's dps.

 

what it won't do:  1) improve your FS uptime, 2) tell you when to forego or delay casting a shock (i recommend separate trackers for UE CD, Unleash Flame buff, and current FS duration), 3) inform regarding any other skills or where in your priority to use shocks.  it is ENTIRELY answering the questions: "if i'm going to shock now, which should i use?" and "if i were to cast FS now, how strong would it be compared to my current FS"?

 

functionally, there are 4 states:

-- shocks on CD, nothing shows

-- should use flame shock, UF active, saturated FS icon with colored text showing the % power vs existing FS

-- should use flame shock, NO UF active, desaturated FS icon with colored text showing the % power vs existing FS.

-- should use earth shock, ES icon with colored text showing the % power of a new FS vs existing FS

 

note that these values can change extremely rapidly, as buffs, procs, etc are acquired or expire.

 

"power" is determined by checking SP, spell crit, spell haste (an additional tick at every x5%), mastery, UF buff, and any static (all) damage multipliers.  see below for specific logic and code snippets.

 

here is the WeakAuras import string:

dqfL9aGirWLGsPpjIsJsLQtbfwLiQ6vkvkZsjPBjcTlLkPFrrPmmk0XOkwgfvpJsQPjICnkjBtQKVPKQXPuX5OaENiQyEuuc3dISpruCqOOfsb9qPsnrPIUiLWgPiFekfJeIsNKIIvksVuPsLMPsIBsjQDQu(juQgQuHLsjYtbnviCvkqBLIs1xHOYzvQu1APOe1BPOKAUqu1DPOKSxH)sPgm5WuzXQuEmqtwQ6Ys2Ss8zOQrRsonGvtrjYRPknBvCBQQDROFlQHdvoUiQKLlLNRW0v11H02vs57kvz8kv15HswVsL49kvQy(quCFruP2p6WtGiGUar8bCeqZ3vJ7Qvb0pG9bSpqeW9X(YYO(yZkJbSv4bYteyHRcypwtNpai(wgfxaXc7llJ6JTe9yLvbCGZbwXMXaw7JZn7R(4waVLB9vd7llJ6JnJbeOpGWRmO3ra3dO)VITKmgWjQpIgaE8vBeBEc4vbG)6dtjzLvgnMK1wzEsD1LhZtANyjXKSkGJ6S0rgy(beb27iGNSRpqeWw(ubIa6JEEGar8XhF8bemqeBEcebeDun79dtjA16DLuxEm2LhRsYJXU2zNyjrR2jG9adChhwiQ9)agWLCRW3YOZ(UZNClqeBEInpXM5HP1nGhZn3yxjzmjpDLuxwVESKOvRhBwhMw3aEm3CJDLKXK80vsDz96XsIwTESLuS5j(a2xd3J2CFzOd0l(wgD2h3c4W5xiQ9F0wf3c4nhOx8Tm6SV78j3ceXMNW06wN06gtANDmA9oDTUNUSows0QUInZdtRBDsRBmPD2XO17016E6Y6yjrR6k2SomTU1jTUXK2zhJwVtxR7PlRJLeTQRylPyZt8b8R9)UZNClqeBEInpXM5XMNyZ6yZtSLuS5j(aoQZshzG5hWUTydHfwkGFdap(Qfic4JfUkGGOJp7hqq0XN9TFSWvbSwRMFabrhF23(cOVcii64Z(beDwRvZpGo0phWATA(Ja2n2TSHyIWEfSJn2wy2TydHTb3mzMvqyHLSOZv7yfm39wyjBlzb2yXMTfByA4kw05QDScM7ElSKTfBiSWsMzdBSroSBPv6C1owbZDVfwYgZvmJz3IacIo(SFaxqNGpqEsDVwRM)Qu76UURyWukkkkthNFbVYGEThD68D4lkKOmDC(f8kd61E0PZ3HVOYnQDNKBMsrrrXukkkkGfQATA(uiHevcDJDlBiMiSxb7yJTfMDl2qyBWntMzfewyjl6mbQ)QMmLIIIIIII6KbDhk7vPW5Ao)vPSxLAKrBG1Qu2RszVkL9Qu914bMUhipxLYEvk7vPSxLAGRohkKO21DDxzkfffffffftPOOOOOOOsmrQX0HBCLFQ8KAGRohq34zkffffffffWc1iJ2alkKqIYGtGhBmOz68Ec4ooSQwcyq5M9u4CnNpfsirLaSdlwzf7UXeIWgAWU72cimbQ)QMmLIIIIIIIIIIIcyHAGRohkKqIAhJwzK6VQjtPOOOOOOOOOOOOOOOqomTbDhq47(HDnVUJbtPOOOOOOOOOOOOOOOmDC(f8kd61E0PZ3HVSbDJNcjkKdt7X7(HTPJZVGxzqVD68zkfffffffffffvn7zkfffffffffffftPOOOOOOOOOOOsmrQBOpvEEWIQvG5wp1FvuJPd34k)ualuap1afeSgJf0ZblkhoChGQNPuuuuuuuu1zualuJmAdSOqcjkdobESXGMPZ7jG74WQAjGbLB2tDhNR58PqcjQeGDyXkRyJPbTeM2y2rhRygl6mbQCJcNR58PqcjQeGDyXkRyJPbTeM2wYctwYciYMagu)vnzkffffffffffffWc1axDouiHe1ogTYi1FvtMsrrrrrrrrrrrrrrrbSqnZpLPJZVGxzqV2JoD(o8LnOB8u)vnzkffffffffffffffffffffYHPnO7acF3pSR51DmykfffffffffffffffffffLPJZVGxzqV2JoD(o8LnOB8uirHCyApE3pSnDC(f8kd6TtNptPOOOOOOOOOOOOOOOQzptPOOOOOOOOOOOOOOOykfffffffffffffffLPJZVGxzqV2JoD(o8LzDFnEGP7bYtZkkKOmDC(f8kd61E0PZ3HVSbDJNPuuuuuuuuuuuu1SNPuuuuuuuu1SNPuuuuuuuumLIIIIIIIkXePapLBsHIJkJ(u5fkWS)n3ZukkkQ6mkGfQ7Z8tzWjWJ5Ysb(at8DN9V5(7jG74WQAjGbguUzp19z(Pm4e4XgdAMoVNWT8y4jbmWG6VQjtPOOOOOOOmDC(f8kd61E0PZ3HVOqIA3j5MPuuuu1SNP1SpGGxfO3awRvZpGOJYgDc8HHXhqWwgN9(HPDmFNU6YCZnG5RVJNK6YQUILeTkPaEYU(ararhL9SwRAXTa(Utn)yZZ6be84gJarahat8NkGqKftlJ5w8bCGRadebCamXFQyZ8a6JEEGarS5jmm2mpmm(4di6OSbpUXimmGOJY(DNA(XTaIok7PZVIBbeDu27sEwXTaoD(vadi6OSh4kWWWaIokBWS)n3hggq0rz3dSSaaIEESIBbSLpvGiG(ONhiqeF8XhWXda6fRorBUhipJBbShya2QVSB539a5zSzmGl55hqmbbb6R57ouD0QbqFnbXkG91W9On3xMYTcFlJo7JBbeyUw1gvClGxfa(RpmzaJgx3Jb6YQ1nA9oDLK1MhljAL1bSLF3xHHbeSLXzJvSzmGl55db2Lk22jG9adChhwW3b6DeqSDeWLCRW3YOZEe1(pARcOzMF1wCGfYJzFp2NdKh5kNxmrBUbYB5QhWH8iQ9F0wnqEyYfQRv2i3fWxbCP58l43CVl2SkG(aTwUf3ci6OA2yfBgdyRWdKNiWcxfWV2)dORVh4bYt3X(Ba4XxTrGi(aE7uZElN7RaA4kwS1za7RH7rBUVIBb0H(5WWacaMNHHb8R9F0wfqZm)QT4alKhZ(ESphipYvoVyI2CdK3YvpGd5ru7)OTAG8WKluxRSrUlGVSnm36RwahVd07O788Dat)A(b0mBqZ0PfbCxYz)yZyabZ(4A1ye3ciqFaTyErbNoCJR8tTsgpayaV5a9IVLrN9iQ9F0wfqZm)QT4alKhZ(ESphipYvoVyI2CdK3YvpGd5ru7)OTAG8WKluxRSrUlGVSnm36RwaDhCxUyZta3dO)VctgWOX19yGUSADJwVtxjzT5XsIwzDarNFdap(Qficii64Z(bm(a2YV7bYZyZyaNO(iAa4XxTrS5jG5gqnF3dKNbezXULmJzzSVHaZvcypWa3XHLzaZZaAM5xTfhyH8MbmphiFahVd07OJmW8dOHyhbcSBzlzgSbzreWBoqV4Bz0zp2xwg1hBMhFSzEGiGFT)B64Wpc4wEwbC8oqVdiWUuXMhRd44DGEhMoo8JaULNvaVLB9vR78j3ceXMNyZtSzES5j2So28eBjfBEIpGT87(crT)hWnSVzraV5a9IVLrN9DNp5wGi28eMw36Kw3ys7SJrR3PR190L1XsIwzvSzEyADRtADJjTZogTENUw3txwhljALvXM1HP1ToP1nM0o7y06D6ADpDzDSKOvwfBjfBEIpGOJcroFEaCXTaoQZshzG5hWUTydHfwkG3CTUZNClqeBEctDzUNUw3AR7YO1MVU5M7XQyjrRsk2mpmz16MBU5MBCDJwB0JhdyEsXsIwLuSzDyQR1tQlR6ANDSYARSYJrd0vSKOvwhBjfBEIpG91W9On3xXTaIRLX3QXOJwbcmaYZyZtaxYZpGyccc0xZ3DO6OvdG(AcIvapzxFGiGOJYEwRvT4waF3PMFS5z9acECJrGiGdGj(tfqiYIPLXCl(aoWvGbIaoaM4pvSzEa9rppqGi28eggBMhggF8beDu2Gh3yeggq0rz)Utn)4warhL905xXTa2YNkqeqF0ZdeiIp(aoD(vadi6OSh4kWWWaIokBWS)n3hggq0rz3dSSaaIEESIBbeDu27sEwXTaoa2LkqeqF0Zdeiciox7XkmmGFnddd4VxnFSwawRcddORvtxyyaXTgUWW4Jp(a(a(vR78j3ceXMNyZtSzES5j2So28eBjfBEIpGTcpqEIalCva)A)pGJ3b6De3c4x7)OTkGlvZCRc4x7)MYZpGwgtlT7AXwahVd07WuE(b0c)BNYpGo0phggWhWVAMYZpGwgtlT7AXwaDhCxUyZtaVLB9vZmZr9XMNa2dmWDCyzgW8mGMz(vBXbwiVzaZZbYJ5nGdWJLDNnuGEBdR2OAEd4x7)DNp5wGi28eBEInZJnpXM1XMNylPyZt8b8wU1xndDGE7BzCbClpRacIo(SpIA)pGlOtWhipVJbtPOOOawOqomTbDhq47(HDnVO(RAsHCyAd6oGW39d7AEDhdQA2ZukkkQw9OTjvcjW0A2ZuMYuMY0aEZ1mZ0ulp)4wa7bg4ooSqu7)RulFa7SvoFQ8cv3101aqhuM1y7WSkGFdap(QficOd9ZGN8SIBbCGRohZ0hqpg3X6D8eqq0XN9TVa6RacIo(SFaNo)YoJRAUp3cisifq0zTwn)a6q)CabrhF23(XcxfWX7E0rabZOZh74QM7ZTasKbPawRvZpGDF5EklxJHdFfqWm68dOXa(yHRcii64Z(beDu2dC15yM(WWawRvZFeWowbZDVfwY2InewyjZSHn2ih2T0kDUkMDJWmMDlSrG5kwSHWgBSe2nyh2DJSyUHnw05QDScM7ElSKTLSaBSyZUtZaX0WvSOZacIo(SFaxqNGpqEEhdMsrrr1Dd47057Wxwg98uirz(UA0AQetKY1BwcD8ul5gfyd4P6D(o8fLF9oMsrrrXukkkkGfQz(PqomTbDhq47(HDnVO(RAYukkkkkkkQf0j4dKNuihM2GUdi8D)WUMx3XGPuuuuuuuuuuuujMifO7aIECFrb7G6ExwHTu5fkm7adMsrrrrrrrrrrrDYGUdfMDyOBuRsHzhDKhRsHzhBfEkKOm4e4X8FhO3oY7vT7jG74WQAjGbtPOOOOOOOOOOOozq3Hc2bfsu3XSddDJIA3OWSJoYdQDJcZo2k8yqL8u39y0iLzJQlRWGPuuuuuuuuuuuumLIIIIIIIIIIIkXePaDhq0J7lkF34RgwmLIIIIIIIIIII6KbDhkl7gF1WIcjQ7EO2nkSPEl7gF1WYILLc8VJbguMnkpgnYukkkkkkkkkkkkMsrrrrrrrrrrrLyIuGUdi6X9f1LB8ftPOOOOOOOOOOOozq3HczDJVOqI6UhQDJYGtGhIRohK1n(6Ec4ooSQwcyGbLzJYJrJmLIIIIIIIIIIIIPuuuuuuuuuuuujMifO7aIECFrb2aEQAzPaFQ7OdGjEQUBaFNoFh(YYONNQVwaMvpL7wETIPuuuuuuuuuuuuNmO7q1XXHv1wPwRoRsHW1Wx)k1A1Hcjkdob(vQ1QZ9eWDCyvTeWyvkdob(vQ1QZ9eExdF9jGbtPOOOOOOOOOOOozq3HQ7gW39LBcwmLIIIIIIIIIIIIPuuuuuuuuuuuualuiCn81VsTwDOqcjQe9q9x1KPuuuuuuuuuuuuuuuuD3a(UVCtWIcjQ7yt9qC150Dd47(YnbR7wJrIwJHzZJrJmLIIIIIIIIIIIQoJIPuuuuuuuuuuuuuuuuD3a(UVCtWIcjQ7yt9qC150Dd47(YnbR7wJrI(U9VJW1Wx)k1A1jXoooSQ2k1A1zvJyGHzZJrJmLIIIIIIIIIIIQM9mLIIIIIIIIIII6KbDhQUBaVfllwg98uirr5HA3OU3Dd47057Wxwg98j6bJKV7gW39LBcwmLIIIIIIIIIIIIPuuuuuuuuuuuujMifO7aIECFrH)KV5ou9oFh(IYh98a4oavBvkGj4bThyINYGZt5gxuMoo)I6g6YctPOOOOOOOOOOOozq3HQtNVdFzz0ZtHe1Oof4FF9vPm4e47057Wx3ta3XHv1sadmykfffffffffff1jd6oug0Kz6KcjQrDkW)UhpRszWjWJjAZDpbChhwvlHvPsWGZt5gxuMoo)kbmWGPuuuuuuuuuuuualug0Kz6KcjKOw36U2XAQ)QMmLIIIIIIIIIIIIIIIQtNVdFzz0ZtHevNoFh(YYONNk5P8SRwZukkkkkkkkkkkQA2ZukkkkkkkkkkkkMsrrrrrrrrrrrHCyApE3pSnDC(f8kd6TtNpfsu3n3aEmsTBu3nFx9qL8uWoWaJK3YUXxnSsEK1n(k57Ub8wSSyz0ZN8D68D4llJEEMsrrrrrrrvZEMsrrrvZEMsrrrXukkkkKdtBq3be(UFyxZR7yWukkkkMsrrr1QhTnP(gAX0A2hqWRc0BarX17(kGOJYgDc8HHXhWV2)ddd44ba9IvNOn3dKNXTa(a(vlmmGpGF1mDC4hbClpRaEZb6TVLX1D(KBbIyZtSzm2mp2mgBwhBgJTKInpXhWL88Ha7sfB7eWB5wF1cdd4TCRVAw0JVc4s1mAGaEl36RgeyxQyZJNacaMN2dG(kGRyHjeb8wU1xnSVSmQp2mpGFT)db2Lk22jGxfa(RpmzaJgx3Jb6YQ1nA9oDLK1MhljAL1bC8oqVJUZNClqeBEInpXM5XMNyZ6yZtSLuS5j(a2dmWDCyHO2)Tea(RpGylUa2dmWDCyHO2)di2cgqxFpWdKNUJ93aWJVAJar8b0Se64bwWkGDBXgclSuaxAo)c(n37InRc4Ea9)vyYagn2vxRVEsE6YCpjzL57eljAL1beyUw1gvClGtuFena84R2i28eWhWVAqGDPITDcyUbuZ39a5zarwSBjZywg7BiWCLacaMNHHbeOpGwmVOGV7PwjJham(yZ6arabrhF2hrT)hWf0j4dKN3XGPuuuualuMoo)cELb9AJlVx1OCZEkthNFbVYGETXL3RAujdLrQ)QMmLIIIIIIIcyHY0X5xWRmOxBC59QgvYGeLhpgP(RAYukkkkkkkkkkkQw9OTj1sU57(7jGmGMmz0OjtgnIT9itlHvPmDC(f8kd61gxEVQHbtPOOOOOOOQZOawOmDC(f8kd61gxEVQrzwGeLbms9x1KPuuuuuuuuuuuuT6rBtQLCZ393tazanzYKjJgnAeB7rMwcRsz648l4vg0RnU8EvddMsrrrrrrrvNrXukkkkkkkkkkkQw9OTj1sU57(7jGmGMmzadyadyadGT9itlHvPmDC(f8kd61gxEVQHbtPOOOOOOOQzpfffffffftPOOOQZOykfffffffvRE02Kkzn7jltPOOOQzptRzFaXc7llJ6JTe9SUvbeDuiY5ZdGlmmGFdap(Qficii64Z(2xa9vaFa)QpGpw4QaoE3Joc4axDoBo)k22XOvgdi6OSBLVdycmXhggq0rzdmxRAJkmmG1A18dy358PpV3KQJwgFRgdQ7qC15GrarhL9axDoBo)kmmGTY3bmbM4dOXa2kFhWeyI3oJRAUp3cyYeq0rzJob(WWaIoR1Q5hqh6NJpGl55hqmbbb6R57ouD0QbqFnbXkGxfa(Rp2sYyapzxFGiGOJYg84gJWWa2YNkqeqF0ZdeiIp(aIok7bUcmmmGOJYgm7FZ9HHbCGRadebCamXFQyZ8a6JEEGarSzEyy8XhqWJBmcebCamXFQacrwmTmMBXhFaxYZhcSlvSzUXa2dmWDCybFhO3raXwWa2k8a5jcSWvbeampdiqFanDC(ff8kd6nGJha0lwDI2CpqEgggW9a6)RyljJbCFSVSmQp2SYyaNO(iAa4XxTrSzDarNFdap(Qfic4axDoBo)k22XOvgJpGU(EGhipDh7VbGhF1gbIyZtGiGFdap(Qfic4JfUkGo0MlGd0B1A18HOlla7hq7UXeIWgIatlHiG1A18diYwUZFfWPZVgbIyZtan48uUXfLPJZVIpGGz05hqRciygD(yhx1CFUfWKjGOtGpG4ooSQwahO3Q1Q53rRwa2pGWoSyLvcyFDdDzbbw4QaISwSshMm4kXhq053aWJVAbI4Jp2mpqeWVbGhF1cebCGERwRMFhTAby)ac7WIvwjGpw4QacIo(SFabrhF2pGlOtWhipPUJbtPOOOqhLTPJZVGxzqV23Y5dfsu3rhLTPJZVGxzqV23Y5dfrgKOMahmOYnk0rzB648l4vg0R9TC(KCykfffLPJZVGxzqV24Y7vnkKOmDC(f8kd61gxEVQrLBugzkfffftPOOOozq3HA548RXvg0RnypfsuDXukkkQtg0DOEa)Y(g6Ys1OqIYCMsrrrXukkkQtg0DOSx1Ev7vTx1Ev7vxoo)ACLb9A3J2wf0n(QzJobEkKOm4e47SUHUSCpzFxdF9j7QujRPJZVOGxzqVjlgmLIIIcyHA548RXvg0RDpAJYn7PaDJVA2OtGNcjKOswChhwvlzP(RAYukkkkkkkkMsrrrrrrrLyIuGUXtTCC(f14kd6LcyHc4t2bLhJy7Urn(wEIVAu)LBsbI2A18Pmb3vMsrrrrrrrz648l4vg0R9OtNVdFrHeLPJZVGxzqV2JoD(o8fvUrT7KCZukkkkkkkkMsrrrrrrrbSqz648l4vg0R9OtNVdFzwBWjWJng0mDEpH31WxFcyywr9x1KPuuuuuuuuuuuuMoo)cELb9AJlVx1OqI6oYHP94D)W20X5xWRmO3oD(uMnkthNFbVYGEThD68D4lZAdobESXGMPZ7j8Ug(6tadZkmOsEkpgnYukkkkkkkQA2tXukkkkkkkkMsrrrrrrrDYGUdLbnzMoPqIAuNc8V7XZQugCc8yI2C3ta3XHv1syvQem48uUXfLPJZVsadmykffffffffWcLbnzMoPqcjQ1TURDSM6VQjtPOOOOOOOOOOOawOmDC(f8kd61gxEVQrLmir5XOrQ)QMmLIIIIIIIIIIIIIIIcDu2Moo)cELb9AFlNpuir9n0IPuuuuuuuuuuuuuuuuT6rBtQVHwmLIIIIIIIIIIIQM9mLIIIIIIIQoJIPuuuuuuuuuuuualuMoo)cELb9AJlVx1OsgKO84Xi1FvtMsrrrrrrrrrrrrrrrHokBthNFbVYGETVLZhkKO(gAXukkkkkkkkkkkkkkkQw9OTj13qlMsrrrrrrrrrrrvZEMsrrrrrrrvZEMsrrrrrrrXukkkkkkkQtg0DOEkKOWM6ra4x3XGPuuuuuuuulhNFnUYGET7rBuirTCC(14kd61UhTrLi1ZukkkkkkkkMsrrrrrrrDYGUdfAzd2tHeLrMsrrrrrrrDYGUd14DTFvQE0M7bYtkKOWM6H4QZP7C(0N3BEFDR7AhJyWukkkkkkkkMsrrrrrrrbSqnEx7PsgkJu)vnzkffffffffffffAzd2tHe19X7Ap1Ur1J2CpqEsLi1JbtPOOOOOOOQzptPOOOOOOOykfffffffvIjsb6gp1YX5xuJRmOxkGfQ(6g6Yc1EaNdvTpoGwrT3fWPOmOfuadQ8KQ7oxL6MBu9u5jfU8EvJPuuuuuuuualulhNFnUYGET7rBuMfirDhTSb7P2nQ7pGFzFdDzPAujpL5yGb1FvtMsrrrrrrrrrrrbSqz648l4vg0RnU8EvJkzqIYhysD3awTk19LJZVgxzqV29OnkZg1D0YgSNA3OU)a(L9n0LLQrL8uMJbgujpLhJgPWaJ)QMmLIIIIIIIIIIIIIIIcDu2Moo)cELb9AFlNpuir9n0IPuuuuuuuuuuuuuuuuT6rBtQVHwmLIIIIIIIIIIIQM9mLIIIIIIIQM9umLIIIIIIIIPuuuuuuuujMifOB8ulhNFrnUYGEPawO6RBOllu7bCou1(4aAf1ExaNIACLb9oOCTIkpP6UZvPU5gvpvEsHlVx1ykffffffffWc1YX5xJRmOx7E0gLzbsu3xoo)ACLb9Ad2tTBupGFzFdDzPAyq9x1KPuuuuuuuuuuuualuMoo)cELb9AJlVx1OsgKO8bMu3PmGvRsDF548RXvg0RDpAJYSrDF548RXvg0Rnyp1Ur9a(L9n0LLQHbvYt5XOrkmW4VQjtPOOOOOOOOOOOOOOOqhLTPJZVGxzqV23Y5dfsuFdTykfffffffffffffffvRE02K6BOftPOOOOOOOOOOOQzptPOOOOOOOQzpfffffffffffftPOOOQZOykfffffffftPOOOOOOOsmrkq34Pwoo)IACLb9sbSqb8j7GAMFkq0wRM)blQ8K6Dn81ZukkkkkkkkthNFbVYGETXL3RAuirzm5Wukkkkkkkk0rzB648l4vg0R9TC(qHe13qlMsrrrrrrr1QhTnP(gAXukkkQA2ZukkkkMsrrrHokBthNFbVYGETVLZhkKOwCNrXukkkQw9OTj1I7mkMwZ(aoqVvRvZhIUSaSFaT7gticBicmTeIacEvGEdikUE3xbeeD8zF7hlCvahV7rhbSwRMFar2YD(RacIo(SV9fqFfWhWV6JpGOZVbGhF1cebeeD8z)aUGobFG8K6ogmLIIIQvpABsnZpf6OSnDC(f8kd61(woFsomTM9XhF8bC8oqVJoYaZpGgIDeiWULJp2skqeqq0XN9ru7)bCbDc(a55DmykffffWcLPJZVGxzqV24Y7vnk3SNY0X5xWRmOxBC59QgvYqzK6VQjtPOOOOOOOawOmDC(f8kd61gxEVQrLmir5XJrQ)QMmLIIIIIIIIIIIQvpABsTKB(U)EcidOjtgnAYKrJyBpY0syvkthNFbVYGETXL3RAyWukkkkkkkQ6mkGfkthNFbVYGETXL3RAuMfirzaJu)vnzkfffffffffffvRE02KAj38D)9eqgqtMmzYOrJgX2EKPLWQuMoo)cELb9AJlVx1WGPuuuuuuuu1zumLIIIIIIIIIIIQvpABsTKB(U)EcidOjtgWagWagWayBpY0syvkthNFbVYGETXL3RAyWukkkkkkkQA2trrrrrrrXukkkQ6mkMsrrrrrrr1QhTnPswZEYYukkkQA2Z0A2hqSW(YYO(ylrpRBvarhfIC(8a4cdd43aWJVAbIa(yHRc44Dp6iGOJYgyUw1gvyyaR1Q5hWUZ5tFEVjvhTm(wngu3H4QZbJaIoR1Q5hqh6NdyR8DatGj(aAmGOJYgDc8HHbSv(oGjWeVDgx1CFUfWKjGOJYEGRoNnNFfggq0rz3kFhWeyIpmmGdC15S58RyBhJwzmGGOJp7BFb0xb8b8R(4dyFnCpAZ9vyyaxYZpGyccc0xZ3DO6OvdG(AcIvaVka8xFSLKXaEYU(ararhLn4XngHHbSLpvGiG(ONhiqeF8beDu2dCfyyyah4kWarahat8Nk2mpG(ONhiqeBMhggF8beDu2Gz)BUpmmGGh3yeic4ayI)ubeISyAzm3Ip(aUKNpeyxQyZCJbShyG74Wc(oqVJaITGbSv4bYteyHRciayEgqG(aA648lk4vg0lL5b013d8a5P7y)na84R2iqeBEceb8Ba4XxTarahO3Q1Q53rRwa2pGWoSyLvc4JfUkGo0MlGaZ1Q2Ocdd4a9wTwnFi6YcW(b0UBmHiSHiW0sici6e4diUJdRQfWPZVgbIyZtan48uUXfLPJZVIpG1A18diYwUZFfW(6g6YccSWvbezTyLomzWvIpGOZVbGhF1ceXhFSzEGiGFdap(Qfic4JfUkGGOJp7hqq0XN9d4c6e8bYtQ7yWukkkQw9OTjf6OSnDC(f8kd61(woFsomTM9bCGERwRMpeDzby)aA3nMqe2qeyAjebe8Qa9gquC9UVcii64Z(2pw4QaoE3JocyTwn)aISL78xbCGERwRMFhTAby)ac7WIvwj(aIo)gaE8vlqeqq0XN9d4c6e8bYtQ7yWukkkQw9OTj1m)uOJY20X5xWRmOx7B58j5W0A2hF8XhWXda6fRorBUhipddd4Ea9)vSLKXaIo)gaE8vlqeWbU6C2C(vSTJrRmgFaNO(iAa4XxTrSzDa3h7llJ6JnRmgWX7a9o6idm)aAi2rGa7wo(yZQarabrhF2hrT)hWf0j4dKN3XGPuuuualuMoo)cELb9AJlVx1OCZEkthNFbVYGETXL3RAujdLrQ)QMmLIIIIIIIcyHY0X5xWRmOxBC59QgvYGeLhpgP(RAYukkkkkkkkkkkQw9OTj1sU57(7jGmGMmz0OjtgnIT9itlHvPmDC(f8kd61gxEVQHbtPOOOOOOOQZOawOmDC(f8kd61gxEVQrzwGeLbms9x1KPuuuuuuuuuuuuT6rBtQLCZ393tazanzYKjJgnAeB7rMwcRsz648l4vg0RnU8EvddMsrrrrrrrvNrXukkkkkkkkkkkQw9OTj1sU57(7jGmGMmzadyadyadGT9itlHvPmDC(f8kd61gxEVQHbtPOOOOOOOQzpfffffffftPOOOQZOykfffffffvRE02KkzhjA2twMsrrrvZEMwZEMYuMY0aIf2xwg1hBj6zDRci6OqKZNhaxyya)gaE8vlqeWhlCvahV7rhbeDu2aZ1Q2OcddyTwn)a2DoF6Z7nP6OLX3QXG6oexDoyeq0zTwn)a6q)CaBLVdycmXhqJbeDu2OtGpmmGTY3bmbM4TZ4QM7ZTaMmbeDu2dC15S58RWWaIok7w57aMat8HHbCGRoNnNFfB7ymjZdii64Z(2xa9vaFa)Qp(aoEaqVy1jAZ9a5zyyaxYZpGyccc0xZ3DO6OvdG(AcIvaVka8xFSLKXaEYU(ararhLn4XngHHbSLpvGiG(ONhiqeF8beDu2dCfyyyah4kWarahat8Nk2mpG(ONhiqeBMhggF8beDu2Gz)BUpmmGGh3yeic4ayI)ubeISyAzm3Ip(aUKNpeyxQyZCJbShyG74Wc(oqVJaITGbSv4bYteyHRciayEgqG(aAHR9xuWRmO3aIo)gaE8vlqeWbU6C2C(vSTJXKmp(aUhq)FfBjzmG7J9LLr9XMvgdORVh4bYt3X(Ba4XxTrGi28eic43aWJVAbIa(yHRcii64Z(beeD8z)aUGobFG8K6ogmLIIIQvpABsnZpf6OSnDC(f8kd61(woFsomTM9mLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLIIIIPuuuumLPbCGERwRMpeDzby)aA3nMqe2qeyAjebe8Qa9gquC9UVcii64Z(2pw4QaoE3JocyTwn)aISL78xbCGERwRMFhTAby)ac7WIvwj(aIo)gaE8vlqeqq0XN9d4c6e8bYtQ7yWukkkQw9OTjf6OSnDC(f8kd61(woFsomTM9XhF8bCI6JObGhF1gXM5bC8oqVJoYaZpGgIDeiWULJp(aUwS5jjpgJpc

 

whether you should FS or ES is determined by a simple system, if any of the following are true FS, otherwise ES:

1) FS is not currently on the target

2) UF is active and refreshing FS would be at 100%+ of existing FS

3) UF is NOT active and FS would be at 110%+ power of existing FS

4) current FS will expire during Shock CD period, and the new FS power ratio is greater than the ratio of current FS duration to expected downtime.

5) current FS will expire during UE CD, and the new FS power ratio is greater than the ratio of current FS duration to expected downtime.

 

however, while i am a software engineer and original vanilla WoW player, i am new to LUA, WeakAuras, the Shaman class, and dynamic math theorycrafting.  i would appreciate testing and feedback, as well as a review of the key lua bits and the assumptions that i have made.  below are code snippets.

 

damage/power code:

function()
    CritDamageMult = 2.03 -- adjust for crit damage meta
    
    if not WA_calcStats_enh then
        function WA_calcStats_enh()
            -- calculate SP (65% of AP)
            local APBase, APPos, APNeg = UnitAttackPower("player")
            local SP = (APBase + APPos + APNeg) * (100 / 65)
            
            -- calculate mastery
            local Mastery = 1 + GetMasteryEffect() / 100
            
            -- calculate haste
            local Haste = (1 + UnitSpellHaste("player")) / 100
            
            -- calculate crit effect (using CritDamageMult defined above
            local PlayerLevel, TargetLevel = UnitLevel("player"), UnitLevel("target")
            local CritChance
            
            if TargetLevel == -1 then
                CritChance = (GetSpellCritChance(3)-3)/100
            else
                CritChance = (GetSpellCritChance(3)-max(TargetLevel-PlayerLevel,0))/100
            end
            local CritEffMult =  1 + (CritDamageMult-1)*CritChance
            
            -- calculate global damage multiplier, including Unleash Flame buff
            local DamageMult = select(7, UnitDamage("player"))
            local UFID = select(11, UnitAura("player", "Unleash Flame"))
            if UFID == 73683 then
                DamageMult = DamageMult * 1.3
            end
            
            WA_stats_FlameShockDam = (2910 + (2.1 * SP))*Mastery*Haste*CritEffMult*DamageMult
        end
    end

 

use FS or ES code:

    use_FlameShock_bool = (use_FlameShock_bool ~= nil) or use_FlameShock_bool;
    FlameShock_power = FlameShock_power or 0
    
    local flameshock_cd = 6
    local time_buffer = 2
    
    local _,_,_,_,_,_,flameshock_dur,caster_unit = UnitDebuff('target', 'Flame Shock')
    if flameshock_dur and caster_unit == 'player' then
        
        -- cast flame shock if it's 10%+ stronger than current FS.
        FlameShock_sDamage = FlameShock_sDamage or {}
        
        if FlameShock_sDamage[unitGUID("target")] then
            FlameShock_power = (WA_stats_FlameShockDam / FlameShock_sDamage[unitGUID("target")]) * 100
        end 
        
        local UFID = select(11, UnitAura("player", "Unleash Flame"))
        if UFID == 73683 then
            if FlameShock_power >= 100 then
                use_FlameShock_bool = true
                return true
            end
        else
            if FlameShock_power >= 110 then
                use_FlameShock_bool = true
                return true
            end
        end
        
        local t = GetTime()
        flameshock_dur = flameshock_dur - t
        
        local ue_cd = 0
        local start, duration = GetSpellCooldown(73680)
        
        if start > 0 then
            ue_cd = (start + duration - t)
        end
        
        -- cast flame shock if debuff will expire while UE is on CD, based on power
        if flameshock_dur <= (ue_cd + (time_buffer * 2)) then
            if FlameShock_power >= min (95, (flameshock_dur / (ue_cd + (time_buffer * 2)) * 100 ))then
                use_FlameShock_bool = true
                return true
            end
        end 
        
        -- cast flame shock if debuff will expire while shocks are on CD, based on power
        if flameshock_dur <= (flameshock_cd + time_buffer) then
            if FlameShock_power >= min ( 95, (flameshock_dur / (flameshock_cd + time_buffer) * 100 ))then
                use_FlameShock_bool = true
                return true
            end
        end            
    else
        
        -- cast flame shock if it's not currently on target
        FlameShock_power = 0;
        use_FlameShock_bool = true
        return true
    end

 

feedback, pointers, suggestions appreciated.  sorry for the ridiculously long post, but hope this helps some of you.

 

lastly, giving credit where credit is due-- this is based on stenhaldi's feral druid dot tracker, available here: http://fluiddruid.net/forum/viewtopic.php?f=11&t=4446&start=25#p18611

 

edited to update code and WA string.   made a few minor fixes and did some cleanup.

Edited by zagtastic
4 people like this

Share this post


Link to post
Share on other sites

Nice post! Thanks for the contribution. I can't test it personally since I play Resto/Elemental, but it sounds like a well thought out (and well motivated, useful) aura to me.

 

I'm just going to put your code between spoiler tags so that people don't have to scroll down too much. Hopefully that will get discussion going a little easier.

Share this post


Link to post
Share on other sites

thanks mr stoove.  in the future, ill try not to post in a way that requires you to perform clean-up or formatting :)

Share this post


Link to post
Share on other sites

Dude, that's awesome.  I'll try it out on Wednesday's raiding and report back any suggestions I have, or if it's already perfect just post a bunch of puppies or something.

Share this post


Link to post
Share on other sites

I wrote a similar aura some time ago, these were my pitfalls (I didn't check your full aura code, so it's possible you already done this):

  1. Make sure you cleanup the FS damage table (in my exp, best time for this is when you go out of combat) so it wont grow out of proportion and slow down your code tongue.png
  2. Not sure about your calculation of ticks, but the proper way to do this is:
    Round(30000/Floor(3000/SpellHaste + 0.5)), with banker's rounding.

  3. Number of ticks doesn't matter that much, because FS usually won't run its full course. Hence you can scale the damage directly by spell haste and bypass some calculations.

 

Hope it helps smile.png

Edited by lynx
1 person likes this

Share this post


Link to post
Share on other sites

I wrote a similar aura some time ago, these were my pitfalls (I didn't check your full aura code, so it's possible you already done this):

  1. Make sure you cleanup the FS damage table (in my exp, best time for this is when you go out of combat) so it wont grow out of proportion and slow down your code tongue.png
  2. Not sure about your calculation of ticks, but the proper way to do this is:

    Round(30000/Floor(3000/SpellHaste + 0.5)), with banker's rounding.

  3. Number of ticks doesn't matter that much, because FS usually won't run its full course. Hence you can scale the damage directly by spell haste and bypass some calculations.

 

Hope it helps smile.png

 

thanks much lynx, i'm sure it will help.

 

luckily 1 was already taken care of in the code i started with from stenhaldi.  all good there.

 

i went with ticks rather than pure haste, but you are right-- the exact number of ticks isn't important.  what IS important is how much faster ticks are coming.  ideally this will show that over the next <arbitrary time period>, a newly cast flameshock will do X damage compared to the existing one.  that requires me to take into account the change in tick rate, but not necessarily any new ticks that show up at the end of the duration.  interestingly, the way i did it basically calculates a few points of the graph, while simply taking haste into account draws the line.  i will fix that this week using the proper equation.  and when i do, i will post it here.

 

thanks again.

Edited by zagtastic

Share this post


Link to post
Share on other sites

i have updated the OP with the latest version.  changes in this version:

-- use pure haste rather than ticks

-- fixed a bug when debuff had a low duration

-- tweaked the logic such that it is less likely to allow debuff to fall off.

-- bit of code cleanup

 

i'm unsure if anyone has actually tried using this, but if you have i would be very interested in feedback.  not a big deal to just be developing it for me, but i definitely will keep sharing if there's interest.  thanks again.

1 person likes this

Share this post


Link to post
Share on other sites

You know, this is fantastic as an idea. I'll highlight it on my Twitter stream this afternoon for you to see if we can get any more takers smile.png

 

PS: Also added tags to your OP and tidied up the title. That usually helps you get more views :)

Share this post


Link to post
Share on other sites

What is the V/s-V supposed to stand for?  If I was to blank these out, would there be any issues?

 

I also don't particularly like it disappearing while Shocks are on CD.  Would removing Trigger 1 (Status, CD Spell, Flame Shock) affect any of the backend?

Edited by Hybrys

Share this post


Link to post
Share on other sites

What is the V/s-V supposed to stand for?  If I was to blank these out, would there be any issues?

 

I also don't particularly like it disappearing while Shocks are on CD.  Would removing Trigger 1 (Status, CD Spell, Flame Shock) affect any of the backend?

 

the V/s-V is simply my bindings for those abilities (s-V = shift-v).  they are entirely non-functional and i probably shouldn't have uploaded the string with them in there.  removing or changing them is fine.

 

yeah, removing trigger 1 should be perfectly fine, and result in the behavior you desire here.  i think for many (maybe most), the disappearing on CD is desirable so it can be integrated into existing priority system WA groups... but i like the idea of having both versions so peeps can choose what works best for them smile.png

 

ill respond to your pm shortly

Edited by zagtastic

Share this post


Link to post
Share on other sites

the V/s-V is simply my bindings for those abilities (s-V = shift-v).  they are entirely non-functional and i probably shouldn't have uploaded the string with them in there.  removing or changing them is fine.

 

yeah, removing trigger 1 should be perfectly fine, and result in the behavior you desire here.  i think for many (maybe most), the disappearing on CD is desirable so it can be integrated into existing priority system WA groups... but i like the idea of having both versions so peeps can choose what works best for them smile.png

 

ill respond to your pm shortly

Oh!  The bindings, that makes sense.

 

I can totally understand that, I just want to know where in the calculation I am at any moment, especially since I typically ride the spell queue system.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Deydoridra
      I've been having issues where my dps is lower than it should be since I'm at a 874 ilvl. 
      I've changed mastery haste ratio and its still lower than it should be. If someone can look at my logs and help me out id be extremely grateful.
       
      https://www.warcraftlogs.com/reports/AbYJa9fZjWptDVKB 
      http://us.battle.net/wow/en/character/arathor/Deydoridra/simple
    • By Tenning
      Sorry if this has already been posted but at what point do Hailstorm trump Ancestral Swiftness? I've tried both and see the perks to both.
    • By dyppe
      Hey guys. 
      I do know which stats enhancement should go for, but i'm finding it hard to find any clues on what the stat percentages should be? I've also heard that enhancement need to alot of mastery, but how much? 
      Like some classes has to so stack haste at a certain point and so on, but what are the most optimal stat percentages for enhancement?
      I'm asking because i think i might lack mastery and that i have too much crit. http://eu.battle.net/wow/en/character/ragnaros/Dyppekogeren/simple
    • By Tazinas
      So I've just changed my spec from elemental to enhancement which means I still have some crit chance in the sockets.
      My problem is that I think I'm not doing as much dps as I should with my current gear :
       http://eu.battle.net/wow/en/character/dun-morogh/Tazînas/advanced
      Logs from the last raid :
      https://www.warcraftlogs.com/reports/wFA1DCt68Q7PBZH4/#fight=1&type=damage-done
       
      Would be nice if someone could tell me what I can do better / where to improve :)
       
    • By Orodrake
      Hi,
      A friend and I was wondering about the updated opening sequence for the enh shaman. Before, and this is how I always used to do it, you casted Flametongue / Boulderfist / Hailstorm / Feral Spirits into Doomwinds and hail of Stormstrikes with procs. Pretty simple, you casted your buffs then you started to burst with wolves and Stormstrikes.
      Now it seems it changed, the order is now Boulderfist / Frostbrand / Feral Spirits / Flametongue and then Doomwinds / Stormstrikes if you have procs. I don't really understand this change, it seems like a much slower pull and I can't understand why you'd lose like 3 or 4 seconds of Flametongue (even tho it doesn't deal a lot of damage)...
      My friend suggested that because you cast Flametongue later, you have to refresh it later so you can spam more Stormstrikes before refreshing it. Is it right ? Any more ideas ?