View Single Post
  #11  
Old 01-29-2024, 04:06 PM
bcbrown bcbrown is offline
Fire Giant


Join Date: Jul 2022
Location: Kedge Keep
Posts: 762
Default

At 170 Dex you get 1.5 PPM. At 47 delay, that means a swing every 4.7 seconds, or 12.76 swings/minute. At 1.5 PPM, that's 1.5 procs per 12.76 swings, or a proc rate of 11.75% for each swing. I know very little about both weapon delay and proc calculations, so please correct me if I'm wrong here.

JBB has an 8 second cast, and with 132 seconds per fight, that's 16 casts. Let's assume you take a swing before first cast, and lets say you have excellent reflexes, and click JBB almost simultaneously with swinging. Note I see you've fiddled some more with the numbers since I did this calculation; I can update it if you'd like.

Let t=0 be when the mob has been pulled, slowed, and first engaged in melee. A proc here will last 132 seconds, or 22 ticks. A proc here will do 40 + 24 * 22 or 568 damage.
At t=8, second chance to proc. There's (132 - 8) / 6 = 20 (rounded down) ticks left. If there's been no prior proc, a proc is worth 40 + 24 * 20 = 520. If there's a prior proc, only the DD component counts: 40 damage.
So we can build a table:

Now, what are the probabilities of each possible outcome?
At t=0, it's simple: there's a 11.75% chance of a proc.
At t=8, the chance of a proc is 11.75%. There's a 11.75% chance there was a proc at t=0, and an 88.25% chance there was no prior proc.
At t=16, we get to the real meat of the problem. To calculate the chance of a prior proc, there's an 11.75% chance of a proc at t=0, and a 11.75% chance of a proc at t=8, but these are independent possibilities.

1) The chance of a proc at 0 and 8 is 11.75 * 11.75.
2) The chance of a proc at 0 and not 8 is 11.75 * 88.25.
3) The chance of no proc at 0 and a proc at 8 is 88.25 * 11.75
4) The chance of no proc at 0 and no proc at 8 is 88.25 * 88.25

This is a classic binomial distribution. You can also think of this as flipping a coin every 8 seconds, where the chance of heads is 11.75% and the chance of tails is 88.25%.

The relevant formula is the probability mass function: https://en.wikipedia.org/wiki/Binomi...on#Definitions

The vertical (n k) notation is spoken as "n choose k" or sometimes written as nCk and described in more detail here: https://en.wikipedia.org/wiki/Binomial_coefficient

To apply this to our problem, we can use this formula to calculate the probability of no prior proc, i.e. setting k=0

(n choose 0) * p^0 * (1-p)^(n-0)

(n choose 0) is always 1, so this simplifies to (1 - p)^n

So at each 8 second interval (the variable n), the damage of a proc will be
44 * (1 - (1 - p)^n) + (44 + 24 * (132 - 8*n) / 6) * (1 - p)^n

p is the chance of a proc, or 0.1175

Over a 132 second fight, there's 16 casts, so we need to sum this over n = 0 to 15 inclusive. Let's implement this in Python; perhaps that will be easier to follow:
Code:
p = 0.1175

def no_prior(n, fight_length = 132):
    """" 44 dd plus 24 per tick remaining in the fight """
    from math import floor
    ticks_remaining = floor((fight_length - 8 * n) / 6)
    return 44 + 24 * ticks_remaining

def prior(n):
    """" if there's been a prior proc, only the dd matters """
    return 44

expected_damage = 0
for n in range(0, 16):
    prior_probability = pow(1 - p, n)
    expected_damage_this_interval = prior(n) * prior_probability + no_prior(n) * (1 - prior_probability)
    expected_damage += expected_damage_this_interval

print(expected_damage)
Reply With Quote