Project1

标题: 修改会心一击计算式后Miss几率增大 [打印本页]

作者: 破碎记忆    时间: 2017-4-26 18:45
标题: 修改会心一击计算式后Miss几率增大
本帖最后由 破碎记忆 于 2017-4-26 22:29 编辑

if rand(100) < ( (4 * attacker.dex / self.agi) * $game_variables[7] ) && attacker.is_a?(Game_Actor)
if rand(100) < 4 * attacker.dex / self.agi * (($game_switches[1] && attacker.is_a?(Game_Actor))? 2 : 1)
这两种写法都会使mass几率增大,该怎么解决?
我只想做一个功能,当角色携带物品A时,角色暴击几率为2倍,敌人暴击率不变,携带物品B时候角色暴击率为100%,敌人暴击率不变,该怎么做???而且mass几率也不变???(原先的想法是用开关,或者变量,开关1或2打开,直接4 * attacker.dex / self.agi后乘2或100;用变量,当携带A时,给变量1赋值为2,携带B时变量1赋值为100,A和B都没有时,变量1赋值为1,在4 * attacker.dex / self.agi后直接乘变量1的值 )
作者: 芯☆淡茹水    时间: 2017-4-26 20:24
本帖最后由 芯☆淡茹水 于 2017-4-26 20:35 编辑

你就只修改的这两句么?
一连串的括号看着头晕了,或者第一句你可以把敌人再算进去试试
add_rate = attacker.is_a?(Game_Actor) ? $game_variables[7] : 1
if rand(100) < 4 * attacker.dex / self.agi * add_rate
作者: huajinyu123    时间: 2017-4-26 21:17
你应该告诉我们算的是什么,哪个是命中? 变量又是什么呀?输入大约在什么值附近?输出又应该在什么值附近?
作者: 破碎记忆    时间: 2017-4-26 22:14
芯☆淡茹水 发表于 2017-4-26 20:24
你就只修改的这两句么?
一连串的括号看着头晕了,或者第一句你可以把敌人再算进去试试
add_rate = attacke ...

我只想做一个功能,当角色携带物品A时,角色暴击几率为2倍,敌人暴击率不变,携带物品B时候角色暴击率为100%,敌人暴击率不变,该怎么做???而且mass几率也不变???(原先的想法是用开关,或者变量,开关1或2打开,直接4 * attacker.dex / self.agi后乘2或100;用变量,当携带A时,给变量1赋值为2,携带B时变量1赋值为100,A和B都没有时,变量1赋值为1,在4 * attacker.dex / self.agi后直接乘变量1的值 )
作者: 破碎记忆    时间: 2017-4-26 22:14
huajinyu123 发表于 2017-4-26 21:17
你应该告诉我们算的是什么,哪个是命中? 变量又是什么呀?输入大约在什么值附近?输出又应该在什么值附近 ...

我只想做一个功能,当角色携带物品A时,角色暴击几率为2倍,敌人暴击率不变,携带物品B时候角色暴击率为100%,敌人暴击率不变,该怎么做???而且mass几率也不变???(原先的想法是用开关,或者变量,开关1或2打开,直接4 * attacker.dex / self.agi后乘2或100;用变量,当携带A时,给变量1赋值为2,携带B时变量1赋值为100,A和B都没有时,变量1赋值为1,在4 * attacker.dex / self.agi后直接乘变量1的值 )
作者: guoxiaomi    时间: 2017-4-26 22:40
你把之前那个帖子一起发出来让大家参考一下呗
作者: 芯☆淡茹水    时间: 2017-4-26 22:48
破碎记忆 发表于 2017-4-26 22:14
我只想做一个功能,当角色携带物品A时,角色暴击几率为2倍,敌人暴击率不变,携带物品B时候角色暴击率为1 ...

那么直接把默认的暴击条件改成下面这个,改这个和命中率无关

  1. add_rate = attacker.is_a?(Game_Actor) ? [$game_variables[7], 1].max : 1
  2. if rand(100) < 4 * attacker.dex / self.agi * add_rate
复制代码

作者: 破碎记忆    时间: 2017-4-27 11:06
能解释下第一行代码后面从变量开始的意思吗
作者: 破碎记忆    时间: 2017-4-27 11:09
芯☆淡茹水 发表于 2017-4-26 22:48
那么直接把默认的暴击条件改成下面这个,改这个和命中率无关

能解释下第一行代码后面从变量开始的意思吗
作者: 芯☆淡茹水    时间: 2017-4-27 12:46
本帖最后由 芯☆淡茹水 于 2017-4-27 12:58 编辑
破碎记忆 发表于 2017-4-27 11:09
能解释下第一行代码后面从变量开始的意思吗


add_rate = attacker.is_a?(Game_Actor) ? [$game_variables[7], 1].max : 1

变量 add_rate  (新增暴击概率)赋值为:
如果攻击者是角色,那么取 $game_variables[7] 和 1 之间的最大值。(预防误操作使变量7为0或负值时,角色就没有暴击了。意思就是至少新增的概率为1倍),最后面的 1 也就是敌人的1倍,无变化。

if rand(100) < 4 * attacker.dex / self.agi * add_rate

用乘法是在原暴击率的基础上增加倍数,这个不是定数,暴击几率越高,增加的几率也就越高。 原几率 10 * 增加的20 = 200%
如果用加法:if rand(100) < 4 * attacker.dex / self.agi + add_rate ,就是给暴击率增加一个固定值。原几率 10 + 增加的20 = 30%

用乘法的话,暴击2倍,变量7调整为2; 暴击100%,变量7调整为100以上都行。
作者: 破碎记忆    时间: 2017-4-27 13:20
芯☆淡茹水 发表于 2017-4-27 12:46
add_rate = attacker.is_a?(Game_Actor) ? [$game_variables[7], 1].max : 1

变量 add_rate  (新增暴击 ...

嗯,谢谢
作者: 破碎记忆    时间: 2017-4-27 21:38
芯☆淡茹水 发表于 2017-4-26 22:48
那么直接把默认的暴击条件改成下面这个,改这个和命中率无关

好像mass几率还是会增大
作者: 【蛋塔】    时间: 2017-4-28 00:24
我只想做一个功能,当角色携带物品A时,角色暴击几率为2倍,敌人暴击率不变,携带物品B时候角色暴击率为100%,敌人暴击率不变,该怎么做???而且mass几率也不变???


这个很好解决,也很简单,请跟着我的步骤修改脚本!
打开脚本,在Game_Battler 3 的81行下面添加脚本:
RUBY 代码复制
  1. if attacker.is_a?(Game_Actor)
  2.         if $game_party.item_number(1)
  3.           if rand(100) > 50
  4.            self.damage *= 2
  5.            self.critical = true
  6.          end
  7.        end
  8.      end

以上脚本的意思就是当角色携带1号物品时有50%几率发动暴击(如果是技能的话也是用相同的办法)
再到181行下面添加脚本:
RUBY 代码复制
  1. if user.is_a?(Game_Actor)
  2.         if $game_party.item_number(1)
  3.           if rand(100) > 50
  4.            self.damage *= 2
  5.            self.critical = true
  6.          end
  7.        end
  8.      end

这样的话,技能也可以拥有这个特效!
if rand(100) > 50 意思就是随机数值0-100 如果大于50就发动暴击造成2倍伤害,如果想100%暴击,那就改成if rand(100) > 0



作者: 破碎记忆    时间: 2017-4-28 08:07
【蛋塔】 发表于 2017-4-28 00:24
这个很好解决,也很简单,请跟着我的步骤修改脚本!
打开脚本,在Game_Battler 3 的81行下面添加脚本:
i ...

嗯,谢了




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