Project1

标题: 【ACE】技能不消耗回合脚本求助! [打印本页]

作者: ACRI    时间: 2022-7-14 04:53
标题: 【ACE】技能不消耗回合脚本求助!
RUBY 代码复制
  1. # coding: utf-8
  2. #===============================================================================
  3. # ■ [hzm]ターン消費無しスキルさん+ for RGSS3
  4. # ※ このスクリプトには「[hzm]メモ欄拡張共通部分さん+ for RGSS3」が必要です
  5. #    「[hzm]メモ欄拡張共通部分 for RGSS3」では動作しません
  6. #-------------------------------------------------------------------------------
  7. # 2014/06/22 Ru/むっくRu
  8. #-------------------------------------------------------------------------------
  9. # 【機能1:无回合消耗技能/物品】
  10. #  将技能设置为在选定的时刻激活而不消耗一回合.
  11. #  请在“数据库”的“技能”的“备忘”栏中进行如下描述。
  12. #
  13. #  [hzm]ターン消費無し:n (这两个好像都一样)
  14. #  または
  15. #  [hzm]即発動:n
  16. #  
  17. #  n可以是任何数字(例:[hzm]ターン消費無し:1)
  18. #  一个回合能使用多少次这个技能取决于这个数字.
  19. #  (:省略掉n的时候、:等于写了1)
  20. #
  21. #  也可以设定在物品里
  22. #  在数据库里的物品备忘录里面.
  23. #-------------------------------------------------------------------------------
  24. # 【機能2:行動順序をスキルごとに反映】
  25. #  速度修正足够高,即使对面速度比你快,你也可以先发动那个速度修正高的技能
  26. #  比如说防御能够先防御,但是攻击之类的要等对面打完再攻击
  27. #  就是这样的情况了
  28. #
  29. #  如果
  30. #  このスクリプトでは,ターンの順番をキャラクターごとではなく,
  31. #  そのキャラクターの行動ごとに順番を設定することによって,
  32. #  各行動ごとの速度補正を適用できるようにします.
  33. #
  34. #  例)
  35. #  エリック
  36. #    素早さ: 30 行動:通常攻撃(速度補正:0),防御(速度補正:2000)
  37. #  スライム
  38. #    素早さ:100 行動:通常攻撃(速度補正:0)
  39. #
  40. #  ・デフォルトのシステムの場合
  41. #  スライム通常攻撃→エリック通常攻撃→エリック防御
  42. #
  43. #  ・このスクリプト導入後
  44. #  エリック防御→スライム通常攻撃→エリック通常攻撃
  45. #-------------------------------------------------------------------------------
  46. # 【更新履歴】
  47. # 2014/06/22 通常攻撃にも適用できるように
  48. # 2014/06/07 次回行動アクター取得処理が正常に動いていないのを修正v2
  49. # 2013/07/18 行動終了時に解除される行動制約ステートが解除されないのを修正
  50. # 2013/03/17 エネミーの行動ターン数指定がおかしくなるのを修正。おまけ機能追加。
  51. # 2013/02/16 ターン開始時に行動不能が解除された際にエラー落ちするのを修正
  52. # 2013/01/11 コモンイベント呼び出しでアクターを離脱させるとエラー落ちしていたのを修正
  53. # 2012/10/14 行動回数再計算ON時,エネミーが「逃げる」とエラー落ちしていたのを修正
  54. # 2012/10/09 マップ上でアイテムを使用した際にエラー落ちしていたのを修正
  55. # 2012/10/06 戦闘中にパーティ入れ替えを行った場合にエラー落ちしていたのを修正
  56. #            ステータスウィンドウの更新が正常に行われていなかったのを修正
  57. # 2012/10/05 大幅修正を行いました.
  58. #            新メモスクリプト([hzm]メモ欄拡張共通部分さん+ for RGSS3)用に変更
  59. #            行動回数の再計算機能(アクター/エネミー)を追加
  60. #            1ターン内で使用できる回数の設定を追加
  61. #            「各行動ごとに行動順を設定さん for RGSS3」の機能を内包
  62. # 2012/10/03 行動回数の再計算(暫定)を追加
  63. # 2012/06/01 エネミー用設定を追加
  64. # 2012/04/21 複数回行動するアクターが正常に動作しない不具合を修正
  65. # 2012/04/01 味方の行動不能状態を回復した際に強制終了する不具合を修正
  66. # 2012/03/28 アイテムにも対応
  67. # 2012/01/28 コモンイベント内で「戦闘行動の強制」を使用した際に強制終了するのを修正
  68. # 2012/01/28 コモンイベントの呼び出しが正常に動作しないのを少し修正
  69. # 2012/01/03 ぶっぱ
  70. #-------------------------------------------------------------------------------
  71.  
  72. #===============================================================================
  73. # ● 設定項目
  74. #===============================================================================
  75. module HZM_VXA
  76.   module QuickSkill
  77.     # ● ターン消費無し行動後に行動回数を再計算する(上級設定)
  78.     #   [効果]
  79.     #   ・エネミーも(疑似的に)ターン消費無しスキルを使用可能に
  80.     #   ・行動回数を変化させるステートを即時反映
  81.     #   [副作用]
  82.     #   ・50%の確率で行動回数増加などの設定が使用不可に
  83.     #     true  : する
  84.     #     false : しない
  85.     CHECK_ACTION_TIMES = false
  86.  
  87.     # ● オマケ機能:敵の行動パターンのターン数の仕様をVX化
  88.     #    1ターン目(最初のターン)に指定の行動をさせたい場合、
  89.     #    VX Aceでは行動パターンを0ターン目に設定する必要があります。
  90.     #    この設定方法をVX同様の仕様に変更し、
  91.     #    1ターン目の場合は1ターン目に設定できるようにします。
  92.     #    (上級設定に関係なく使用できます)
  93.     #    true  : VX仕様にする
  94.     #    false : 変更しない
  95.     ENEMY_TURN_NORMALIZE = false
  96.   end
  97. end
  98.  
  99. #===============================================================================
  100. # ↑   ここまで設定   ↑
  101. # ↓ 以下、スクリプト部 ↓
  102. #===============================================================================
  103.  
  104. raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」を導入してください" unless defined?(HZM_VXA::Note2)
  105. raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」のバージョンが一致しません" unless HZM_VXA::Note2.check_version?('3.0.0')
  106.  
  107. module HZM_VXA
  108.   module QuickSkill
  109.     # メモ欄から読み込む要素名の候補を設定
  110.     QUICK_KEYS = ['ターン消費無し', '即発動',  'QuickSkill']
  111.     #---------------------------------------------------------------------------
  112.     # ● QuickSkill中か?
  113.     #---------------------------------------------------------------------------
  114.     def self.quickSkill?
  115.       @quickSkill
  116.     end
  117.     #---------------------------------------------------------------------------
  118.     # ● 即時行動開始
  119.     #---------------------------------------------------------------------------
  120.     def self.start
  121.       @quickSkill = true
  122.     end
  123.     #---------------------------------------------------------------------------
  124.     # ● 即時行動終了
  125.     #---------------------------------------------------------------------------
  126.     def self.finish
  127.       @quickSkill = false
  128.       # 全てのbattlerのアクションを戻す
  129.       $game_party.hzm_vxa_quickSkill_force_action_reverse
  130.       $game_troop.hzm_vxa_quickSkill_force_action_reverse
  131.     end
  132.     #---------------------------------------------------------------------------
  133.     # ● スキル使用回数のリセット
  134.     #---------------------------------------------------------------------------
  135.     def self.reset_use_count
  136.       $game_party.hzm_vxa_quickSkill_reset_use_count
  137.       $game_troop.hzm_vxa_quickSkill_reset_use_count
  138.     end
  139.     # ターン消費無しアイテム管理対象
  140.     ITEM_COUNT_PARTY = true
  141.   end
  142. end
  143.  
  144. module BattleManager
  145.   #-----------------------------------------------------------------------------
  146.   # ● 行動順序の作成(再定義)
  147.   #-----------------------------------------------------------------------------
  148.   def self.make_action_orders
  149.     @action_battlers = []
  150.     all_actions = []
  151.     all_members = []
  152.     all_members += $game_party.members unless @surprise
  153.     all_members += $game_troop.members unless @preemptive
  154.     all_members.each do |member|
  155.       next unless member.movable?
  156.       member.make_speed
  157.       member.actions.each {|action| all_actions.push action }
  158.     end
  159.     all_actions.sort!{|a,b| b.speed - a.speed }
  160.     all_actions.each {|action| @action_battlers.push action.subject}
  161.   end
  162.   #-----------------------------------------------------------------------------
  163.   # ● 行動が未選択のアクターを先頭から探す(独自)
  164.   #-----------------------------------------------------------------------------
  165.   def self.hzm_vxa_quickSkill_can_action_actor_before(daemon)
  166.     return false unless $game_party.members.index(daemon)
  167.     for @actor_index in 0..$game_party.members.index(daemon)
  168.       actor = $game_party.members[@actor_index]
  169.       return true if actor.next_command
  170.     end
  171.     false
  172.   end
  173. end
  174.  
  175. class Game_Unit
  176.   attr_accessor :hzm_vxa_quickSkill_can_use_item
  177.   #-----------------------------------------------------------------------------
  178.   # ● 戦闘開始処理(エイリアス)
  179.   #-----------------------------------------------------------------------------
  180.   alias hzm_vxa_quickSkill_on_battle_start on_battle_start
  181.   def on_battle_start
  182.     hzm_vxa_quickSkill_on_battle_start
  183.     hzm_vxa_quickSkill_reset_use_count
  184.   end
  185.   #-----------------------------------------------------------------------------
  186.   # ● 戦闘行動の復元(独自)
  187.   #-----------------------------------------------------------------------------
  188.   def hzm_vxa_quickSkill_force_action_reverse
  189.     members.each {|member| member.hzm_vxa_quickSkill_force_action_reverse }
  190.   end
  191.   #-----------------------------------------------------------------------------
  192.   # ● スキル使用回数のリセット(独自)
  193.   #-----------------------------------------------------------------------------
  194.   def hzm_vxa_quickSkill_reset_use_count
  195.     members.each {|member| member.hzm_vxa_quickSkill_reset_use_count }
  196.     if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  197.       @hzm_vxa_quickSkill_can_use_item ||= []
  198.       @hzm_vxa_quickSkill_can_use_item.clear
  199.     end
  200.   end
  201. end
  202.  
  203. class Game_Battler < Game_BattlerBase
  204.   #-----------------------------------------------------------------------------
  205.   # ● 行動速度の決定(エイリアス)
  206.   #-----------------------------------------------------------------------------
  207.   alias hzm_vxa_quickSkill_make_speed make_speed
  208.   def make_speed
  209.     # 空行動は削除する
  210.     @actions.reject! {|a| a == nil}
  211.     # 元の処理
  212.     hzm_vxa_quickSkill_make_speed
  213.     # アクションを速度順にソート
  214.     @actions.sort! {|a,b| b.speed - a.speed }
  215.   end
  216.   #-----------------------------------------------------------------------------
  217.   # ● スキルの使用可能条件チェック(エイリアス)
  218.   #-----------------------------------------------------------------------------
  219.   alias hzm_vxa_quickSkill_skill_conditions_met? skill_conditions_met?
  220.   def skill_conditions_met?(skill)
  221.     # 元の処理
  222.     return false unless hzm_vxa_quickSkill_skill_conditions_met?(skill)
  223.     # 戦闘中でなければOK
  224.     return true unless $game_party.in_battle
  225.     # 指定回数チェック
  226.     if data = skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  227.       cnt = data.first.to_i
  228.       cnt = 1  unless cnt > 0
  229.       hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
  230.       return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_skill.count(skill.id) >= cnt
  231.     end
  232.     true
  233.   end
  234.   #-----------------------------------------------------------------------------
  235.   # ● アイテムの使用可能条件チェック(エイリアス)
  236.   #-----------------------------------------------------------------------------
  237.   alias hzm_vxa_quickSkill_item_conditions_met? item_conditions_met?
  238.   def item_conditions_met?(item)
  239.     # 元の処理
  240.     return false unless hzm_vxa_quickSkill_item_conditions_met?(item)
  241.     # 戦闘中でなければOK
  242.     return true unless $game_party.in_battle
  243.     # 指定回数チェック
  244.     if data = item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  245.       cnt = data.first.to_i
  246.       cnt = 1  unless cnt > 0
  247.       if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  248.         return false if cnt > 0 and $game_party.hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
  249.       else
  250.         return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
  251.       end
  252.     end
  253.     true
  254.   end
  255.   #-----------------------------------------------------------------------------
  256.   # ● スキル使用回数リセット(独自)
  257.   #-----------------------------------------------------------------------------
  258.   def hzm_vxa_quickSkill_reset_use_count
  259.       @hzm_vxa_quickSkill_can_use_skill ||= []
  260.       @hzm_vxa_quickSkill_can_use_skill.clear
  261.       unless HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  262.         @hzm_vxa_quickSkill_can_use_item ||= []
  263.         @hzm_vxa_quickSkill_can_use_item.clear
  264.       end
  265.   end
  266.   #-----------------------------------------------------------------------------
  267.   # ● 戦闘行動の強制(エイリアス)
  268.   #-----------------------------------------------------------------------------
  269.   alias hzm_vxa_quickSkill_force_action force_action
  270.   def force_action(skill_id, target_index)
  271.     @hzm_vxa_quickSkill_actions = HZM_VXA::QuickSkill.quickSkill? ? @actions.clone : nil
  272.     hzm_vxa_quickSkill_force_action(skill_id, target_index)
  273.   end
  274.   #-----------------------------------------------------------------------------
  275.   # ● 戦闘行動の復元(独自)
  276.   #-----------------------------------------------------------------------------
  277.   def hzm_vxa_quickSkill_force_action_reverse
  278.     return unless @hzm_vxa_quickSkill_actions
  279.     @actions = @hzm_vxa_quickSkill_actions
  280.     @hzm_vxa_quickSkill_actions = nil
  281.   end
  282.   #-----------------------------------------------------------------------------
  283.   # ● スキル/アイテムの使用(エイリアス)
  284.   #-----------------------------------------------------------------------------
  285.   alias hzm_vxa_quickSkill_use_item use_item
  286.   def use_item(item)
  287.     # 戦闘中かどうか?
  288.     if $game_party.in_battle
  289.       # カウント可能か確認
  290.       hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
  291.       # スキル/アイテム使用回数カウント
  292.       @hzm_vxa_quickSkill_can_use_skill.push(item.id) if item.is_a?(RPG::Skill)
  293.       if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  294.         $game_party.hzm_vxa_quickSkill_can_use_item.push(item.id)  if item.is_a?(RPG::Item)
  295.       else
  296.         @hzm_vxa_quickSkill_can_use_item.push(item.id)  if item.is_a?(RPG::Item)
  297.       end
  298.     end
  299.     # 元の処理
  300.     hzm_vxa_quickSkill_use_item(item)
  301.   end
  302. end
  303.  
  304. class Game_Actor < Game_Battler
  305.   #-----------------------------------------------------------------------------
  306.   # ● アクションを先頭に入れ替え(独自)
  307.   #-----------------------------------------------------------------------------
  308.   def hzm_vxa_quickSkill_swapAction
  309.     tmp = @actions[0]
  310.     @actions[0] = @actions[@action_input_index]
  311.     @actions[@action_input_index] = tmp
  312.   end
  313. end
  314.  
  315. class Game_Action
  316.   #-----------------------------------------------------------------------------
  317.   # ● 行動速度の計算(エイリアス)
  318.   #-----------------------------------------------------------------------------
  319.   alias hzm_vxa_quickSkillEnemy_speed speed
  320.   def speed
  321.     # ターン消費無し行動の行動速度を最速化
  322.     item.speed = 999999 if item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  323.     # 元の処理
  324.     hzm_vxa_quickSkillEnemy_speed
  325.   end
  326. end
  327.  
  328. class Scene_Battle < Scene_Base
  329.   #-----------------------------------------------------------------------------
  330.   # ● 情報表示ビューポートの更新(エイリアス)
  331.   #-----------------------------------------------------------------------------
  332.   alias hzm_vxa_quickSkill_update_info_viewport update_info_viewport
  333.   def update_info_viewport
  334.     # 元の処理
  335.     hzm_vxa_quickSkill_update_info_viewport
  336.     # ターン消費無し行動中は非表示に
  337.     move_info_viewport(64)   if @hzm_vxa_quickSkill_active
  338.   end
  339.   #-----------------------------------------------------------------------------
  340.   # ● 次のコマンド入力へ(エイリアス)
  341.   #-----------------------------------------------------------------------------
  342.   alias hzm_vxa_quickSkill_next_command next_command
  343.   def next_command
  344.     # ターン消費無し行動が選択されているか確認・実行
  345.     if @hzm_vxa_quickSkill_skill and
  346.        @hzm_vxa_quickSkill_skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  347.       # ターン消費無し行動の実行
  348.       hzm_vxa_quickSkill_run
  349.       # 行動を再選択
  350.       if BattleManager.hzm_vxa_quickSkill_can_action_actor_before(@subject) or
  351.           @subject.inputable?
  352.         @subject.prior_command
  353.         return start_actor_command_selection
  354.       end
  355.     end
  356.     # 元の処理
  357.     hzm_vxa_quickSkill_next_command
  358.   end
  359.   #-----------------------------------------------------------------------------
  360.   # ● コマンド[攻撃](エイリアス)
  361.   #-----------------------------------------------------------------------------
  362.   alias hzm_vxa_quickSkill_command_attack command_attack
  363.   def command_attack
  364.     @hzm_vxa_quickSkill_skill = $data_skills[BattleManager.actor.attack_skill_id]
  365.     hzm_vxa_quickSkill_command_attack
  366.   end
  367.   #-----------------------------------------------------------------------------
  368.   # ● スキル[決定](エイリアス)
  369.   #-----------------------------------------------------------------------------
  370.   alias hzm_vxa_quickSkill_on_skill_ok on_skill_ok
  371.   def on_skill_ok
  372.     @hzm_vxa_quickSkill_skill = @skill_window.item
  373.     hzm_vxa_quickSkill_on_skill_ok
  374.   end
  375.   #-----------------------------------------------------------------------------
  376.   # ● スキル[キャンセル](エイリアス)
  377.   #-----------------------------------------------------------------------------
  378.   alias hzm_vxa_quickSkill_on_skill_cancel on_skill_cancel
  379.   def on_skill_cancel
  380.     @hzm_vxa_quickSkill_skill = nil
  381.     hzm_vxa_quickSkill_on_skill_cancel
  382.   end
  383.   #-----------------------------------------------------------------------------
  384.   # ● アイテム[決定](エイリアス)
  385.   #-----------------------------------------------------------------------------
  386.   alias hzm_vxa_quickSkill_on_item_ok on_item_ok
  387.   def on_item_ok
  388.     @hzm_vxa_quickSkill_skill = @item_window.item
  389.     hzm_vxa_quickSkill_on_item_ok
  390.   end
  391.   #-----------------------------------------------------------------------------
  392.   # ● アイテム[キャンセル](エイリアス)
  393.   #-----------------------------------------------------------------------------
  394.   alias hzm_vxa_quickSkill_on_item_cancel on_item_cancel
  395.   def on_item_cancel
  396.     @hzm_vxa_quickSkill_skill = nil
  397.     hzm_vxa_quickSkill_on_item_cancel
  398.   end
  399.   #-----------------------------------------------------------------------------
  400.   # ● アクターコマンド選択の開始(エイリアス)
  401.   #-----------------------------------------------------------------------------
  402.   alias hzm_vxa_quickSkill_start_actor_command_selection start_actor_command_selection
  403.   def start_actor_command_selection
  404.     hzm_vxa_quickSkill_start_actor_command_selection
  405.     BattleManager.actor.make_actions unless BattleManager.actor.input
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 強制された戦闘行動の処理(エイリアス)
  409.   #--------------------------------------------------------------------------
  410.   alias hzm_vxa_quickSkill_process_forced_action process_forced_action
  411.   def process_forced_action
  412.     @hzm_vxa_quickSkill_force_action = BattleManager.action_forced?
  413.  
  414.     # 元の処理
  415.     hzm_vxa_quickSkill_process_forced_action
  416.  
  417.     @hzm_vxa_quickSkill_force_action = nil
  418.   end
  419.   #-----------------------------------------------------------------------------
  420.   # ● 戦闘行動の処理(再定義)
  421.   #-----------------------------------------------------------------------------
  422.   def process_action
  423.     return if scene_changing?
  424.  
  425.     # 強制行動の場合は次回アクターを計算しない
  426.     unless @hzm_vxa_quickSkill_force_action
  427.       if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  428.         HZM_VXA::QuickSkill.re_action_times if @hzm_vxa_quickSkill_re_action_times_flag
  429.         @hzm_vxa_quickSkill_re_action_times_flag = false
  430.       end
  431.  
  432.       BattleManager.make_action_orders
  433.       @subject = BattleManager.next_subject
  434.     end
  435.  
  436.     return turn_end unless @subject
  437.     if @subject.current_action
  438.       @subject.current_action.prepare
  439.       if @subject.current_action.valid?
  440.         @status_window.open
  441.         execute_action
  442.       end
  443.       @subject.remove_current_action
  444.     end
  445.     process_action_end unless @subject.current_action
  446.   end
  447.  
  448.   #-----------------------------------------------------------------------------
  449.   # ● ターン消費無し行動の実行(独自)
  450.   #-----------------------------------------------------------------------------
  451.   def hzm_vxa_quickSkill_run
  452.     return unless @hzm_vxa_quickSkill_skill
  453.     @hzm_vxa_quickSkill_skill = nil
  454.     # 行動の開始
  455.     HZM_VXA::QuickSkill::start
  456.     @actor_command_window.close if @actor_command_window
  457.     @hzm_vxa_quickSkill_active = true
  458.     # 行動アクター,行動内容の設定
  459.     @subject = BattleManager.actor
  460.     @subject.hzm_vxa_quickSkill_swapAction # 選んだ行動を先頭に引きずり出す
  461.     # 行動
  462.     execute_action
  463.     # イベント処理
  464.     process_event
  465.     # おわり
  466.     @subject.hzm_vxa_quickSkill_swapAction # 元の位置に戻す
  467.     HZM_VXA::QuickSkill::finish
  468.     # ウィンドウを戻す
  469.     refresh_status
  470.     @hzm_vxa_quickSkill_active = false
  471.     @actor_command_window.open if @actor_command_window
  472.     @status_window.open if @status_window
  473.     # 行動回数の再計算
  474.     HZM_VXA::QuickSkill.re_action_times if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  475.   end
  476. end
  477.  
  478. # 行動回数の再計算用 & エネミー行動ターン数正常化 共通処理
  479. if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES or HZM_VXA::QuickSkill::ENEMY_TURN_NORMALIZE
  480.   class << BattleManager
  481.     #---------------------------------------------------------------------------
  482.     # ● ターン終了(エイリアス)
  483.     #---------------------------------------------------------------------------
  484.     alias hzm_vxa_quickSkill_turn_end turn_end
  485.     def turn_end
  486.       hzm_vxa_quickSkill_turn_end
  487.       $game_troop.hzm_vxa_quickSkill_increase_turn2
  488.     end
  489.   end
  490.  
  491.   class Game_Troop < Game_Unit
  492.     attr_reader :hzm_vxa_quickSkill_turn_count
  493.     #---------------------------------------------------------------------------
  494.     # ● クリア(エイリアス)
  495.     #---------------------------------------------------------------------------
  496.     alias hzm_vxa_quickSkill_clear clear
  497.     def clear
  498.       hzm_vxa_quickSkill_clear
  499.       @hzm_vxa_quickSkill_turn_count = HZM_VXA::QuickSkill::ENEMY_TURN_NORMALIZE ? 1 : 0
  500.     end
  501.     #---------------------------------------------------------------------------
  502.     # ● クリア(独自)
  503.     #---------------------------------------------------------------------------
  504.     def hzm_vxa_quickSkill_increase_turn2
  505.       @hzm_vxa_quickSkill_turn_count += 1
  506.     end
  507.   end
  508.  
  509.   class Game_Enemy < Game_Battler
  510.     #--------------------------------------------------------------------------
  511.     # ● 行動条件合致判定[ターン数](再定義)
  512.     #--------------------------------------------------------------------------
  513.     def conditions_met_turns?(param1, param2)
  514.       n = $game_troop.hzm_vxa_quickSkill_turn_count
  515.       if param2 == 0
  516.         n == param1
  517.       else
  518.         n > 0 && n >= param1 && n % param2 == param1 % param2
  519.       end
  520.     end
  521.   end
  522. end
  523.  
  524. # 行動回数の再計算用
  525. if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  526.   module HZM_VXA
  527.     module QuickSkill
  528.       #-------------------------------------------------------------------------
  529.       # ● 行動回数の再計算
  530.       #-------------------------------------------------------------------------
  531.       if CHECK_ACTION_TIMES
  532.         def self.re_action_times
  533.           $game_party.hzm_vxa_quickSkill_re_action_times
  534.           $game_troop.hzm_vxa_quickSkill_re_action_times
  535.         end
  536.       end
  537.     end
  538.   end
  539.  
  540.   class Game_Unit
  541.     #---------------------------------------------------------------------------
  542.     # ● 行動回数の再計算(独自)
  543.     #---------------------------------------------------------------------------
  544.     def hzm_vxa_quickSkill_re_action_times
  545.       members.each {|member| member.hzm_vxa_quickSkill_re_action_times }
  546.     end
  547.   end
  548.  
  549.   class Game_Actor < Game_Battler
  550.     #---------------------------------------------------------------------------
  551.     # ● 行動回数の再計算
  552.     #---------------------------------------------------------------------------
  553.     if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  554.       def hzm_vxa_quickSkill_re_action_times
  555.         action_cnt = make_action_times
  556.         @actions.push Game_Action.new(self) while @actions.size < action_cnt
  557.         @actions.pop while @actions.size > action_cnt
  558.       end
  559.     end
  560.   end
  561.  
  562.   class Game_Enemy < Game_Battler
  563.     #---------------------------------------------------------------------------
  564.     # ● 行動回数の再計算(独自)
  565.     #---------------------------------------------------------------------------
  566.     def hzm_vxa_quickSkill_re_action_times
  567.       action_cnt = make_action_times
  568.       make_actions if @actions.size < action_cnt
  569.       @actions.pop while @actions.size > action_cnt
  570.     end
  571.   end
  572.  
  573.   class Scene_Battle < Scene_Base
  574.     #---------------------------------------------------------------------------
  575.     # ● スキル/アイテムの使用(エイリアス)
  576.     #---------------------------------------------------------------------------
  577.     alias hzm_vxa_quickSkill_use_item use_item
  578.     def use_item
  579.       # 元の処理
  580.       hzm_vxa_quickSkill_use_item
  581.       # 行動回数の再計算フラグ(エネミーの場合)
  582.       item = (@subject.enemy? and @subject.current_action) ?
  583.         @subject.current_action.item : nil
  584.       @hzm_vxa_quickSkill_re_action_times_flag =
  585.         (item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS))
  586.     end
  587.   end
  588. end

就是这个脚本,他有没有办法关闭第二个作用,就是修正值效果,还是按原来的方式计算,或者让相同修正值的技能按选定的指令行动顺序来
作者: ACRI    时间: 2022-7-14 05:03
  1. # coding: utf-8
  2. #===============================================================================
  3. # ■ [hzm]メモ欄拡張共通部分さん+ for RGSS3
  4. #-------------------------------------------------------------------------------
  5. # 2014/09/27 Ru/むっくRu
  6. #-------------------------------------------------------------------------------
  7. #  データベースのメモ欄の情報を読み取るための共通処理.
  8. #  メモ欄の各行に特定もフレーズがついたものだけを取得します.
  9. #
  10. #  鳥小屋.txtのメモ欄を使うスクリプト群を使う場合に必須になります.
  11. #  (※スクリプト名の頭に[hzm]が付いているスクリプト)
  12. #-------------------------------------------------------------------------------
  13. # 【注意】
  14. #  「[hzm]メモ欄拡張共通部分 for RGSS3」の機能を内包しています.
  15. #  このスクリプトを導入する場合は,
  16. #  [hzm]メモ欄拡張共通部分 for RGSS3は導入しないでください.
  17. #-------------------------------------------------------------------------------
  18. # 【旧バージョン([hzm]メモ欄拡張共通部分 for RGSS3)からの仕様変更点】
  19. #  ・メモ欄のヘッダ文字([hzm])の他にも複数指定することを可能に
  20. #    指定のメソッドを呼び出すことで,
  21. #    [hzm]以外のヘッダ文字をつけたものを認識させることを可能に.
  22. #    (僕が)派生スクリプトを作りやすくするのが目的.
  23. #
  24. #  ・同一項目の複数記述に正式対応
  25. #    [hzm]属性耐性:炎,50
  26. #    [hzm]属性耐性:水,100
  27. #    みたいに同じ項目を複数書いても使えるようになります.
  28. #    ※注意:別にこのスクリプトに属性耐性の機能があるわけではないです
  29. #
  30. #-------------------------------------------------------------------------------
  31. # 【更新履歴】
  32. # 2014/09/27 キャッシュが存在しない場合に再生成するように変更
  33. # 2012/06/04 バージョンチェック用メソッド名修正
  34. # 2012/06/04 [hzm]メモ欄拡張共通部分 for RGSS3から派生
  35. #-------------------------------------------------------------------------------

  36. #===============================================================================
  37. # ↓ 以下、スクリプト部 ↓
  38. #===============================================================================

  39. # 旧スクリプト導入時にエラー処理を行う
  40. raise "「[hzm]メモ欄拡張共通部分 for RGSS3」が導入されています.\n「[hzm]メモ欄拡張共通部分 for RGSS3」は既に不要なので,\n削除してください." if defined?(HZM_VXA::Note)

  41. module HZM_VXA
  42.   module Note2
  43.     # ● デフォルトのマークフレーズ
  44.     #    (※変更しないでください)
  45.     DEFAULT_MARK = '[hzm]'
  46.     # ● 「[hzm]メモ欄拡張共通部分 for RGSS3」との互換性を保持するか?
  47.     USE_OLD_STYLE = true
  48.   end
  49. end

  50. module HZM_VXA
  51.   module Note2
  52.     #---------------------------------------------------------------------------
  53.     # ● メモスクリプトのバージョン
  54.     #    .区切りの3つの数字で表現
  55.     #    1桁目:メジャーバージョン(仕様変更=互換性破たん時に変更)
  56.     #    2桁目:マイナーバージョン(機能追加時に変更)
  57.     #    3桁目:パッチバージョン(不具合修正時に変更)
  58.     #---------------------------------------------------------------------------
  59.     VERSION = '3.0.0'
  60.     #---------------------------------------------------------------------------
  61.     # ● バージョン比較処理
  62.     #---------------------------------------------------------------------------
  63.     def self.check_version?(version_str)
  64.       version     = version2array(VERSION)
  65.       req_version = version2array(version_str)
  66.       # メジャーバージョンが要求と一致するか?
  67.       return false unless version[0] == req_version[0]
  68.       # マイナーバージョンが要求より低くないか?
  69.       return false unless version[1] >= req_version[1]
  70.       true
  71.     end
  72.     #---------------------------------------------------------------------------
  73.     # ● バージョン文字列の分解
  74.     #---------------------------------------------------------------------------
  75.     def self.version2array(version_str)
  76.       version_str.split('.').map{|n| n.to_i}
  77.     end
  78.     #---------------------------------------------------------------------------
  79.     # ● ヘッダマーク配列
  80.     #---------------------------------------------------------------------------
  81.     @header_mark = []
  82.     #---------------------------------------------------------------------------
  83.     # ● ヘッダマークの取得
  84.     #---------------------------------------------------------------------------
  85.     def self.header_mark
  86.       @header_mark
  87.     end
  88.     #---------------------------------------------------------------------------
  89.     # ● ヘッダマークの追加
  90.     #---------------------------------------------------------------------------
  91.     def self.add_header_mark(mark_str)
  92.       @header_mark.push(mark_str) unless @header_mark.include?(mark_str)
  93.     end
  94.     #---------------------------------------------------------------------------
  95.     # ● メモ欄の内容を解析
  96.     #---------------------------------------------------------------------------
  97.     def self.setup
  98.       add_header_mark(DEFAULT_MARK)
  99.       list = [
  100.         $data_actors,
  101.         $data_classes,
  102.         $data_skills,
  103.         $data_items,
  104.         $data_weapons,
  105.         $data_armors,
  106.         $data_enemies,
  107.         $data_states,
  108.         $data_tilesets,
  109.       ]
  110.       list.each do |data|
  111.         data.each do |d|
  112.           d.hzm_vxa_note2_init if d
  113.         end
  114.       end
  115.     end
  116.     #---------------------------------------------------------------------------
  117.     # ■ メモ欄を持つクラスに追加するメソッド類
  118.     #---------------------------------------------------------------------------
  119.     module Utils
  120.       #-------------------------------------------------------------------------
  121.       # ● メモ欄のチェック
  122.       #-------------------------------------------------------------------------
  123.       def hzm_vxa_note2_init
  124.         hzm_vxa_note2_clear
  125.         self.note.split(/\r?\n/).each do |line|
  126.           HZM_VXA::Note2.header_mark.each do |mark|
  127.             next unless line.index(mark) == 0
  128.             l = line.sub!(mark, '')
  129.             if l =~ /^([^\:]+)\:(.+)$/
  130.               hzm_vxa_note2_add(mark, $1, $2)
  131.             else
  132.               hzm_vxa_note2_add(mark, l, '')
  133.             end
  134.           end
  135.         end
  136.       end
  137.       #-------------------------------------------------------------------------
  138.       # ● メモ欄情報の追加
  139.       #-------------------------------------------------------------------------
  140.       def hzm_vxa_note2_add(mark, key, str)
  141.         # 文字列として保存
  142.         @hzm_vxa_note2_str[mark][key] ||= []
  143.         @hzm_vxa_note2_str[mark][key].push(str.to_s)
  144.         # カンマ区切りのデータとして保存
  145.         @hzm_vxa_note2_data[mark][key] ||= []
  146.         data = str.split(/\s*\,\s*/).map do |d|
  147.           if d =~ /^\-?\d+$/
  148.             d.to_i
  149.           elsif d =~ /^\-?\d+\.\d+$/
  150.             d.to_f
  151.           else
  152.             d.to_s
  153.           end
  154.         end
  155.         @hzm_vxa_note2_data[mark][key].push(data)
  156.       end
  157.       #-------------------------------------------------------------------------
  158.       # ● メモ欄情報の削除
  159.       #-------------------------------------------------------------------------
  160.       def hzm_vxa_note2_clear
  161.         @hzm_vxa_note2_str = {}
  162.         @hzm_vxa_note2_data = {}
  163.         HZM_VXA::Note2.header_mark.each do |mark|
  164.           @hzm_vxa_note2_str[mark] = {}
  165.           @hzm_vxa_note2_data[mark] = {}
  166.         end
  167.       end
  168.       #-------------------------------------------------------------------------
  169.       # ● メモ内容取得
  170.       #-------------------------------------------------------------------------
  171.       def hzm_vxa_note2_match(mark, keys)
  172.         hzm_vxa_note2_matches(mark, keys).last
  173.       end
  174.       def hzm_vxa_note2_match_str(mark, keys)
  175.         hzm_vxa_note2_matches_str(mark, keys).last
  176.       end
  177.       def hzm_vxa_note2_matches(mark, keys)
  178.         mark ||= HZM_VXA::Note2::DEFAULT_MARK
  179.         ret = []
  180.         keys.each do |key|
  181.           ret += self.hzm_vxa_note2_data[mark][key] if self.hzm_vxa_note2_data[mark].include?(key)
  182.         end
  183.         ret
  184.       rescue => e
  185.         puts "#{$!} - #{$@}"
  186.       end
  187.       def hzm_vxa_note2_matches_str(mark, keys)
  188.         mark ||= HZM_VXA::Note2::DEFAULT_MARK
  189.         ret = []
  190.         keys.each do |key|
  191.           ret += self.hzm_vxa_note2_str[mark][key] if self.hzm_vxa_note2_str[mark].include?(key)
  192.         end
  193.         ret
  194.       end
  195.       def hzm_vxa_note2_data
  196.         hzm_vxa_note2_init unless @hzm_vxa_note2_data
  197.         @hzm_vxa_note2_data
  198.       end
  199.       def hzm_vxa_note2_str
  200.         hzm_vxa_note2_init unless @hzm_vxa_note2_str
  201.         @hzm_vxa_note2_str
  202.       end
  203.     end
  204.   end
  205. end

  206. # メモ欄を持つクラスに機能追加
  207. class RPG::BaseItem
  208.   include HZM_VXA::Note2::Utils
  209. end
  210. class RPG::Tileset
  211.   include HZM_VXA::Note2::Utils
  212. end

  213. # メモ解析
  214. if true
  215.   class << DataManager
  216.     alias hzm_vxa_note2_init init
  217.     def init
  218.       hzm_vxa_note2_init
  219.       HZM_VXA::Note2.setup
  220.     end
  221.   end
  222. end

  223. # 旧スクリプトとの互換性保持
  224. if HZM_VXA::Note2::USE_OLD_STYLE
  225.   module HZM_VXA
  226.     module Note
  227.       #-------------------------------------------------------------------------
  228.       # ● メモスクリプトのバージョン
  229.       #-------------------------------------------------------------------------
  230.       VERSION = 2.20
  231.       #-------------------------------------------------------------------------
  232.       # ● バージョンチェック機構
  233.       #-------------------------------------------------------------------------
  234.       def self.check_version(n)
  235.         (n >= 2 and n < 3)
  236.       end
  237.     end
  238.   end
  239.   module HZM_VXA
  240.     module Note2
  241.       module Utils
  242.         #-----------------------------------------------------------------------
  243.         # ● メモ内容取得
  244.         #-----------------------------------------------------------------------
  245.         def hzm_vxa_note_match(keys)
  246.           hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, keys)
  247.         end
  248.         def hzm_vxa_note(key)
  249.           hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, [key])
  250.         end
  251.         #-----------------------------------------------------------------------
  252.         # ● メモ内容(単一文字列)取得
  253.         #-----------------------------------------------------------------------
  254.         def hzm_vxa_note_str_match(keys)
  255.           hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, keys)
  256.         end
  257.         def hzm_vxa_note_str(key)
  258.           hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, [key])
  259.         end
  260.       end
  261.     end
  262.   end
  263. end
复制代码

这个是他的前置,不知道能不能帮到各位老哥
作者: 百里_飞柳    时间: 2022-7-14 08:34
你把脚本里的这个注释掉

  1. # アクションを速度順にソート
  2.     @actions.sort! {|a,b| b.speed - a.speed }
复制代码

改成

  1. return @actions
复制代码

作者: ACRI    时间: 2022-7-24 19:34
百里_飞柳 发表于 2022-7-14 08:34
你把脚本里的这个注释掉

改成

谢谢老哥=




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