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 Casdon
      [US] Stormreaver — Skunkworks
      Tuesdays & Thursdays: 7:00 P.M. to 11:00 P.M. (pst) || 9-1 (cst) || 10-2 (est)
       
      Progression
      8/11M Antorus
      9/9M ToS
      10/10M Nighthold
      3/3M Trial of Valor
      7/7M Emerald Nightmare
       
      Website
      skunkworksguild.com
       
      About Us
      Skunkworks is a guild for players who can not or do not want to commit to the time-intensive raid schedules of traditional "hardcore" guilds.
      However, we still maintain a high caliber player environment and make an efficient use of our raiding time.
      We raid Tuesdays and Thursdays from 7:00 - 11:00 PST, just 8 hours a week and never more.
       
      We are very protective of our guild environment and selective in recruitment. We are looking for solid players mechanically as well as intellectually.
      We all get paid to deal with idiots, why should we pay to spend our leisure time with them as well?
       
      Skunkworks has been around for multiple expansions and has historically always been at the top of the 2-night raiding guild scene.
       
      Past Raiding Achievements
       
      #US 199 Mythic KJ #US 186 Mythic Archimonde #131 US Heroic Garrosh #68 US Heroic Ra-den #77 US Heroic Lei Shen #86 US Heroic Sha of Fear #106 US Heroic Madness of Deathwing #99 US Heroic Ragnaros #147 US Sinestra #91 US Heroic The Twilight Destroyer (Halion) #71 US Heroic Fall of the Lich King #247 US Tribute to Insanity #160 US Alone in the Darkness Current Guild Needs
      Amazing Range DPS ---Exceptional Candidates always considered regardless of recruiting needs.
       
      How to Apply
      Apply with Google Forms
      https://docs.google.com/forms/d/e/1FAIpQLSeL-LW1-7rRK28Z3Nswg4xD3-jjQWrIsCh77rYOdxKwY0oPPQ/viewform.
      All applications are kept private.
      Please include at least the following.
          Prominent links to relevant armory pages ]A guild history with reasons for departure
          The reason(s) you have chosen to apply to this guild
          Warcraft Logs
          UI screenshots or fraps/Stream footage
       
      Contact Information
      Shadaka (GM)
      Real ID:Shadak#1881
       
      Aerivore (Recruitment Officers)
      Real ID:  Aerivore#1581
       
      Sovm
      Real ID: Sov#1192
    • By Xzylion
      Hi
      So, lately I have been looking around the web for someone to explain how I can insert an icon/bar that displays the "buff" Feral Spirit. I am mainly using the Tell Me When addon, but I had to go  through Weak Auras this time to get it right. I also want to mention that I would not have been able to get it right had I not imported the Weak Auras string from Wordup (author of the enhancement shaman guide). The reason for this being so complicated is because contrary to what you might think, Feral Spirit does not work as a buff. Therefore you will have to manually work around this problem to get it to work. I have added some pictures that will hopefully make the process easier.
      PS. I am in no way an expert on either Tell Me When or Weak Auras, so be gentle...
      1) Tell Me When:

      This is the general layout. If you dont want an icon, but a bar. You can go into the "group" tab (bottom right of tell me when) and select bar (on the very top)
       

      This is how the layout inside Tell Me When should look after completion. Feral Spirit is no longer a "buff", so you will have to make a Combat Event where you manually enter the amount of seconds the combat event (Feral Spirit) should be active, in this case 15 seconds
       

      This is important: Events to check --> Casts --> Spell Cast Success
      After all that you should be ready to go!
       
       
      2) Weak Auras:

       

      Feral Spirit is no longer a "buff", so you will have to make a Combat Log where you manually enter the amount of seconds the combat event (Feral Spirit) should be active, in this case 15 seconds
       

      Just scrolling down
       

      All the way at the bottom you have to enter the Spell Name and the amount of seconds that the Combat Event (Feral Spirit) should be active.
      Now you should be all ready to go!
       
    • By surtenseur
      Hi all, 
      First of all, sorry for my bad English, is not my native language :) 
      So I'm searching since some days, Enh shaman stat weight for sim. I looked on Simulation Craft, but it's look weird that mastery is so close to haste. 
      I think it is ok when you don't have gloves legendary. But with them, haste is way so far than mastery? 
       
      Thanks in advance for your help ! 
       
    • 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?