美文网首页
晕眩测试

晕眩测试

作者: 听闻不见 | 来源:发表于2020-04-14 17:53 被阅读0次

晕眩公式

  • ro小站给出的公式

  • 上述公式没有写到晕眩抗性如何作用到成功率的计算里面,我们推测晕眩抗性的作用,整理出以下公式。

成功率=(基本机率\times \frac{(100-VIT)}{100} + \frac{(施予着LV-被施予者LV-被施予者LUK)}{10})\times \frac{100-晕眩抗性}{100}

测试

为了验证上面的公式,我们做以下测试

  • 测试中的装备与素质点


  • 测试技能: 惊声尖叫Lv5 (眩晕基础机率 50%)


  • 结果

惊声尖叫次数 眩晕次数 眩晕机率
103 10 9.70%
  • 验证

我们带入公式计算出推测的理论眩晕机率
成功率=(50\times \frac{(100-50)}{100} + \frac{(99-99-8)}{10})\times \frac{100-70}{100} = 7.26

由于样本量较少,实验所得的 9.70% 与理论计算的 7.26% 之间的差距可看作合理的误差

查询源码

我们来读一下从GM拿到的源代码

惊声尖叫的技能描述

  - Id: 326
    Name: DC_SCREAM
    Description: Dazzler
    MaxLevel: 5
    Type: Misc
    TargetType: Self
    DamageFlags:
      NoDamage: true
      Splash: true
    Hit: Single
    HitCount: 1
    SplashArea: -1
    AfterCastActDelay: 4000
    Duration2: 5000
    Requires:
      SpCost:
        - Level: 1
          Amount: 12
        - Level: 2
          Amount: 14
        - Level: 3
          Amount: 16
        - Level: 4
          Amount: 18
        - Level: 5
          Amount: 20
  • 可看出惊声尖叫的英文名为Dazzler,代码中的变量名为DC_SCREAM

惊声尖叫的眩晕基础概率

case DC_SCREAM:
    sc_start(src,bl,SC_STUN,(25+5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
    break;
  • 可看出基础概率的计算为 (25+5*技能等级)%

眩晕状态的机率计算

/// Resistance rate: 10000 = 100%
/// Example:    50% (5000) -> sc_def = 5000 -> 25%;
///             5000ms -> tick_def = 5000 -> 2500ms
int sc_def = 0, tick_def = -1; // -1 = use sc_def
/// Fixed resistance value (after rate calculation)
/// Example:    25% (2500) -> sc_def2 = 2000 -> 5%;
///             2500ms -> tick_def2=2000 -> 500ms
int sc_def2 = 0, tick_def2 = 0;

......
......

case SC_STUN:
    sc_def = status->vit*100;
    sc_def2 = status->luk*10 + status_get_lv(bl)*10 - status_get_lv(src)*10;
    tick_def2 = status->luk*10;
    break;
  • 结合注释理解,状态的抗性有两种,一种为乘算抗性,一种为加算抗性。以上面的眩晕为例子,vit作用于乘算抗性,luk等作用于加算抗性。
  • 状态持续时间的抗性也同样的分为乘算与加算的两种
  • 状态持续时间的抗性没有给出时,将用状态抗性代替(就是说vit以乘算的方式减少眩晕时间)

最终眩晕的机率计算

if (!(flag&SCSTART_NORATEDEF)) {
    rate -= rate*sc_def/10000;
    rate -= sc_def2;

    // Minimum chances
    switch (type) {
        case SC_BITE:
            rate = max(rate, 5000); // Minimum of 50%
            break;
    }

    // Item resistance (only applies to rate%)
    if (sd) {
        for (const auto &it : sd->reseff) {
            if (it.id == type)
                rate -= rate * it.val / 10000;
        }
        if (sd->sc.data[SC_COMMONSC_RESIST] && SC_COMMON_MIN <= type && type <= SC_COMMON_MAX)
            rate -= rate*sd->sc.data[SC_COMMONSC_RESIST]->val1/100;
    }

    // Aegis accuracy
    if(rate > 0 && rate%10 != 0) rate += (10 - rate%10);
}
  • 先由基础机率,状态的乘算抗性,状态的加算抗性计算得出中状态的机率
    中状态的机率 = 基础机率\times \frac{状态的乘算抗性}{10000} - 状态的加算抗性
  • 卡片,装备等所带来的状态抗性(Item resistance)最后计算
    最终中状态的机率 = 中状态的机率 \times \frac{Item resistance}{10000}

总结

  • 源码的查询结果与实验结果均与推测公式相符

相关文章

  • 晕眩测试

    晕眩公式 ro小站给出的公式 上述公式没有写到晕眩抗性如何作用到成功率的计算里面,我们推测晕眩抗性的作用,整理出以...

  • 晕眩

    浮在空中的磷光 隔着窗户投射出的黑暗 扰乱着视觉的方向 远望着虚化的脸庞 缀满惆怅

  • 晕眩

    本故事纯属虚构。 一 蹲守在东极岛的缉私队员他累了,最近感觉特别头晕。 他是13年补进来的,他的前任是由于家里面闹...

  • 晕眩

    这是最末的春天 夏天提前投来将至的信件 阳光透过窗户投下三道影子 图书馆门前 柏油路被晾晒的 发不出口渴的呼唤 困...

  • 晕眩

  • 晕眩

    闹铃已经跳动到接近疯狂 但我却只是伸手关下闹铃 依然泰然自若地感受着自己的每次呼吸 耳边有许多声音 是你 是他 也...

  • 晕眩

    打开公交车窗 夏天的风吹着我的沉默 我看着小孩吹出的气泡 看着霓虹里不属于我的颜色 看着你我的黑色天空 质疑着自己...

  • 晕眩

    昨晚上和张先生做了今天和周末的做事计划,追了几集庆余年,休息得有些晚。 早晨闹钟响时,我觉得自己是睡着的,尽管昨晚...

  • 晕眩

    天旋地转的感觉 在你吻我的一刹那 瞬间的怡悦 敲碎了矜娇的镣铐 颤律如醍醐灌顶 我怎么会为这么痴迷你呢 除了晕眩 ...

  • 晕眩

    四月。 目光失去了焦点 涣散,流连,好像有歌曲 在诉说 前世匆匆的树和草 找不见 屋顶的暖阳,不再 刺眼—— 跟这...

网友评论

      本文标题:晕眩测试

      本文链接:https://www.haomeiwen.com/subject/oxnzmhtx.html