魔塔吧 关注:64,638贴子:2,156,098

对于攻速的新定义

只看楼主收藏回复

本人这段时间在研究攻速问题。第一次接触这个概念是在《永不复还》上,那里攻速的定义是伤害的系数,计算式是攻速的开平方的十分之一,这个系数乘上(勇攻-怪防)作为单回合伤害。也就是说,这里的攻速当做伤害系数处理,和勇士进攻快慢没有关系,勇士和怪物还是我一下你一下对打的(不考虑属性)。那么,攻速能不能作为进攻频率的表征呢?对此引发了一个思考。
下面来看几个例子。
首先是怪物血量等于(勇攻-怪防)x1.5(注:系数大于1小于等于1.5即可),设勇士攻速225%,按照计算关系,伤害系数x1.5,此时可不费血。按照攻击频率的定义,攻击频率以1.5倍计算,也就是每2回合勇士进攻3次,且攻击的间隔相同,分别是第一回合中期,第二回合中期以及第二回合末期,依次循环。由此可见,在勇士前两次攻击直接,也就是第一回合末期,怪物进攻一次,勇士受到一次伤害。
第二个例子,假设怪物生命1(勇士可秒杀),勇士攻速计算后的系数为0.5。按照《永不复还》的定义,勇士可秒杀不扣血。而按照攻击频率0.5的定义,勇士的第一次进攻应该在第二回合末期,怪物可在第一回合进攻1次,扣1次血。
所以,不同的计算方法对于伤害计算是不同的。我引发的新定义是基于攻击频率的,也就是勇士每次进攻对怪物造成的伤害就是(勇攻-怪防),而攻速不同导致攻击频率改变,进而影响伤害。
明确了定义之后,最大的难点就是写伤害计算式了。因为条件所限,不能显示回合战斗(典型RPG战斗形式),无法展现小数回合进攻,所以写脚本时需要近似处理。攻击频率只定义在勇士身上,怪物在一般情况下还是一回合进攻一次,这里就以怪物进攻作为标尺来计算勇士进攻频率。也就是仍采取1回合勇士和怪物分别进攻的传统模式,只不过在勇士上做了一些改变。加一个条件判定,根据勇士攻速,判定勇士当前回合的进攻次数,可能不攻击,可能攻击1次,也可能攻击多次。一次战斗中各回合勇士攻击次数并不完全相同。
这时就要写新的伤害计算式了,目标在于求出怪物进攻了多少回合(普通属性下),勇士的攻击频率成为问题的关键。因为现实当中不出现小数回合,所以有小数的都按整数处理。比如勇士攻击频率1.5,在第一回合末期应该完成1次进攻外加第二次攻击前的休息时间。因此第一回合只进行1次攻击,按去尾法取整。但是休息时间不能凭空消失,所以应有多个变量辅助判断,使第二个自然回合能进攻2次。
由于脚本是用循环写的,当怪物血量到0时就退出循环,得出怪物进攻回合,因此无需判断整数回合情况,原脚本“@eatimes-=1 if @eatimes==@ehp*1.0/((@ma-@ed)*@orbatktimes).to_i”要删去。
#以下为计算怪物攻击回合数脚本(攻击频率设计为速度值/100.00,这边保留2位浮点数,速度值为100时每回合进攻1次,建议初始值设为100)
#d表示攻击频率,i表示理论进攻次数,j表示敌攻次数,k表示己方实际进攻次数
#x表示1回合己方进攻次数
#(以敌攻1次为一个回合计算,j、k、x取整,i不取整)
@d=@orbatktimes
@i=@j=@k=@x=0
loop do
@i+=@d
@x=@i-@k
if @x%1!=0
@x-=@x%1
end
@ehp-=(@ma-@ed)*@x
if @ehp<=0
break
end
@k+=@x
@j+=1
end
@eatimes=@j
由于本人刚接触RUBY,只能用基本的语法结构,脚本看起来会比较繁琐。希望有能力的大佬能改得更简洁些。如有问题,请多指教。
备注:使用时请打开开关27“速度是否有效”,并在开始事件给勇士速度赋值


IP属地:湖北1楼2019-02-26 22:22回复
    看不懂就对了


    IP属地:云南来自Android客户端2楼2019-02-26 22:29
    回复
      这个攻速定义我好像在很久以前的游戏里见过
      就是那种上面一个进度条,每个人物有个头像在进度条上走,走到末端就可以行动一回合然后回到起点重新跑
      放到魔塔里和原定义最大的不同在于可以量化“先攻”这个概念了,如果双方都从进度条起始处开始走那么双方就是平等的,假如一方有一定的“先攻能力”那么他可以从进度条中间开始跑,等等


      IP属地:北京来自iPhone客户端3楼2019-02-26 22:30
      收起回复
        直接给人物和敌人设置一个时间变量,普通攻击会使时间变量增加 1.0/攻击速度 ,通过判断双方时间变量的大小来决定该谁攻击也可以。


        IP属地:江苏4楼2019-02-26 22:39
        回复
          关于这个的话,我记得晴空里面速度的设定和进攻频率是挂钩的,里面也有影响进度条的技能(比如先发制人)


          5楼2019-02-26 22:49
          回复
            虽然没看完,但是我想到了五行传说


            IP属地:北京来自Android客户端6楼2019-02-26 22:52
            收起回复
              通过类比上述的计算方法,可以创造出“概率转频率"的思想。众所周知,魔塔是以固定伤害为第一要义的,就必须去除随机性元素。然而随着创新时代来临,概率又是最常用的,详见其他RPG游戏,我就不列举了,极大丰富了游戏趣味性。就魔塔而言,有个典型的例子。一个是新新1的章,技能发动是随机的,伤害不是固定的。(衍生出SL大法)。
              参照1楼的脚本,可以这样设计。假设霸者技能发动的概率是30%,先设置判定当技能条达到100%时发动技能,不足100%时不发动,每回合技能条增加30%,然后判定。这样就能实现固定伤害了。
              概率转频率有很多用处,比如设置闪避率,暴击率等等。


              IP属地:湖北来自Android客户端7楼2019-02-27 00:15
              回复
                对于这种攻速我有个问题,就是先手和后手该怎么处理。比如我攻速1.5,怪攻速1.0(换算后的)。那么我先手的时候怪第一次攻击在什么时候,怪先手的时候我第一次攻击又在什么时候


                IP属地:美国来自Android客户端8楼2019-02-27 00:48
                收起回复
                  晴空狂想曲了解一下,就是楼主所说的,跑进度条


                  IP属地:美国来自Android客户端9楼2019-02-27 01:14
                  收起回复


                    IP属地:美国来自Android客户端10楼2019-02-27 01:17
                    回复
                      我还以晴空为例写过一个“速度计算器”的,虽然没啥用


                      IP属地:美国来自Android客户端11楼2019-02-27 01:19
                      回复
                        这个系统是我目前看来最合理的系统


                        IP属地:美国来自iPhone客户端12楼2019-02-27 03:49
                        回复
                          魔防不也名不副实么?
                          并非每回合自己受到的伤害为魔攻减魔防,而是战斗前回复的生命值。


                          星座王
                          点亮12星座印记,去领取
                          活动截止:2100-01-01
                          去徽章馆》
                          IP属地:陕西来自iPhone客户端13楼2019-02-27 10:47
                          回复
                            之前一直想当然地以为每回合伤害等于攻防差乘以敌我攻速商


                            星座王
                            点亮12星座印记,去领取
                            活动截止:2100-01-01
                            去徽章馆》
                            IP属地:陕西来自iPhone客户端14楼2019-02-27 10:50
                            回复
                              硬核


                              IP属地:福建来自Android客户端15楼2019-02-27 13:57
                              回复