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

Project1

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

[已经解决] 如何修改再行动在战斗中的判定顺序

[复制链接]

Lv4.逐梦者

梦石
10
星屑
7692
在线时间
690 小时
注册时间
2017-1-9
帖子
636

我没有哭开拓者

跳转到指定楼层
1
发表于 2019-2-5 15:37:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
50星屑
本帖最后由 世界第一中二 于 2019-2-5 15:42 编辑

我使用的是rmva默认的战斗系统
我设计的技能A,有通过“触发公共事件-强制使用技能指令”来使用二段技能B的设计
但这样做就会遇到一个bug,那就是在战斗中,你可以一回合行动两次的时候,你的操作是“使用技能A,再使用另一个技能C”
而实际效果会变成“你使用技能A,再使用技能B”
通过搜索我找到了一个遇到和我一样的问题的帖子、但是我不喜欢那个帖子的解决方法
所以现在在这里跑来求助各位大佬了

我希望能修改第二次行动在战斗中的判定顺序
且兼容下面这个脚本
RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 行動回数仕様変更 Ver1.00  by 星潟
  3. #------------------------------------------------------------------------------
  4. # 特徴による過剰な複数回行動を防止し、2回行動までに限定します。
  5. # この効果はアクターとエネミーはそれぞれ別に設定が可能です。
  6. # (このスクリプトのデフォルトでは
  7. #   アクターのみ制限し、敵は通常通りの行動を行います)
  8. #
  9. # なお、制限を行った場合は、行動回数増加率を個別に計算せず合算します。
  10. #------------------------------------------------------------------------------
  11. # 例1.
  12. # 行動回数増加率20%の装備を3つ付けた場合
  13. #
  14. # 制限しない場合 => 20%で3回判定し、最大4回行動を行う。
  15. #
  16. # 制限する場合   => 20%を3回分合算し、60%の確率で2回行動を行う。
  17. #------------------------------------------------------------------------------
  18. # 例2.
  19. # 行動回数増加率60%の装備を2つ付けた場合
  20. #
  21. # 制限しない場合 => 60%で2回判定し、最大3回行動を行う。
  22. #
  23. # 制限する場合   => 60%を2回分合算し、120%の確率で2回行動を行う。
  24. #                   (100%を超えても確実になるだけで、3回行動にはならない)
  25. #------------------------------------------------------------------------------
  26. # 当方の「XPスタイルバトル拡張スクリプト 再行動」を導入されている場合
  27. # 必ず、該当スクリプトよりもこのスクリプトを上側に配置して下さい。
  28. #==============================================================================
  29. module ACTT_C
  30.  
  31.   #アクターの行動回数を2回までに制限し、計算方法を変えるか?
  32.  
  33.   ACTOR = true
  34.  
  35.   #エネミーの行動回数を2回までに制限し、計算方法を変えるか?
  36.  
  37.   ENEMY = true
  38.  
  39. end
  40. class Game_Battler < Game_BattlerBase
  41.   #--------------------------------------------------------------------------
  42.   # 行動回数の決定
  43.   #--------------------------------------------------------------------------
  44.   alias make_action_times_calc_change make_action_times
  45.   def make_action_times
  46.     #アクターかエネミーかで条件分岐し
  47.     #それぞれの場合で更に計算を分岐させる。
  48.     if self.actor?
  49.       ACTT_C::ACTOR ? total_type_action_times : make_action_times_calc_change
  50.     else
  51.       ACTT_C::ENEMY ? total_type_action_times : make_action_times_calc_change
  52.     end
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # 行動回数増加確率の総和を以て1回行動か2回行動かの決定
  56.   #--------------------------------------------------------------------------
  57.   def total_type_action_times
  58.     #0.0に確率を足していく。
  59.     data = action_plus_set.inject(0.0) {|r, i| r + i}
  60.     #乱数が確率の総和より低い場合に2回行動。
  61.     rand < data ? 2 : 1
  62.   end
  63. end

通过这个脚本我将再行动次数上限锁死在了1次,也就是无论行动次数增加几率累积到了多少、一个角色一回合都最多行动两次

我想要达到的效果是:
小明(50%再行动率)和小红(50%再行动率)和老师(0再行动率)开始战斗

第一回合
玩家输入小明和小红的战斗指令
小明、小红和老师互相殴打了起来,叮咣叮咣叮叮咣
小明再行动率判定成功
小红再行动率判定失败
显示战斗提示文字“小明可以再行动!”
玩家输入小明的战斗指令(此时无法对小红输入战斗指令)
“诺曼底的寒假作业!”小明单方面殴打了老师!

第二回合
玩家输入小明和小红的战斗指令
小明、小红和老师互相又殴打了起来,叮咣叮咣叮叮咣
小明再行动率判定失败
小红再行动率判定成功
显示战斗提示文字“小红可以再行动!”
玩家输入小红的战斗指令(此时无法对小明输入战斗指令)
“柠檬杯的快乐寒假!”小红单方面殴打了老师!

第三回合
玩家输入小明和小红的战斗指令
小明、小红和老师互相殴打了起来,叮咣叮咣叮叮咣
小明再行动率判定成功
小红再行动率判定成功
显示战斗提示文字“小明可以再行动!”
显示战斗提示文字“小红可以再行动!”
玩家输入小明和小红的战斗指令
“寒假作业就是用来抄的!”小明和小红单方面殴打了老师!

第四回合
玩家输入小明和小红的战斗指令
小明、小红和老师互相殴打了起来,叮咣叮咣叮叮咣
小明再行动率判定失败
小红再行动率判定失败
(此时直接进入第五回合)

队伍上限是默认的四人
另外,我不会给怪物添加增加行动次数几率这一属性,所以怪物的再行动也可以不用考虑

我想达到上面这样的效果,恳求诸位的帮忙



最佳答案

查看完整内容

↑解决这个问题的脚本 #============================================================================== # ■ 强制战斗行动不覆盖原行动 by Calendar99 #------------------------------------------------------------------------------ #  如标题所说。 #============================================================================== module CLD99;end module CLD99::SMART_FORCE_ACTION ENABLE_SWITCH_ID = 0 ...
这个B天天摸鱼,快点来个谁把他从被窝里拖出来

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

2
发表于 2019-2-5 15:37:14 | 只看该作者
本帖最后由 KB.Driver 于 2019-2-9 21:43 编辑
我设计的技能A,有通过“触发公共事件-强制使用技能指令”来使用二段技能B的设计
但这样做就会遇到一个bug,那就是在战斗中,你可以一回合行动两次的时候,你的操作是“使用技能A,再使用另一个技能C”
而实际效果会变成“你使用技能A,再使用技能B”

↑解决这个问题的脚本

RUBY 代码复制
  1. #==============================================================================
  2. # ■ 强制战斗行动不覆盖原行动 by Calendar99
  3. #------------------------------------------------------------------------------
  4. #  如标题所说。
  5. #==============================================================================
  6. module CLD99;end
  7. module CLD99::SMART_FORCE_ACTION
  8.  
  9.   ENABLE_SWITCH_ID = 0
  10.   # 开启功能的开关编号
  11.   # 正数为开关编号 0为一直启用 -1为一直禁用
  12.  
  13.   def self.enable?
  14.     if ENABLE_SWITCH_ID < 0
  15.       false
  16.     elsif ENABLE_SWITCH_ID == 0
  17.       true
  18.     else
  19.       $game_switches[ENABLE_SWITCH_ID]
  20.     end
  21.   end
  22.  
  23. end
  24.  
  25. class Game_Battler
  26.   #--------------------------------------------------------------------------
  27.   # ● [别名修改]强制战斗行动
  28.   #    为不覆盖原行动而做出改动
  29.   #--------------------------------------------------------------------------
  30.   alias force_action_for_twice_move force_action
  31.   def force_action(skill_id, target_index)
  32.     return force_action_for_twice_move(skill_id, target_index) unless CLD99::SMART_FORCE_ACTION.enable?
  33.     @action_forced = true # 不清除行动的标志
  34.     force_action_for_twice_move(skill_id, target_index)
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● [别名修改]清除战斗行动
  38.   #    强制战斗行动时,将未执行的行动入栈
  39.   #--------------------------------------------------------------------------
  40.   alias clear_actions_for_twice_move clear_actions
  41.   def clear_actions
  42.     return clear_actions_for_twice_move unless CLD99::SMART_FORCE_ACTION.enable?
  43.     @action_forced ? action_stack : clear_actions_for_twice_move
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● [别名修改]移除当前战斗行动
  47.   #    强制战斗行动执行完毕时,将入栈的行动取出
  48.   #--------------------------------------------------------------------------
  49.   alias remove_current_action_for_twice_move remove_current_action
  50.   def remove_current_action
  51.     remove_current_action_for_twice_move
  52.     if @action_forced && @actions.empty? && CLD99::SMART_FORCE_ACTION.enable?
  53.       @action_forced = false
  54.       action_stack
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● [追加]行动栈
  59.   #    存储因强制行动而原本要被消除的行动
  60.   #--------------------------------------------------------------------------
  61.   def action_stack
  62.     if @action_stack # 栈已存在则取出
  63.       @actions, @action_stack = @action_stack, @actions
  64.       @action_stack = nil
  65.     else             # 栈不存在则放入
  66.       @action_stack = []
  67.       @actions, @action_stack = @action_stack, @actions
  68.     end
  69.   end
  70. end
  71.  
  72. class << BattleManager
  73.   #--------------------------------------------------------------------------
  74.   # ● [覆盖]强制行动
  75.   #--------------------------------------------------------------------------
  76.   def self.force_action(battler)
  77.     @action_forced = battler
  78.     @action_battlers.delete(battler) unless CLD99::SMART_FORCE_ACTION.enable?
  79.   end
  80. end


新建工程插入楼主提供的脚本和以上脚本,测试通过。
脚本比较麻烦,调试了不少时间,与其他代码兼容性的帮助暂不提供,请谅解。

示例工程
project1.zip (1.41 MB, 下载次数: 81)




仔细看了一下,好像还有人为控制再行动的需求。
请使用下面的脚本。
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 人为控制再行动 by Calendar99
  3. #------------------------------------------------------------------------------
  4. #  可以通过战斗事件人为控制角色的再行动。(只为行动2次设计)
  5. #   注意,每次控制的效果只持续一回合。
  6. #
  7. #   使用方法:战斗事件中输入脚本 $game_actors[n].twice_action_flag = boolean
  8. #   例 $game_actors[1].twice_action_flag = true  # 这个回合,艾里克必定再行动
  9. #      $game_actors[2].twice_action_flag = false # 这个回合,娜塔莉不可能再行动
  10. #==============================================================================
  11. class Game_Battler < Game_BattlerBase
  12.   attr_accessor :twice_action_flag # 是否必定/禁止二次行动 不起作用时为nil
  13.   #--------------------------------------------------------------------------
  14.   # ● [别名修改]决定行动回数
  15.   #--------------------------------------------------------------------------
  16.   alias make_action_times_cld99 make_action_times
  17.   def make_action_times
  18.     if self.twice_action_flag != nil # 如果有人为操控标志
  19.       action_times = self.twice_action_flag ? 2 : 1
  20.       self.twice_action_flag = nil # 清除标志
  21.       return action_times
  22.     end
  23.     make_action_times_cld99
  24.   end
  25. end


加入了这个脚本的工程
project2.zip (1.41 MB, 下载次数: 101)

点评

啊,忘记说了。人为控制再行动的脚本一定要放在决定行动回数脚本的下面_(:3」∠)_  发表于 2019-2-9 21:45

评分

参与人数 1+1 收起 理由
世界第一中二 + 1 虽然的确解决了问题……但是…….

查看全部评分

用头画头像,用脚写脚本
回复

使用道具 举报

Lv4.逐梦者

梦石
10
星屑
7692
在线时间
690 小时
注册时间
2017-1-9
帖子
636

我没有哭开拓者

3
 楼主| 发表于 2019-2-9 16:30:10 | 只看该作者
自顶QvQ……召唤大佬之术~
这个B天天摸鱼,快点来个谁把他从被窝里拖出来
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 20:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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