金庸无双工作组【技术】
- UID
- 7290044
- 主题
- 20
- 阅读权限
- 40
- 帖子
- 437
- 精华
- 1
- 积分
- 628
- 金钱
- 7330
- 荣誉
- 19
- 人气
- 190
- 在线时间
- 1034 小时
- 评议
- 0
- 帖子
- 437
- 精华
- 1
- 积分
- 628
- 金钱
- 7330
- 荣誉
- 19
- 人气
- 190
- 评议
- 0
|
看了一些人发武功伤害的帖子,但是还是有很多的问题。如果想真正的理解武功伤害是如何计算的,那么必须要彻底的理解一段代码
我先把这段代码贴上
#--------------------------------------------------------------------------
# ● 获取技能攻击伤害
#--------------------------------------------------------------------------
def event_damage_skill(user,event,skill)
# 计算威力
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= event.pdef * skill.pdef_f / 200
power -= event.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# 计算倍率
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# 计算基本伤害
damage = power * rate / 20
# 分散
if skill.variance > 0 and damage.abs > 0
amp = [damage.abs * skill.variance / 100, 1].max
damage += rand(amp+1) + rand(amp+1) - amp
end
if skill.plus_state_set.size > 0
if rand(100) > 100-rand(skill.hit)
#==============左岸修改,不知道为什么原先程序只取技能第一状态==
for state in skill.plus_state_set
#event.add_state(skill.plus_state_set[0])
event.add_state(state)
end
#=====================注释掉的内容是原先的代码========================
end
end
return damage
end
然后我来解析一下
power = skill.power + user.atk * skill.atk_f / 100
这是先获取威力的skill.power就是招式的威力,user.atk 就是人物的攻击力,也就是受各种武器影响后的最终攻击力
skill.atk_f就是招式的攻击力,在原版1.0中,外功攻击全是100,内功攻击全是0.如果这个算不是0,武器的攻击力才有效果
到了晴天版,这里出现了50,80等等非100的数字,也就是人物的攻击力只有50%起效,或者80%起效。
接下来的
if power > 0
power -= event.pdef * skill.pdef_f / 200
power -= event.mdef * skill.mdef_f / 200
power = [power, 0].max
end
这是破防招,内功防御,外功防御的控制
如果是内功攻击,那么skill.pdef_f就是0,让event.pdef 不起作用,对power不影响
也就是招式的外功防御为0,让敌人的外防不起作用,只有内防起作用
如果两个都是0,就是破防招了。
所以定义武功的时候,下面的两个物理防御和魔法防御越小,武功威力越高。
到了晴天版,出现多不规范的东西。在3.67中,我会修正。
接下来的
# 计算倍率
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# 计算基本伤害
damage = power * rate / 20
这个就是四维的计算了,先去rate = 20,最后除以20,是为了防止小于1
再下面的
# 分散
是在设置分散的范围里,随机取消,这个分散一般设置15。
也就是上面计算的结果,在15%上下波动
最后是招式负面状态的启用
这段代码我修改了,加了我名字的注释
原来的程序只有招式的第一个状态才起效
也就是像打狗棒,虽然负面效果多,其实只有第一个是有用的
我修改后,是全面起效的。
现在举例说一个
比如3.66的三才剑法
威力18,外功,招式攻击力100,刚100
如果人物的攻击力是20,四维都是100,那么计算如下
先是
power=18+20*100/100=38(其实两个100抵消,就是攻击力20起作用)
接着计算敌人防御,假设敌人外防御,内防御都是10
power -= 10* skill.pdef_f / 200——————因为是外功攻击,所以这里的skill.pdef_f 是100所以power减少5
power -= 10* skill.mdef_f / 200——————因为外功攻击,所以这里skill.mdef_f是0.所以不变
power = [power, 0].max,保证power不能是负数
如果是破防招,才够不要减少skill.pdef_f ,和skill.mdef_f都是0
这时pow已经是33了
接下来计算四维
因为三才剑只有刚100
所以
rate = 20
rate += (user.str * skill.str_f / 100)==================因为刚100,所以这句有效,skill.str_f为100,我假设了user.str,也就是人物刚为100
rate += (user.dex * skill.dex_f / 100)==================愈,无效skill.dex_f为0
rate += (user.agi * skill.agi_f / 100)==================轻,无效skill.agi_f 为0
rate += (user.int * skill.int_f / 100)====================柔,无效skill.int_f为0
# 计算基本伤害
damage = power * rate / 20
计算得到rate=120
damage=33*120/20=198
然后是198在15%波动
|
-
总评分: 金钱 + 200
荣誉 + 1
查看全部评分
|