zagtastic

Enh -- Maximizing Shock DPS (WA Tracker)

Sign in to follow this  

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
  • Like 4

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

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
  • Like 1

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.

  • Like 1

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  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Helljira
      Hi. This is my armory: Armory
      My logs: Logs
      I think I should do more DPS in whole ToS HC but especially on fallen avatar.
      My questions:
      i have a loot of trinkets and I'm not sure I should use those I use:
      915ilvl Vial of Ceaseless Toxins and 890ilvlUnstable Arcanocrystal
      I have 900ilvl Engine of Eradication
                  870ilvl Bloodthirsty Instinct
                  875ilvl Convergence of Fates
                  870ilvl  Spontaneous Appendages.
      My goal is to get Smoldering Heart And what is the best choice parts of T20 set with this legendary and of course Eye of the Twisting Nether.
      With this ring i have another question should i use Frostbrand? and I think last question for now: when i should use Crash Lightning after 6sec or after some stacks from T20 bonus?
       
    • By kaoswielder
      Hi everyone

      I won't pretend to be a veteran or a very good player because I am not either one of them (I don't raid or push Mythic+). But I've played rpg/arpg for around 15 years now on PC and have 7 lvl 110s. So I am somewhat not idiot when it comes to playing a class. However with an Enh Shaman, I am feeling like one. This class feels paper thin to play and damage seems exactly meh. Let me explain a bit more. 

      I have a Frost DK, Sin Rogue, Havoc DH and a Ret Pally as melee. I felt confident while playing them that I can take on enemies and not die even if I pulled more than one. But when playing this Enh Shaman, I've died multiple times trying to do so. Not only that, it feels that a !@#$ty lvl 106 mob (same level as me) does more dmg per hit than I do. And mind you, this is not during dungeons but normal leveling. I've never felt this weak while playing any of my melee characters. I tried doing a Legion invasion to quickly level up and died basically half a dozen time doing every single invasion quest. I can't being to explain how frustrating that is.

      Not only this, but damage wise every skill seems just not upto the mark when compared to other classes. My resource generator (Rockbiter) is a hand cramp inducing skill and I have to spam it a lot to generate Maelstrom which my other spenders just chew through. I get Stormbringer proc but its very few and far between and doesn't seem very effective even when it does. Isn't it supposed to be a nuke skill ?

      I suppose this could be because of low points in my artifact and low level gear but I had the same situation on my other characters and it never felt bad like this is. I am losing my interest to play this class at all and no matter what rotation or build I try out, it is always the same result. I pull one enemy and then after killing it I spend my entire resource just to heal up.

      Can anyone tell me what I am doing wrong and if it gets better at higher levels or if next patch improves our situation.
      https://worldofwarcraft.com/en-us/character/saurfang/jhadphoonk

      Thanks and have a nice day y'all
    • By PinkLuigi
      I know shamans are kinda messed up right now, what else is new.
      But I'm up to 900 and my already underwhelming DPS has seen no significant increase. I'm pretty sure it's tied to my low haste rating, but I'd like to make sure and see if it's just that or something else I can work to change.

      https://worldofwarcraft.com/en-us/character/tichondrius/nimbonya
       
      I'll Sim around 760k, This week I got 630k on Krosus, going up to 900k on Skorp and Tich.
      I feel like this is all far too low, one of our top dps is a warlock at i897 and often easily goes 900k and up just on single target.
      I could really use some help figuring out what I've done wrong and what I could improve.

      My usual priority rotation works as follows:
      >Maintain Landslide/Flametongue/Hailstorm
      >Doom winds when off CD and Stormbringer proc'd.
      >Stormstrike when proc'd
      >LavaLash when proc'd
      >Stormstrike when off CD
      >Lavalash when 90+ Maelstrom
      >Rockbiter when -90 Maelstrom
      Feral Spirit-Crash Lightning combo and Doom Winds I'll sometimes delay if there's an add/burn phase, and I have a habit of refreshing Flametongue and Hailstorm on CD if I don't have any procs. I'll also occasionally mismanage Maelstrom and need to do 2-3 Rockbiters to get back up to speed.

      My opener consists of: Prolonged Power>Feral Spirit>Rockbiter>Crash Lightning>Flametongue>Frostbrand>Stormstrike
    • By ChrisCr0ss
      Hey! quick question: Is it worth using frostbrand with Eye of the Twisting Nether without having the bracers? I assume hailstorm is still worse over AS. Thanks for the help!!
    • By Zeilaj
      Hello guys,
      Right now I have 3 legendaries in my possesion and I would like to know which combination would be the best for 7.2 with the upcoming changes:
      - Emalons charged core (Chest).
      - Akainu's Absolute Justice (Bracers). Extra LL damage is increased to 50% in 7.2
      - Roots of the shaladrassil (Pants). They get extra stats in 7.2.
      In 7.1.5 I have Pants+Chest equipped. Should I keep it like this in 7.2? Do you think it is worth switching any of them for the bracers? I would have to switch Ancentral Swiftness to Frostbrand
      Thanks for the help!
      P.S.: I am using the T19 4-piece bonus with Boulderfist. Would it be worth switching to Hot Hands? I would hate switching back to Rockbitter.