幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1824|回复: 11

求下RMXP里所有的计算公式,要直观的那 种……

[复制链接]

12

主题

74

帖子

1818

积分

⑥精研

积分
1818
发表于 2005-10-31 12:36:00 | 显示全部楼层 |阅读模式
包括战斗命中,回避,技能伤害,物理伤害,魔法伤害等等。

谢过先
小乔花园入口↓ http://fengqingweb.go.51.net/
回复

使用道具 举报

89

主题

2333

帖子

3273万

积分

⑧专业

Xavier on Rails

积分
32739794
QQ
发表于 2005-10-31 17:45:03 | 显示全部楼层
全都在Game_Battle3里面定义的
38—204行
#--------------------------------------------------------------------------
# ● 应用通常攻击效果
#   attacker : 攻击者 (battler)
#--------------------------------------------------------------------------
def attack_effect(attacker)
  # 清除会心一击标志
  self.critical = false
  # 第一命中判定
  hit_result = (rand(100) < attacker.hit)
  # 命中的情况下
  if hit_result == true
    # 计算基本伤害
    atk = [attacker.atk - self.pdef / 2, 0].max
    self.damage = atk * (20 + attacker.str) / 20
    # 属性修正
    self.damage *= elements_correct(attacker.element_set)
    self.damage /= 100
    # 伤害符号正确的情况下
    if self.damage > 0
    # 会心一击修正
    if rand(100) < 4 * attacker.dex / self.agi
      self.damage *= 2
      self.critical = true
    end
    # 防御修正
    if self.guarding?
      self.damage /= 2
    end
    end
    # 分散
    if self.damage.abs > 0
    amp = [self.damage.abs * 15 / 100, 1].max
    self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    # 第二命中判定
    eva = 8 * self.agi / attacker.dex + self.eva
    hit = self.damage < 0 ? 100 : 100 - eva
    hit = self.cant_evade? ? 100 : hit
    hit_result = (rand(100) < hit)
  end
  # 命中的情况下
  if hit_result == true
    # 状态冲击解除
    remove_states_shock
    # HP 的伤害计算
    self.hp -= self.damage
    # 状态变化
    @state_changed = false
    states_plus(attacker.plus_state_set)
    states_minus(attacker.minus_state_set)
  # Miss 的情况下
  else
    # 伤害设置为 "Miss"
    self.damage = "Miss"
    # 清除会心一击标志
    self.critical = false
  end
  # 过程结束
  return true
end
#--------------------------------------------------------------------------
# ● 应用特技效果
#   user : 特技的使用者 (battler)
#   skill : 特技
#--------------------------------------------------------------------------
def skill_effect(user, skill)
  # 清除会心一击标志
  self.critical = false
  # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
    ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
    # 过程结束
    return false
  end
  # 清除有效标志
  effective = false
  # 公共事件 ID 是有效的情况下,设置为有效标志
  effective |= skill.common_event_id > 0
  # 第一命中判定
  hit = skill.hit
  if skill.atk_f > 0
    hit *= user.hit / 100
  end
  hit_result = (rand(100) < hit)
  # 不确定的特技的情况下设置为有效标志
  effective |= hit < 100
  # 命中的情况下
  if hit_result == true
    # 计算威力
    power = skill.power + user.atk * skill.atk_f / 100
    if power > 0
    power -= self.pdef * skill.pdef_f / 200
    power -= self.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)
    # 计算基本伤害
    self.damage = power * rate / 20
    # 属性修正
    self.damage *= elements_correct(skill.element_set)
    self.damage /= 100
    # 伤害符号正确的情况下
    if self.damage > 0
    # 防御修正
    if self.guarding?
      self.damage /= 2
    end
    end
    # 分散
    if skill.variance > 0 and self.damage.abs > 0
    amp = [self.damage.abs * skill.variance / 100, 1].max
    self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    # 第二命中判定
    eva = 8 * self.agi / user.dex + self.eva
    hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
    hit = self.cant_evade? ? 100 : hit
    hit_result = (rand(100) < hit)
    # 不确定的特技的情况下设置为有效标志
    effective |= hit < 100
  end
  # 命中的情况下
  if hit_result == true
    # 威力 0 以外的物理攻击的情况下
    if skill.power != 0 and skill.atk_f > 0
    # 状态冲击解除
    remove_states_shock
    # 设置有效标志
    effective = true
    end
    # HP 的伤害减法运算
    last_hp = self.hp
    self.hp -= self.damage
    effective |= self.hp != last_hp
    # 状态变化
    @state_changed = false
    effective |= states_plus(skill.plus_state_set)
    effective |= states_minus(skill.minus_state_set)
    # 威力为 0 的场合
    if skill.power == 0
    # 伤害设置为空的字串
    self.damage = ""
    # 状态没有变化的情况下
    unless @state_changed
      # 伤害设置为 "Miss"
      self.damage = "Miss"
    end
    end
  # Miss 的情况下
  else
    # 伤害设置为 "Miss"
    self.damage = "Miss"
  end
  # 不在战斗中的情况下
  unless $game_temp.in_battle
    # 伤害设置为 nil
    self.damage = nil
  end
  # 过程结束
  return effective
end
回复 支持 反对

使用道具 举报

12

主题

74

帖子

1818

积分

⑥精研

积分
1818
 楼主| 发表于 2005-10-31 17:53:02 | 显示全部楼层
ORZ……

先谢楼上……

也是我没说清楚,我要的是直观的计算公式,脚本一点也看不懂……
小乔花园入口↓ http://fengqingweb.go.51.net/
回复 支持 反对

使用道具 举报

89

主题

2333

帖子

3273万

积分

⑧专业

Xavier on Rails

积分
32739794
QQ
发表于 2005-10-31 17:58:17 | 显示全部楼层
第一命中率判定普通攻击
第一命中率 = A 当前状态下的命中率 %
技能攻击
攻击力 F 为 1 以上(物理攻击)
第一命中率 = 技能的命中率 × A 当前状态下的命中率 % ÷ 100
攻击力 F 为 0(物理攻击以外)
第一命中率 = 技能的命中率
使用物品
第一命中率 = 物品的命中率
A 在正常状态下的命中率为 100。
必杀机率判定普通攻击
必杀率 = 4 × A 的灵巧 ÷ B 的速度
技能攻击
必杀率 = 0
使用物品
必杀率 = 0
必杀率即奋力一击(通常会使敌方常受到较大的损伤)发生的机率,如果必杀率为 4 则表示每 4 个回合就出现一次奋力一击。
伤害计算普通攻击
威力 = A 的攻击力 - (B 的物理防御 ÷ 2)
放大率 = 20 + A 的力量
分散度 = 15
威力的最小值:0
技能攻击
技能的威力值为正数
威力 = 技能的威力
+ (A 的攻击力 × 技能的攻击力 F ÷ 100)
- (B 的物理防御 × 技能的物理防御 F ÷ 200)
- (B 的魔法防御 × 技能的魔法防御 F ÷ 200)

威力的最小值:0
技能的威力值为负数
威力 = 技能的威力
放大率 = 20
+ (A 的力量 × 技能的力量 F ÷ 100)
+ (A 的灵巧 × 技能的灵巧 F ÷ 100)
+ (A 的速度 × 技能的速度 F ÷ 100)
+ (A 的魔力 × 技能的魔力 F ÷ 100)
分散度 = 技能的分散度
使用物品
HP 回复量为负数
威力 = - HP 回复量
- (B 的物理防御 × 物品的物理防御 F ÷ 20)
- (B 的魔法防御 × 物品的魔法防御 F ÷ 20)

威力的最小值:0
HP 回复量为正数
威力 = - HP 回复量
放大率 = 20
分散度 = 物品的分散度
伤害 = 威力 × 放大率 ÷ 20 × 属性修正 × 必杀修正 × 防御修正 ( ± 分散度 %)


属性修正:有攻击属性时,在 B 的属性有效度中选择最弱的进行修正,修正值如下。
A:200%,B:150%,C:100%,D:50%,E:0%,F:-100%
另外,攻击属性符合 B 防具的防御属性的,伤害减半,修正值为 1/2。
有多个相同防御属性的,减半效果要叠加。
必杀修正:伤害值为正数,奋力一击发动时修正值为 2。
防御修正:伤害值为正数,B 防御时修正值为 1/2。
第二命中率判定伤害值为正数
B 为正常状态
回避力 = 8 × B 的速度 ÷ A 的灵巧 + B 的回避修正
普通攻击
第二命中率 = 100 - 回避力
技能攻击
第二命中率 = 100 -(回避力 × 技能的回避 F ÷ 100)
使用物品
第二命中率 = 100
B 附加有「不能回避攻击」状态
第二命中率 = 100
伤害值为负数(回复)
第二命中率 = 100
逃跑成功率逃跑成功率 =50 × 角色的速度平均值 ÷ 敌人的速度平均值
回复 支持 反对

使用道具 举报

12

主题

74

帖子

1818

积分

⑥精研

积分
1818
 楼主| 发表于 2005-10-31 18:04:54 | 显示全部楼层
那个A是指攻击方么?B是被攻击方?
小乔花园入口↓ http://fengqingweb.go.51.net/
回复 支持 反对

使用道具 举报

18

主题

230

帖子

3055

积分

⑥精研

积分
3055
QQ
发表于 2005-10-31 18:23:30 | 显示全部楼层
正解.
回复 支持 反对

使用道具 举报

0

主题

2

帖子

15

积分

②入门

积分
15
发表于 2005-10-31 18:25:42 | 显示全部楼层
好专业…………
回复 支持 反对

使用道具 举报

12

主题

74

帖子

1818

积分

⑥精研

积分
1818
 楼主| 发表于 2005-10-31 19:38:13 | 显示全部楼层
那问下第1和第2命中什么意思?
小乔花园入口↓ http://fengqingweb.go.51.net/
回复 支持 反对

使用道具 举报

12

主题

74

帖子

1818

积分

⑥精研

积分
1818
 楼主| 发表于 2005-11-2 18:07:44 | 显示全部楼层
小顶下~

问下关于灵巧和速度,公式中没有太直观的相关说明,难道这两个参数不影响命中只影响必杀?
小乔花园入口↓ http://fengqingweb.go.51.net/
回复 支持 反对

使用道具 举报

12

主题

74

帖子

1818

积分

⑥精研

积分
1818
 楼主| 发表于 2005-11-3 12:27:53 | 显示全部楼层
大人们帮忙……
小乔花园入口↓ http://fengqingweb.go.51.net/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-25 05:12 , Processed in 0.014155 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表