TransWikia.com

How often will an opponent be bashed?

Arqade Asked by Addison on January 17, 2021

I ran into an interesting problem while trying to figure out the average time a hero would spend stunned if they were attacked continuously with a bash item or ability.

For example, if I was playing Slardar, and had a 25% chance bash for 1 second, and could attack twice a second, then what percentage of time can I expect my opponent to be bashed for? I want to know what the increments are, so that I can figure out when it’s worth it to level that skill.

I came up with the following state diagram to help me through it. The states represent a half-second period after each attack.

State Diagram

Note that new stuns will refresh old ones (not stack). For example:

  ACTIVE… MISS
=ACTIVE… HIT
=STUNNED (for this round and next)… HIT
=STUNNED (for this round and next)… MISS
=RECOVERING (for this round)… HIT
=STUNNED (for this round and next)… MISS
=RECOVERING (for this round)… MISS
=ACTIVE…


Is there a formula which would fit any number of seconds, and any percent chance of stunning?

2 Answers

Pseudo-Random

As it was commented the 25% isn't a constant in each attack but more an average of times it will proc from a bigger pool of attacks.

How does it work, the real chance to stun is 8% per attack at full level, every time it doesn't proc this chance is increased another 8.5% until stuns the target and then it resets to the base of 8%.

P(T): The chance for the skill to proc 25%

P(A): The average for the skill to proc 24.90%

C: Contant value from the Pseudo Random distribution 0.08475

Max N: The minimum number of hits that would occur until the next one is a sure proc: 12

Most Probable N: The amount of hits to get a proc: 3

Average N: The average hits until get a proc 4.02

Answer:

If you hit every 0.5 seconds and the average proc it's at the 4.02 hit then the target could be stunned every two seconds.

https://webcache.googleusercontent.com/search?q=cache:wu6BspkLHVwJ:https://dota2.gamepedia.com/Random_distribution+&cd=1&hl=es&ct=clnk&gl=ec

Answered by Tridam on January 17, 2021

There is no such general closed form solution available due to the Abel-Ruffini Theorem, since solving for the pseudorandom value C involves a polynomial in degree N, where N > 4 for all P < ~46%.

First, given your proc chance P, determine the PRG value C using one of the methods detalied in the answers to the question Calculating the constant C in Dota 2 pseudo-random distribution.

Next, define N = ceil(1/P)

Then, we define a series of functions:

p(n) = min(Cn, 1)
inv(n) = 1 - p(n); inv(0) = 1.
cml(n) = cml(n-1) * inv(n); cml(0) = 1.
nfr(n) = cml(n-1) - cml(n); nfr(0) = 1. 
wgn(n) = nfr(n) * n
tf(n) = wgn(n) / SUM(wgn(n in 1..N))

The logic goes as follows: p(n) is the chance of bashing on the nth successive hit in a chain of non-crits. inv(n) inverts this, so we have the chance of missing (the bash) on each hit. From this, by using the multiplication rule, obtain cml(n), the cumulative chance of getting to n misses. E.g. if cum(6) = x that means there's a chance of x that any chain of attacks is 6 or longer. Then by differencing this function obtain nfr(n) which is the fraction of chains that is n long. Next, weigh this function by the length of the chain to obtain tf(n), the "fraction of time spent in a chain of length n".

Next, we need to adjust for something: As you observed, with high attack speed, bashes can overlap. Therefore, with a given input attack speed a, construct the formula

b(n,a) = min(DUR / (100 * BAT / a), n) / n

Which is the fraction of time spent bashed in a chain of attacks where it takes n attacks until the next bash. Here BAT is your base attack time. For slardar this is BAT = 1.7, and DUR is the stun duration. In the example, DUR = 1, or one second. Some example figures:

ATK      N=1    N=2    N=3
100    58.9%  29.4%  19.6%
200     100%  58.9%  39.2%
300     100%  88.2%  58.9%
600     100%   100%   100%

Next, compute:

ws(n,a) = b(n,a) * tf(n). 

Which is the time spent bashed in a chain of attacks, weighted by the total spent fraction of time in a chain of such length. Sum over all ws, or

SUM(ws(n in 1..N,a)) = sf(a).

Where sf(a) is the fraction of time the target spends stunned, as a function of the attack speed. Figures for slardar are below:

+---------+-------+
| ATK SPD | STUN% |
+---------+-------+
|     100 | 14.7% |
|     125 | 18.4% |
|     150 | 22.1% |
|     175 | 25.7% |
|     200 | 29.0% |
|     225 | 32.4% |
|     250 | 35.8% |
|     275 | 39.1% |
|     300 | 42.5% |
|     325 | 45.9% |
|     350 | 49.0% |
|     375 | 51.8% |
|     400 | 54.6% |
|     425 | 57.4% |
|     450 | 60.2% |
|     475 | 63.0% |
|     500 | 65.8% |
|     525 | 68.1% |
|     550 | 70.2% |
|     575 | 72.3% |
|     600 | 74.4% |
+---------+-------+

Note that this algorithm assumes that the game is perfectly timed. In reality, durations are rounded to integer numbers of frames: the game is a discrete system, not a continuous one. Thus in the actual game the real figures will be somewhat rounded compared to these estimates.

Answered by aphid on January 17, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP