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

Project1

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

[已经解决] 关于使用某些技能不消耗回合,使用者可以再次行动一次?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3642
在线时间
912 小时
注册时间
2017-1-19
帖子
269
跳转到指定楼层
1
发表于 2019-2-2 20:30:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
怎么能实现!

Lv3.寻梦者

梦石
0
星屑
2333
在线时间
275 小时
注册时间
2017-7-25
帖子
163
2
发表于 2019-4-24 21:56:32 | 只看该作者
  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
复制代码
  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 的部分請代換為1以上的數值(例:[hzm]ターン消費無し:1)
  18. #  表示一回合中,此技能只能使用 n 次。
  19. #  (省略 :n 的情况下,将视同为 :1)
  20. #
  21. # 道具的部分也是以同样的方式设定。
  22. # 在「资料库」的「道具」「备注栏」中填入同样的内容。
  23. #-------------------------------------------------------------------------------
  24. # 【機能2:行動順序をスキルごとに反映】
  25. #  デフォルトのシステムだと,例えば2回行動のキャラクターが
  26. #  「通常攻撃(速度補正:0)」,「防御(速度補正:2000)」の
  27. #  2つを選択した場合に,速度補正が低い側(通常攻撃)のほうに統一されてしまい,
  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. module HZM_VXA
  75.   module QuickSkill
  76.     # ● ターン消費無し行動後に行動回数を再計算する(上級設定)
  77.     #   [効果]
  78.     #   ・エネミーも(疑似的に)ターン消費無しスキルを使用可能に
  79.     #   ・行動回数を変化させるステートを即時反映
  80.     #   [副作用]
  81.     #   ・50%の確率で行動回数増加などの設定が使用不可に
  82.     #     true  : する
  83.     #     false : しない
  84.     CHECK_ACTION_TIMES = false

  85.     # ● オマケ機能:敵の行動パターンのターン数の仕様をVX化
  86.     #    1ターン目(最初のターン)に指定の行動をさせたい場合、
  87.     #    VX Aceでは行動パターンを0ターン目に設定する必要があります。
  88.     #    この設定方法をVX同様の仕様に変更し、
  89.     #    1ターン目の場合は1ターン目に設定できるようにします。
  90.     #    (上級設定に関係なく使用できます)
  91.     #    true  : VX仕様にする
  92.     #    false : 変更しない
  93.     ENEMY_TURN_NORMALIZE = false
  94.   end
  95. end

  96. #===============================================================================
  97. # ↑   ここまで設定   ↑
  98. # ↓ 以下、スクリプト部 ↓
  99. #===============================================================================

  100. raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」を導入してください" unless defined?(HZM_VXA::Note2)
  101. raise "「[hzm]メモ欄拡張共通部分さん+ for RGSS3」のバージョンが一致しません" unless HZM_VXA::Note2.check_version?('3.0.0')

  102. module HZM_VXA
  103.   module QuickSkill
  104.     # メモ欄から読み込む要素名の候補を設定
  105.     QUICK_KEYS = ['ターン消費無し', '即発動',  'QuickSkill']
  106.     #---------------------------------------------------------------------------
  107.     # ● QuickSkill中か?
  108.     #---------------------------------------------------------------------------
  109.     def self.quickSkill?
  110.       @quickSkill
  111.     end
  112.     #---------------------------------------------------------------------------
  113.     # ● 即時行動開始
  114.     #---------------------------------------------------------------------------
  115.     def self.start
  116.       @quickSkill = true
  117.     end
  118.     #---------------------------------------------------------------------------
  119.     # ● 即時行動終了
  120.     #---------------------------------------------------------------------------
  121.     def self.finish
  122.       @quickSkill = false
  123.       # 全てのbattlerのアクションを戻す
  124.       $game_party.hzm_vxa_quickSkill_force_action_reverse
  125.       $game_troop.hzm_vxa_quickSkill_force_action_reverse
  126.     end
  127.     #---------------------------------------------------------------------------
  128.     # ● スキル使用回数のリセット
  129.     #---------------------------------------------------------------------------
  130.     def self.reset_use_count
  131.       $game_party.hzm_vxa_quickSkill_reset_use_count
  132.       $game_troop.hzm_vxa_quickSkill_reset_use_count
  133.     end
  134.     # ターン消費無しアイテム管理対象
  135.     ITEM_COUNT_PARTY = true
  136.   end
  137. end

  138. module BattleManager
  139.   #-----------------------------------------------------------------------------
  140.   # ● 行動順序の作成(再定義)
  141.   #-----------------------------------------------------------------------------
  142.   def self.make_action_orders
  143.     @action_battlers = []
  144.     all_actions = []
  145.     all_members = []
  146.     all_members += $game_party.members unless @surprise
  147.     all_members += $game_troop.members unless @preemptive
  148.     all_members.each do |member|
  149.       next unless member.movable?
  150.       member.make_speed
  151.       member.actions.each {|action| all_actions.push action }
  152.     end
  153.     all_actions.sort!{|a,b| b.speed - a.speed }
  154.     all_actions.each {|action| @action_battlers.push action.subject}
  155.   end
  156.   #-----------------------------------------------------------------------------
  157.   # ● 行動が未選択のアクターを先頭から探す(独自)
  158.   #-----------------------------------------------------------------------------
  159.   def self.hzm_vxa_quickSkill_can_action_actor_before(daemon)
  160.     return false unless $game_party.members.index(daemon)
  161.     for @actor_index in 0..$game_party.members.index(daemon)
  162.       actor = $game_party.members[@actor_index]
  163.       return true if actor.next_command
  164.     end
  165.     false
  166.   end
  167. end

  168. class Game_Unit
  169.   attr_accessor :hzm_vxa_quickSkill_can_use_item
  170.   #-----------------------------------------------------------------------------
  171.   # ● 戦闘開始処理(エイリアス)
  172.   #-----------------------------------------------------------------------------
  173.   alias hzm_vxa_quickSkill_on_battle_start on_battle_start
  174.   def on_battle_start
  175.     hzm_vxa_quickSkill_on_battle_start
  176.     hzm_vxa_quickSkill_reset_use_count
  177.   end
  178.   #-----------------------------------------------------------------------------
  179.   # ● 戦闘行動の復元(独自)
  180.   #-----------------------------------------------------------------------------
  181.   def hzm_vxa_quickSkill_force_action_reverse
  182.     members.each {|member| member.hzm_vxa_quickSkill_force_action_reverse }
  183.   end
  184.   #-----------------------------------------------------------------------------
  185.   # ● スキル使用回数のリセット(独自)
  186.   #-----------------------------------------------------------------------------
  187.   def hzm_vxa_quickSkill_reset_use_count
  188.     members.each {|member| member.hzm_vxa_quickSkill_reset_use_count }
  189.     if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  190.       @hzm_vxa_quickSkill_can_use_item ||= []
  191.       @hzm_vxa_quickSkill_can_use_item.clear
  192.     end
  193.   end
  194. end

  195. class Game_Battler < Game_BattlerBase
  196.   #-----------------------------------------------------------------------------
  197.   # ● 行動速度の決定(エイリアス)
  198.   #-----------------------------------------------------------------------------
  199.   alias hzm_vxa_quickSkill_make_speed make_speed
  200.   def make_speed
  201.     # 空行動は削除する
  202.     @actions.reject! {|a| a == nil}
  203.     # 元の処理
  204.     hzm_vxa_quickSkill_make_speed
  205.     # アクションを速度順にソート
  206.     @actions.sort! {|a,b| b.speed - a.speed }
  207.   end
  208.   #-----------------------------------------------------------------------------
  209.   # ● スキルの使用可能条件チェック(エイリアス)
  210.   #-----------------------------------------------------------------------------
  211.   alias hzm_vxa_quickSkill_skill_conditions_met? skill_conditions_met?
  212.   def skill_conditions_met?(skill)
  213.     # 元の処理
  214.     return false unless hzm_vxa_quickSkill_skill_conditions_met?(skill)
  215.     # 戦闘中でなければOK
  216.     return true unless $game_party.in_battle
  217.     # 指定回数チェック
  218.     if data = skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  219.       cnt = data.first.to_i
  220.       cnt = 1  unless cnt > 0
  221.       hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
  222.       return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_skill.count(skill.id) >= cnt
  223.     end
  224.     true
  225.   end
  226.   #-----------------------------------------------------------------------------
  227.   # ● アイテムの使用可能条件チェック(エイリアス)
  228.   #-----------------------------------------------------------------------------
  229.   alias hzm_vxa_quickSkill_item_conditions_met? item_conditions_met?
  230.   def item_conditions_met?(item)
  231.     # 元の処理
  232.     return false unless hzm_vxa_quickSkill_item_conditions_met?(item)
  233.     # 戦闘中でなければOK
  234.     return true unless $game_party.in_battle
  235.     # 指定回数チェック
  236.     if data = item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  237.       cnt = data.first.to_i
  238.       cnt = 1  unless cnt > 0
  239.       if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  240.         return false if cnt > 0 and $game_party.hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
  241.       else
  242.         return false if cnt > 0 and @hzm_vxa_quickSkill_can_use_item.count(item.id) >= cnt
  243.       end
  244.     end
  245.     true
  246.   end
  247.   #-----------------------------------------------------------------------------
  248.   # ● スキル使用回数リセット(独自)
  249.   #-----------------------------------------------------------------------------
  250.   def hzm_vxa_quickSkill_reset_use_count
  251.       @hzm_vxa_quickSkill_can_use_skill ||= []
  252.       @hzm_vxa_quickSkill_can_use_skill.clear
  253.       unless HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  254.         @hzm_vxa_quickSkill_can_use_item ||= []
  255.         @hzm_vxa_quickSkill_can_use_item.clear
  256.       end
  257.   end
  258.   #-----------------------------------------------------------------------------
  259.   # ● 戦闘行動の強制(エイリアス)
  260.   #-----------------------------------------------------------------------------
  261.   alias hzm_vxa_quickSkill_force_action force_action
  262.   def force_action(skill_id, target_index)
  263.     @hzm_vxa_quickSkill_actions = HZM_VXA::QuickSkill.quickSkill? ? @actions.clone : nil
  264.     hzm_vxa_quickSkill_force_action(skill_id, target_index)
  265.   end
  266.   #-----------------------------------------------------------------------------
  267.   # ● 戦闘行動の復元(独自)
  268.   #-----------------------------------------------------------------------------
  269.   def hzm_vxa_quickSkill_force_action_reverse
  270.     return unless @hzm_vxa_quickSkill_actions
  271.     @actions = @hzm_vxa_quickSkill_actions
  272.     @hzm_vxa_quickSkill_actions = nil
  273.   end
  274.   #-----------------------------------------------------------------------------
  275.   # ● スキル/アイテムの使用(エイリアス)    #这里在使用物品时会报错,注释就好
  276. #~   #-----------------------------------------------------------------------------
  277. #~   alias hzm_vxa_quickSkill_use_item use_item
  278. #~   def use_item(item)
  279. #~     # 戦闘中かどうか?
  280. #~     if $game_party.in_battle
  281. #~       # カウント可能か確認
  282. #~       hzm_vxa_quickSkill_reset_use_count unless @hzm_vxa_quickSkill_can_use_skill
  283. #~       # スキル/アイテム使用回数カウント
  284. #~       @hzm_vxa_quickSkill_can_use_skill.push(item.id) if item.is_a?(RPG::Skill)
  285. #~       if HZM_VXA::QuickSkill::ITEM_COUNT_PARTY
  286. #~         $game_party.hzm_vxa_quickSkill_can_use_item.push(item.id) if item.is_a?(RPG::Item)
  287. #~       else
  288. #~         @hzm_vxa_quickSkill_can_use_item.push(item.id)  if item.is_a?(RPG::Item)
  289. #~       end
  290. #~     end
  291. #~     # 元の処理
  292. #~     hzm_vxa_quickSkill_use_item(item)
  293. #~   end
  294. end

  295. class Game_Actor < Game_Battler
  296.   #-----------------------------------------------------------------------------
  297.   # ● アクションを先頭に入れ替え(独自)
  298.   #-----------------------------------------------------------------------------
  299.   def hzm_vxa_quickSkill_swapAction
  300.     tmp = @actions[0]
  301.     @actions[0] = @actions[@action_input_index]
  302.     @actions[@action_input_index] = tmp
  303.   end
  304. end

  305. class Game_Action
  306.   #-----------------------------------------------------------------------------
  307.   # ● 行動速度の計算(エイリアス)
  308.   #-----------------------------------------------------------------------------
  309.   alias hzm_vxa_quickSkillEnemy_speed speed
  310.   def speed
  311.     # ターン消費無し行動の行動速度を最速化
  312.     item.speed = 999999 if item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  313.     # 元の処理
  314.     hzm_vxa_quickSkillEnemy_speed
  315.   end
  316. end

  317. class Scene_Battle < Scene_Base
  318.   #-----------------------------------------------------------------------------
  319.   # ● 情報表示ビューポートの更新(エイリアス)
  320.   #-----------------------------------------------------------------------------
  321.   alias hzm_vxa_quickSkill_update_info_viewport update_info_viewport
  322.   def update_info_viewport
  323.     # 元の処理
  324.     hzm_vxa_quickSkill_update_info_viewport
  325.     # ターン消費無し行動中は非表示に
  326.     move_info_viewport(64)   if @hzm_vxa_quickSkill_active
  327.   end
  328.   #-----------------------------------------------------------------------------
  329.   # ● 次のコマンド入力へ(エイリアス)
  330.   #-----------------------------------------------------------------------------
  331.   alias hzm_vxa_quickSkill_next_command next_command
  332.   def next_command
  333.     # ターン消費無し行動が選択されているか確認・実行
  334.     if @hzm_vxa_quickSkill_skill and
  335.        @hzm_vxa_quickSkill_skill.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS)
  336.       # ターン消費無し行動の実行
  337.       hzm_vxa_quickSkill_run
  338.       # 行動を再選択
  339.       if BattleManager.hzm_vxa_quickSkill_can_action_actor_before(@subject) or
  340.           @subject.inputable?
  341.         @subject.prior_command
  342.         return start_actor_command_selection
  343.       end
  344.     end
  345.     # 元の処理
  346.     hzm_vxa_quickSkill_next_command
  347.   end
  348.   #-----------------------------------------------------------------------------
  349.   # ● コマンド[攻撃](エイリアス)
  350.   #-----------------------------------------------------------------------------
  351.   alias hzm_vxa_quickSkill_command_attack command_attack
  352.   def command_attack
  353.     @hzm_vxa_quickSkill_skill = $data_skills[BattleManager.actor.attack_skill_id]
  354.     hzm_vxa_quickSkill_command_attack
  355.   end
  356.   #-----------------------------------------------------------------------------
  357.   # ● スキル[決定](エイリアス)
  358.   #-----------------------------------------------------------------------------
  359.   alias hzm_vxa_quickSkill_on_skill_ok on_skill_ok
  360.   def on_skill_ok
  361.     @hzm_vxa_quickSkill_skill = @skill_window.item
  362.     hzm_vxa_quickSkill_on_skill_ok
  363.   end
  364.   #-----------------------------------------------------------------------------
  365.   # ● スキル[キャンセル](エイリアス)
  366.   #-----------------------------------------------------------------------------
  367.   alias hzm_vxa_quickSkill_on_skill_cancel on_skill_cancel
  368.   def on_skill_cancel
  369.     @hzm_vxa_quickSkill_skill = nil
  370.     hzm_vxa_quickSkill_on_skill_cancel
  371.   end
  372.   #-----------------------------------------------------------------------------
  373.   # ● アイテム[決定](エイリアス)
  374.   #-----------------------------------------------------------------------------
  375.   alias hzm_vxa_quickSkill_on_item_ok on_item_ok
  376.   def on_item_ok
  377.     @hzm_vxa_quickSkill_skill = @item_window.item
  378.     hzm_vxa_quickSkill_on_item_ok
  379.   end
  380.   #-----------------------------------------------------------------------------
  381.   # ● アイテム[キャンセル](エイリアス)
  382.   #-----------------------------------------------------------------------------
  383.   alias hzm_vxa_quickSkill_on_item_cancel on_item_cancel
  384.   def on_item_cancel
  385.     @hzm_vxa_quickSkill_skill = nil
  386.     hzm_vxa_quickSkill_on_item_cancel
  387.   end
  388.   #-----------------------------------------------------------------------------
  389.   # ● アクターコマンド選択の開始(エイリアス)
  390.   #-----------------------------------------------------------------------------
  391.   alias hzm_vxa_quickSkill_start_actor_command_selection start_actor_command_selection
  392.   def start_actor_command_selection
  393.     hzm_vxa_quickSkill_start_actor_command_selection
  394.     BattleManager.actor.make_actions unless BattleManager.actor.input
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 強制された戦闘行動の処理(エイリアス)
  398.   #--------------------------------------------------------------------------
  399.   alias hzm_vxa_quickSkill_process_forced_action process_forced_action
  400.   def process_forced_action
  401.     @hzm_vxa_quickSkill_force_action = BattleManager.action_forced?

  402.     # 元の処理
  403.     hzm_vxa_quickSkill_process_forced_action

  404.     @hzm_vxa_quickSkill_force_action = nil
  405.   end
  406.   #-----------------------------------------------------------------------------
  407.   # ● 戦闘行動の処理(再定義)
  408.   #-----------------------------------------------------------------------------
  409.   def process_action
  410.     return if scene_changing?

  411.     # 強制行動の場合は次回アクターを計算しない
  412.     unless @hzm_vxa_quickSkill_force_action
  413.       if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  414.         HZM_VXA::QuickSkill.re_action_times if @hzm_vxa_quickSkill_re_action_times_flag
  415.         @hzm_vxa_quickSkill_re_action_times_flag = false
  416.       end

  417.       BattleManager.make_action_orders
  418.       @subject = BattleManager.next_subject
  419.     end

  420.     return turn_end unless @subject
  421.     if @subject.current_action
  422.       @subject.current_action.prepare
  423.       if @subject.current_action.valid?
  424.         @status_window.open
  425.         execute_action
  426.       end
  427.       @subject.remove_current_action
  428.     end
  429.     process_action_end unless @subject.current_action
  430.   end
  431.   #-----------------------------------------------------------------------------
  432.   # ● ターン終了(エイリアス)
  433.   #-----------------------------------------------------------------------------
  434.   alias hzm_vxa_quickSkill_turn_end turn_end
  435.   def turn_end
  436.     # 行動不能キャラの行動終了処理を実行
  437.     # (※行動順序厳密化によりステート「行動終了時」が実行されないため)
  438.     all_battle_members.each do |battler|
  439.       next if battler.movable?
  440.       @subject = battler
  441.       process_action_end
  442.     end
  443.     @subject = nil
  444.     # 元の処理
  445.     hzm_vxa_quickSkill_turn_end
  446.     # ターン中使用回数リセット
  447.     HZM_VXA::QuickSkill.reset_use_count
  448.   end
  449.   #-----------------------------------------------------------------------------
  450.   # ● ターン消費無し行動の実行(独自)
  451.   #-----------------------------------------------------------------------------
  452.   def hzm_vxa_quickSkill_run
  453.     return unless @hzm_vxa_quickSkill_skill
  454.     @hzm_vxa_quickSkill_skill = nil
  455.     # 行動の開始
  456.     HZM_VXA::QuickSkill::start
  457.     @actor_command_window.close if @actor_command_window
  458.     @hzm_vxa_quickSkill_active = true
  459.     # 行動アクター,行動内容の設定
  460.     @subject = BattleManager.actor
  461.     @subject.hzm_vxa_quickSkill_swapAction # 選んだ行動を先頭に引きずり出す
  462.     # 行動
  463.     execute_action
  464.     # イベント処理
  465.     process_event
  466.     # おわり
  467.     @subject.hzm_vxa_quickSkill_swapAction # 元の位置に戻す
  468.     HZM_VXA::QuickSkill::finish
  469.     # ウィンドウを戻す
  470.     refresh_status
  471.     @hzm_vxa_quickSkill_active = false
  472.     @actor_command_window.open if @actor_command_window
  473.     @status_window.open if @status_window
  474.     # 行動回数の再計算
  475.     HZM_VXA::QuickSkill.re_action_times if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  476.   end
  477. end

  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.   class Game_Troop < Game_Unit
  491.     attr_reader :hzm_vxa_quickSkill_turn_count
  492.     #---------------------------------------------------------------------------
  493.     # ● クリア(エイリアス)
  494.     #---------------------------------------------------------------------------
  495.     alias hzm_vxa_quickSkill_clear clear
  496.     def clear
  497.       hzm_vxa_quickSkill_clear
  498.       @hzm_vxa_quickSkill_turn_count = HZM_VXA::QuickSkill::ENEMY_TURN_NORMALIZE ? 1 : 0
  499.     end
  500.     #---------------------------------------------------------------------------
  501.     # ● クリア(独自)
  502.     #---------------------------------------------------------------------------
  503.     def hzm_vxa_quickSkill_increase_turn2
  504.       @hzm_vxa_quickSkill_turn_count += 1
  505.     end
  506.   end

  507.   class Game_Enemy < Game_Battler
  508.     #--------------------------------------------------------------------------
  509.     # ● 行動条件合致判定[ターン数](再定義)
  510.     #--------------------------------------------------------------------------
  511.     def conditions_met_turns?(param1, param2)
  512.       n = $game_troop.hzm_vxa_quickSkill_turn_count
  513.       if param2 == 0
  514.         n == param1
  515.       else
  516.         n > 0 && n >= param1 && n % param2 == param1 % param2
  517.       end
  518.     end
  519.   end
  520. end

  521. # 行動回数の再計算用
  522. if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  523.   module HZM_VXA
  524.     module QuickSkill
  525.       #-------------------------------------------------------------------------
  526.       # ● 行動回数の再計算
  527.       #-------------------------------------------------------------------------
  528.       if CHECK_ACTION_TIMES
  529.         def self.re_action_times
  530.           $game_party.hzm_vxa_quickSkill_re_action_times
  531.           $game_troop.hzm_vxa_quickSkill_re_action_times
  532.         end
  533.       end
  534.     end
  535.   end

  536.   class Game_Unit
  537.     #---------------------------------------------------------------------------
  538.     # ● 行動回数の再計算(独自)
  539.     #---------------------------------------------------------------------------
  540.     def hzm_vxa_quickSkill_re_action_times
  541.       members.each {|member| member.hzm_vxa_quickSkill_re_action_times }
  542.     end
  543.   end

  544.   class Game_Actor < Game_Battler
  545.     #---------------------------------------------------------------------------
  546.     # ● 行動回数の再計算
  547.     #---------------------------------------------------------------------------
  548.     if HZM_VXA::QuickSkill::CHECK_ACTION_TIMES
  549.       def hzm_vxa_quickSkill_re_action_times
  550.         action_cnt = make_action_times
  551.         @actions.push Game_Action.new(self) while @actions.size < action_cnt
  552.         @actions.pop while @actions.size > action_cnt
  553.       end
  554.     end
  555.   end

  556.   class Game_Enemy < Game_Battler
  557.     #---------------------------------------------------------------------------
  558.     # ● 行動回数の再計算(独自)
  559.     #---------------------------------------------------------------------------
  560.     def hzm_vxa_quickSkill_re_action_times
  561.       action_cnt = make_action_times
  562.       make_actions if @actions.size < action_cnt
  563.       @actions.pop while @actions.size > action_cnt
  564.     end
  565.   end

  566.   class Scene_Battle < Scene_Base
  567.     #---------------------------------------------------------------------------
  568.     # ● スキル/アイテムの使用(エイリアス)
  569.     #---------------------------------------------------------------------------
  570.     alias hzm_vxa_quickSkill_use_item use_item
  571.     def use_item
  572.       # 元の処理
  573.       hzm_vxa_quickSkill_use_item
  574.       # 行動回数の再計算フラグ(エネミーの場合)
  575.       item = (@subject.enemy? and @subject.current_action) ?
  576.         @subject.current_action.item : nil
  577.       @hzm_vxa_quickSkill_re_action_times_flag =
  578.         (item and item.hzm_vxa_note_match(HZM_VXA::QuickSkill::QUICK_KEYS))
  579.     end
  580.   end
  581. end
复制代码

两个分开的脚本,前一个是后一个的前置,有一个小毛病是有时候会导致这个技能一回合可以用无数次(脚本本身那个限制次数功能无效),不知道是不是跟我其他脚本有冲突
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
14790
在线时间
2106 小时
注册时间
2017-9-28
帖子
662
3
发表于 2019-4-25 12:25:30 | 只看该作者
  1. #==============================================================================
  2. #
  3. # ▼ Yanfly Engine Ace - 即时使用 v1.03
  4. # -- 最后更新: 2012.07.17
  5. # -- 使用难度: 普通
  6. # -- 需要脚本: 无
  7. #
  8. #==============================================================================

  9. $imported = {} if $imported.nil?
  10. $imported["YEA-InstantCast"] = true

  11. #==============================================================================
  12. # ▼  Updates
  13. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  14. # 2012.07.17 - Instant doesn't take up a turn if a characterh as additional
  15. #              actions/can attack twice.
  16. # 2012.01.12 - Anti-crash methods implemented.
  17. # 2011.12.26 - Bug Fixed: If actor gets stunned while doing an instant cast,
  18. #              the actor will not be reselected.
  19. # 2011.12.21 - Started Script and Finished.
  20. #
  21. #==============================================================================
  22. # ▼  介绍
  23. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  24. # 即时使用技能/物品的效果为:角色可以立即使用该技能/武器,并且不会消耗本回合的
  25. # 行动次数。只要该角色有足够的释放条件(例如mp、tp)就可以无限使用.
  26. # 即时使用功能重回RPG Maker VX Ace.以下为即时使用的一些改动:
  27. #
  28. # 1) 对于多行动数的角色,例如连续技,只有在第一个动作是即时使用时才会成功使用即
  29. #    时使用效果.就算第二个或之后的行动为即时使用,该技能也不会触发即时使用效果.
  30. #
  31. # 2) 任何即时使用的技能/物品都会自动瞬时触发,包括即时使用技能中的连锁技能.
  32. #
  33. # 3) 如果敌人使用了一个即时使用的技能,其在使用后会额为获得一次行动机会.
  34. #
  35. #==============================================================================
  36. # ▼ 安装方式
  37. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  38. # 打开脚本编辑器,将本脚本拷贝/复制到一个在▼ 插件脚本之下▼ Main之上的新
  39. # 脚本页/槽中.记得保存你的工程以使脚本生效.
  40. #
  41. # -----------------------------------------------------------------------------
  42. # 技能备注 - 在数据库-技能中可以使用的备注.
  43. # -----------------------------------------------------------------------------
  44. # <即时使用>
  45. # 使该技能变成即时使用技能.使用后在战斗阶段开始前会立即使用该技能.
  46. #
  47. # -----------------------------------------------------------------------------
  48. # 物品备注 - 在数据库-物品中可以使用的备注.
  49. # -----------------------------------------------------------------------------
  50. # <即时使用>
  51. # 使该物品变成即时使用物品.使用后在战斗阶段开始前会立即使用该技能.
  52. #
  53. #==============================================================================
  54. # ▼ 兼容性
  55. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  56. # 本脚本仅为RPG Maker VX Ace编写.极不可能在无任何修改的情况下运行于RPG Maker VX.
  57. #
  58. # 本脚本和 Yanfly Engine Ace - 战斗系统 v1.00+ 互相兼容.
  59. # 请将本脚本放在其之下.
  60. #
  61. #==============================================================================
  62. # ▼ 编辑以下内容可能会出现电脑损坏、死机,电脑主人脑袋爆炸、昏迷、死亡或口臭
  63. # 所以编辑了后果自负。
  64. #==============================================================================

  65. module YEA
  66.   module REGEXP
  67.   module USABLEITEM
  68.    
  69.     INSTANT = /<(?:INSTANT|即时使用)>/i
  70.    
  71.   end # USABLEITEM
  72.   end # REGEXP
  73. end # YEA

  74. #==============================================================================
  75. # ¡ DataManager
  76. #==============================================================================

  77. module DataManager
  78.   
  79.   #--------------------------------------------------------------------------
  80.   # alias method: load_database
  81.   #--------------------------------------------------------------------------
  82.   class <<self; alias load_database_instant load_database; end
  83.   def self.load_database
  84.     load_database_instant
  85.     load_notetags_instant
  86.   end
  87.   
  88.   #--------------------------------------------------------------------------
  89.   # new method: load_notetags_instant
  90.   #--------------------------------------------------------------------------
  91.   def self.load_notetags_instant
  92.     groups = [$data_skills, $data_items]
  93.     for group in groups
  94.       for obj in group
  95.         next if obj.nil?
  96.         obj.load_notetags_instant
  97.       end
  98.     end
  99.   end
  100.   
  101. end # DataManager

  102. #==============================================================================
  103. # ¡ RPG::UsableItem
  104. #==============================================================================

  105. class RPG::UsableItem < RPG::BaseItem
  106.   
  107.   #--------------------------------------------------------------------------
  108.   # public instance variables
  109.   #--------------------------------------------------------------------------
  110.   attr_accessor :instant
  111.   
  112.   #--------------------------------------------------------------------------
  113.   # common cache: load_notetags_instant
  114.   #--------------------------------------------------------------------------
  115.   def load_notetags_instant
  116.     @instant = false
  117.     #---
  118.     self.note.split(/[\r\n]+/).each { |line|
  119.       case line
  120.       #---
  121.       when YEA::REGEXP::USABLEITEM::INSTANT
  122.         @instant = true
  123.       #---
  124.       end
  125.     } # self.note.split
  126.     #---
  127.   end
  128.   
  129. end # RPG::UsableItem

  130. #==============================================================================
  131. # ¡ Game_Actor
  132. #==============================================================================

  133. class Game_Actor < Game_Battler
  134.   
  135.   #--------------------------------------------------------------------------
  136.   # new method: check_instant_action
  137.   #--------------------------------------------------------------------------
  138.   def check_instant_action
  139.     @backup_actions_instant = []
  140.     @actions.each { |action|
  141.       next unless action
  142.       if action.item.nil?
  143.         @backup_actions_instant.push(action.dup)
  144.         next
  145.       end
  146.       unless action.item.instant
  147.         @backup_actions_instant.push(action.dup)
  148.         action.clear
  149.       end
  150.     }
  151.   end
  152.   
  153.   #--------------------------------------------------------------------------
  154.   # new method: restore_instant_action
  155.   #--------------------------------------------------------------------------
  156.   def restore_instant_action
  157.     @backup_actions_instant.each_index { |i|
  158.       @actions[i] = @backup_actions_instant[i]
  159.     }
  160.     @backup_actions_instant.clear
  161.     i = 0
  162.     @actions.each { |action| if action.item.nil?; break; end; i += 1 }
  163.     @action_input_index = i
  164.   end
  165.   
  166. end # Game_Actor

  167. #==============================================================================
  168. # ¡ Game_Enemy
  169. #==============================================================================

  170. class Game_Enemy < Game_Battler
  171.   
  172.   #--------------------------------------------------------------------------
  173.   # new method: add_extra_action
  174.   #--------------------------------------------------------------------------
  175.   def add_extra_action
  176.     action_list = enemy.actions.select {|a| action_valid?(a) }
  177.     return if action_list.empty?
  178.     rating_max = action_list.collect {|a| a.rating }.max
  179.     rating_zero = rating_max - 3
  180.     action_list.reject! {|a| a.rating <= rating_zero }
  181.     action = Game_Action.new(self)
  182.     action.set_enemy_action(select_enemy_action(action_list, rating_zero))
  183.     @actions.push(action)
  184.   end
  185.   
  186. end # Game_Enemy

  187. #==============================================================================
  188. # ¡ Scene_Battle
  189. #==============================================================================

  190. class Scene_Battle < Scene_Base
  191.   
  192.   #--------------------------------------------------------------------------
  193.   # alias method: next_command
  194.   #--------------------------------------------------------------------------
  195.   alias scene_battle_next_command_instant next_command
  196.   def next_command
  197.     if instant_action?
  198.       perform_instant_action
  199.     else
  200.       scene_battle_next_command_instant
  201.     end
  202.   end
  203.   
  204.   #--------------------------------------------------------------------------
  205.   # new method: instant_action?
  206.   #--------------------------------------------------------------------------
  207.   def instant_action?
  208.     return false if BattleManager.actor.nil?
  209.     return false if BattleManager.actor.input.nil?
  210.     action = BattleManager.actor.input.item
  211.     return false if action.nil?
  212.     return action.instant
  213.   end
  214.   
  215.   #--------------------------------------------------------------------------
  216.   # new method: perform_instant_action
  217.   #--------------------------------------------------------------------------
  218.   def perform_instant_action
  219.     hide_instant_action_windows
  220.     @subject = BattleManager.actor
  221.     @subject.check_instant_action
  222.     execute_action if @subject.current_action.valid?
  223.     process_event
  224.     loop do
  225.       @subject.remove_current_action
  226.       break if $game_troop.all_dead?
  227.       break unless @subject.current_action
  228.       @subject.current_action.prepare
  229.       execute_action if @subject.current_action.valid?
  230.     end
  231.     process_action_end
  232.     @subject.make_actions
  233.     @subject.restore_instant_action
  234.     @subject = nil
  235.     show_instant_action_windows
  236.   end
  237.   
  238.   #--------------------------------------------------------------------------
  239.   # new method: hide_instant_action_windows
  240.   #--------------------------------------------------------------------------
  241.   def hide_instant_action_windows
  242.     if $imported["YEA-BattleEngine"]
  243.       @info_viewport.visible = true
  244.       @status_aid_window.hide
  245.       @status_window.show
  246.       @actor_command_window.show
  247.     end
  248.   end
  249.   
  250.   #--------------------------------------------------------------------------
  251.   # new method: show_instant_action_windows
  252.   #--------------------------------------------------------------------------
  253.   def show_instant_action_windows
  254.     if $imported["YEA-BattleEngine"]
  255.       @info_viewport.visible = true
  256.     end
  257.     start_actor_command_selection
  258.     status_redraw_target(BattleManager.actor)
  259.     next_command unless BattleManager.actor.inputable?
  260.   end
  261.   
  262.   #--------------------------------------------------------------------------
  263.   # new method: status_redraw_target
  264.   #--------------------------------------------------------------------------
  265.   def status_redraw_target(target)
  266.     return unless target.actor?
  267.     @status_window.draw_item($game_party.battle_members.index(target))
  268.   end
  269.   
  270.   #--------------------------------------------------------------------------
  271.   # alias method: execute_action
  272.   #--------------------------------------------------------------------------
  273.   alias scene_battle_execute_action_instant execute_action
  274.   def execute_action
  275.     scene_battle_execute_action_instant
  276.     enemy_add_actions
  277.   end
  278.   
  279.   #--------------------------------------------------------------------------
  280.   # new method: enemy_add_actions
  281.   #--------------------------------------------------------------------------
  282.   def enemy_add_actions
  283.     return if @subject.actor?
  284.     return if @subject.current_action.nil?
  285.     return if @subject.current_action.item.nil?
  286.     return unless @subject.current_action.item.instant
  287.     @subject.add_extra_action
  288.   end
  289.   
  290. end # Scene_Battle

  291. #==============================================================================
  292. #
  293. # ▼  End of File
  294. #
  295. #==============================================================================
复制代码
VA外站脚本汉化群:226308173   |    部分远古文件备份:https://wwzv.lanzoue.com/b02rac5pc  密码:acgm
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 18:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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