Aldriana / ShadowCraft-Engine

Calculations backend for ShadowCraft, a WoW theorycraft project.
GNU Lesser General Public License v3.0
37 stars 22 forks source link

Killing Spree and Restless Blades #90

Closed Indz closed 12 years ago

Indz commented 13 years ago

Restless Blade is not correctly implemented for Killing spree, but for adrenaline rush it's correct:

Line 1091: ksp_cooldown = 120 / total_restless_blades_benefit + self.settings.response_time

should by:

ksp_cooldown = 120 / (1 + total_restless_blades_benefit) + self.settings.response_time

And also at the point, where we should wait for bandit's guile to be red:

Line 1101: avg_wait_till_full_stack = 1.5 * time_at_level / cycle_duration

should by some

avg_wait_till_full_stack = 1.5 * time_at_level

After these fixes Killing Spree immediatly is better then wait for red phase. Please look over it, so you can verify that my corrections are correct. :)

Sorry for bad english

dazer commented 13 years ago

Sorry for the delay. Yes, you are correct on both asserts (and also the value of firing it off cool-down); I'm pushing these changes to my 'fixes' branch (deployment to the live webapp may take a while though).

Upon review, I'm not completely certain of the value for time_at_level either: if BG updates every 4 succesfull ss/rvs it's value should be something like 4 * (3 / banditsGuileTalentValue) * (1 / strikesPerSecond). This could be related to previous iterations of the talent (from the top of my head I recall the buff being only 5/10/15% but some more changes may have passed); I'll be pushing that too, but I'd like confirmation from someone else. Note that this would further increase the output of KsP immediately.

dazer commented 13 years ago

I run some sanity tests on the avg wait time and it's still wrong: 1.5 * time_at_level is the average wait till full stack if you have to wait (if ksp happens to come off cd when you are not at the full stack); the actual avg wait time is the likeliness of ksp comming off cd at the wrong time times the average wait if you have to wait: (3 * time_at_level / cycle_duration) * (3 * time_at_level / 2) which can be swaped for an easier formula, but I'll leave it as is for the sake of clarity. Using killing spree immediately is still the best option of the two, but not by that much. In fact, I dare say waiting for 1 or 2 stacks may be superior, but we are talking of ~50 dps difference at most.

Edit: as a fun fact, note that the problem can be solved much more intuitively as the sum of a succession: take time_at_level = 10, then the average wait time is [(10_3) + (30-1) + (30-2) + ... + (30-29)] / cycle_length. In the, more than likely, case of non integer factors, we could make a succession in wich the increment is a divisor of 3_time_at_level; not too complicated but, I think, for non integers, the solution exposed above is a lot more explicit (not to mention that refactorization of the succesion would end with the same formula).

Aldriana commented 12 years ago

What's checked in looks reasonable to me, so closing this.