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

Project1

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

[已经解决] 我改了改Game_Battler 3,结果一攻击就出错,为什么?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2009-8-30
帖子
465
跳转到指定楼层
1
发表于 2009-10-3 19:21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我改了改Game_Battler 3,结果一攻击就出错,为什么?
  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 3)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 可以使用特技的判定
  10.   #     skill_id : 特技 ID
  11.   #--------------------------------------------------------------------------
  12.   def skill_can_use?(skill_id)
  13.     # SP 不足的情况下不能使用
  14.     if $data_skills[skill_id].sp_cost > self.sp
  15.       return false
  16.     end
  17.     # 战斗不能的情况下不能使用
  18.     if dead?
  19.       return false
  20.     end
  21.     # 沉默状态的情况下、物理特技以外的特技不能使用
  22.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  23.       return false
  24.     end
  25.     # 获取可以使用的时机
  26.     occasion = $data_skills[skill_id].occasion
  27.     # 战斗中的情况下
  28.     if $game_temp.in_battle
  29.       # [平时] 或者是 [战斗中] 可以使用
  30.       return (occasion == 0 or occasion == 1)
  31.     # 不是战斗中的情况下
  32.     else
  33.       # [平时] 或者是 [菜单中] 可以使用
  34.       return (occasion == 0 or occasion == 2)
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 应用通常攻击效果
  39.   #     attacker : 攻击者 (battler)
  40.   #--------------------------------------------------------------------------
  41.   def attack_effect(attacker)
  42.     #傀儡----------
  43. if self.state?(39)
  44.    return true
  45. end
  46.     # 清除会心一击标志
  47.     self.critical = false
  48.     # 第一命中判定
  49.     hit_result = (rand(100) < attacker.hit)
  50.     # 命中的情况下
  51.     if hit_result == true
  52.       # 计算基本伤害
  53.       atk = [attacker.atk - self.pdef / 2, 0].max
  54.       self.damage = atk * (20 + attacker.str) / 20
  55.       # 属性修正
  56.       self.damage *= elements_correct(attacker.element_set)
  57.       self.damage /= 100
  58.       # 伤害符号正确的情况下
  59.       if self.damage > 0
  60.         # 会心一击修正
  61.         if rand(100) < 4 * attacker.dex / self.agi
  62.           self.damage *= 2
  63.           self.critical = true
  64.         end
  65.         # 防御修正
  66.         if self.guarding?
  67.           self.damage /= 2
  68.         end
  69.       end
  70.       # 分散
  71.       if self.damage.abs > 0
  72.         amp = [self.damage.abs * 15 / 100, 1].max
  73.         self.damage += rand(amp+1) + rand(amp+1) - amp
  74.       end
  75.       # 第二命中判定
  76.       eva = 8 * self.agi / attacker.dex + self.eva
  77.       hit = self.damage < 0 ? 100 : 100 - eva
  78.       hit = self.cant_evade? ? 100 : hit
  79.       hit_result = (rand(100) < hit)
  80.     end
  81.     # 命中的情况下
  82.     if hit_result == true
  83.       # 状态冲击解除
  84.       remove_states_shock
  85.       # HP 的伤害计算
  86.       self.hp -= self.damage
  87.       # 状态变化
  88.       @state_changed = false
  89.       states_plus(attacker.plus_state_set)
  90.       states_minus(attacker.minus_state_set)
  91.     # Miss 的情况下
  92.     else
  93.       # 伤害设置为 "Miss"
  94.       self.damage = "Miss"
  95.       # 清除会心一击标志
  96.       self.critical = false
  97.     end
  98.     # 过程结束
  99.     return true
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 应用特技效果
  103.   #     user  : 特技的使用者 (battler)
  104.   #     skill : 特技
  105.   #--------------------------------------------------------------------------
  106.   def skill_effect(user, skill)
  107.     #傀儡----------
  108. if self.state?(39)
  109.    return false
  110. end

  111.     # 清除会心一击标志
  112.     self.critical = false
  113.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  114.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  115.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0)
  116.       # 过程结束
  117.       return false
  118.     end
  119.     # 清除有效标志
  120.     effective = false
  121.     # 公共事件 ID 是有效的情况下,设置为有效标志
  122.     effective |= skill.common_event_id > 0
  123.     # 第一命中判定
  124.     hit = skill.hit
  125.     if skill.atk_f > 0
  126.       hit *= user.hit / 100
  127.     end
  128.     hit_result = (rand(100) < hit)
  129.     # 不确定的特技的情况下设置为有效标志
  130.     effective |= hit < 100
  131.     # 命中的情况下
  132.     if hit_result == true
  133.       # 计算威力
  134.       if skill.power>0
  135.         power = skill.power + user.atk * skill.atk_f / 100
  136.         if power > 0
  137.           power -= self.pdef * skill.pdef_f / 200
  138.           power -= self.mdef * skill.mdef_f / 200
  139.           power = [power, 0].max
  140.         end
  141.       end
  142.       if skill.power<0
  143.         power = skill.power
  144.       end
  145.       # 计算倍率
  146.       rate = 20
  147.       rate += (user.str * skill.str_f / 100)
  148.       rate += (user.dex * skill.dex_f / 100)
  149.       rate += (user.agi * skill.agi_f / 100)
  150.       rate += (user.int * skill.int_f / 100)
  151.       # 计算基本伤害
  152.       self.damage = power * rate / 20
  153.       # 属性修正
  154.       self.damage *= elements_correct(skill.element_set)
  155.       self.damage /= 100
  156.       # 伤害符号正确的情况下
  157.       if self.damage > 0
  158.         # 防御修正
  159.         if self.guarding?
  160.           self.damage /= 2
  161.         end
  162.       end
  163.       # 分散
  164.       if skill.variance > 0 and self.damage.abs > 0
  165.         amp = [self.damage.abs * skill.variance / 100, 1].max
  166.         self.damage += rand(amp+1) + rand(amp+1) - amp
  167.       end
  168.       # 第二命中判定
  169.       eva = 8 * self.agi / user.dex + self.eva
  170.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  171.       hit = self.cant_evade? ? 100 : hit
  172.       hit_result = (rand(100) < hit)
  173.       # 不确定的特技的情况下设置为有效标志
  174.       effective |= hit < 100
  175.     end
  176.     # 命中的情况下
  177.     if hit_result == true
  178.       # 威力 0 以外的物理攻击的情况下
  179.       if skill.power != 0 and skill.atk_f > 0
  180.         # 状态冲击解除
  181.         remove_states_shock
  182.         # 设置有效标志
  183.         effective = true
  184.       end
  185.       # 状态变化
  186.       @state_changed = false
  187.       effective |= states_plus(skill.plus_state_set)
  188.       effective |= states_minus(skill.minus_state_set)
  189.       # 威力为 0 的场合
  190.       if skill.power == 0
  191.         # 伤害设置为空的字串
  192.         self.damage = ""
  193.         # 状态没有变化的情况下
  194.         unless @state_changed
  195.           # 伤害设置为 "Miss"
  196.           self.damage = "Miss"
  197.         end
  198.       end
  199.     # Miss 的情况下
  200.     else
  201.       # 伤害设置为 "Miss"
  202.       self.damage = "Miss"
  203.     end
  204.     # 不在战斗中的情况下
  205.     unless $game_temp.in_battle
  206.       # 伤害设置为 nil
  207.       self.damage = nil
  208.     end
  209.     # 过程结束
  210.     return effective
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 应用物品效果
  214.   #     item : 物品
  215.   #--------------------------------------------------------------------------
  216.   def item_effect(item)
  217.     #傀儡----------
  218. if self.state?(39)
  219.    return false
  220. end

  221.     # 清除会心一击标志
  222.     self.critical = false
  223.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  224.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  225.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  226.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  227.       # 过程结束
  228.       return false
  229.     end
  230.     # 清除有效标志
  231.     effective = false
  232.     # 公共事件 ID 是有效的情况下,设置为有效标志
  233.     effective |= item.common_event_id > 0
  234.     # 命中判定
  235.     hit_result = (rand(100) < item.hit)
  236.     # 不确定的特技的情况下设置为有效标志
  237.     effective |= item.hit < 100
  238.     # 命中的情况
  239.     if hit_result == true
  240.       # 计算回复量
  241.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  242.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  243.       if recover_hp < 0
  244.         recover_hp += self.pdef * item.pdef_f / 20
  245.         recover_hp += self.mdef * item.mdef_f / 20
  246.         recover_hp = [recover_hp, 0].min
  247.       end
  248.       # 属性修正
  249.       recover_hp *= elements_correct(item.element_set)
  250.       recover_hp /= 100
  251.       recover_sp *= elements_correct(item.element_set)
  252.       recover_sp /= 100
  253.       # 分散
  254.       if item.variance > 0 and recover_hp.abs > 0
  255.         amp = [recover_hp.abs * item.variance / 100, 1].max
  256.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  257.       end
  258.       if item.variance > 0 and recover_sp.abs > 0
  259.         amp = [recover_sp.abs * item.variance / 100, 1].max
  260.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  261.       end
  262.       # 回复量符号为负的情况下
  263.       if recover_hp < 0
  264.         # 防御修正
  265.         if self.guarding?
  266.           recover_hp /= 2
  267.         end
  268.       end
  269.       # HP 回复量符号的反转、设置伤害值
  270.       self.damage = -recover_hp
  271.       # HP 以及 SP 的回复
  272.       last_hp = self.hp
  273.       last_sp = self.sp
  274.       self.hp += recover_hp
  275.       self.sp += recover_sp
  276.       effective |= self.hp != last_hp
  277.       effective |= self.sp != last_sp
  278.       # 状态变化
  279.       @state_changed = false
  280.       effective |= states_plus(item.plus_state_set)
  281.       effective |= states_minus(item.minus_state_set)
  282.       # 能力上升值有效的情况下
  283.       if item.parameter_type > 0 and item.parameter_points != 0
  284.         # 能力值的分支
  285.         case item.parameter_type
  286.         when 1  # MaxHP
  287.           @maxhp_plus += item.parameter_points
  288.         when 2  # MaxSP
  289.           @maxsp_plus += item.parameter_points
  290.         when 3  # 力量
  291.           @str_plus += item.parameter_points
  292.         when 4  # 灵巧
  293.           @dex_plus += item.parameter_points
  294.         when 5  # 速度
  295.           @agi_plus += item.parameter_points
  296.         when 6  # 魔力
  297.           @int_plus += item.parameter_points
  298.         end
  299.         # 设置有效标志
  300.         effective = true
  301.       end
  302.       # HP 回复率与回复量为 0 的情况下
  303.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  304.         # 设置伤害为空的字符串
  305.         self.damage = ""
  306.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  307.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  308.            (item.parameter_type == 0 or item.parameter_points == 0)
  309.           # 状态没有变化的情况下
  310.           unless @state_changed
  311.             # 伤害设置为 "Miss"
  312.             self.damage = "Miss"
  313.           end
  314.         end
  315.       end
  316.     # Miss 的情况下
  317.     else
  318.       # 伤害设置为 "Miss"
  319.       self.damage = "Miss"
  320.     end
  321.     # 不在战斗中的情况下
  322.     unless $game_temp.in_battle
  323.       # 伤害设置为 nil
  324.       self.damage = nil
  325.     end
  326.     # 过程结束
  327.     return effective
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● 应用连续伤害效果
  331.   #--------------------------------------------------------------------------
  332.   def slip_damage_effect
  333.     # 设置伤害
  334.     self.damage = self.maxhp / 10
  335.     # 分散
  336.     if self.damage.abs > 0
  337.       amp = [self.damage.abs * 15 / 100, 1].max
  338.       self.damage += rand(amp+1) + rand(amp+1) - amp
  339.     end
  340.     # HP 的伤害减法运算
  341.     self.hp -= self.damage
  342.     # 过程结束
  343.     return true
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 属性修正计算
  347.   #     element_set : 属性
  348.   #--------------------------------------------------------------------------
  349.   def elements_correct(element_set)
  350.     # 無属性的情况
  351.     if element_set == []
  352.       # 返回 100
  353.       return 100
  354.     end
  355.     # 在被赋予的属性中返回最弱的
  356.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  357.     #   和 Game_Enemy 类的定义
  358.     weakest = -100
  359.     for i in element_set
  360.       weakest = [weakest, self.element_rate(i)].max
  361.     end
  362.     return weakest
  363.   end
  364. end
  365. end
复制代码

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
2
发表于 2009-10-3 21:33:33 | 只看该作者
消灭零回复
LZ你动了什么地方,还是加了什么脚本
来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2009-8-30
帖子
465
3
 楼主| 发表于 2009-10-4 08:15:38 | 只看该作者
给威力为负数做了一个行的战斗计算
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2009-8-30
帖子
465
4
 楼主| 发表于 2009-10-5 12:34:46 | 只看该作者
3小时自顶
回复 支持 反对

使用道具 举报

Lv1.梦旅人

~琉璃の雪~<

梦石
0
星屑
49
在线时间
36 小时
注册时间
2008-11-6
帖子
3678
5
发表于 2009-10-5 12:41:36 | 只看该作者
我这里只要把最后那个多余的end去掉后就没事了.
~现在开始自绘头像~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-4 19:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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