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 Rodee
      I know Unleash Doom was recommended as the second golden talent before getting Doom Vortex, but since Vortex just got buffed, and I am also using the Overcharge and Hot Hand talent; Is Vortex better to grab first now? Especially due to it proccing off Overcharged lightning bolts and the increased Lava Lash damage on the way down to it.
    • By TripleM1996
      Hello everyone.
      I was wondering if I should change my rotation to include Frostbrand, just to keep all 3 of the Twisting Nether Buffs up at all times or if the 1.5% more Damage are not worth it.
      Before 7.1.5 it was obviously no problem to keep up all buffs, due to Hailstorm but now I have no good way to get the Frost Part. Am I missing something?
       
      Thanks in Advance for you help. 
    • By denial
      Hi all,
      i started again since WOTLK to play again my shaman , i leveled up as an elemental since i was always played elemental in the past.
      I tested the enchanement a bit , and i like him BUT i dont have in mind to raid except LFR ofc and some heroic dungeons and of course WQ's and grind.
      So i am thinking which spec has better survivability i cannot decide , some times ele doing better some times enha going faster vice versa :/
      I know that as a casual player now i have to play what is more fun for me BUT with the artifact AP to the weapons ( i have both to lvl 13 but now the AP is going bigger) its not so easy so i have to decide at least which spec to level up the weapon first so an opinion could help me decide.
      All i need is fast grind,good dps in dungeons and easy playing with good survivability .
      Thank you all for your replies :)
       
    • By Nordavaer
      Hello, can anyhelp tell me the best trinkets to use. i have Bloodthirsty Instinct(865ilvl), Spontaneous Appendages(865ilvl) and Ethereal Urn(895ilvl)
      I know that Spontaneous Appendages is really good with Stormstrike procs. im mostly unsure about the bloodthirsty insticnt and urn.
    • By Bigboyee
      Me and my raid group are still progressing through Mythic EN, though we have Nyth, Elerethe, and Ursoc all easily on farm. I'm consistently parsing very low for my ilvl, and consistently losing out in dps to a lower ilvl shaman of the same spec. Despite usually having better buff uptimes than him and better cd usage he parses much better than me. Usually the main difference i find is he gets off way more stormstrikes than me. Recently I've started mashing that button almost nonstop in fights, sometimes sacrificing a few seconds of buff time to get off more stormstrikes, but the results seem to be about the same as before. 
      Below you'll find logs that have both of us in them, as well as mine and his armory links. I'm Bigboyee and the other shaman is Cyrashapa. Any help would be greatly appreciated. 
      The Ursoc fight in particular on this one: https://www.warcraftlogs.com/reports/vnpwPdAC7FrHxcWV#type=damage-done&fight=12
      Ursoc and Odyn were the only clean fights we had here:https://www.warcraftlogs.com/reports/YfgFwB3rzH6mV1jM/#fight=2&type=damage-done
      My armory:http://us.battle.net/wow/en/character/malganis/Bigboyee/simple
      His armory:http://us.battle.net/wow/en/character/malganis/Cyrashapa/simple