赞 | 0 |
VIP | -1 |
好人卡 | 5 |
积分 | 1 |
经验 | 4478 |
最后登录 | 2019-11-1 |
在线时间 | 75 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 54
- 在线时间
- 75 小时
- 注册时间
- 2009-9-8
- 帖子
- 56
|
Game_Battler 600行至700行之间。命中、回避、攻击计算、技能计算都在这。- #--------------------------------------------------------------------------
- # ● 计算最後命中率
- # user : 攻击者,技能或物品的使用者
- # obj : 使用的技能或物品(普通攻击时为nil)
- #--------------------------------------------------------------------------
- def calc_hit(user, obj = nil)
- if obj == nil # 普通攻击
- hit = user.hit + user.agi - self.agi # 获取命中率
- physical = true
- elsif obj.is_a?(RPG::Skill) # 技能攻击
- hit = obj.hit + user.agi - self.agi # 获取命中率
- physical = obj.physical_attack
- else # 物品攻击
- hit = 100 # 设命中率为100%
- physical = obj.physical_attack
- end
- if physical # 物理攻击
- hit /= 2 if user.reduce_hit_ratio? # 中了暗黑状态时命中率降低为50%
- end
- return hit
- end
- #--------------------------------------------------------------------------
- # ● 计算最後闪躲率
- # user : 攻击者,技能或物品的使用者
- # obj : 使用的技能或物品(普通攻击时为nil)
- #--------------------------------------------------------------------------
- def calc_eva(user, obj = nil)
- eva = self.agi - 10
- unless obj == nil # 当obj为物品或技能
- eva = 0 unless obj.physical_attack # 非物理攻击时闪躲率 0%
- end
- unless parriable? # 无法闪躲的场合
- eva = 0 # 闪躲率为 0%
- end
- return eva
- end
- #--------------------------------------------------------------------------
- # ● 计算普通攻击伤害
- # attacker : 攻击者
- # 计算结果赋值入 @hp_damage
- #--------------------------------------------------------------------------
- def make_attack_damage_value(attacker)
- damage = (attacker.atk - self.def) + rand(attacker.atk) - rand(attacker.atk)# 基础计算
- damage = 0 if damage < 0 # 设负数伤害为 0
- damage *= elements_max_rate(attacker.element_set) # 属性校正
- damage /= 100
- if damage == 0 # 若伤害为 0
- damage = rand(2) # 一半机率伤害为1
- elsif damage > 0 # 若伤害为正数
- @critical = (rand(100) < attacker.cri) # 会心一击判断
- @critical = false if prevent_critical # 防止会心一击判断
- damage *= 3 if @critical # 会心一击校正
- end
- damage = apply_variance(damage, 20) # 分散度
- damage = apply_guard(damage) # 防御校正
- @hp_damage = damage # 体力伤害
- end
- #--------------------------------------------------------------------------
- # ● 计算技能/物品伤害
- # user : 技能或物品的使用者
- # obj : 使用的技能或物品
- # 计算结果赋值入 @hp_damage
- #--------------------------------------------------------------------------
- def make_obj_damage_value(user, obj)
- damage = obj.base_damage # 基础计算
- if damage > 0 # 若伤害为正
- damage += (rand(user.atk) + user.atk * 2 ) * obj.atk_f / 100# 使用者攻击力关系度
- damage += (rand(user.spi) + user.spi * 2 ) * obj.spi_f / 100# 使用者精神力关系度
- unless obj.ignore_defense # 除非无视防御力
- damage -= self.def * 2 * obj.atk_f / 100 # 目标攻击力关系度
- damage -= self.spi * 2 * obj.spi_f / 100 # 目标精神力关系度
- end
- damage = 0 if damage < 0 # 设负数伤害为0
- elsif damage < 0 # 若伤害为负
- damage -= user.atk * 2 * obj.atk_f / 100 # 使用者攻击力关系度
- damage -= user.spi * 2 * obj.spi_f / 100 # 使用者精神力关系度
- end
- damage *= elements_max_rate(obj.element_set) # 属性校正
- damage /= 100
- damage = apply_variance(damage, obj.variance) # 分散度
- damage = apply_guard(damage) # 防御校正
- if obj.damage_to_mp
- @mp_damage = damage # 伤害魔力
- else
- @hp_damage = damage # 伤害体力
- end
- end
复制代码 |
|