又称抽取行事件。
将受到LastPickedi和SecondLastPickedi影响后的Weighti称之为平滑权重,记为SmoothWeighti。
计算第i行的平滑权重的步骤如下:
1. 将第i行出怪权重在总权重的占比称之为,则有:
$$WeightP_i=\frac{Weight_i}{\sum_{j=1}^{6}Weight_j}$$
将LastPickedi对结果的影响因子称为PLasti,再将SecondLastPickedi对结果的影响因子称为PSecondLasti,通过查阅代码我们知道,它们的计算公式是:
$$PLast_i=\frac{6\times LastPicked_i\times WeightP_i+6\times WeightP_i-3}{4}$$
$$PSecondLast_i=\frac{SecondLastPicked_i\times WeightP_i+WeightP_i-1}{4}$$
最后获得平滑权重的计算公式如下:
$$SmoothWeight_i=\begin{cases}\begin{aligned}
WeightP_i\times \min(\max(PLast_i+PSecondLast_i,0.01),100) & ,\quad WeightP_i\ge 10^{-6}\\\\
0 & ,\quad WeightP_i<10^{-6}
\end{aligned}\end{cases}$$
我们可以很轻易地得出,$SmoothWeight_i$的值在$Weight_i$不趋近于0的条件下,被限制在区间$[0.01,100]$内。
通过分析代码得知,游戏先生成一个$\left[0,\sum_{j=1}^{6}SmoothWeight_j\right)$范围内的随机数$RandNum$,然后令结果为第$i$行($i$为第一个使$\sum_{j=1}^{i}SmoothWeight_j\ge RandNum$的数,且当$\sum_{j=1}^{5}SmoothWeight_j 由于$RandNum=0$(这导致抽到第一行的概率稍大)的概率趋近于0,再忽略$RandNum$无法取到$\sum_{j=1}^{6}SmoothWeight_j$(这有时会导致抽到第六行的概率稍小)造成的微小误差,我们可以得出,对于第$i$行,抽取到该行的概率$P_i$为: $$P_i=\begin{cases}\begin{aligned} 0 & ,\quad \text{if}\ \ i\neq 6\ \ \text{and} \ \sum_{j=1}^{6}SmoothWeight_j=0\\\\ \frac{SmoothWeight_i}{\sum_{j=1}^{6}SmoothWeight_j} & ,\quad \text{if}\ \ i\neq 6\ \ \text{and} \ \sum_{j=1}^{6}SmoothWeight_j\neq 0\\\\ 1-\sum_{j=1}^{5}P_j & ,\quad \text{if}\ \ i=6 \end{aligned}\end{cases}$$ 不难发现,在总权值为0的时候会在第6行出怪;如果前5行概率均为0的时候也会选择在第6行出怪;当所有行权重相等,且均未出过怪的时候,每行出怪概率相等,符合基本的要求。