#============================================================================== # ■ RGSS3 行動回数仕様変更 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # 特徴による過剰な複数回行動を防止し、2回行動までに限定します。 # この効果はアクターとエネミーはそれぞれ別に設定が可能です。 # (このスクリプトのデフォルトでは # アクターのみ制限し、敵は通常通りの行動を行います) # # なお、制限を行った場合は、行動回数増加率を個別に計算せず合算します。 #------------------------------------------------------------------------------ # 例1. # 行動回数増加率20%の装備を3つ付けた場合 # # 制限しない場合 => 20%で3回判定し、最大4回行動を行う。 # # 制限する場合 => 20%を3回分合算し、60%の確率で2回行動を行う。 #------------------------------------------------------------------------------ # 例2. # 行動回数増加率60%の装備を2つ付けた場合 # # 制限しない場合 => 60%で2回判定し、最大3回行動を行う。 # # 制限する場合 => 60%を2回分合算し、120%の確率で2回行動を行う。 # (100%を超えても確実になるだけで、3回行動にはならない) #------------------------------------------------------------------------------ # 当方の「XPスタイルバトル拡張スクリプト 再行動」を導入されている場合 # 必ず、該当スクリプトよりもこのスクリプトを上側に配置して下さい。 #============================================================================== module ACTT_C #アクターの行動回数を2回までに制限し、計算方法を変えるか? ACTOR = true #エネミーの行動回数を2回までに制限し、計算方法を変えるか? ENEMY = true end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # 行動回数の決定 #-------------------------------------------------------------------------- alias make_action_times_calc_change make_action_times def make_action_times #アクターかエネミーかで条件分岐し #それぞれの場合で更に計算を分岐させる。 if self.actor? ACTT_C::ACTOR ? total_type_action_times : make_action_times_calc_change else ACTT_C::ENEMY ? total_type_action_times : make_action_times_calc_change end end #-------------------------------------------------------------------------- # 行動回数増加確率の総和を以て1回行動か2回行動かの決定 #-------------------------------------------------------------------------- def total_type_action_times #0.0に確率を足していく。 data = action_plus_set.inject(0.0) {|r, i| r + i} #乱数が確率の総和より低い場合に2回行動。 rand < data ? 2 : 1 end end
我设计的技能A,有通过“触发公共事件-强制使用技能指令”来使用二段技能B的设计
但这样做就会遇到一个bug,那就是在战斗中,你可以一回合行动两次的时候,你的操作是“使用技能A,再使用另一个技能C”
而实际效果会变成“你使用技能A,再使用技能B”
#============================================================================== # ■ 强制战斗行动不覆盖原行动 by Calendar99 #------------------------------------------------------------------------------ # 如标题所说。 #============================================================================== module CLD99;end module CLD99::SMART_FORCE_ACTION ENABLE_SWITCH_ID = 0 # 开启功能的开关编号 # 正数为开关编号 0为一直启用 -1为一直禁用 def self.enable? if ENABLE_SWITCH_ID < 0 false elsif ENABLE_SWITCH_ID == 0 true else $game_switches[ENABLE_SWITCH_ID] end end end class Game_Battler #-------------------------------------------------------------------------- # ● [别名修改]强制战斗行动 # 为不覆盖原行动而做出改动 #-------------------------------------------------------------------------- alias force_action_for_twice_move force_action def force_action(skill_id, target_index) return force_action_for_twice_move(skill_id, target_index) unless CLD99::SMART_FORCE_ACTION.enable? @action_forced = true # 不清除行动的标志 force_action_for_twice_move(skill_id, target_index) end #-------------------------------------------------------------------------- # ● [别名修改]清除战斗行动 # 强制战斗行动时,将未执行的行动入栈 #-------------------------------------------------------------------------- alias clear_actions_for_twice_move clear_actions def clear_actions return clear_actions_for_twice_move unless CLD99::SMART_FORCE_ACTION.enable? @action_forced ? action_stack : clear_actions_for_twice_move end #-------------------------------------------------------------------------- # ● [别名修改]移除当前战斗行动 # 强制战斗行动执行完毕时,将入栈的行动取出 #-------------------------------------------------------------------------- alias remove_current_action_for_twice_move remove_current_action def remove_current_action remove_current_action_for_twice_move if @action_forced && @actions.empty? && CLD99::SMART_FORCE_ACTION.enable? @action_forced = false action_stack end end #-------------------------------------------------------------------------- # ● [追加]行动栈 # 存储因强制行动而原本要被消除的行动 #-------------------------------------------------------------------------- def action_stack if @action_stack # 栈已存在则取出 @actions, @action_stack = @action_stack, @actions @action_stack = nil else # 栈不存在则放入 @action_stack = [] @actions, @action_stack = @action_stack, @actions end end end class << BattleManager #-------------------------------------------------------------------------- # ● [覆盖]强制行动 #-------------------------------------------------------------------------- def self.force_action(battler) @action_forced = battler @action_battlers.delete(battler) unless CLD99::SMART_FORCE_ACTION.enable? end end
#============================================================================== # ■ 人为控制再行动 by Calendar99 #------------------------------------------------------------------------------ # 可以通过战斗事件人为控制角色的再行动。(只为行动2次设计) # 注意,每次控制的效果只持续一回合。 # # 使用方法:战斗事件中输入脚本 $game_actors[n].twice_action_flag = boolean # 例 $game_actors[1].twice_action_flag = true # 这个回合,艾里克必定再行动 # $game_actors[2].twice_action_flag = false # 这个回合,娜塔莉不可能再行动 #============================================================================== class Game_Battler < Game_BattlerBase attr_accessor :twice_action_flag # 是否必定/禁止二次行动 不起作用时为nil #-------------------------------------------------------------------------- # ● [别名修改]决定行动回数 #-------------------------------------------------------------------------- alias make_action_times_cld99 make_action_times def make_action_times if self.twice_action_flag != nil # 如果有人为操控标志 action_times = self.twice_action_flag ? 2 : 1 self.twice_action_flag = nil # 清除标志 return action_times end make_action_times_cld99 end end
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |