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

Project1

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

[已经解决] 如何制作增加暴击率的状态

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1438
在线时间
328 小时
注册时间
2016-4-4
帖子
168

开拓者

跳转到指定楼层
1
发表于 2017-1-1 20:08:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我在玩的一个RMXP做的游戏 里面有些人有些被动技能 学会后可以增加一定百分比的暴击率  比如 [七剑]这个被动技能  它能增加50DEX和25%的暴击率  请问这个怎么实现

Lv2.观梦者

梦石
0
星屑
574
在线时间
169 小时
注册时间
2008-10-29
帖子
431
2
发表于 2017-1-12 11:46:26 | 只看该作者
制作一个什么效果都没有的状态
在战斗脚本计算伤害那部分
检测攻击者是否带有这种状态 所带有 把判断致命的那个参数改一下
基本就是这个思路
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1438
在线时间
328 小时
注册时间
2016-4-4
帖子
168

开拓者

3
 楼主| 发表于 2017-1-13 21:10:38 | 只看该作者
clap_pl 发表于 2017-1-12 11:46
制作一个什么效果都没有的状态
在战斗脚本计算伤害那部分
检测攻击者是否带有这种状态 所带有 把判断致命 ...

我也知道是这个套路 但我是脚本盲 不会写TWT
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
590
在线时间
392 小时
注册时间
2012-1-20
帖子
223

开拓者

4
发表于 2017-1-15 00:16:59 | 只看该作者
默认的系统中只有普通攻击会暴击,技能是不会暴击的。按照楼主的说法似乎也想让技能暴击于是我就改了改
  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 3)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. CT_STATE_ID = 17   #增加暴击率状态的ID
  8. CT = 25            #增加的暴击率百分比


  9. class Game_Battler
  10.   #--------------------------------------------------------------------------
  11.   # ● 可以使用特技的判定
  12.   #     skill_id : 特技 ID
  13.   #--------------------------------------------------------------------------
  14.   def skill_can_use?(skill_id)
  15.     # SP 不足的情况下不能使用
  16.     if $data_skills[skill_id].sp_cost > self.sp
  17.       return false
  18.     end
  19.     # 战斗不能的情况下不能使用
  20.     if dead?
  21.       return false
  22.     end
  23.     # 沉默状态的情况下、物理特技以外的特技不能使用
  24.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  25.       return false
  26.     end
  27.     # 获取可以使用的时机
  28.     occasion = $data_skills[skill_id].occasion
  29.     # 战斗中的情况下
  30.     if $game_temp.in_battle
  31.       # [平时] 或者是 [战斗中] 可以使用
  32.       return (occasion == 0 or occasion == 1)
  33.     # 不是战斗中的情况下
  34.     else
  35.       # [平时] 或者是 [菜单中] 可以使用
  36.       return (occasion == 0 or occasion == 2)
  37.     end
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 应用通常攻击效果
  41.   #     attacker : 攻击者 (battler)
  42.   #--------------------------------------------------------------------------
  43.   def attack_effect(attacker)
  44.     # 清除会心一击标志
  45.     self.critical = false
  46.     # 第一命中判定
  47.     hit_result = (rand(100) < attacker.hit)
  48.     # 命中的情况下
  49.     if hit_result == true
  50.       # 计算基本伤害
  51.       atk = [attacker.atk - self.pdef / 2, 0].max
  52.       self.damage = atk * (20 + attacker.str) / 20
  53.       # 属性修正
  54.       self.damage *= elements_correct(attacker.element_set)
  55.       self.damage /= 100
  56.       # 伤害符号正确的情况下
  57.       if self.damage > 0
  58.         # 会心一击修正
  59.         if attacker.states.include?(CT_STATE_ID)
  60.           if rand(100) < 4 * attacker.dex / self.agi * (1+CT/100.00)
  61.             self.damage *= 2
  62.             self.critical = true
  63.           end
  64.         else
  65.           if rand(100) < 4 * attacker.dex / self.agi
  66.             self.damage *= 2
  67.             self.critical = true
  68.           end
  69.         end
  70.         # 防御修正
  71.         if self.guarding?
  72.           self.damage /= 2
  73.         end
  74.       end
  75.       # 分散
  76.       if self.damage.abs > 0
  77.         amp = [self.damage.abs * 15 / 100, 1].max
  78.         self.damage += rand(amp+1) + rand(amp+1) - amp
  79.       end
  80.       # 第二命中判定
  81.       eva = 8 * self.agi / attacker.dex + self.eva
  82.       hit = self.damage < 0 ? 100 : 100 - eva
  83.       hit = self.cant_evade? ? 100 : hit
  84.       hit_result = (rand(100) < hit)
  85.     end
  86.     # 命中的情况下
  87.     if hit_result == true
  88.       # 状态冲击解除
  89.       remove_states_shock
  90.       # HP 的伤害计算
  91.       self.hp -= self.damage
  92.       # 状态变化
  93.       @state_changed = false
  94.       states_plus(attacker.plus_state_set)
  95.       states_minus(attacker.minus_state_set)
  96.     # Miss 的情况下
  97.     else
  98.       # 伤害设置为 "Miss"
  99.       self.damage = "Miss"
  100.       # 清除会心一击标志
  101.       self.critical = false
  102.     end
  103.     # 过程结束
  104.     return true
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 应用特技效果
  108.   #     user  : 特技的使用者 (battler)
  109.   #     skill : 特技
  110.   #--------------------------------------------------------------------------
  111.   def skill_effect(user, skill)
  112.     # 清除会心一击标志
  113.     self.critical = false
  114.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  115.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  116.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  117.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  118.       # 过程结束
  119.       return false
  120.     end
  121.     # 清除有效标志
  122.     effective = false
  123.     # 公共事件 ID 是有效的情况下,设置为有效标志
  124.     effective |= skill.common_event_id > 0
  125.     # 第一命中判定
  126.     hit = skill.hit
  127.     if skill.atk_f > 0
  128.       hit *= user.hit / 100
  129.     end
  130.     hit_result = (rand(100) < hit)
  131.     # 不确定的特技的情况下设置为有效标志
  132.     effective |= hit < 100
  133.     # 命中的情况下
  134.     if hit_result == true
  135.       # 计算威力
  136.       power = skill.power + user.atk * skill.atk_f / 100
  137.       if power > 0
  138.         power -= self.pdef * skill.pdef_f / 200
  139.         power -= self.mdef * skill.mdef_f / 200
  140.         power = [power, 0].max
  141.       end
  142.       # 计算倍率
  143.       rate = 20
  144.       rate += (user.str * skill.str_f / 100)
  145.       rate += (user.dex * skill.dex_f / 100)
  146.       rate += (user.agi * skill.agi_f / 100)
  147.       rate += (user.int * skill.int_f / 100)
  148.       # 计算基本伤害
  149.       self.damage = power * rate / 20
  150.       # 属性修正
  151.       self.damage *= elements_correct(skill.element_set)
  152.       self.damage /= 100
  153.       # 伤害符号正确的情况下
  154.       if self.damage > 0
  155.         # 会心一击修正
  156.         if user.states.include?(CT_STATE_ID)
  157.           if rand(100) < 4 * user.dex / self.agi * (1+CT/100.00)
  158.             self.damage *= 2
  159.             self.critical = true
  160.           end
  161.         else
  162.           if rand(100) < 4 * user.dex / self.agi
  163.             self.damage *= 2
  164.             self.critical = true
  165.           end
  166.         end
  167.         # 防御修正
  168.         if self.guarding?
  169.           self.damage /= 2
  170.         end
  171.       end
  172.       # 分散
  173.       if skill.variance > 0 and self.damage.abs > 0
  174.         amp = [self.damage.abs * skill.variance / 100, 1].max
  175.         self.damage += rand(amp+1) + rand(amp+1) - amp
  176.       end
  177.       # 第二命中判定
  178.       eva = 8 * self.agi / user.dex + self.eva
  179.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  180.       hit = self.cant_evade? ? 100 : hit
  181.       hit_result = (rand(100) < hit)
  182.       # 不确定的特技的情况下设置为有效标志
  183.       effective |= hit < 100
  184.     end
  185.     # 命中的情况下
  186.     if hit_result == true
  187.       # 威力 0 以外的物理攻击的情况下
  188.       if skill.power != 0 and skill.atk_f > 0
  189.         # 状态冲击解除
  190.         remove_states_shock
  191.         # 设置有效标志
  192.         effective = true
  193.       end
  194.       # HP 的伤害减法运算
  195.       last_hp = self.hp
  196.       self.hp -= self.damage
  197.       effective |= self.hp != last_hp
  198.       # 状态变化
  199.       @state_changed = false
  200.       effective |= states_plus(skill.plus_state_set)
  201.       effective |= states_minus(skill.minus_state_set)
  202.       # 威力为 0 的场合
  203.       if skill.power == 0
  204.         # 伤害设置为空的字串
  205.         self.damage = ""
  206.         # 状态没有变化的情况下
  207.         unless @state_changed
  208.           # 伤害设置为 "Miss"
  209.           self.damage = "Miss"
  210.           # 清除会心一击标志
  211.           self.critical = false
  212.         end
  213.       end
  214.     # Miss 的情况下
  215.     else
  216.       # 伤害设置为 "Miss"
  217.       self.damage = "Miss"
  218.       # 清除会心一击标志
  219.       self.critical = false
  220.     end
  221.     # 不在战斗中的情况下
  222.     unless $game_temp.in_battle
  223.       # 伤害设置为 nil
  224.       self.damage = nil
  225.     end
  226.     # 过程结束
  227.     return effective
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 应用物品效果
  231.   #     item : 物品
  232.   #--------------------------------------------------------------------------
  233.   def item_effect(item)
  234.     # 清除会心一击标志
  235.     self.critical = false
  236.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  237.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  238.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  239.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  240.       # 过程结束
  241.       return false
  242.     end
  243.     # 清除有效标志
  244.     effective = false
  245.     # 公共事件 ID 是有效的情况下,设置为有效标志
  246.     effective |= item.common_event_id > 0
  247.     # 命中判定
  248.     hit_result = (rand(100) < item.hit)
  249.     # 不确定的特技的情况下设置为有效标志
  250.     effective |= item.hit < 100
  251.     # 命中的情况
  252.     if hit_result == true
  253.       # 计算回复量
  254.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  255.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  256.       if recover_hp < 0
  257.         recover_hp += self.pdef * item.pdef_f / 20
  258.         recover_hp += self.mdef * item.mdef_f / 20
  259.         recover_hp = [recover_hp, 0].min
  260.       end
  261.       # 属性修正
  262.       recover_hp *= elements_correct(item.element_set)
  263.       recover_hp /= 100
  264.       recover_sp *= elements_correct(item.element_set)
  265.       recover_sp /= 100
  266.       # 分散
  267.       if item.variance > 0 and recover_hp.abs > 0
  268.         amp = [recover_hp.abs * item.variance / 100, 1].max
  269.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  270.       end
  271.       if item.variance > 0 and recover_sp.abs > 0
  272.         amp = [recover_sp.abs * item.variance / 100, 1].max
  273.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  274.       end
  275.       # 回复量符号为负的情况下
  276.       if recover_hp < 0
  277.         # 防御修正
  278.         if self.guarding?
  279.           recover_hp /= 2
  280.         end
  281.       end
  282.       # HP 回复量符号的反转、设置伤害值
  283.       self.damage = -recover_hp
  284.       # HP 以及 SP 的回复
  285.       last_hp = self.hp
  286.       last_sp = self.sp
  287.       self.hp += recover_hp
  288.       self.sp += recover_sp
  289.       effective |= self.hp != last_hp
  290.       effective |= self.sp != last_sp
  291.       # 状态变化
  292.       @state_changed = false
  293.       effective |= states_plus(item.plus_state_set)
  294.       effective |= states_minus(item.minus_state_set)
  295.       # 能力上升值有效的情况下
  296.       if item.parameter_type > 0 and item.parameter_points != 0
  297.         # 能力值的分支
  298.         case item.parameter_type
  299.         when 1  # MaxHP
  300.           @maxhp_plus += item.parameter_points
  301.         when 2  # MaxSP
  302.           @maxsp_plus += item.parameter_points
  303.         when 3  # 力量
  304.           @str_plus += item.parameter_points
  305.         when 4  # 灵巧
  306.           @dex_plus += item.parameter_points
  307.         when 5  # 速度
  308.           @agi_plus += item.parameter_points
  309.         when 6  # 魔力
  310.           @int_plus += item.parameter_points
  311.         end
  312.         # 设置有效标志
  313.         effective = true
  314.       end
  315.       # HP 回复率与回复量为 0 的情况下
  316.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  317.         # 设置伤害为空的字符串
  318.         self.damage = ""
  319.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  320.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  321.            (item.parameter_type == 0 or item.parameter_points == 0)
  322.           # 状态没有变化的情况下
  323.           unless @state_changed
  324.             # 伤害设置为 "Miss"
  325.             self.damage = "Miss"
  326.           end
  327.         end
  328.       end
  329.     # Miss 的情况下
  330.     else
  331.       # 伤害设置为 "Miss"
  332.       self.damage = "Miss"
  333.     end
  334.     # 不在战斗中的情况下
  335.     unless $game_temp.in_battle
  336.       # 伤害设置为 nil
  337.       self.damage = nil
  338.     end
  339.     # 过程结束
  340.     return effective
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 应用连续伤害效果
  344.   #--------------------------------------------------------------------------
  345.   def slip_damage_effect
  346.     # 设置伤害
  347.     self.damage = self.maxhp / 10
  348.     # 分散
  349.     if self.damage.abs > 0
  350.       amp = [self.damage.abs * 15 / 100, 1].max
  351.       self.damage += rand(amp+1) + rand(amp+1) - amp
  352.     end
  353.     # HP 的伤害减法运算
  354.     self.hp -= self.damage
  355.     # 过程结束
  356.     return true
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 属性修正计算
  360.   #     element_set : 属性
  361.   #--------------------------------------------------------------------------
  362.   def elements_correct(element_set)
  363.     # 无属性的情况
  364.     if element_set == []
  365.       # 返回 100
  366.       return 100
  367.     end
  368.     # 在被赋予的属性中返回最弱的
  369.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  370.     #   和 Game_Enemy 类的定义
  371.     weakest = -100
  372.     for i in element_set
  373.       weakest = [weakest, self.element_rate(i)].max
  374.     end
  375.     return weakest
  376.   end
  377. end
复制代码

只改了231行之上的部分,如果楼主的Game_Battler 3没有改过的话,把这部分脚本替换原来的Game_Battler 3就行。否则对照着改改也行。不过这样要注意在技能里面清除会心一击标志

点评

直接复制默认工程有效果,但是直接复制我的工程就没效果了.看来是我工程不知道哪里冲突了吧  发表于 2017-3-12 23:34
是的  发表于 2017-3-12 10:03
我是脚本盲所以想请问一下,这脚本效果是否在状态下所有技能都会带暴击效果.不在状态下所有技能和平时一样不带暴击效果的?  发表于 2017-3-11 22:05

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案,脚本建议只发改动过的部分.

查看全部评分

支持一下下我的这个游戏吧~~
大雄与空间军团
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1438
在线时间
328 小时
注册时间
2016-4-4
帖子
168

开拓者

5
 楼主| 发表于 2017-1-15 11:47:24 | 只看该作者
哆啦溯 发表于 2017-1-15 00:16
默认的系统中只有普通攻击会暴击,技能是不会暴击的。按照楼主的说法似乎也想让技能暴击于是我就改了改

只 ...

谢谢大佬的回答  现在还有一个问题   如果有多个状态是增加暴击率而增加的暴击率是相同的情况下 是不是可以写多几行CT_STATE_ID = x 然后CT不变   
如果有多个状态是增加暴击率而且其中几个增加的量不同 是不是可以写成
CT_STATE_ID = a
CT = 25
CT_STATE_ID2 = b
CT = 30
这样?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
590
在线时间
392 小时
注册时间
2012-1-20
帖子
223

开拓者

6
发表于 2017-1-15 12:02:42 | 只看该作者
本帖最后由 哆啦溯 于 2017-1-15 12:08 编辑
porlutia 发表于 2017-1-15 11:47
谢谢大佬的回答  现在还有一个问题   如果有多个状态是增加暴击率而增加的暴击率是相同的情况下 是不是可 ...


那样不行……不同的暴击率要用不同的变量写……你想制作多个状态暴击率叠加的效果?(2×2=4倍概率暴击)那就可以这样写……并且状态判定部分要改一下
  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 3)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. CT_STATE_ID1 = 17   #增加暴击率的ID1
  8. CT1 = 25            #增加的暴击率百分比2

  9. CT_STATE_ID2 = 18   #增加暴击率的ID2
  10. CT2 = 50            #增加的暴击率百分比2

  11. class Game_Battler
  12.   #--------------------------------------------------------------------------
  13.   # ● 可以使用特技的判定
  14.   #     skill_id : 特技 ID
  15.   #--------------------------------------------------------------------------
  16.   def skill_can_use?(skill_id)
  17.     # SP 不足的情况下不能使用
  18.     if $data_skills[skill_id].sp_cost > self.sp
  19.       return false
  20.     end
  21.     # 战斗不能的情况下不能使用
  22.     if dead?
  23.       return false
  24.     end
  25.     # 沉默状态的情况下、物理特技以外的特技不能使用
  26.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  27.       return false
  28.     end
  29.     # 获取可以使用的时机
  30.     occasion = $data_skills[skill_id].occasion
  31.     # 战斗中的情况下
  32.     if $game_temp.in_battle
  33.       # [平时] 或者是 [战斗中] 可以使用
  34.       return (occasion == 0 or occasion == 1)
  35.     # 不是战斗中的情况下
  36.     else
  37.       # [平时] 或者是 [菜单中] 可以使用
  38.       return (occasion == 0 or occasion == 2)
  39.     end
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 应用通常攻击效果
  43.   #     attacker : 攻击者 (battler)
  44.   #--------------------------------------------------------------------------
  45.   def attack_effect(attacker)
  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.         ct_rate = 4 * attacker.dex / self.agi
  62.         if attacker.states.include?(CT_STATE_ID1)
  63.          ct_rate *= (1+CT1/100.00)
  64.         end
  65.         if attacker.states.include?(CT_STATE_ID2)
  66.          ct_rate *= (1+CT2/100.00)
  67.         end
  68.         if rand(100) < ct_rate
  69.           self.damage *= 2
  70.           self.critical = true
  71.         end
  72.         # 防御修正
  73.         if self.guarding?
  74.           self.damage /= 2
  75.         end
  76.       end
  77.       # 分散
  78.       if self.damage.abs > 0
  79.         amp = [self.damage.abs * 15 / 100, 1].max
  80.         self.damage += rand(amp+1) + rand(amp+1) - amp
  81.       end
  82.       # 第二命中判定
  83.       eva = 8 * self.agi / attacker.dex + self.eva
  84.       hit = self.damage < 0 ? 100 : 100 - eva
  85.       hit = self.cant_evade? ? 100 : hit
  86.       hit_result = (rand(100) < hit)
  87.     end
  88.     # 命中的情况下
  89.     if hit_result == true
  90.       # 状态冲击解除
  91.       remove_states_shock
  92.       # HP 的伤害计算
  93.       self.hp -= self.damage
  94.       # 状态变化
  95.       @state_changed = false
  96.       states_plus(attacker.plus_state_set)
  97.       states_minus(attacker.minus_state_set)
  98.     # Miss 的情况下
  99.     else
  100.       # 伤害设置为 "Miss"
  101.       self.damage = "Miss"
  102.       # 清除会心一击标志
  103.       self.critical = false
  104.     end
  105.     # 过程结束
  106.     return true
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 应用特技效果
  110.   #     user  : 特技的使用者 (battler)
  111.   #     skill : 特技
  112.   #--------------------------------------------------------------------------
  113.   def skill_effect(user, skill)
  114.     # 清除会心一击标志
  115.     self.critical = false
  116.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  117.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  118.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  119.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  120.       # 过程结束
  121.       return false
  122.     end
  123.     # 清除有效标志
  124.     effective = false
  125.     # 公共事件 ID 是有效的情况下,设置为有效标志
  126.     effective |= skill.common_event_id > 0
  127.     # 第一命中判定
  128.     hit = skill.hit
  129.     if skill.atk_f > 0
  130.       hit *= user.hit / 100
  131.     end
  132.     hit_result = (rand(100) < hit)
  133.     # 不确定的特技的情况下设置为有效标志
  134.     effective |= hit < 100
  135.     # 命中的情况下
  136.     if hit_result == true
  137.       # 计算威力
  138.       power = skill.power + user.atk * skill.atk_f / 100
  139.       if power > 0
  140.         power -= self.pdef * skill.pdef_f / 200
  141.         power -= self.mdef * skill.mdef_f / 200
  142.         power = [power, 0].max
  143.       end
  144.       # 计算倍率
  145.       rate = 20
  146.       rate += (user.str * skill.str_f / 100)
  147.       rate += (user.dex * skill.dex_f / 100)
  148.       rate += (user.agi * skill.agi_f / 100)
  149.       rate += (user.int * skill.int_f / 100)
  150.       # 计算基本伤害
  151.       self.damage = power * rate / 20
  152.       # 属性修正
  153.       self.damage *= elements_correct(skill.element_set)
  154.       self.damage /= 100
  155.       # 伤害符号正确的情况下
  156.       if self.damage > 0
  157.         # 会心一击修正
  158.         ct_rate = 4 * attacker.dex / self.agi
  159.         if attacker.states.include?(CT_STATE_ID1)
  160.          ct_rate *= (1+CT1/100.00)
  161.         end
  162.         if attacker.states.include?(CT_STATE_ID2)
  163.          ct_rate *= (1+CT2/100.00)
  164.         end
  165.         if rand(100) < ct_rate
  166.           self.damage *= 2
  167.           self.critical = true
  168.         end
  169.         # 防御修正
  170.         if self.guarding?
  171.           self.damage /= 2
  172.         end
  173.       end
  174.       # 分散
  175.       if skill.variance > 0 and self.damage.abs > 0
  176.         amp = [self.damage.abs * skill.variance / 100, 1].max
  177.         self.damage += rand(amp+1) + rand(amp+1) - amp
  178.       end
  179.       # 第二命中判定
  180.       eva = 8 * self.agi / user.dex + self.eva
  181.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  182.       hit = self.cant_evade? ? 100 : hit
  183.       hit_result = (rand(100) < hit)
  184.       # 不确定的特技的情况下设置为有效标志
  185.       effective |= hit < 100
  186.     end
  187.     # 命中的情况下
  188.     if hit_result == true
  189.       # 威力 0 以外的物理攻击的情况下
  190.       if skill.power != 0 and skill.atk_f > 0
  191.         # 状态冲击解除
  192.         remove_states_shock
  193.         # 设置有效标志
  194.         effective = true
  195.       end
  196.       # HP 的伤害减法运算
  197.       last_hp = self.hp
  198.       self.hp -= self.damage
  199.       effective |= self.hp != last_hp
  200.       # 状态变化
  201.       @state_changed = false
  202.       effective |= states_plus(skill.plus_state_set)
  203.       effective |= states_minus(skill.minus_state_set)
  204.       # 威力为 0 的场合
  205.       if skill.power == 0
  206.         # 伤害设置为空的字串
  207.         self.damage = ""
  208.         # 状态没有变化的情况下
  209.         unless @state_changed
  210.           # 伤害设置为 "Miss"
  211.           self.damage = "Miss"
  212.           # 清除会心一击标志
  213.           self.critical = false
  214.         end
  215.       end
  216.     # Miss 的情况下
  217.     else
  218.       # 伤害设置为 "Miss"
  219.       self.damage = "Miss"
  220.       # 清除会心一击标志
  221.       self.critical = false
  222.     end
  223.     # 不在战斗中的情况下
  224.     unless $game_temp.in_battle
  225.       # 伤害设置为 nil
  226.       self.damage = nil
  227.     end
  228.     # 过程结束
  229.     return effective
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 应用物品效果
  233.   #     item : 物品
  234.   #--------------------------------------------------------------------------
  235.   def item_effect(item)
  236.     # 清除会心一击标志
  237.     self.critical = false
  238.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  239.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  240.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  241.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  242.       # 过程结束
  243.       return false
  244.     end
  245.     # 清除有效标志
  246.     effective = false
  247.     # 公共事件 ID 是有效的情况下,设置为有效标志
  248.     effective |= item.common_event_id > 0
  249.     # 命中判定
  250.     hit_result = (rand(100) < item.hit)
  251.     # 不确定的特技的情况下设置为有效标志
  252.     effective |= item.hit < 100
  253.     # 命中的情况
  254.     if hit_result == true
  255.       # 计算回复量
  256.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  257.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  258.       if recover_hp < 0
  259.         recover_hp += self.pdef * item.pdef_f / 20
  260.         recover_hp += self.mdef * item.mdef_f / 20
  261.         recover_hp = [recover_hp, 0].min
  262.       end
  263.       # 属性修正
  264.       recover_hp *= elements_correct(item.element_set)
  265.       recover_hp /= 100
  266.       recover_sp *= elements_correct(item.element_set)
  267.       recover_sp /= 100
  268.       # 分散
  269.       if item.variance > 0 and recover_hp.abs > 0
  270.         amp = [recover_hp.abs * item.variance / 100, 1].max
  271.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  272.       end
  273.       if item.variance > 0 and recover_sp.abs > 0
  274.         amp = [recover_sp.abs * item.variance / 100, 1].max
  275.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  276.       end
  277.       # 回复量符号为负的情况下
  278.       if recover_hp < 0
  279.         # 防御修正
  280.         if self.guarding?
  281.           recover_hp /= 2
  282.         end
  283.       end
  284.       # HP 回复量符号的反转、设置伤害值
  285.       self.damage = -recover_hp
  286.       # HP 以及 SP 的回复
  287.       last_hp = self.hp
  288.       last_sp = self.sp
  289.       self.hp += recover_hp
  290.       self.sp += recover_sp
  291.       effective |= self.hp != last_hp
  292.       effective |= self.sp != last_sp
  293.       # 状态变化
  294.       @state_changed = false
  295.       effective |= states_plus(item.plus_state_set)
  296.       effective |= states_minus(item.minus_state_set)
  297.       # 能力上升值有效的情况下
  298.       if item.parameter_type > 0 and item.parameter_points != 0
  299.         # 能力值的分支
  300.         case item.parameter_type
  301.         when 1  # MaxHP
  302.           @maxhp_plus += item.parameter_points
  303.         when 2  # MaxSP
  304.           @maxsp_plus += item.parameter_points
  305.         when 3  # 力量
  306.           @str_plus += item.parameter_points
  307.         when 4  # 灵巧
  308.           @dex_plus += item.parameter_points
  309.         when 5  # 速度
  310.           @agi_plus += item.parameter_points
  311.         when 6  # 魔力
  312.           @int_plus += item.parameter_points
  313.         end
  314.         # 设置有效标志
  315.         effective = true
  316.       end
  317.       # HP 回复率与回复量为 0 的情况下
  318.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  319.         # 设置伤害为空的字符串
  320.         self.damage = ""
  321.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  322.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  323.            (item.parameter_type == 0 or item.parameter_points == 0)
  324.           # 状态没有变化的情况下
  325.           unless @state_changed
  326.             # 伤害设置为 "Miss"
  327.             self.damage = "Miss"
  328.           end
  329.         end
  330.       end
  331.     # Miss 的情况下
  332.     else
  333.       # 伤害设置为 "Miss"
  334.       self.damage = "Miss"
  335.     end
  336.     # 不在战斗中的情况下
  337.     unless $game_temp.in_battle
  338.       # 伤害设置为 nil
  339.       self.damage = nil
  340.     end
  341.     # 过程结束
  342.     return effective
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● 应用连续伤害效果
  346.   #--------------------------------------------------------------------------
  347.   def slip_damage_effect
  348.     # 设置伤害
  349.     self.damage = self.maxhp / 10
  350.     # 分散
  351.     if self.damage.abs > 0
  352.       amp = [self.damage.abs * 15 / 100, 1].max
  353.       self.damage += rand(amp+1) + rand(amp+1) - amp
  354.     end
  355.     # HP 的伤害减法运算
  356.     self.hp -= self.damage
  357.     # 过程结束
  358.     return true
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 属性修正计算
  362.   #     element_set : 属性
  363.   #--------------------------------------------------------------------------
  364.   def elements_correct(element_set)
  365.     # 无属性的情况
  366.     if element_set == []
  367.       # 返回 100
  368.       return 100
  369.     end
  370.     # 在被赋予的属性中返回最弱的
  371.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  372.     #   和 Game_Enemy 类的定义
  373.     weakest = -100
  374.     for i in element_set
  375.       weakest = [weakest, self.element_rate(i)].max
  376.     end
  377.     return weakest
  378.   end
  379. end
复制代码

以此类推
支持一下下我的这个游戏吧~~
大雄与空间军团
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1438
在线时间
328 小时
注册时间
2016-4-4
帖子
168

开拓者

7
 楼主| 发表于 2017-1-15 12:07:53 | 只看该作者
哆啦溯 发表于 2017-1-15 12:02
都不行……不同的状态要用不同的变量写……你想制作多个状态暴击率叠加的效果?(2×2=4倍概率暴击)那就 ...

受教了    另外 如果不需要叠加 是不是可以用我刚才的设置?我记得有个反击脚本 里面的反击的名字这个变量 是只有一个的  但是我写了几行 后面的参数(状态名)不一样 好像测试的时候几个都可以触发  也可能是我记错了?

点评

好吧 谢谢大佬回答了  发表于 2017-1-15 12:13
不需要叠加的话用4楼的脚本不就行了……反击脚本…我又没看过怎么知道  发表于 2017-1-15 12:10
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 14:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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