Project1

标题: 如何在普通版本下实现会心一击和属性挂钩 [打印本页]

作者: 步兵中尉    时间: 2011-4-28 22:41
标题: 如何在普通版本下实现会心一击和属性挂钩
最近在用RTAB时发现实现会心一击只要在属性中选择必杀就可以了。
不知道这种效果能否在不用RTAB的普通版中实现?
如果有的话求教具体方法
作者: Wind2010    时间: 2011-4-29 12:35
武器和技能都要么?
作者: 步兵中尉    时间: 2011-4-29 21:42
两个都实现最好,如果麻烦的话就实现装备也可以
作者: Wind2010    时间: 2011-4-29 22:01
  1. class Game_Battler
  2.   Critical_element_id = 17 #17号属性必杀
  3.   def attack_effect(attacker)
  4.     self.critical = false
  5.     hit_result = (rand(100) < attacker.hit)
  6.     if hit_result == true
  7.       atk = [attacker.atk - self.pdef / 2, 0].max
  8.       self.damage = atk * (20 + attacker.str) / 20
  9.       self.damage *= elements_correct(attacker.element_set)
  10.       self.damage /= 100
  11.       if self.damage > 0
  12.         if (rand(100) < 4 * attacker.dex / self.agi) or attacker.element_set.include?(Critical_element_id)
  13.           # ↑修改此句
  14.           self.damage *= 2
  15.           self.critical = true
  16.         end
  17.         if self.guarding?
  18.           self.damage /= 2
  19.         end
  20.       end
  21.       if self.damage.abs > 0
  22.         amp = [self.damage.abs * 15 / 100, 1].max
  23.         self.damage += rand(amp+1) + rand(amp+1) - amp
  24.       end
  25.       eva = 8 * self.agi / attacker.dex + self.eva
  26.       hit = self.damage < 0 ? 100 : 100 - eva
  27.       hit = self.cant_evade? ? 100 : hit
  28.       hit_result = (rand(100) < hit)
  29.     end
  30.     if hit_result == true
  31.       remove_states_shock
  32.       self.hp -= self.damage
  33.       @state_changed = false
  34.       states_plus(attacker.plus_state_set)
  35.       states_minus(attacker.minus_state_set)
  36.     else
  37.       self.damage = "Miss"
  38.       self.critical = false
  39.     end
  40.     return true
  41.   end
  42.   def skill_effect(user, skill)
  43.     self.critical = false
  44.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  45.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  46.       return false
  47.     end
  48.     effective = false
  49.     effective |= skill.common_event_id > 0
  50.     hit = skill.hit
  51.     if skill.atk_f > 0
  52.       hit *= user.hit / 100
  53.     end
  54.     hit_result = (rand(100) < hit)
  55.     effective |= hit < 100
  56.     if hit_result == true
  57.       power = skill.power + user.atk * skill.atk_f / 100
  58.       if power > 0
  59.         power -= self.pdef * skill.pdef_f / 200
  60.         power -= self.mdef * skill.mdef_f / 200
  61.         power = [power, 0].max
  62.       end
  63.       rate = 20
  64.       rate += (user.str * skill.str_f / 100)
  65.       rate += (user.dex * skill.dex_f / 100)
  66.       rate += (user.agi * skill.agi_f / 100)
  67.       rate += (user.int * skill.int_f / 100)
  68.       self.damage = power * rate / 20
  69.       self.damage *= elements_correct(skill.element_set)
  70.       self.damage /= 100
  71.       if self.damage > 0
  72.         if self.guarding?
  73.           self.damage /= 2
  74.         end
  75.       end
  76.       # 添加处↓
  77.       if skill.element_set.include?(Critical_element_id)
  78.         self.damage *= 2
  79.         self.critical = true
  80.       end
  81.       # 添加处↑
  82.       if skill.variance > 0 and self.damage.abs > 0
  83.         amp = [self.damage.abs * skill.variance / 100, 1].max
  84.         self.damage += rand(amp+1) + rand(amp+1) - amp
  85.       end
  86.       eva = 8 * self.agi / user.dex + self.eva
  87.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  88.       hit = self.cant_evade? ? 100 : hit
  89.       hit_result = (rand(100) < hit)
  90.       effective |= hit < 100
  91.     end
  92.     if hit_result == true
  93.       if skill.power != 0 and skill.atk_f > 0
  94.         remove_states_shock
  95.         effective = true
  96.       end
  97.       last_hp = self.hp
  98.       self.hp -= self.damage
  99.       effective |= self.hp != last_hp
  100.       @state_changed = false
  101.       effective |= states_plus(skill.plus_state_set)
  102.       effective |= states_minus(skill.minus_state_set)
  103.       if skill.power == 0
  104.         self.damage = ""
  105.         unless @state_changed
  106.           self.damage = "Miss"
  107.         end
  108.       end
  109.     else
  110.       self.damage = "Miss"
  111.     end
  112.     unless $game_temp.in_battle
  113.       self.damage = nil
  114.     end
  115.     return effective
  116.   end
  117. end
复制代码

作者: 步兵中尉    时间: 2011-4-30 00:10
最后询问一句,这个脚本包括特技了吗?




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