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

Project1

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

[已经解决] 如何在 RMXP 中实现技能的暴击

[复制链接]

Lv2.观梦者

梦石
0
星屑
311
在线时间
34 小时
注册时间
2017-10-31
帖子
12
跳转到指定楼层
1
发表于 2017-11-3 16:30:32 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 RyanBern 于 2017-11-3 18:13 编辑

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

想改根据灵巧暴击上升,然后等级衰减暴击率这样

点评

标题最好概括一下问题的内容  发表于 2017-11-3 18:13

Lv3.寻梦者

梦石
0
星屑
3847
在线时间
1582 小时
注册时间
2006-5-5
帖子
2743
8
发表于 2017-11-5 13:03:50 | 只看该作者
其实改的方法很多哦。比如可以用脚本+公共事件实现,也可以通过脚本+属性实现。
比如我用的脚本+属性
  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
复制代码
步兵中尉
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
311
在线时间
34 小时
注册时间
2017-10-31
帖子
12
7
 楼主| 发表于 2017-11-3 21:28:40 | 只看该作者
发现了,被一个脚本重新定义过,修正了就好了,谢谢
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
311
在线时间
34 小时
注册时间
2017-10-31
帖子
12
6
 楼主| 发表于 2017-11-3 21:05:30 | 只看该作者
999灵巧测试20多次没暴击,这不是运气问题吧.................

点评

不排除你用了重定义这个方法的脚本..  发表于 2017-11-3 21:13
建议你P一下这里有没执行..  发表于 2017-11-3 21:12
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
311
在线时间
34 小时
注册时间
2017-10-31
帖子
12
5
 楼主| 发表于 2017-11-3 20:59:53 | 只看该作者
攻击力相关设置到了100了,还是没暴击...这什么毛病

点评

要100%暴击?  发表于 2017-11-3 21:02
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
311
在线时间
34 小时
注册时间
2017-10-31
帖子
12
4
 楼主| 发表于 2017-11-3 19:01:47 | 只看该作者
奇怪......我明明加上去了,还是没技能暴击,要不要改默认设置里的回避相关度?

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

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

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

点评

skill.atk_f(攻击力F)要设置到大于0……纯魔法技能暴击很雷的好吗……  发表于 2017-11-3 20:09
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2017-11-3 17:13:31 手机端发表。 | 只看该作者
默认的公式在f1里,这些公式也可以在game battler里找到。应该叫make basic result什么的
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23186
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

2
发表于 2017-11-3 17:11: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

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 11:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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