//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:234

符文:17

跳转到指定楼层
1#
发表于 2012-11-16 15:13:53 |只看该作者 |倒序浏览 来自:中国香港
本帖最后由 ye_jiachun 于 2012-11-17 14:03 编辑

小弟工作软件工程师,喜欢平时写代码娱乐,一时兴起写了个模拟陨石打木桩的过程。相信大部分人只关心结果,所以代码就不解释了,喜欢的朋友可以自行研究,说下结论吧。

假设敌人只有一个,站定不动且血无限多。也就是陨石伤害全吃。输出技能只用陨石。

大家都知道陨石的大致过程就是起始满秘能连续砸几个=》空档期=》伤害+dot回秘=》继续砸=》(循环此过程)。。。

我用代码模拟此过程1分钟,通过调整各项参数(秘能上限,自然回秘,暴击回秘,陨石消耗秘能,陨石dot时间,攻速,暴击率)来得到各种组合的结论。

============================模拟中的假设条件============================
木桩怪物,只有1个,血量无限。只用陨石技能,所有陨石和dot均打中怪物。
陨石3秒dot的话,共触发1+3次伤害,伤害均享受暴击回秘;陨石8秒dot的话,共触发1+8次伤害,伤害均享受暴击回秘。
(以上技能假设如有错误请告之lz)

修正hit数,通过击回来验证了陨石hit次数,3秒dot的话是1+3=4次hit,8秒dot是1+7=8次hit。可参考Kid__1412发的相关帖子http://bbs.d.163.com/thread-172409525-1-1.html
以下结论依旧成立,只是需求的相关属性略微有提升,就不做更改了。


============================下面是结论分析==============================

无论怎样的参数组合,陨石都会经历两个状态。从非稳定状态过渡到稳定状态,而稳定状态只有两种:无限砸(无空档期)与非无限砸(有空档期)。

进入稳定无限砸当然是有最低条件的,举个代码跑出来的例子:
127秘能上限,自然回秘12/秒,陨石选用50秘能3秒dot,暴击率40%,暴击回秘17,攻速1.8 。这个条件下持续输出近30秒后进入稳定无限砸状态。
通过调低暴击率,或者调低暴击回秘,则进入了非无限砸稳定状态。

另一个例子:
127秘能上限,自然回秘12/秒,陨石选用50秘能8秒dot,暴击率40%,暴击回秘10,攻速1.8 。这个条件下持续输出12秒左右后进入稳定无限砸状态。
结论一:暴击率,暴击回秘,陨石dot时间,决定了是否能进入无限砸稳定期的核心属性

通过结论一发现无限陨石并不难,难的是缩短非稳定期的时间,这需要更高的属性要求。

继续来个例子:
107秘能上限,自然回秘12/秒,陨石选用50秘能3秒dot,暴击率40%,暴击回秘18,攻速1.8 。30秒后进入稳定无限砸。
157秘能上限,自然回秘12/秒,陨石选用50秘能3秒dot,暴击率40%,暴击回秘18,攻速1.8 。5秒左右就进入稳定无限砸。
107秘能上限,自然回秘12/秒,陨石选用35秘能3秒dot,暴击率40%,暴击回秘18,攻速1.8 。5秒左右就进入稳定无限砸。
107秘能上限,自然回秘12/秒,陨石选用35秘能3秒dot,暴击率40%,暴击回秘18,攻速2.8 。8秒左右就进入稳定无限砸。
结论二:秘能上限,陨石消耗秘能量,攻速,决定了非稳定状态持续时间的核心属性

以上结论中的属性只是影响较大的属性,并不代表与其余属性无关。(如结论一中如果攻速是0.1,其他属性即使很低也能直接进入无限砸啦,哈哈。)
另外实际操作中的环境因素很大,所以会和理论有出入,请勿钻牛角尖。
以上仅仅是对无限陨石做的分析,不包括生存能力与输出能力。

=======================以下论坛中一个陨石流玩家的数据分析=================
142秘能上限,自然回秘14/秒,陨石选用50秘能8秒dot,暴击率60%,暴击回秘19,攻速2.0(不知道他多少攻速,假设2.0吧),模拟结果为3秒不到就进入稳定无限砸。其实实际中加入一些额外操作,这个空档期感觉非常短的。

=======================留给提问====================

Q:加个减陨石秘能装备吧?
A:减少陨石秘能对两个结论都有帮助。

Q:和当场怪物数量也有关系的吧?
A:是的,怪物越多越有利

========================以下是java代码,供参考========================
//file Meteor.java
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Meteor {

    static int energyRecoverPerSecond = 4;
    static double timePerEnergyRec = 1.0 / (10 + energyRecoverPerSecond);
    static double energyRecoverCD = 0;
    static int energyMax = 142;
    static int energyCost = 50;
    static int dotTime = 8;
    static int energyRecoverPerCrit = 19;
    static double speedPerSecond = 2.0;
    static double criticalRatio = 60;
    static int energyCur = energyMax;
    static double timePerAttack = 1 / speedPerSecond;
    static double attackCD = 0;
    static List<Double> yunShiDot = new ArrayList<Double>();
    static Random ran = new Random(System.currentTimeMillis());

    public static void main(String[] args) {

        double time = 0;
        for (time = 0; time < 60; time += 0.01) {
            System.out.printf("%.2f: ", time);
            attack();
            energyRecover();
            System.out.println();
        }
    }

    public static void attack() {
        if (attackCD <= 0) {
            if (energyCur >= energyCost) {
                System.out.printf("attack, energy: %d, ", energyCur);
                energyCur -= energyCost;
                System.out.printf("after cast: %d", energyCur);
                attackCD += timePerAttack;
                yunShiDot.add(-1.25);
            } else {
                System.out.printf("energy not enough, ");
            }
        } else {
            attackCD -= 0.01;
            System.out.printf("in cd %.2f,", attackCD);
        }

    }

    public static void energyRecover() {
        for (int i = 0; i < yunShiDot.size(); i++) {
            double time = yunShiDot.get(i);
            time += 0.01;
            for (double j = 0; j <= dotTime; j += 0.5) {
                if (Math.abs(j - time) < 0.00001) {
                    if (ran.nextInt(100) < criticalRatio) {
                        addEnergy(energyRecoverPerCrit);
                    }
                }
            }
            yunShiDot.set(i, time);
        }
        for (int i = 0; i < yunShiDot.size(); i++) {
            if (Math.abs(dotTime - yunShiDot.get(i)) < 0.00001) {
                yunShiDot.remove(i);
                i--;
            }
        }
        if (energyRecoverCD <= 0) {
            addEnergy(1);
            energyRecoverCD += timePerEnergyRec;
        }
        energyRecoverCD -= 0.01;
    }

    public static void addEnergy(int add) {
        energyCur += add;
        if (energyCur > energyMax) {
            energyCur = energyMax;
        }
        System.out.printf("after gain: %d ", energyCur);
    }
}


点评

scarletremi  辛苦了  发表于 2012-11-16 18:33
已有 1 人评分 符文 收起 理由
雁门寨主 + 50 + 5 喜闻乐见

总评分:  + 50  符文 + 5   查看全部评分

[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/48143433[/armory]
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/36631942[/armory]

帖子:85

符文:8

2#
本帖最后由 joe3688 于 2012-11-16 15:23 编辑

跟當場的怪物數量也有點關係吧....
发表于 2012-11-16 15:19:54 |只看该作者 来自:中国台湾
[armory]http://kr.battle.net/d3/en/profile/shootingguy-3912/hero/1924912[/armory]

帖子:1150

符文:157

3#
很严谨的实验设计,可以给大家一个参考。
发表于 2012-11-16 15:24:08 |只看该作者 来自:日本
1、246力量 168体能  52毒抗 72全抗腰带(1.3亿) A2 刺客地库
2、216智+暴回9+4.5暴击+洞 秘术师头(1.4亿)A2 刺客地库
3、167敏+4暴击 带洞新娜头(3.3亿),A3遣罪之塔底层
4、6暴击 6攻速 65全抗 205护甲 60力 52体 19最小伤害 (1.88亿)A3遣罪之塔二层
5、194智 186体 78全抗 23GF 19MF 带1洞  挖掘者裤子(送基友了)  勇士出品
6、7%攻速  33%暴伤 4.5%暴击 9%生命 (送基友了)  勇士出品
7、94智力  60全抗 11%生命 9攻速 40暴伤 14GF 巫异时刻(自用)   杀戮战场
8、251智力 74敏 59毒抗 8暴击 24暴伤 9攻速 手套      Farm基友所得

帖子:2606

符文:27

4#
我记得之前有人测试陨石后续的火焰每秒只有1hit啊……
http://bbs.d.163.com/thread-172351753-1-1.html
发表于 2012-11-16 15:27:34 |只看该作者 来自:中国香港

帖子:234

符文:17

5#
Kid__1412 发表于 2012-11-16 15:27
我记得之前有人测试陨石后续的火焰每秒只有1hit啊……
http://bbs.d.163.com/thread-172351753-1-1.html

我昨天测下来8秒dot的话跳了17次,也就是1+16。难道我数错了吗,求真相啊
发表于 2012-11-16 15:32:46 |只看该作者 来自:中国香港
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/48143433[/armory]
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/36631942[/armory]

帖子:2606

符文:27

6#
本帖最后由 Kid__1412 于 2012-11-16 15:42 编辑
ye_jiachun 发表于 2012-11-16 15:32
我昨天测下来8秒dot的话跳了17次,也就是1+16。难道我数错了吗,求真相啊


等我有空也去测试下……
我觉得那个或许是对的,不过毕竟只测试了1.0和1.5攻速,你也有可能是对的
每个技能的hit数未必像风一样是基本随攻速线性增长,有可能是如楼梯式一般增长
发表于 2012-11-16 15:41:41 |只看该作者 来自:中国香港

帖子:7622

符文:686

7#
能用击回测试下罪恶之心么?
发表于 2012-11-16 15:48:23 来自凯恩之角App |只看该作者 来自:法国

帖子:234

符文:17

8#
SORAL 发表于 2012-11-16 15:48
能用击回测试下罪恶之心么?

击回不在这个贴考虑内容中。
发表于 2012-11-16 15:55:51 |只看该作者 来自:中国香港
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/48143433[/armory]
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/36631942[/armory]

帖子:2606

符文:27

9#
ye_jiachun 发表于 2012-11-16 15:55
击回不在这个贴考虑内容中。

因为用击回测试hit数比较准确,肉眼看白黄子可能还是有误差……
发表于 2012-11-16 15:57:37 |只看该作者 来自:中国香港

帖子:234

符文:17

10#
Kid__1412 发表于 2012-11-16 15:57
因为用击回测试hit数比较准确,肉眼看白黄子可能还是有误差……

恩,昨晚是用肉眼看一个地震魔的,解散佣兵,贴身站着,看得还算清楚,周末再仔细确认下hit数吧,觉得自己还没年龄大到数数错吧。。。
发表于 2012-11-16 16:01:35 |只看该作者 来自:中国香港
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/48143433[/armory]
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/36631942[/armory]

帖子:7622

符文:686

11#
ye_jiachun 发表于 2012-11-16 15:55
击回不在这个贴考虑内容中。

用击回加触发系数可以反推hits数
发表于 2012-11-16 16:01:55 来自凯恩之角App |只看该作者 来自:法国

帖子:234

符文:17

12#
SORAL 发表于 2012-11-16 16:01
用击回加触发系数可以反推hits数

血量回复无论每秒触发多少次,都是每秒一跳,不能通过血量回复hit数来判断攻击的hit数。举个明显例子,5个龙卷风在外面,这时候击回的回复血量都是一秒一跳的,但是攻击hit显然不同
发表于 2012-11-16 16:07:01 |只看该作者 来自:中国香港
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/48143433[/armory]
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/36631942[/armory]

帖子:7622

符文:686

13#
本帖最后由 SORAL 于 2012-11-16 16:13 编辑
ye_jiachun 发表于 2012-11-16 16:07
血量回复无论每秒触发多少次,都是每秒一跳,不能通过血量回复hit数来判断攻击的hit数。举个明显例子,5个 ...


如果击回200,你扔一次陨石,回了400血,说明击中2次,然后这次陨石的hit数(程序判定)的数学期望就是2/0.125(普通陨石的触发系数)。多测几次弄平均降低置信区间。

注意各个陨石的触发系数不一样
发表于 2012-11-16 16:11:41 来自凯恩之角App |只看该作者 来自:法国

帖子:2606

符文:27

14#
ye_jiachun 发表于 2012-11-16 16:07
血量回复无论每秒触发多少次,都是每秒一跳,不能通过血量回复hit数来判断攻击的hit数。举个明显例子,5个 ...

是根据回了多少血来判断hit数啊
因为每hit回血=击回*触发系数
hit数=总共回血/(击回*触发系数)
绿字多久跳一下没关系的
发表于 2012-11-16 16:12:59 |只看该作者 来自:中国香港

帖子:234

符文:17

15#
多谢以上两位提醒,我从这个角度再去测下陨石的hit数。不过这只是一个参数的改动,不影响程序本身。周末找个时间更新下。
发表于 2012-11-16 16:22:13 |只看该作者 来自:中国香港
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/48143433[/armory]
[armory]http://tw.battle.net/d3/zh/profile/YJC-3415/hero/36631942[/armory]
您需要登录后才可以回帖 登录 | 注册网易通行证