Project1

标题: 请教一下,怎么做出吸收固定伤害的护盾和造成固定伤害的技能 [打印本页]

作者: pl04644972    时间: 2014-2-9 18:53
标题: 请教一下,怎么做出吸收固定伤害的护盾和造成固定伤害的技能
这在某种层面上应该可以算一个问题吧。。?
作者: 恐惧剑刃    时间: 2014-2-9 18:58
本帖最后由 恋′挂机 于 2014-2-9 18:59 编辑

Game_Battler 3  attack_effect 方法 (只是攻击)
如果@states包含某某状态(id)
给 自身 伤害 self.damage 减去某值

固定伤害 特技分散度为0就可以吧?
作者: pl04644972    时间: 2014-2-9 23:35
恋′挂机 发表于 2014-2-9 18:58
Game_Battler 3  attack_effect 方法 (只是攻击)
如果@states包含某某状态(id)
给 自身 伤害 self.dama ...

已经解决了一个了、固定伤害就是除了命中威力其他全为0,威力数值就是伤害数值
但是还是不知道怎么设置吸收固定伤害然后爆掉的护盾
作者: pl04644972    时间: 2014-3-8 17:32
还是顶一下吧。。
作者: 芯☆淡茹水    时间: 2014-3-8 20:52
复制下面脚本,插入到 main 前。
这个是按要求随手写的,未测试。有问题请@
  1. #==============================================================================
  2. #“护盾”状态 ID 以及其吸收的伤害。(格式:状态ID => 吸收的伤害)
  3. SHIELD_STATE = {6=>500, 7=>1000}
  4. #==============================================================================
  5. class Game_Battler
  6.   #--------------------------------------------------------------------------
  7.   alias add_initialize_xdrs initialize
  8.   def initialize
  9.     @shield_count = 0
  10.     add_initialize_xdrs
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 应用通常攻击效果
  14.   #     attacker : 攻击者 (battler)
  15.   #--------------------------------------------------------------------------
  16.   def attack_effect(attacker)
  17.     # 清除会心一击标志
  18.     self.critical = false
  19.     # 第一命中判定
  20.     hit_result = (rand(100) < attacker.hit)
  21.     # 命中的情况下
  22.     if hit_result == true
  23.       # 计算基本伤害
  24.       atk = [attacker.atk - self.pdef / 2, 0].max
  25.       self.damage = atk * (20 + attacker.str) / 20
  26.       # 属性修正
  27.       self.damage *= elements_correct(attacker.element_set)
  28.       self.damage /= 100
  29.       # 伤害符号正确的情况下
  30.       if self.damage > 0
  31.         # 会心一击修正
  32.         if rand(100) < 4 * attacker.dex / self.agi
  33.           self.damage *= 2
  34.           self.critical = true
  35.         end
  36.         # 防御修正
  37.         if self.guarding?
  38.           self.damage /= 2
  39.         end
  40.       end
  41.       # 分散
  42.       if self.damage.abs > 0
  43.         amp = [self.damage.abs * 15 / 100, 1].max
  44.         self.damage += rand(amp+1) + rand(amp+1) - amp
  45.       end
  46.       # 第二命中判定
  47.       eva = 8 * self.agi / attacker.dex + self.eva
  48.       hit = self.damage < 0 ? 100 : 100 - eva
  49.       hit = self.cant_evade? ? 100 : hit
  50.       hit_result = (rand(100) < hit)
  51.     end
  52.     # 命中的情况下
  53.     if hit_result == true
  54.       # 状态冲击解除
  55.       remove_states_shock
  56.       #####################################################################
  57.       for id in SHIELD_STATE.keys
  58.         if self.state?(id)
  59.           suck = SHIELD_STATE[id] - @shield_count
  60.           if self.damage >= suck
  61.             @shield_count = 0
  62.             remove_state(id, true)
  63.             self.damage -= suck
  64.           else
  65.             @shield_count = self.damage
  66.             self.damage = 0
  67.           end
  68.           break
  69.         end
  70.       end
  71.       ######################################################################
  72.       # HP 的伤害计算
  73.       self.hp -= self.damage
  74.       # 状态变化
  75.       @state_changed = false
  76.       states_plus(attacker.plus_state_set)
  77.       states_minus(attacker.minus_state_set)
  78.     # Miss 的情况下
  79.     else
  80.       # 伤害设置为 "Miss"
  81.       self.damage = "Miss"
  82.       # 清除会心一击标志
  83.       self.critical = false
  84.     end
  85.     # 过程结束
  86.     return true
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 应用特技效果
  90.   #     user  : 特技的使用者 (battler)
  91.   #     skill : 特技
  92.   #--------------------------------------------------------------------------
  93.   def skill_effect(user, skill)
  94.     # 清除会心一击标志
  95.     self.critical = false
  96.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  97.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  98.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  99.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  100.       # 过程结束
  101.       return false
  102.     end
  103.     # 清除有效标志
  104.     effective = false
  105.     # 公共事件 ID 是有效的情况下,设置为有效标志
  106.     effective |= skill.common_event_id > 0
  107.     # 第一命中判定
  108.     hit = skill.hit
  109.     if skill.atk_f > 0
  110.       hit *= user.hit / 100
  111.     end
  112.     hit_result = (rand(100) < hit)
  113.     # 不确定的特技的情况下设置为有效标志
  114.     effective |= hit < 100
  115.     # 命中的情况下
  116.     if hit_result == true
  117.       # 计算威力
  118.       power = skill.power + user.atk * skill.atk_f / 100
  119.       if power > 0
  120.         power -= self.pdef * skill.pdef_f / 200
  121.         power -= self.mdef * skill.mdef_f / 200
  122.         power = [power, 0].max
  123.       end
  124.       # 计算倍率
  125.       rate = 20
  126.       rate += (user.str * skill.str_f / 100)
  127.       rate += (user.dex * skill.dex_f / 100)
  128.       rate += (user.agi * skill.agi_f / 100)
  129.       rate += (user.int * skill.int_f / 100)
  130.       # 计算基本伤害
  131.       self.damage = power * rate / 20
  132.       # 属性修正
  133.       self.damage *= elements_correct(skill.element_set)
  134.       self.damage /= 100
  135.       # 伤害符号正确的情况下
  136.       if self.damage > 0
  137.         # 防御修正
  138.         if self.guarding?
  139.           self.damage /= 2
  140.         end
  141.       end
  142.       # 分散
  143.       if skill.variance > 0 and self.damage.abs > 0
  144.         amp = [self.damage.abs * skill.variance / 100, 1].max
  145.         self.damage += rand(amp+1) + rand(amp+1) - amp
  146.       end
  147.       # 第二命中判定
  148.       eva = 8 * self.agi / user.dex + self.eva
  149.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  150.       hit = self.cant_evade? ? 100 : hit
  151.       hit_result = (rand(100) < hit)
  152.       # 不确定的特技的情况下设置为有效标志
  153.       effective |= hit < 100
  154.     end
  155.     # 命中的情况下
  156.     if hit_result == true
  157.       # 威力 0 以外的物理攻击的情况下
  158.       if skill.power != 0 and skill.atk_f > 0
  159.         # 状态冲击解除
  160.         remove_states_shock
  161.         # 设置有效标志
  162.         effective = true
  163.       end
  164.       # HP 的伤害减法运算
  165.       last_hp = self.hp
  166.       #####################################################################
  167.       for id in SHIELD_STATE.keys
  168.         if self.state?(id)
  169.           suck = SHIELD_STATE[id] - @shield_count
  170.           if self.damage >= suck
  171.             @shield_count = 0
  172.             remove_state(id, true)
  173.             self.damage -= suck
  174.           else
  175.             @shield_count = self.damage
  176.             self.damage = 0
  177.           end
  178.           break
  179.         end
  180.       end
  181.       ######################################################################
  182.       self.hp -= self.damage
  183.       effective |= self.hp != last_hp
  184.       # 状态变化
  185.       @state_changed = false
  186.       effective |= states_plus(skill.plus_state_set)
  187.       effective |= states_minus(skill.minus_state_set)
  188.       # 威力为 0 的场合
  189.       if skill.power == 0
  190.         # 伤害设置为空的字串
  191.         self.damage = ""
  192.         # 状态没有变化的情况下
  193.         unless @state_changed
  194.           # 伤害设置为 "Miss"
  195.           self.damage = "Miss"
  196.         end
  197.       end
  198.     # Miss 的情况下
  199.     else
  200.       # 伤害设置为 "Miss"
  201.       self.damage = "Miss"
  202.     end
  203.     # 不在战斗中的情况下
  204.     unless $game_temp.in_battle
  205.       # 伤害设置为 nil
  206.       self.damage = nil
  207.     end
  208.     # 过程结束
  209.     return effective
  210.   end
  211. end
  212. #==============================================================================
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1