设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 899|回复: 6
打印 上一主题 下一主题

[已经解决] 一个荒唐的公式错误,请求修正

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
60 小时
注册时间
2008-8-27
帖子
531
跳转到指定楼层
1
发表于 2009-7-20 09:46:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
rmxp自带的战斗公式自身没有防御太垃圾
我在论坛里找到了一个战斗公式 用起来不错
不过有一个错误用起来让我很抓狂
就是当攻击力<对方防御力的时候  会出现加血现象

求大大们帮忙改过来
#============================================================================

#

# ●●作为XP的整核心战斗公式重新整理,很多东西不再是默认的使用前请看懂说明

#   否则会莫名奇妙

#   该脚本与装备扩充,不兼容不过稍作协调即可,另外属性扩从也需要协调

#   

#  ---------------------------------------------------------------------------

#  新的装备属性设定



#    ●武器的会心几率 = 武器的灵巧

#    ●武器命中修正 = 武器的力量



#    ●实际攻击 = 力量 + 装备攻击

#  

#  那么所有的防具的力量都改成攻击力了



#    考虑到有些人希望升级有防御力

#    为了方便设定,把灵巧改为防御(魔法防御的话,不同人的意见很不同,把魔力基础跟魔防基础)



#    ●实际防御 = 基础灵巧 + 装备防御力

#    ●实际魔防 = 基础魔力 + 装备魔防 (基础就是本身的,不加装备的属性)



#  如果还需要防具如首饰也有会心几率的话

#    ●防具的会心几率 = 防具的灵巧



#  关于怪物的相关属性,由于怪物没有装备,所以就设为默认

#    ●怪物的:命中 = 速度 + 力量,会心率 = 灵巧,躲闪 = 速度 + 回避修正(力量是干什么的?)



#  最后战斗公式

#     ●攻击力 = 攻击 + 力量



#     ●伤害 = 攻击力 - 防御力



#     ●会心几率 = 会心几率(怪物,主角不一样啊)

#     ●命中率% = 武器命中 + 速度 - 敌方速度 -敌方回避修正

#-------------------------------------------------------------------------------

#  新的技能属性设定

#    技能灵巧为技能会心率

#      关于技能命中你可以做如下设定;

#        当技能命中设定为0时,该技能没有自身命中,其命中与主角普通攻击时命中相同

#  最终技能公式

#     ●伤害  = 技能威力 + (主角能力)* 相关度 - 敌人守备 * 相关度

#     ●会心率 = 技能灵巧

#----------------暂时这样吧,大概跟火纹相似--------------------------------------------------------





class Game_Actor < Game_Battler

#--------是否为主角----------------------------------------------------  

  def actor?

    true

  end

  #--------------------------------------------------------------------------

  # ● 获取基本力量

  #--------------------------------------------------------------------------

  def base_str

    n = $data_actors[@actor_id].parameters[2, @level]

    #weapon = $data_weapons[@weapon_id]

    #armor1 = $data_armors[@armor1_id]

    #armor2 = $data_armors[@armor2_id]

    #armor3 = $data_armors[@armor3_id]

    #armor4 = $data_armors[@armor4_id]

    #n += weapon != nil ? weapon.str_plus : 0

    #n += armor1 != nil ? armor1.str_plus : 0

    #n += armor2 != nil ? armor2.str_plus : 0

    #n += armor3 != nil ? armor3.str_plus : 0

    #n += armor4 != nil ? armor4.str_plus : 0

    return [[n, 1].max, 999].min

  end

  #--------------------------------------------------------------------------

  # ● 获取基本灵巧 — 这个是会心率啦!

  #--------------------------------------------------------------------------

  def base_dex

    #n = $data_actors[@actor_id].parameters[3, @level]

    weapon = $data_weapons[@weapon_id]

    armor1 = $data_armors[@armor1_id]

    armor2 = $data_armors[@armor2_id]

    armor3 = $data_armors[@armor3_id]

    armor4 = $data_armors[@armor4_id]

    armor5 = $data_armors[@armor5_id] if @armor5_id != nil

    armor6 = $data_armors[@armor6_id] if @armor6_id != nil

    n = weapon != nil ? weapon.dex_plus : 0

    n += armor1 != nil ? armor1.dex_plus : 0

    n += armor2 != nil ? armor2.dex_plus : 0

    n += armor3 != nil ? armor3.dex_plus : 0

    n += armor4 != nil ? armor4.dex_plus : 0

    n += armor5 != nil ? armor5.dex_plus : 0

    n += armor6 != nil ? armor6.dex_plus : 0

    return [[n, 1].max, 999].min

  end

  #--------------------------------------------------------------------------

  # ● 获取基本攻击力

  #--------------------------------------------------------------------------

  def base_atk

    n = $data_actors[@actor_id].parameters[2, @level]

    weapon = $data_weapons[@weapon_id]

    armor1 = $data_armors[@armor1_id]

    armor2 = $data_armors[@armor2_id]

    armor3 = $data_armors[@armor3_id]

    armor4 = $data_armors[@armor4_id]

    armor5 = $data_armors[@armor5_id] if @armor5_id != nil

    armor6 = $data_armors[@armor6_id] if @armor6_id != nil

    n += weapon != nil ? weapon.atk : 0

    n += armor1 != nil ? armor1.str_plus : 0

    n += armor2 != nil ? armor2.str_plus : 0

    n += armor3 != nil ? armor3.str_plus : 0

    n += armor4 != nil ? armor4.str_plus : 0

    n += armor5 != nil ? armor5.str_plus : 0

    n += armor6 != nil ? armor6.str_plus : 0

    return [[n, 1].max, 999].min

  end

  #--------------------------------------------------------------------------

  # ● 获取基本物理防御

  #--------------------------------------------------------------------------

  def base_pdef

    n = $data_actors[@actor_id].parameters[3, @level]

    weapon = $data_weapons[@weapon_id]

    armor1 = $data_armors[@armor1_id]

    armor2 = $data_armors[@armor2_id]

    armor3 = $data_armors[@armor3_id]

    armor4 = $data_armors[@armor4_id]

    armor5 = $data_armors[@armor5_id] if @armor5_id != nil

    armor6 = $data_armors[@armor6_id] if @armor5_id != nil

    pdef1 = weapon != nil ? weapon.pdef : 0

    pdef2 = armor1 != nil ? armor1.pdef : 0

    pdef3 = armor2 != nil ? armor2.pdef : 0

    pdef4 = armor3 != nil ? armor3.pdef : 0

    pdef5 = armor4 != nil ? armor4.pdef : 0

    pdef6 = armor5 != nil ? armor5.pdef : 0

    pdef7 = armor6 != nil ? armor6.pdef : 0

    return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 + pdef6 + pdef7 + n

  end

  #--------------------------------------------------------------------------

  # ● 获取基本魔法防御

  #--------------------------------------------------------------------------

  def base_mdef

    n = $data_actors[@actor_id].parameters[5, @level]

    weapon = $data_weapons[@weapon_id]

    armor1 = $data_armors[@armor1_id]

    armor2 = $data_armors[@armor2_id]

    armor3 = $data_armors[@armor3_id]

    armor4 = $data_armors[@armor4_id]

    armor5 = $data_armors[@armor5_id] if @armor5_id != nil

    armor6 = $data_armors[@armor6_id] if @armor5_id != nil

    mdef1 = weapon != nil ? weapon.mdef : 0

    mdef2 = armor1 != nil ? armor1.mdef : 0

    mdef3 = armor2 != nil ? armor2.mdef : 0

    mdef4 = armor3 != nil ? armor3.mdef : 0

    mdef5 = armor4 != nil ? armor4.mdef : 0

    mdef6 = armor5 != nil ? armor5.mdef : 0

    mdef7 = armor6 != nil ? armor6.mdef : 0

    return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 + mdef6 + mdef7 + n

  end

  #--------------------------------------------------------------------------

  # ● 获取修正命中率

  #--------------------------------------------------------------------------

  def base_hit

    weapon = $data_weapons[@weapon_id]

   return weapon != nil ? weapon.str_plus : 0

  end

end

#==============================================================================

# ■ Game_Enemy

#------------------------------------------------------------------------------

#  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的

# 内部使用。

#==============================================================================



class Game_Enemy < Game_Battler

  def actor?

    false

  end

  def base_hit

    return $data_enemies[@enemy_id].str

  end

end

#==============================================================================

# ■ Game_Battler (分割定义 1)

#------------------------------------------------------------------------------

#  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的

# 超级类来使用。

#==============================================================================



class Game_Battler



  #--------------------------------------------------------------------------

  # ● 获取命中修正

  #--------------------------------------------------------------------------

    def eva

      return base_hit

    end

  #--------------------------------------------------------------------------

  # ● 应用通常攻击效果

  #     attacker : 攻击者 (battler)

  #--------------------------------------------------------------------------

  def attack_effect(attacker)

    # 清除会心一击标志

    self.critical = false

    # 第一命中判定

    hit_result = (rand(100) < attacker.hit + attacker.agi - self.agi - self.eva)

    # 命中的情况下

    if hit_result == true

      # 计算基本伤害

      self.damage = [attacker.atk - self.pdef , 0].max

      # 属性修正

      self.damage *= elements_correct(attacker.element_set)

      self.damage /= 100

      # 伤害符号正确的情况下

      if self.damage > 0

        # 会心一击修正

        if rand(100) < attacker.dex

          self.damage *= 3

          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

      # 第二命中判定

    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

    # 第一命中判定

    if skill.hit !=0

      hit = skill.hit

    else

      hit = user.hit + user.agi - self.agi - self.eva

    end  

    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 / 100

        power -= self.mdef * skill.mdef_f / 100

        power += (user.int * skill.int_f / 100)

        power += (user.atk * skill.atk_f / 100)

      else

        power -= (user.int * skill.int_f / 100)

        power -= (user.atk * skill.atk_f / 100)

      end

      # 计算倍率

#     rate = 20

#     rate += (user.str * skill.str_f / 100)

#     rate += (user.dex * skill.dex_f / 100)

#     rate += (user.agi * skill.agi_f / 100)

      

      # 计算基本伤害

      self.damage = power

      # 属性修正

      self.damage *= elements_correct(skill.element_set)

      self.damage /= 100

      # 伤害符号正确的情况下

      if self.damage > 0

        #h会心修正

        if rand(100) < skill.dex_f

          self.damage *= 3

           self.critical = true

        end  

        # 防御修正

        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

      

      # 不确定的特技的情况下设置为有效标志

      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

end

Lv1.梦旅人

梦石
0
星屑
50
在线时间
128 小时
注册时间
2009-1-28
帖子
2790
2
发表于 2009-7-20 10:44:27 | 只看该作者
self.damage = [attacker.atk - self.pdef , 0].max

不可能吧?这一句已经修订了这个bug....

炼金术的根本法则是等价交换。想要获得,必须失去同等价值的东西。每当烦躁的时候,煎熬在不想做却又正在做的烦心事中的时候,我就安慰自己,提醒自己做这些事情的目的所在,告诉自己不要忽略所获得或者即将获得的回报,物质的,精神的,肉体的,灵魂的回报!只做想做的事情,就会失去不想失去的东西。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
60 小时
注册时间
2008-8-27
帖子
531
3
 楼主| 发表于 2009-7-20 10:49:02 | 只看该作者
本帖最后由 angelwangm 于 2009-7-20 11:07 编辑

但确实出现了这种情况
难道是其他的脚本出了问题??
应该不会吧!删掉这个脚本就没问题了…

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
60 小时
注册时间
2008-8-27
帖子
531
4
 楼主| 发表于 2009-7-20 11:39:14 | 只看该作者
回沙发,那句是普通攻击,我是使用特技出现的这种情况

回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
5
发表于 2009-7-20 12:11:17 | 只看该作者
本帖最后由 ONEWateR 于 2009-7-20 12:12 编辑

漏了 power = [power, 0].max
  1. #============================================================================

  2. #

  3. # ●●作为XP的整核心战斗公式重新整理,很多东西不再是默认的使用前请看懂说明

  4. #   否则会莫名奇妙

  5. #   该脚本与装备扩充,不兼容不过稍作协调即可,另外属性扩从也需要协调

  6. #   

  7. #  ---------------------------------------------------------------------------

  8. #  新的装备属性设定



  9. #    ●武器的会心几率 = 武器的灵巧

  10. #    ●武器命中修正 = 武器的力量



  11. #    ●实际攻击 = 力量 + 装备攻击

  12. #  

  13. #  那么所有的防具的力量都改成攻击力了



  14. #    考虑到有些人希望升级有防御力

  15. #    为了方便设定,把灵巧改为防御(魔法防御的话,不同人的意见很不同,把魔力基础跟魔防基础)



  16. #    ●实际防御 = 基础灵巧 + 装备防御力

  17. #    ●实际魔防 = 基础魔力 + 装备魔防 (基础就是本身的,不加装备的属性)



  18. #  如果还需要防具如首饰也有会心几率的话

  19. #    ●防具的会心几率 = 防具的灵巧



  20. #  关于怪物的相关属性,由于怪物没有装备,所以就设为默认

  21. #    ●怪物的:命中 = 速度 + 力量,会心率 = 灵巧,躲闪 = 速度 + 回避修正(力量是干什么的?)



  22. #  最后战斗公式

  23. #     ●攻击力 = 攻击 + 力量



  24. #     ●伤害 = 攻击力 - 防御力



  25. #     ●会心几率 = 会心几率(怪物,主角不一样啊)

  26. #     ●命中率% = 武器命中 + 速度 - 敌方速度 -敌方回避修正

  27. #-------------------------------------------------------------------------------

  28. #  新的技能属性设定

  29. #    技能灵巧为技能会心率

  30. #      关于技能命中你可以做如下设定;

  31. #        当技能命中设定为0时,该技能没有自身命中,其命中与主角普通攻击时命中相同

  32. #  最终技能公式

  33. #     ●伤害  = 技能威力 + (主角能力)* 相关度 - 敌人守备 * 相关度

  34. #     ●会心率 = 技能灵巧

  35. #----------------暂时这样吧,大概跟火纹相似--------------------------------------------------------





  36. class Game_Actor < Game_Battler

  37. #--------是否为主角----------------------------------------------------  

  38.   def actor?

  39.     true

  40.   end

  41.   #--------------------------------------------------------------------------

  42.   # ● 获取基本力量

  43.   #--------------------------------------------------------------------------

  44.   def base_str

  45.     n = $data_actors[@actor_id].parameters[2, @level]

  46.     #weapon = $data_weapons[@weapon_id]

  47.     #armor1 = $data_armors[@armor1_id]

  48.     #armor2 = $data_armors[@armor2_id]

  49.     #armor3 = $data_armors[@armor3_id]

  50.     #armor4 = $data_armors[@armor4_id]

  51.     #n += weapon != nil ? weapon.str_plus : 0

  52.     #n += armor1 != nil ? armor1.str_plus : 0

  53.     #n += armor2 != nil ? armor2.str_plus : 0

  54.     #n += armor3 != nil ? armor3.str_plus : 0

  55.     #n += armor4 != nil ? armor4.str_plus : 0

  56.     return [[n, 1].max, 999].min

  57.   end

  58.   #--------------------------------------------------------------------------

  59.   # ● 获取基本灵巧 — 这个是会心率啦!

  60.   #--------------------------------------------------------------------------

  61.   def base_dex

  62.     #n = $data_actors[@actor_id].parameters[3, @level]

  63.     weapon = $data_weapons[@weapon_id]

  64.     armor1 = $data_armors[@armor1_id]

  65.     armor2 = $data_armors[@armor2_id]

  66.     armor3 = $data_armors[@armor3_id]

  67.     armor4 = $data_armors[@armor4_id]

  68.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil

  69.     armor6 = $data_armors[@armor6_id] if @armor6_id != nil

  70.     n = weapon != nil ? weapon.dex_plus : 0

  71.     n += armor1 != nil ? armor1.dex_plus : 0

  72.     n += armor2 != nil ? armor2.dex_plus : 0

  73.     n += armor3 != nil ? armor3.dex_plus : 0

  74.     n += armor4 != nil ? armor4.dex_plus : 0

  75.     n += armor5 != nil ? armor5.dex_plus : 0

  76.     n += armor6 != nil ? armor6.dex_plus : 0

  77.     return [[n, 1].max, 999].min

  78.   end

  79.   #--------------------------------------------------------------------------

  80.   # ● 获取基本攻击力

  81.   #--------------------------------------------------------------------------

  82.   def base_atk

  83.     n = $data_actors[@actor_id].parameters[2, @level]

  84.     weapon = $data_weapons[@weapon_id]

  85.     armor1 = $data_armors[@armor1_id]

  86.     armor2 = $data_armors[@armor2_id]

  87.     armor3 = $data_armors[@armor3_id]

  88.     armor4 = $data_armors[@armor4_id]

  89.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil

  90.     armor6 = $data_armors[@armor6_id] if @armor6_id != nil

  91.     n += weapon != nil ? weapon.atk : 0

  92.     n += armor1 != nil ? armor1.str_plus : 0

  93.     n += armor2 != nil ? armor2.str_plus : 0

  94.     n += armor3 != nil ? armor3.str_plus : 0

  95.     n += armor4 != nil ? armor4.str_plus : 0

  96.     n += armor5 != nil ? armor5.str_plus : 0

  97.     n += armor6 != nil ? armor6.str_plus : 0

  98.     return [[n, 1].max, 999].min

  99.   end

  100.   #--------------------------------------------------------------------------

  101.   # ● 获取基本物理防御

  102.   #--------------------------------------------------------------------------

  103.   def base_pdef

  104.     n = $data_actors[@actor_id].parameters[3, @level]

  105.     weapon = $data_weapons[@weapon_id]

  106.     armor1 = $data_armors[@armor1_id]

  107.     armor2 = $data_armors[@armor2_id]

  108.     armor3 = $data_armors[@armor3_id]

  109.     armor4 = $data_armors[@armor4_id]

  110.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil

  111.     armor6 = $data_armors[@armor6_id] if @armor5_id != nil

  112.     pdef1 = weapon != nil ? weapon.pdef : 0

  113.     pdef2 = armor1 != nil ? armor1.pdef : 0

  114.     pdef3 = armor2 != nil ? armor2.pdef : 0

  115.     pdef4 = armor3 != nil ? armor3.pdef : 0

  116.     pdef5 = armor4 != nil ? armor4.pdef : 0

  117.     pdef6 = armor5 != nil ? armor5.pdef : 0

  118.     pdef7 = armor6 != nil ? armor6.pdef : 0

  119.     return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 + pdef6 + pdef7 + n

  120.   end

  121.   #--------------------------------------------------------------------------

  122.   # ● 获取基本魔法防御

  123.   #--------------------------------------------------------------------------

  124.   def base_mdef

  125.     n = $data_actors[@actor_id].parameters[5, @level]

  126.     weapon = $data_weapons[@weapon_id]

  127.     armor1 = $data_armors[@armor1_id]

  128.     armor2 = $data_armors[@armor2_id]

  129.     armor3 = $data_armors[@armor3_id]

  130.     armor4 = $data_armors[@armor4_id]

  131.     armor5 = $data_armors[@armor5_id] if @armor5_id != nil

  132.     armor6 = $data_armors[@armor6_id] if @armor5_id != nil

  133.     mdef1 = weapon != nil ? weapon.mdef : 0

  134.     mdef2 = armor1 != nil ? armor1.mdef : 0

  135.     mdef3 = armor2 != nil ? armor2.mdef : 0

  136.     mdef4 = armor3 != nil ? armor3.mdef : 0

  137.     mdef5 = armor4 != nil ? armor4.mdef : 0

  138.     mdef6 = armor5 != nil ? armor5.mdef : 0

  139.     mdef7 = armor6 != nil ? armor6.mdef : 0

  140.     return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 + mdef6 + mdef7 + n

  141.   end

  142.   #--------------------------------------------------------------------------

  143.   # ● 获取修正命中率

  144.   #--------------------------------------------------------------------------

  145.   def base_hit

  146.     weapon = $data_weapons[@weapon_id]

  147.    return weapon != nil ? weapon.str_plus : 0

  148.   end

  149. end

  150. #==============================================================================

  151. # ■ Game_Enemy

  152. #------------------------------------------------------------------------------

  153. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的

  154. # 内部使用。

  155. #==============================================================================



  156. class Game_Enemy < Game_Battler

  157.   def actor?

  158.     false

  159.   end

  160.   def base_hit

  161.     return $data_enemies[@enemy_id].str

  162.   end

  163. end

  164. #==============================================================================

  165. # ■ Game_Battler (分割定义 1)

  166. #------------------------------------------------------------------------------

  167. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的

  168. # 超级类来使用。

  169. #==============================================================================



  170. class Game_Battler



  171.   #--------------------------------------------------------------------------

  172.   # ● 获取命中修正

  173.   #--------------------------------------------------------------------------

  174.     def eva

  175.       return base_hit

  176.     end

  177.   #--------------------------------------------------------------------------

  178.   # ● 应用通常攻击效果

  179.   #     attacker : 攻击者 (battler)

  180.   #--------------------------------------------------------------------------

  181.   def attack_effect(attacker)

  182.     # 清除会心一击标志

  183.     self.critical = false

  184.     # 第一命中判定

  185.     hit_result = (rand(100) < attacker.hit + attacker.agi - self.agi - self.eva)

  186.     # 命中的情况下

  187.     if hit_result == true

  188.       # 计算基本伤害

  189.       self.damage = [attacker.atk - self.pdef , 0].max

  190.       # 属性修正

  191.       self.damage *= elements_correct(attacker.element_set)

  192.       self.damage /= 100

  193.       # 伤害符号正确的情况下

  194.       if self.damage > 0

  195.         # 会心一击修正

  196.         if rand(100) < attacker.dex

  197.           self.damage *= 3

  198.           self.critical = true

  199.         end

  200.         # 防御修正

  201.         if self.guarding?

  202.           self.damage /= 2

  203.         end

  204.       end

  205.       # 分散

  206.       if self.damage.abs > 0

  207.         amp = [self.damage.abs * 15 / 100, 1].max

  208.         self.damage += rand(amp+1) + rand(amp+1) - amp

  209.       end

  210.       # 第二命中判定

  211.     end

  212.     # 命中的情况下

  213.     if hit_result == true

  214.       # 状态冲击解除

  215.       remove_states_shock

  216.       # HP 的伤害计算

  217.       self.hp -= self.damage

  218.       # 状态变化

  219.       @state_changed = false

  220.       states_plus(attacker.plus_state_set)

  221.       states_minus(attacker.minus_state_set)

  222.     # Miss 的情况下

  223.     else

  224.       # 伤害设置为 "Miss"

  225.       self.damage = "Miss"

  226.       # 清除会心一击标志

  227.       self.critical = false

  228.     end

  229.     # 过程结束

  230.     return true

  231.   end

  232.   #--------------------------------------------------------------------------

  233.   # ● 应用特技效果

  234.   #     user  : 特技的使用者 (battler)

  235.   #     skill : 特技

  236.   #--------------------------------------------------------------------------

  237.   def skill_effect(user, skill)

  238.     # 清除会心一击标志

  239.     self.critical = false

  240.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、

  241.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下

  242.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or

  243.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)

  244.       # 过程结束

  245.       return false

  246.     end

  247.     # 清除有效标志

  248.     effective = false

  249.     # 公共事件 ID 是有效的情况下,设置为有效标志

  250.     effective |= skill.common_event_id > 0

  251.     # 第一命中判定

  252.     if skill.hit !=0

  253.       hit = skill.hit

  254.     else

  255.       hit = user.hit + user.agi - self.agi - self.eva

  256.     end  

  257.     if skill.atk_f > 0

  258.       hit *= user.hit / 100

  259.     end

  260.     hit_result = (rand(100) < hit)

  261.     # 不确定的特技的情况下设置为有效标志

  262.     effective |= hit < 100

  263.     # 命中的情况下

  264.     if hit_result == true

  265.       # 计算威力

  266.       power = skill.power #+ user.atk * skill.atk_f / 100

  267.       if power > 0

  268.         power -= self.pdef * skill.pdef_f / 100

  269.         power -= self.mdef * skill.mdef_f / 100

  270.         power += (user.int * skill.int_f / 100)

  271.         power += (user.atk * skill.atk_f / 100)

  272. #===============================================================

  273.         power = [power, 0].max
  274.         
  275. #===============================================================
  276.         
  277.       else

  278.         power -= (user.int * skill.int_f / 100)

  279.         power -= (user.atk * skill.atk_f / 100)

  280.       end

  281.       # 计算倍率

  282. #     rate = 20

  283. #     rate += (user.str * skill.str_f / 100)

  284. #     rate += (user.dex * skill.dex_f / 100)

  285. #     rate += (user.agi * skill.agi_f / 100)

  286.       

  287.       # 计算基本伤害

  288.       self.damage = power

  289.       # 属性修正

  290.       self.damage *= elements_correct(skill.element_set)

  291.       self.damage /= 100

  292.       # 伤害符号正确的情况下

  293.       if self.damage > 0

  294.         #h会心修正

  295.         if rand(100) < skill.dex_f

  296.           self.damage *= 3

  297.            self.critical = true

  298.         end  

  299.         # 防御修正

  300.         if self.guarding?

  301.           self.damage /= 2

  302.         end

  303.       end

  304.       # 分散

  305.       if skill.variance > 0 and self.damage.abs > 0

  306.         amp = [self.damage.abs * skill.variance / 100, 1].max

  307.         self.damage += rand(amp+1) + rand(amp+1) - amp

  308.       end

  309.       

  310.       # 不确定的特技的情况下设置为有效标志

  311.       effective |= hit < 100

  312.     end

  313.     # 命中的情况下

  314.     if hit_result == true

  315.       # 威力 0 以外的物理攻击的情况下

  316.       if skill.power != 0 and skill.atk_f > 0

  317.         # 状态冲击解除

  318.         remove_states_shock

  319.         # 设置有效标志

  320.         effective = true

  321.       end

  322.       # HP 的伤害减法运算

  323.       last_hp = self.hp

  324.       self.hp -= self.damage

  325.       effective |= self.hp != last_hp

  326.       # 状态变化

  327.       @state_changed = false

  328.       effective |= states_plus(skill.plus_state_set)

  329.       effective |= states_minus(skill.minus_state_set)

  330.       # 威力为 0 的场合

  331.       if skill.power == 0

  332.         # 伤害设置为空的字串

  333.         self.damage = ""

  334.         # 状态没有变化的情况下

  335.         unless @state_changed

  336.           # 伤害设置为 "Miss"

  337.           self.damage = "Miss"

  338.         end

  339.       end

  340.     # Miss 的情况下

  341.     else

  342.       # 伤害设置为 "Miss"

  343.       self.damage = "Miss"

  344.     end

  345.     # 不在战斗中的情况下

  346.     unless $game_temp.in_battle

  347.       # 伤害设置为 nil

  348.       self.damage = nil

  349.     end

  350.     # 过程结束

  351.     return effective

  352.   end

  353. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
60 小时
注册时间
2008-8-27
帖子
531
6
 楼主| 发表于 2009-7-20 12:43:40 | 只看该作者
多谢,试试先
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
7
发表于 2009-7-20 19:21:50 | 只看该作者
那一句放的很对啊,如果位置错了就不能补血了
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-11 19:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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