本人这段时间在研究攻速问题。第一次接触这个概念是在《永不复还》上,那里攻速的定义是伤害的系数,计算式是攻速的开平方的十分之一,这个系数乘上(勇攻-怪防)作为单回合伤害。也就是说,这里的攻速当做伤害系数处理,和勇士进攻快慢没有关系,勇士和怪物还是我一下你一下对打的(不考虑属性)。那么,攻速能不能作为进攻频率的表征呢?对此引发了一个思考。
下面来看几个例子。
首先是怪物血量等于(勇攻-怪防)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“速度是否有效”,并在开始事件给勇士速度赋值
下面来看几个例子。
首先是怪物血量等于(勇攻-怪防)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“速度是否有效”,并在开始事件给勇士速度赋值
