Project1

标题: 如何在 RMXP 中实现技能的暴击 [打印本页]

作者: 初代博丽镜子.    时间: 2017-11-3 16:30
标题: 如何在 RMXP 中实现技能的暴击
本帖最后由 RyanBern 于 2017-11-3 18:13 编辑

在RMXP中如何让技能暴击啊?和普通攻击一样,还有默认情况下这个灵巧的暴击率计算怎么弄的。

想改根据灵巧暴击上升,然后等级衰减暴击率这样
作者: SailCat    时间: 2017-11-3 17:11
暴击的基础机率是4%*你的灵巧/对方的速度,根据灵巧暴击上升是系统内建的行为,对于普通攻击这点不用改。

技能要暴击的话把Game_Battler3的128行后面加上下列内容(该行内容为      power = skill.power + user.atk * skill.atk_f / 100)
RUBY 代码复制
  1. # 会心一击修正
  2.         if skill.atk_f > 0 and rand(100) < 4 * user.dex / self.agi
  3.           power *= 2
  4.           self.critical = true
  5.         end


作者: guoxiaomi    时间: 2017-11-3 17:13
默认的公式在f1里,这些公式也可以在game battler里找到。应该叫make basic result什么的
作者: 初代博丽镜子.    时间: 2017-11-3 19:01
奇怪......我明明加上去了,还是没技能暴击,要不要改默认设置里的回避相关度?

我这里只加了连续伤害其他的脚本没动啊

P~[@$U(9)%E@}~Wu377IB.png (98.49 KB, 下载次数: 30)

P~[@$U(9)%E@}~Wu377IB.png

作者: 初代博丽镜子.    时间: 2017-11-3 20:59
攻击力相关设置到了100了,还是没暴击...这什么毛病
作者: 初代博丽镜子.    时间: 2017-11-3 21:05
999灵巧测试20多次没暴击,这不是运气问题吧.................
作者: 初代博丽镜子.    时间: 2017-11-3 21:28
发现了,被一个脚本重新定义过,修正了就好了,谢谢
作者: 步兵中尉    时间: 2017-11-5 13:03
其实改的方法很多哦。比如可以用脚本+公共事件实现,也可以通过脚本+属性实现。
比如我用的脚本+属性
  1. class Game_Battler
  2.   Critical_element_id = 17 #17号属性必杀(攻击属性,敌我皆可)
  3.   Critical_guard_element_id = 18 #18号属性防御的饰品必杀
  4.   def attack_effect(attacker)
  5.     self.critical = false
  6.     hit_result = (rand(100) < attacker.hit)
  7.     if hit_result == true
  8.       atk = [attacker.atk - self.pdef / 2, 0].max
  9.       self.damage = atk * (20 + attacker.str) / 20
  10.       self.damage *= elements_correct(attacker.element_set)
  11.       self.damage /= 100
  12.       if self.damage > 0
  13.         if (rand(100) < 4 * attacker.dex / self.agi) or attacker.element_set.include?(Critical_element_id)
  14.           # ↑修改此句
  15.           self.damage *= 2
  16.           self.critical = true
  17.         #####################################
  18.         # 增加↓
  19.         #####################################
  20.         elsif attacker.is_a?(Game_Actor)
  21.           unless $data_armors[attacker.armor4_id].nil?
  22.             if $data_armors[attacker.armor4_id].guard_element_set.include?(Critical_guard_element_id)
  23.               self.damage *= 2
  24.               self.critical = true
  25.             end
  26.           end
  27.         end
  28.         #####################################
  29.         # 增加↑
  30.         #####################################
  31.         if self.guarding?
  32.           self.damage /= 2
  33.         end
  34.       end
  35.       if self.damage.abs > 0
  36.         amp = [self.damage.abs * 15 / 100, 1].max
  37.         self.damage += rand(amp+1) + rand(amp+1) - amp
  38.       end
  39.       eva = 8 * self.agi / attacker.dex + self.eva
  40.       hit = self.damage < 0 ? 100 : 100 - eva
  41.       hit = self.cant_evade? ? 100 : hit
  42.       hit_result = (rand(100) < hit)
  43.     end
  44.     if hit_result == true
  45.       remove_states_shock
  46.       self.hp -= self.damage
  47.       @state_changed = false
  48.       states_plus(attacker.plus_state_set)
  49.       states_minus(attacker.minus_state_set)
  50.     else
  51.       self.damage = "Miss"
  52.       self.critical = false
  53.     end
  54.     return true
  55.   end
  56.   def skill_effect(user, skill)
  57.     self.critical = false
  58.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  59.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  60.       return false
  61.     end
  62.     effective = false
  63.     effective |= skill.common_event_id > 0
  64.     hit = skill.hit
  65.     if skill.atk_f > 0
  66.       hit *= user.hit / 100
  67.     end
  68.     hit_result = (rand(100) < hit)
  69.     effective |= hit < 100
  70.     if hit_result == true
  71.       power = skill.power + user.atk * skill.atk_f / 100
  72.       if power > 0
  73.         power -= self.pdef * skill.pdef_f / 200
  74.         power -= self.mdef * skill.mdef_f / 200
  75.         power = [power, 0].max
  76.       end
  77.       rate = 20
  78.       rate += (user.str * skill.str_f / 100)
  79.       rate += (user.dex * skill.dex_f / 100)
  80.       rate += (user.agi * skill.agi_f / 100)
  81.       rate += (user.int * skill.int_f / 100)
  82.       self.damage = power * rate / 20
  83.       self.damage *= elements_correct(skill.element_set)
  84.       self.damage /= 100
  85.       if self.damage > 0
  86.         if self.guarding?
  87.           self.damage /= 2
  88.         end
  89.       end
  90.       # 添加处↓
  91.       if skill.element_set.include?(Critical_element_id)
  92.         self.damage *= 2
  93.         self.critical = true
  94.       # 添加处↑
  95.       #####################################
  96.       # 增加↓
  97.       #####################################
  98.       elsif user.is_a?(Game_Actor)
  99.         unless $data_armors[user.armor4_id].nil?
  100.           if $data_armors[user.armor4_id].guard_element_set.include?(Critical_guard_element_id)
  101.             self.damage *= 2
  102.             self.critical = true
  103.           end
  104.         end
  105.       end
  106.       #####################################
  107.       # 增加↑
  108.       #####################################
  109.       if skill.variance > 0 and self.damage.abs > 0
  110.         amp = [self.damage.abs * skill.variance / 100, 1].max
  111.         self.damage += rand(amp+1) + rand(amp+1) - amp
  112.       end
  113.       eva = 8 * self.agi / user.dex + self.eva
  114.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  115.       hit = self.cant_evade? ? 100 : hit
  116.       hit_result = (rand(100) < hit)
  117.       effective |= hit < 100
  118.     end
  119.     if hit_result == true
  120.       if skill.power != 0 and skill.atk_f > 0
  121.         remove_states_shock
  122.         effective = true
  123.       end
  124.       last_hp = self.hp
  125.       self.hp -= self.damage
  126.       effective |= self.hp != last_hp
  127.       @state_changed = false
  128.       effective |= states_plus(skill.plus_state_set)
  129.       effective |= states_minus(skill.minus_state_set)
  130.       if skill.power == 0
  131.         self.damage = ""
  132.         unless @state_changed
  133.           self.damage = "Miss"
  134.         end
  135.       end
  136.     else
  137.       self.damage = "Miss"
  138.     end
  139.     unless $game_temp.in_battle
  140.       self.damage = nil
  141.     end
  142.     return effective
  143.   end
  144. end
复制代码





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