simulationcraft / simc

Simulationcraft engine/GUI
GNU General Public License v3.0
1.38k stars 692 forks source link

Cata Dot behavior #316

Closed navv1234 closed 9 years ago

navv1234 commented 9 years ago

Originally reported on Google Code with ID 317

I've seen posts indicating that Cata DoTs which have already been cast will have their
stats (power, buffs, crit, even haste) updated whenever their caster's stats get updated.

I think that means that action_t functions related to ticks will need to go through
to the player, rather than using values that were appropriate at the time of the cast.

Also, I believe the simc dot duration is primarily managed through num_ticks and current_tick.
 Depending on how changing haste values affect DoTs, the duration may need to be based
on a target end time, with the actual number of ticks depending on actual haste values
over the DoT's duration.

I don't know if Haste values are updated immediately, or only the next time a tick
(or refresh) occurs.  If my next Moonfire tick is supposed to happen in 2.9s, and I
gain Heroism and Nature's Grace, will that tick be moved up to roughly 1.5s?

I'm not on the beta, so I haven't tested any of this.  It should be fairly easy for
a Moonkin to get a log of Roots behavior with changing haste levels over a single cast
(Nature's Grace from Starfall, Haste aura from Moonkin Form, changing gear haste levels
(Shadowmeld may allow naked->fully dressed while roots are ticking).  On live roots
break very easily on the ?? dummy, but don't seem to break at all on the Heroic dummy.

Reported by Erdluf on 2010-08-20 15:28:04

navv1234 commented 9 years ago
Erdluf,

The Cata requirements have finally given me enough reason to complete separate out
the "tick_event" from the action_t class itself.  The action_t will be for executing
the ability only.  Basically, this means moving fields from action_t to dot_t.  This
also a good step on the way to multi-DoT support.

I've had a whole slew of family responsibilities (with obvious higher priority) to
manage these past six months.  As they wind down and Cata becomes more and more imminent,
I will ramp up my plans for some massive re-architecture.

Reported by natehieter on 2010-08-20 16:40:24

navv1234 commented 9 years ago
Maybe my post from r4636 would be better off in here, just remembered that there is
an issue here.

Regarding scaling with haste, the dot itself won't be hastened anymore, just the ticks,
so there will be extra-ticks.

An example log, devouring_plague (8 ticks x 3s = 24s), with 26.04% haste:
8/23 11:16:23.316  SPELL_CAST_SUCCESS,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20
8/23 11:16:23.499  SPELL_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,63675,"Improved Devouring Plague",0x20,2119,2118,32,0,0,0,nil,nil,nil
8/23 11:16:23.499  SPELL_AURA_APPLIED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,DEBUFF
8/23 11:16:25.841  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1032,1031,32,0,0,0,nil,nil,nil
8/23 11:16:28.219  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,2159,2158,32,0,0,0,1,nil,nil
8/23 11:16:30.451  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1033,1032,32,0,0,0,nil,nil,nil
8/23 11:16:32.853  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1033,1032,32,0,0,0,nil,nil,nil
8/23 11:16:35.062  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,2158,2157,32,0,0,0,1,nil,nil
8/23 11:16:37.455  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1033,1032,32,0,0,0,nil,nil,nil
8/23 11:16:39.762  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1033,1032,32,0,0,0,nil,nil,nil
8/23 11:16:42.104  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1033,1032,32,0,0,0,nil,nil,nil
8/23 11:16:44.330  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,2159,2158,32,0,0,0,1,nil,nil
8/23 11:16:46.571  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,2159,2158,32,0,0,0,1,nil,nil
8/23 11:16:46.571  SPELL_AURA_REMOVED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,DEBUFF

So there are 10 ticks now at about 2.38s. The complex part now will be when to add
another tick and when not, how to round, and how to implement it, if that's even possible
with the dot architecture at the moment.

Interestingly, the damage on each tick didn't change, even tough I had the gunship
trinket, which stacks int->sp up (edited log's out).

Here's a log where I changed my equip from 0 to 26.04% haste after about 3-5 ticks.
The tick-interval and the damage didn't change.

8/23 11:30:17.614  SPELL_CAST_SUCCESS,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20
8/23 11:30:17.619  SPELL_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,63675,"Improved Devouring Plague",0x20,179,178,32,0,0,0,nil,nil,nil
8/23 11:30:17.619  SPELL_AURA_APPLIED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,DEBUFF
8/23 11:30:20.625  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,224,223,32,0,0,0,nil,nil,nil
8/23 11:30:23.519  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,224,223,32,0,0,0,nil,nil,nil
8/23 11:30:26.346  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,225,224,32,0,0,0,nil,nil,nil
8/23 11:30:29.341  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,225,224,32,0,0,0,nil,nil,nil
8/23 11:30:32.187  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,224,223,32,0,0,0,nil,nil,nil
8/23 11:30:35.130  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,225,224,32,0,0,0,nil,nil,nil
8/23 11:30:38.182  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,224,223,32,0,0,0,nil,nil,nil
8/23 11:30:40.998  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,224,223,32,0,0,0,nil,nil,nil
8/23 11:30:40.998  SPELL_AURA_REMOVED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,DEBUFF

If someone want's more data, maybe at different haste levels, I'll gladly get them.

Reported by philoptik on 2010-08-23 09:43:44

navv1234 commented 9 years ago
A dot uses a snapshop of your stats when you applied it which are only updated when
you interact with it again (refreshing/extending)

Reported by Twigele on 2010-08-23 10:50:18

navv1234 commented 9 years ago
Yes that's how it worked in WOTLK and in simcraft so far. 
The first post by Erdluf states that it doesn't anymore, but I don't think so. The
current cataclysm beta indicates that everything remains the same, sp & haste are snapshoted
when you apply the dot and then remain the same for the duration of the dot, even if
the values change (unless you interact with it).
That's why I mentioned my gunship trinket and the constant dot ticks, just to show
evidence against Erdluf's statements, not because I don't know how it works in sim,
but thanks ;)

Back to dot haste scaling:
First, in my first combat log, there needs to be darkness +3% spellhaste, which gives
1.2604*1.03=1.2982 haste.

It seems that the dot length is still modified due to rounding. In my logic it works
like this:
num_ticks = 8       - >  num_ticks = round ( 8 * haste() )  == 10
base_tick_time = 3  - >  base_tick_time = 3 * haste()       == 2.310

-> dot length of 23.10 seconds with 10 ticks every 2.31 seconds.

There seems to be normal rounding function at use, x.49 becomes x, x.5 becomes x+1,
more logs to back it up:

Again at 29.82% haste, vampiric touch 5 ticks a 3 seconds
My theory: round ( 5*1.2982 ) = 6, 3 / 1.2982 ~= 2.31, duration = 13.8653
Combatlog: 6 ticks, duration = 13.849

8/23 13:16:22.989  SPELL_CAST_START,0x010000000012C2AB,"Caltiom",0x511,0x0000000000000000,nil,0x80000000,34914,"Vampiric
Touch",0x20
8/23 13:16:24.347  SPELL_AURA_APPLIED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,DEBUFF
8/23 13:16:26.685  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,1852,1851,32,0,0,0,nil,nil,nil
8/23 13:16:28.993  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,3871,3870,32,0,0,0,1,nil,nil
8/23 13:16:31.206  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,3871,3870,32,0,0,0,1,nil,nil
8/23 13:16:33.627  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,1852,1851,32,0,0,0,nil,nil,nil
8/23 13:16:35.953  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,1852,1851,32,0,0,0,nil,nil,nil
8/23 13:16:38.196  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,1852,1851,32,0,0,0,nil,nil,nil
8/23 13:16:38.196  SPELL_AURA_REMOVED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,34914,"Vampiric Touch",0x20,DEBUFF

Again at 29.82% haste, pws 6 ticks a 3 seconds
My theory: round ( 6*1.2982 ) = 8, 3 / 1.2982 ~= 2.31, duration = 18.4871
Combatlog: 8 ticks, duration = 18.469

8/23 13:16:57.287  SPELL_CAST_SUCCESS,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20
8/23 13:16:57.725  SPELL_AURA_APPLIED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,DEBUFF
8/23 13:17:00.012  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,1164,1163,32,0,0,0,nil,nil,nil
8/23 13:17:02.322  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,1164,1163,32,0,0,0,nil,nil,nil
8/23 13:17:04.513  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,1164,1163,32,0,0,0,nil,nil,nil
8/23 13:17:06.940  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,1165,1164,32,0,0,0,nil,nil,nil
8/23 13:17:09.264  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,1165,1164,32,0,0,0,nil,nil,nil
8/23 13:17:11.524  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,2433,2432,32,0,0,0,1,nil,nil
8/23 13:17:13.882  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,1164,1163,32,0,0,0,nil,nil,nil
8/23 13:17:16.194  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,1164,1163,32,0,0,0,nil,nil,nil
8/23 13:17:16.194  SPELL_AURA_REMOVED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,589,"Shadow Word: Pain",0x20,DEBUFF

And at 21.75% haste, dp 8 ticks a 3s
My theory: round ( 8*1.2175 ) = 10, 3 / 1.2175 ~= 2.46, duration = 24.64
Combatlog: 10 ticks, duration = 24.643

8/23 13:25:21.017  SPELL_CAST_SUCCESS,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20
8/23 13:25:21.017  SPELL_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,63675,"Improved Devouring Plague",0x20,1311,1310,32,0,0,0,nil,nil,nil
8/23 13:25:21.017  SPELL_AURA_APPLIED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,DEBUFF
8/23 13:25:23.577  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,696,695,32,0,0,0,nil,nil,nil
8/23 13:25:25.985  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1455,1454,32,0,0,0,1,nil,nil
8/23 13:25:28.410  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,696,695,32,0,0,0,nil,nil,nil
8/23 13:25:31.054  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,696,695,32,0,0,0,nil,nil,nil
8/23 13:25:33.396  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1455,1454,32,0,0,0,1,nil,nil
8/23 13:25:35.972  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,696,695,32,0,0,0,nil,nil,nil
8/23 13:25:38.449  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,1454,1453,32,0,0,0,1,nil,nil
8/23 13:25:40.909  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,696,695,32,0,0,0,nil,nil,nil
8/23 13:25:43.250  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,696,695,32,0,0,0,nil,nil,nil
8/23 13:25:45.660  SPELL_PERIODIC_DAMAGE,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,696,695,32,0,0,0,nil,nil,nil
8/23 13:25:45.660  SPELL_AURA_REMOVED,0x010000000012C2AB,"Caltiom",0x511,0xF1307F9B00001072,"Outlander's
Training Dummy",0x10a28,2944,"Devouring Plague",0x20,DEBUFF

Reported by philoptik on 2010-08-23 12:04:51

navv1234 commented 9 years ago
We will need to pay special attention to those DoTs that auto-refresh from other abilities
to see if they are handled differently.

Reported by natehieter on 2010-08-23 12:15:36

navv1234 commented 9 years ago
Too clarify (or perhaps not), in a thread at TMR I was doing some theorycraft on the
new Eclipse.  A stated assumption was that the Eclipse bonus was "earned" when a spell
was cast, not when the damage occurred.

http://themoonkinrepository.com/viewtopic.php?f=28&t=5207

The third post (Lodis) read, to me, as if testing showed that the Eclipse bonus applied
to already existing DoTs.  Note that Eclipse is not an SP increase, it is a player-damage-multiplier.
 I did not find this result too surprising.  I'm relatively certain that Owlkin Frenzy
(another player-damage-multiplier) has the same behavior in LK.

My motivation for this simc issue was this text from post eight:

"Also, to clarify on the eclipse benefitting applied DoT's, that's global. The developers
stated that they're reworking the system to automatically update the damage when a
proc happens."

It is likely I read too much into that statement, and that it was not based on any
testing.

After I'd posted this issue, on the 2nd page of the TMR thread, sixth post, direwolf
did some testing looking for damage changes from SP procs, and they were not applied
immediately.

> "I've just been testing this on a target dummy, and this is not how its functioning,
tick amounts remain the same if things like the rep ring, lightweave, trinkets proc
after the cast, if i reapply the dot the damage goes up per tick and stay up even if
the procs drop off, but damage goes back down when i apply it again after the proc
drops off......maybe this is something that's just not implemented yet on the beta,
but would be nice if the damage changed with each tick depending on different procs
and buffs throughout the fight...

> edit: well the test i was doing, was just for the damage aspect per tick, not sure
about the haste/crit part of it."

From an implementation standpoint, even if SP/crit changes were applied immediately,
the code changes would be relatively small.  A haste change that became active at the
next tick would be more trouble, but not too bad.

A haste change that impacted the time remaining till the next tick would be a serious
nuisance (Heroism (or a PvP player moving in and out of Hurricane) would more or less
require adjusting the entire queue of pending events).  Actual WoW would have the same
issue.  I can't imagine Blizzard would want to do that to themselves for a relatively
minor impact on game play.

To agree with Philop, I'm sure I've read (EJ Warlock Cata thread) that number of DoTs
is in fact round(base_ticks*haste).  Someone tested (EJ Feral Druid Cata thread) and
found that refreshing a DoT before the last tick gives you all the ticks of the new
cast, plus the remaining tick of the old cast.

Reported by ricewade on 2010-08-23 12:24:18

navv1234 commented 9 years ago
In my view there are two situations here:

Normaly dot's don't change their snapshot stats (sp,haste,crit,etc.) during ticking,
they keep it the whole time.

Dot's which are refreshed (Priest Shadow Word: Pain by Mind Flay, Warlock Corruption
by Haunt/SB/Drain Life) also don't update all of their stats in WotLK.
There is a great summary on this here http://shadowpriest.com/viewtopic.php?f=61&t=23642

I think Blizzard stated that they want to change the later one from being static, e.g.
everytime you update the dot, a new snapshot of the stats will be taken, the dot updated.
That would solve many problems: crit rolling on sw:p, haste/crit rolling on corruption,
gaining bonis (Malygos), or rolling them.

The first one, updating a dot after each and every tick doesn't sound realistic as
you said ricewade, but we would have to wait and see. It's just at the moment, there
is no indication of this.

The problem 2, updating stats when a dot is "refreshed" will now occur everywhere ingame,
since everytime you recast a dot too early, it is now refreshed and not only overwritten.
It's not just only with sw:p and corruption anymore. 

I'm not even sure how this is programmed at the moment in simcraft.

Reported by philoptik on 2010-08-23 13:00:37

navv1234 commented 9 years ago
To implement the new dot behavior globally, what would be the best approach?

My idea was to reuse scale_ticks_with_haste(), then we would have:
sc_spell.cpp line 60: tick_time() return tick_time = base_tick_time / haste();
and
sc_action.cpp line 1124: this would cut the dotlength to the new tick_time * num_tick,
if I understand it correctly.

All there would be left is to increase the num_ticks somehow, either introduce a new
variable base_num_ticks and change the class modules, or a variable num_ticks_hasted,
and just change the dot procession.

Or maybe the function extrend_duration ( int extra_ticks ) could be used.

Reported by philoptik on 2010-08-24 14:12:08

navv1234 commented 9 years ago
I would recommend a cheap/easy fix for now.  Much of the DoT management will be moving
from action_t to do_t in the not-too-distant future.  

Church-related responsibilities have been consuming all the time left over from kids/wife/job/house.
 The building project financials are complete and the "only" thing left is a sermon
for this coming Sunday.  Next week I'll start outlining some architectural changes
for SimC.  

In the past I would just give up a night of sleep (or two) and just jam through it
myself.  That is just not going to happen this time...... so I'll lay out my vision
in as much detail as possible and look for a ton of help from you guys.

Most of the painful changes are pedestrian: Converting talent/glyph storage from mere
integers to real classes.  In order to complete the paper-doll interface, we need to
be able to interrogate talents/glyphs/etc from player_t without understanding the details
of the module internals.  This along with proper database support will be painful,
but usability improvements will be dramatic.

Also, the work Althor is pursuing will cause a ton of rip-up in the ability setup as
he tries to automate the extraction of ability attributes.

So.....  Keep making progress on Cata changes.  We may have to re-package some of the
work in a few weeks, but it is still vital to go through this exploratory exercise.

Reported by natehieter on 2010-08-24 14:45:41

navv1234 commented 9 years ago
It looks like refreshing a dot by itself isn't the same as it being refreshed by an
other spell.

I tested this ingame today (Beta).

A:
cast corruption naked ( = 6 ticks)
switch equip (something with much haste, e.g. 14%)
refresh corruption between tick 5 and 6 by casting corruption
-> results in 8 ticks after the cast

B:
cast corruption naked ( = 6 ticks)
switch equip (something with much haste, e.g. 14%)
refresh corruption between tick 5 and 6 with haunt
-> results in 6 ticks after the cast

I'm not sure how it is with other stats (crit, multipliers), because they would need
testing with large data samples. But a fair guess would be that refreshing by a different
spell uses the same rules as in WotLK.

Reported by philoptik on 2010-09-13 14:35:44

navv1234 commented 9 years ago
This has been completed with the Cata changes.

Reported by swbusche on 2010-10-15 16:07:59