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

Project1

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

[已经过期] 请问一下这两脚本该怎么样正确使用?

[复制链接]

Lv2.观梦者

梦石
0
星屑
558
在线时间
377 小时
注册时间
2012-7-10
帖子
1283
跳转到指定楼层
1
发表于 2018-1-3 23:38:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
以下两个脚本都是在战斗中显示特定对话的脚本。
但是不知道该怎么设定。主要还是看不懂日语。
请看懂的朋友解答一下。

BMSP ダメージイベント[DAMAGEEVENT] Ver1.02
RUBY 代码复制
  1. #==============================================================================
  2. # ■ BMSP ダメージイベント[DAMAGEEVENT] Ver1.02 2013/10/20
  3. #------------------------------------------------------------------------------
  4. #  ダメージを受けるタイミングでイベントを実行することができます.
  5. #==============================================================================
  6. #------------------------------------------------------------------------------
  7. # ■内容
  8. # ダメージを受けるタイミングでイベントを実行することができます.
  9. # 特定のダメージにエフェクトを付加したり,
  10. # キャラクターの台詞やボイスを入れたりすることができます.
  11. #
  12. # 位置:特に指定はありません
  13. #
  14. # ■使用方法
  15. # スクリプトに丸ごと貼り付けていただければ使用できます.
  16. #
  17. # ●コモンイベントの作成方法
  18. # ・コモンイベントの名前
  19. #   なんでも構いません.わかりやすい名前を付けて下さい
  20. # ・トリガー
  21. #   なし
  22. # ・実行内容
  23. #   一行目に注釈を作成してください.
  24. #   内容は
  25. #     ==ダメージイベント:%types%:%timing%==
  26. #   と記述します.
  27. #
  28. #   %types%は以下のタイプを任意個"|"で区切って記述します.
  29. #   ここに書かれたタイプの状況すべてでイベントが実行される可能性が生まれます.
  30. #   反撃:反撃時に実行されます.
  31. #   反射:反射時に実行されます.
  32. #   身代わり:身代わり時に実行されます.
  33. #   失敗:失敗時に実行されます.
  34. #   会心:会心時に実行されます.
  35. #   ミス:ミス時に実行されます.
  36. #   回避:回避時に実行されます.
  37. #   HP:HPダメージ時に実行されます.
  38. #   MP:MPダメージ時に実行されます.
  39. #   TP:TPダメージ時に実行されます.
  40. #   ステート付加:ステート付加時に実行されます.
  41. #   ステート解除:ステート解除時に実行されます.
  42. #
  43. #   %timing%は「表示前」もしくは「表示後」で置き換えます.
  44. #   表示前:メッセージ表示直前にコモンイベントを実行します
  45. #   表示後:メッセージ表示直後にコモンイベントを実行します
  46. #
  47. #   二行目から注釈でないイベントコマンドまでは条件を表す注釈となります.
  48. #   注釈1つにつき必ず満たすべき条件を書きます.
  49. #   また,注釈内1行につきいづれかを満たせば良い条件を書きます.
  50. #   例
  51. #     注釈:条件1
  52. #         :条件2
  53. #     注釈:条件3
  54. #   この例では,条件1かつ条件3を満たすときまたは,
  55. #   条件2かつ条件3を満たすときにこのイベントが実行されます.
  56. #   条件以降については任意のイベントコマンドを並べることが出来ます.
  57. #
  58. # ●条件の書き方
  59. # 条件部分はevalで評価しているのでrubyに書ける式を自由に書くことが出来ます.
  60. # 各タイプに応じて特殊な変数を使用することができます.
  61. # □反撃
  62. # ・subject
  63. #   反撃を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  64. # ・target
  65. #   反撃をされるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  66. # ・action
  67. #   反撃時に行う行動(スキル)を参照できます.(RPG::Skill)
  68. #
  69. # □反射
  70. # ・subject
  71. #   反射を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  72. # ・target
  73. #   反射をされるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  74. # ・action
  75. #   反射を行うアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  76. #
  77. # □身代わり
  78. # ・subst
  79. #   身代わりを行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  80. # ・target
  81. #   身代わりをされるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  82. #
  83. # □失敗
  84. # ・target
  85. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  86. # ・action
  87. #   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  88. #
  89. # □会心
  90. # ・subject
  91. #   クリティカル攻撃を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  92. # ・target
  93. #   クリティカル攻撃を受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  94. # ・action
  95. #   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  96. #
  97. # □ミス
  98. # ・target
  99. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  100. # ・action
  101. #   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  102. #
  103. # □回避
  104. # ・subject
  105. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  106. # ・target
  107. #   回避を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  108. # ・action
  109. #   回避するアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  110. #
  111. # □HP
  112. # ・subject
  113. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  114. # ・target
  115. #   HPダメージを受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  116. # ・action
  117. #   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  118. #
  119. # □MP
  120. # ・subject
  121. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  122. # ・target
  123. #   MPダメージを受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  124. # ・action
  125. #   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  126. #
  127. # □TP
  128. # ・subject
  129. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  130. # ・target
  131. #   TPダメージを受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  132. # ・action
  133. #   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
  134. #
  135. # □ステート付加
  136. # ・subject
  137. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  138. # ・target
  139. #   ステートを付加されるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  140. # ・state
  141. #   付加されるステートを参照できます.(RPG::State)
  142. #
  143. # □ステート解除
  144. # ・subject
  145. #   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  146. # ・target
  147. #   ステートを解除されるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  148. # ・state
  149. #   解除されるステートを参照できます.(RPG::State)
  150. #
  151. # 各タイプで使用可能な変数から参照できる値や,
  152. # その他の情報の参照についてはスクリプトエディタや
  153. # ヘルプのVX Ace データ構造から各自が確認してください.
  154. #
  155. # 例:ID1のアクターが大ダメージを受けたときにボイス再生
  156. #   注釈:==ダメージイベント:HP:表示後==
  157. #   注釈:target.actor? && target.id == 1
  158. #   注釈:target.result.hp_damage * 100 / target.mhp >= 50
  159. #   SE の演奏:xxxx
  160. #
  161. # 例:会心の一撃によるダメージは画面をフラッシュ
  162. #   注釈:==ダメージイベント:HP:表示前==
  163. #   注釈:target.result.critical
  164. #   画面のフラッシュ:xxxx
  165. #
  166. # もし条件の書き方がよくわからなければ掲示板([url]http://blueredzone.bbs.fc2.com/[/url])
  167. # あたりにでも書いて頂ければ条件式もお作りします.
  168. #
  169. # ■注意
  170. # このスクリプトでは
  171. # 「Scene_Battle」「Window_BattleLog」
  172. # のメソッドを改変しています.
  173. # ■情報
  174. # このスクリプトはgentlawkによって作られたものです.
  175. # 利用規約は[url]http://blueredzone.com[/url]をご覧ください.
  176. #------------------------------------------------------------------------------
  177. module BMSP
  178.   @@includes ||= {}
  179.   @@includes[:DamageEvent] = 1.02
  180.   module DamageEvent
  181.     #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
  182.     #詳細設定
  183.  
  184.     #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
  185.     /==ダメージイベント:(.+):(前|後)==/o
  186.     #--------------------------------------------------------------------------
  187.     # ● 対象コモンイベントの初期化
  188.     #--------------------------------------------------------------------------
  189.     def self.init_commons
  190.       types = [:counter, :reflection, :substitute, :failure, :critical, :miss, :evasion,
  191.               :hp_damage, :mp_damage, :tp_damage, :added_st, :removed_st]
  192.       @commons = {}
  193.       types.each do |type|
  194.         @commons[type] = {:before=>[], :after=>[]}
  195.       end
  196.       $data_common_events.each do |common|
  197.         next if common.nil?
  198.         types,timing,cond = self.check_damageevent(common)
  199.         next if types.nil?
  200.         types.each do |type|
  201.           @commons[type][timing].push([common, cond])
  202.         end
  203.       end
  204.     end
  205.     #--------------------------------------------------------------------------
  206.     # ● 条件にマッチするコモンイベントを取得
  207.     #--------------------------------------------------------------------------
  208.     def self.commons(type, timing, binding)
  209.       init_commons if @commons.nil?
  210.       return @commons[type][timing].select{ |common,cond|
  211.         check_condition(cond, binding)
  212.       }.map{|cc| cc.first }
  213.     end
  214.     #--------------------------------------------------------------------------
  215.     # ● ダメージイベントかチェックして情報を取得
  216.     #--------------------------------------------------------------------------
  217.     def self.check_damageevent(common_event)
  218.       list = common_event.list
  219.       index = 0
  220.       return nil if list[index].code != 108 # 注釈じゃない
  221.       define_comment = list[index].parameters[0]
  222.       index += 1
  223.       while list[index].code == 408
  224.         index += 1
  225.       end
  226.       return nil unless define_comment =~ /==ダメージイベント:(.+):(表示前|表示後)==/o
  227.       types = $1.split('|')
  228.       timing = $2 == "表示前" ? :before : :after
  229.       # 対象タイプを変換
  230.       types.map!{|type| self.translate_type(type)}.compact!
  231.       return nil if types.empty?
  232.       # 条件文を抽出
  233.       cond = []
  234.       size = -1
  235.       while list[index].code == 108
  236.         size += 1
  237.         cond[size] = [list[index].parameters[0]]
  238.         index += 1
  239.         while list[index].code == 408
  240.           cond[size].push(list[index].parameters[0])
  241.           index += 1
  242.         end
  243.       end
  244.       return types,timing,cond
  245.     end
  246.     #--------------------------------------------------------------------------
  247.     # ● 条件を満たすかチェック
  248.     #--------------------------------------------------------------------------
  249.     def self.check_condition(formulas, binding)
  250.       return formulas.inject(true){|ret, subformulas|
  251.         ret && subformulas.inject(false){|r, formula|
  252.           r || binding.eval(formula)
  253.         }
  254.       }
  255.     end
  256.     #--------------------------------------------------------------------------
  257.     # ● タイプ変換
  258.     #--------------------------------------------------------------------------
  259.     def self.translate_type(type)
  260.       case type
  261.       when "反撃"        ; :counter
  262.       when "反射"        ; :reflection
  263.       when "身代わり"    ; :substitute
  264.       when "失敗"        ; :failure
  265.       when "会心"        ; :critical
  266.       when "ミス"        ; :miss
  267.       when "回避"        ; :evasion
  268.       when "HP"          ; :hp_damage
  269.       when "MP"          ; :mp_damage
  270.       when "TP"          ; :tp_damage
  271.       when "ステート付加"; :added_st
  272.       when "ステート解除"; :removed_st
  273.       else nil
  274.       end
  275.     end
  276.     #--------------------------------------------------------------------------
  277.     # ● 条件を評価
  278.     #--------------------------------------------------------------------------
  279.     def self.eval(formulas, use, user, targets)
  280.       return formulas.inject(true){|ret, subformulas|
  281.         ret && subformulas.inject(false){|r, formula|
  282.           r || Kernel.eval(formula)
  283.         }
  284.       }
  285.     end
  286.     #--------------------------------------------------------------------------
  287.     # ● バグの例外クラス
  288.     #--------------------------------------------------------------------------
  289.     class BUG < StandardError
  290.     end
  291.     #--------------------------------------------------------------------------
  292.     # ● 導入スクリプトの例外クラス
  293.     #--------------------------------------------------------------------------
  294.     class REQUIRE < StandardError
  295.     end
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 必須スクリプトのチェック
  299.   #--------------------------------------------------------------------------
  300.   class << self
  301.     if method_defined?(:check_require)
  302.       alias damageevent_check_require check_require
  303.     end
  304.   end
  305.   def self.check_require(require, version)
  306.     return true
  307.   end
  308. end
  309. #==============================================================================
  310. # ■ Scene_Battle
  311. #==============================================================================
  312. class Scene_Battle < Scene_Base
  313.   attr_reader :bmsp_damageevent_subject
  314.   #--------------------------------------------------------------------------
  315.   # ● ログウィンドウの作成
  316.   #--------------------------------------------------------------------------
  317.   alias bmsp_damageevent_create_log_window create_log_window
  318.   def create_log_window
  319.     bmsp_damageevent_create_log_window
  320.     @log_window.method_bmsp_damageevent_execute_common_event =
  321.       method(:bmsp_damageevent_execute_common_event)
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● コモンイベントの実行
  325.   #--------------------------------------------------------------------------
  326.   def bmsp_damageevent_execute_common_event(common_event)
  327.     interpreter = Game_Interpreter.new
  328.     interpreter.setup(common_event.list)
  329.     loop do
  330.       interpreter.update
  331.       wait_for_message
  332.       wait_for_effect if $game_troop.all_dead?
  333.       break unless interpreter.running?
  334.       update_for_wait
  335.     end
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 戦闘行動の実行
  339.   #--------------------------------------------------------------------------
  340.   alias bmsp_damageevent_execute_action execute_action
  341.   def execute_action
  342.     @bmsp_damageevent_subject = @subject
  343.     bmsp_damageevent_execute_action
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 反撃の発動
  347.   #--------------------------------------------------------------------------
  348.   alias bmsp_damageevent_invoke_counter_attack invoke_counter_attack
  349.   def invoke_counter_attack(target, item)
  350.     @bmsp_damageevent_subject = target
  351.     bmsp_damageevent_invoke_counter_attack(target, item)
  352.     @bmsp_damageevent_subject = @subject
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 魔法反射の発動
  356.   #--------------------------------------------------------------------------
  357.   alias bmsp_damageevent_invoke_magic_reflection invoke_magic_reflection
  358.   def invoke_magic_reflection(target, item)
  359.     @bmsp_damageevent_subject = target
  360.     bmsp_damageevent_invoke_magic_reflection(target, item)
  361.     @bmsp_damageevent_subject = @subject
  362.   end
  363. end
  364. #==============================================================================
  365. # ■ Window_BattleLog
  366. #==============================================================================
  367. class Window_BattleLog < Window_Selectable
  368.   #--------------------------------------------------------------------------
  369.   # ● コモンイベント呼び出し用メソッドの設定
  370.   #--------------------------------------------------------------------------
  371.   def method_bmsp_damageevent_execute_common_event=(method)
  372.     @method_bmsp_damageevent_execute_common_event = method
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● 文章の追加
  376.   #--------------------------------------------------------------------------
  377.   alias bmsp_damageevent_add_text add_text
  378.   def add_text(text)
  379.     /.*`(.*)'/ =~ caller[0]
  380.     bmsp_dagameevent_execute_event($1, :before)
  381.     bmsp_damageevent_add_text(text)
  382.     bmsp_dagameevent_execute_event($1, :after)
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● フック対象メソッドのマッチ
  386.   #--------------------------------------------------------------------------
  387.   def bmsp_dagameevent_match(method, timing)
  388.     case method
  389.     when "display_counter"       ; type = :counter
  390.     when "display_reflection"    ; type = :reflection
  391.     when "display_substitute"    ; type = :substitute
  392.     when "display_failure"       ; type = :failure
  393.     when "display_critical"      ; type = :critical
  394.     when "display_miss"          ; type = :miss
  395.     when "display_evasion"       ; type = :evasion
  396.     when "display_hp_damage"     ; type = :hp_damage
  397.     when "display_mp_damage"     ; type = :mp_damage
  398.     when "display_tp_damage"     ; type = :tp_damage
  399.     when "display_added_state"   ; type = :added_st
  400.     when "display_removed_state" ; type = :removed_st
  401.     else; return []
  402.     end
  403.     BMSP::DamageEvent.commons(type, timing, @bmsp_damageevent_binding)
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● マッチするイベントの実行
  407.   #--------------------------------------------------------------------------
  408.   def bmsp_dagameevent_execute_event(method, timing)
  409.     commons = bmsp_dagameevent_match(method, timing)
  410.     commons.each do |common|
  411.       SceneManager.scene.method(:bmsp_damageevent_execute_common_event).call(common)
  412.     end
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 反撃の表示
  416.   #--------------------------------------------------------------------------
  417.   alias bmsp_damageevent_display_counter display_counter
  418.   def display_counter(subject, action)
  419.     target = SceneManager.scene.bmsp_damageevent_subject
  420.     @bmsp_damageevent_binding = binding
  421.     bmsp_damageevent_display_counter(subject, action)
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ● 反射の表示
  425.   #--------------------------------------------------------------------------
  426.   alias bmsp_damageevent_display_reflection display_reflection
  427.   def display_reflection(subject, action)
  428.     target = SceneManager.scene.bmsp_damageevent_subject
  429.     @bmsp_damageevent_binding = binding
  430.     bmsp_damageevent_display_reflection(subject, action)
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● 身代わりの表示
  434.   #--------------------------------------------------------------------------
  435.   alias bmsp_damageevent_display_substitute display_substitute
  436.   def display_substitute(subst, target)
  437.     @bmsp_damageevent_binding = binding
  438.     bmsp_damageevent_display_substitute(subst, target)
  439.   end
  440.   #--------------------------------------------------------------------------
  441.   # ● 失敗の表示
  442.   #--------------------------------------------------------------------------
  443.   alias bmsp_damageevent_display_failure display_failure
  444.   def display_failure(target, action)
  445.     @bmsp_damageevent_binding = binding
  446.     bmsp_damageevent_display_failure(target, action)
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● クリティカルヒットの表示
  450.   #--------------------------------------------------------------------------
  451.   alias bmsp_damageevent_display_critical display_critical
  452.   def display_critical(target, action)
  453.     subject = SceneManager.scene.bmsp_damageevent_subject
  454.     @bmsp_damageevent_binding = binding
  455.     bmsp_damageevent_display_critical(target, action)
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● ミスの表示
  459.   #--------------------------------------------------------------------------
  460.   alias bmsp_damageevent_display_miss display_miss
  461.   def display_miss(target, action)
  462.     @bmsp_damageevent_binding = binding
  463.     bmsp_damageevent_display_miss(target, action)
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ● 回避の表示
  467.   #--------------------------------------------------------------------------
  468.   alias bmsp_damageevent_display_evasion display_evasion
  469.   def display_evasion(target, action)
  470.     subject = SceneManager.scene.bmsp_damageevent_subject
  471.     @bmsp_damageevent_binding = binding
  472.     bmsp_damageevent_display_evasion(target, action)
  473.   end
  474.   #--------------------------------------------------------------------------
  475.   # ● HP ダメージ表示
  476.   #--------------------------------------------------------------------------
  477.   alias bmsp_damageevent_display_hp_damage display_hp_damage
  478.   def display_hp_damage(target, action)
  479.     subject = SceneManager.scene.bmsp_damageevent_subject
  480.     @bmsp_damageevent_binding = binding
  481.     bmsp_damageevent_display_hp_damage(target, action)
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # ● MP ダメージ表示
  485.   #--------------------------------------------------------------------------
  486.   alias bmsp_damageevent_display_mp_damage display_mp_damage
  487.   def display_mp_damage(target, action)
  488.     subject = SceneManager.scene.bmsp_damageevent_subject
  489.     @bmsp_damageevent_binding = binding
  490.     bmsp_damageevent_display_mp_damage(target, action)
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ● TP ダメージ表示
  494.   #--------------------------------------------------------------------------
  495.   alias bmsp_damageevent_display_tp_damage display_tp_damage
  496.   def display_tp_damage(target, action)
  497.     subject = SceneManager.scene.bmsp_damageevent_subject
  498.     @bmsp_damageevent_binding = binding
  499.     bmsp_damageevent_display_tp_damage(target, action)
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # ● ステート付加の表示(再定義)
  503.   #--------------------------------------------------------------------------
  504.   def display_added_states(target)
  505.     target.result.added_state_objects.each do |state|
  506.       state_msg = target.actor? ? state.message1 : state.message2
  507.       target.perform_collapse_effect if state.id == target.death_state_id
  508.       next if state_msg.empty?
  509.       subject = SceneManager.scene.bmsp_damageevent_subject
  510.       @bmsp_damageevent_binding = binding
  511.       bmsp_dagameevent_execute_event("display_added_state", :before)
  512.       replace_text(target.name + state_msg)
  513.       bmsp_dagameevent_execute_event("display_added_state", :after)
  514.       wait
  515.       wait_for_effect
  516.     end
  517.   end
  518.   #--------------------------------------------------------------------------
  519.   # ● ステート解除の表示(再定義)
  520.   #--------------------------------------------------------------------------
  521.   def display_removed_states(target)
  522.     target.result.removed_state_objects.each do |state|
  523.       next if state.message4.empty?
  524.       subject = SceneManager.scene.instance_eval{@subject}
  525.       @bmsp_damageevent_binding = binding
  526.       bmsp_dagameevent_execute_event("display_removed_state", :before)
  527.       replace_text(target.name + state.message4)
  528.       bmsp_dagameevent_execute_event("display_removed_state", :after)
  529.       wait
  530.     end
  531.   end
  532. end


BMSP 行動前イベント[EVENTBOFOREACTION] Ver1.02
RUBY 代码复制
  1. #==============================================================================
  2. # ■ BMSP 行動前イベント[EVENTBOFOREACTION] Ver1.02 2014/05/25
  3. #------------------------------------------------------------------------------
  4. #  戦闘中バトラーの行動直前にコモンイベントを実行できます.
  5. #==============================================================================
  6. #------------------------------------------------------------------------------
  7. # ■内容
  8. # 戦闘中バトラーの行動直前にコモンイベントを実行できます.
  9. # これにより特定の条件下において発展するスキルや攻撃前のカットインなど
  10. # 様々な機能を導入できます.
  11. #
  12. # 位置:特に指定はありません
  13. #
  14. # ■使用方法
  15. # スクリプトに丸ごと貼り付けていただければ使用できます。
  16. #
  17. # ●コモンイベントの作成方法
  18. # ・コモンイベントの名前
  19. #   なんでも構いません.わかりやすい名前を付けて下さい
  20. # ・トリガー
  21. #   なし
  22. # ・実行内容
  23. #   一行目に注釈を作成してください.
  24. #   内容は
  25. #     ==行動前イベント:使用%display%==
  26. #   と記述します.
  27. #   %display%は「前」もしくは「後」で置き換えます.
  28. #   前:スキル・アイテム使用前にコモンイベントを実行します
  29. #   後:スキル・アイテム使用後(名前が表示され,MPなどが消費された直後)に
  30. #       コモンイベントを実行します
  31. #
  32. #   二行目から注釈でないイベントコマンドまでは条件を表す注釈となります.
  33. #   注釈1つにつき必ず満たすべき条件を書きます.
  34. #   また,注釈内1行につきいづれかを満たせば良い条件を書きます.
  35. #   例
  36. #     注釈:条件1
  37. #         :条件2
  38. #     注釈:条件3
  39. #   この例では,条件1かつ条件3を満たすときまたは,
  40. #   条件2かつ条件3を満たすときにこのイベントが実行されます.
  41. #   条件以降については任意のイベントコマンドを並べることが出来ます.
  42. #   例えば発展スキルなどの様な機能にするには戦闘行動の強制を利用します.
  43. #   使用例
  44. #     注釈:==行動前イベント:使用後==
  45. #     注釈:use.id == 1
  46. #     注釈:user.id == 1
  47. #     注釈:targets.include?($game_troop.members[1])
  48. #
  49. # ●条件の書き方
  50. # 条件部分はevalで評価しているのでrubyに書ける式を自由に書くことが出来ます.
  51. # 特殊な変数として以下の3つがあります.
  52. # ・use
  53. #   使用するスキル・アイテムを参照できます.(RPG::Skill,RPG::Item)
  54. # ・user
  55. #   使用するアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
  56. # ・targets
  57. #   スキル・アイテムのターゲットとなるアクター・エネミーの配列です.
  58. #   「使用後」のイベントでしか参照できません.
  59. #   「使用前」のイベントでは空配列となります.
  60. # useやuser,targetsから参照できる値や,
  61. # その他の情報の参照についてはスクリプトエディタや
  62. # ヘルプのVX Ace データ構造から各自が確認してください.
  63. # 例:アクター001がスキル「防御」を使用したときに実行
  64. #   注釈:user.id == 1
  65. #   注釈:use.name == "防御"
  66. # 例:アクター001またはアクター002がアイテムを使用したときに実行
  67. #   注釈:user.id == 1
  68. #       :user.id == 2
  69. #   注釈:use.is_a?(RPG::Item)
  70. # 例:ターゲットにインデックス1のエネミーが含まれる場合に実行
  71. #   注釈:targets.include?($game_troop.members[1])
  72. # 例:スイッチ001がONで,所持金が変数001の値以上の時に実行
  73. #   注釈:$game_switches[1] (わかりやすく書くと $game_switches[1] == true )
  74. #   注釈:$game_party.gold >= $game_variables[1]
  75. # 例:天候が雨の時に実行
  76. #   注釈:$game_troop.screen.weather_type == :rain
  77. #
  78. # もし条件の書き方がよくわからなければ掲示板([url]http://blueredzone.bbs.fc2.com/[/url])
  79. # あたりにでも書いて頂ければ条件式もお作りします.
  80. #
  81. # ちょっと応用した条件を書くことも・・・
  82. # 例:ターゲットがスライムのみの場合実行
  83. #   注釈:targets.size == 1 ? targets[0].original_name == "スライム" : false
  84. #     以下はエラーになる可能性があるので注意!
  85. #   注釈:targets.size == 1
  86. #   注釈:targets[0].original_name == "スライム"
  87. # 例:毎月7のつく日は実行
  88. #   注釈:Time.now.day.to_s.include?("7")
  89. # 例:パーティーの平均レベルが合計100以上
  90. #   注釈:$game_party.members.inject{|sum, a| sum += a.level} >= 100
  91. # 例:ローカル変数を使ったりもできる
  92. #   注釈:a = 10; b = $game_variables[1]; a < b
  93. #
  94. # ■注意
  95. # このスクリプトでは
  96. # 「Scene_Battle」
  97. # のメソッドを改変しています。
  98. # ■情報
  99. # このスクリプトはgentlawkによって作られたものです。
  100. # 利用規約は[url]http://blueredzone.com[/url]をご覧ください。
  101. #------------------------------------------------------------------------------
  102. module BMSP
  103.   @@includes ||= {}
  104.   @@includes[:EventBeforeAction] = 1.02
  105.   module EventBeforeAction
  106.     #--------------------------------------------------------------------------
  107.     # ● 条件にマッチするコモンイベントを取得
  108.     #--------------------------------------------------------------------------
  109.     def self.commons(item, user, after_display, targets)
  110.       return $data_common_events.select{ |ce|
  111.         next false if ce.nil?
  112.         check_condition(ce, item, user, after_display, targets)
  113.       }
  114.     end
  115.     #--------------------------------------------------------------------------
  116.     # ● 条件を満たすかチェック
  117.     #--------------------------------------------------------------------------
  118.     def self.check_condition(common_event, item, user, after_display, targets)
  119.       list = common_event.list
  120.       index = 0
  121.       return false if list[index].code != 108 # 注釈じゃない
  122.       define_comment = list[index].parameters[0]
  123.       index += 1
  124.       while list[index].code == 408
  125.         index += 1
  126.       end
  127.       type = after_display ? "後" : "前"
  128.       return false if define_comment != "==行動前イベント:使用#{type}=="
  129.       # 条件文を抽出
  130.       cond = []
  131.       size = -1
  132.       while list[index].code == 108
  133.         size += 1
  134.         cond[size] = [list[index].parameters[0]]
  135.         index += 1
  136.         while list[index].code == 408
  137.           cond[size].push(list[index].parameters[0])
  138.           index += 1
  139.         end
  140.       end
  141.       return self.eval(cond, item, user, targets)
  142.     end
  143.     #--------------------------------------------------------------------------
  144.     # ● 条件を評価
  145.     #--------------------------------------------------------------------------
  146.     def self.eval(formulas, use, user, targets)
  147.       return formulas.inject(true){|ret, subformulas|
  148.         ret && subformulas.inject(false){|r, formula|
  149.           r || Kernel.eval(formula)
  150.         }
  151.       }
  152.     end
  153.   end
  154. end
  155. #==============================================================================
  156. # ■ BattleManager
  157. #==============================================================================
  158. module BattleManager
  159.   #--------------------------------------------------------------------------
  160.   # ● action_battlersに含まれるか
  161.   #--------------------------------------------------------------------------
  162.   def self.include_action_battlers?(battler)
  163.     return @action_battlers.include?(battler)
  164.   end
  165. end
  166. #==============================================================================
  167. # ■ Scene_Battle
  168. #==============================================================================
  169. class Scene_Battle < Scene_Base
  170.   #--------------------------------------------------------------------------
  171.   # ● フレーム更新
  172.   #--------------------------------------------------------------------------
  173.   alias bmsp_eventbeforeaction_update update
  174.   def update
  175.     catch(:bmsp_eventbeforeaction_abortjump){
  176.       bmsp_eventbeforeaction_update
  177.     }
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 戦闘行動の処理
  181.   #--------------------------------------------------------------------------
  182.   alias bmsp_eventboforeaction_process_action process_action
  183.   def process_action
  184.     catch(:bmsp_eventbeforeaction_forced_action_self_jump){
  185.       bmsp_eventboforeaction_process_action
  186.     }
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 行動前前イベントの処理
  190.   #--------------------------------------------------------------------------
  191.   def bmsp_process_before_action_event(after_display,targets = [])
  192.     item = @subject.current_action.item
  193.     ces = BMSP::EventBeforeAction.commons(item, @subject, after_display, targets)
  194.     ces.each do |ce|
  195.       bmsp_execute_common_event(ce)
  196.     end
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● コモンイベントの実行
  200.   #--------------------------------------------------------------------------
  201.   def bmsp_execute_common_event(common_event)
  202.     interpreter = Game_Interpreter.new
  203.     interpreter.setup(common_event.list)
  204.     loop do
  205.       interpreter.update
  206.       wait_for_message
  207.       wait_for_effect if $game_troop.all_dead?
  208.       process_forced_action
  209.       BattleManager.judge_win_loss
  210.       break unless interpreter.running?
  211.       update_for_wait
  212.       throw(:bmsp_eventbeforeaction_abortjump) if scene_changing?
  213.     end
  214.     # 自分の行動が強制されたら元の行動をカット
  215.     unless @subject.current_action
  216.       process_action_end
  217.       throw(:bmsp_eventbeforeaction_forced_action_self_jump)
  218.     end
  219.     # 行動制約のあるステートが自分に付加されたら行動をカット
  220.     unless @subject.movable?
  221.       throw(:bmsp_eventbeforeaction_forced_action_invalid_action)
  222.     end
  223.  
  224.     # 自分がパーティーから外れたら行動をカット
  225.     if @subject.actor? and !$game_party.members.include?(@subject)
  226.       @subject.clear_actions
  227.       process_action_end
  228.       throw(:bmsp_eventbeforeaction_forced_action_self_jump)
  229.     end
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 戦闘行動の実行
  233.   #--------------------------------------------------------------------------
  234.   alias bmsp_eventbeforeaction_execute_action execute_action
  235.   def execute_action
  236.     catch(:bmsp_eventbeforeaction_forced_action_invalid_action){
  237.       bmsp_process_before_action_event(false)
  238.       @status_window.open
  239.       bmsp_eventbeforeaction_execute_action
  240.     }
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● アニメーションの表示
  244.   #--------------------------------------------------------------------------
  245.   alias bmsp_eventbeforeaction_show_animation show_animation
  246.   def show_animation(targets, animation_id)
  247.     bmsp_process_before_action_event(true,targets)
  248.     refresh_status
  249.     @status_window.open
  250.     bmsp_eventbeforeaction_show_animation(targets, animation_id)
  251.   end
  252. end
太久没有来6R了,都是新面孔啊。
帮忙宣传游戏ing,虽说不常上线。

Lv2.观梦者

梦石
0
星屑
558
在线时间
377 小时
注册时间
2012-7-10
帖子
1283
2
 楼主| 发表于 2018-1-10 18:45:18 | 只看该作者
没人懂日文吗?
太久没有来6R了,都是新面孔啊。
帮忙宣传游戏ing,虽说不常上线。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

梦石
1
星屑
21015
在线时间
4886 小时
注册时间
2014-12-22
帖子
1527

开拓者

3
发表于 2018-1-10 23:11:35 | 只看该作者
不懂日文,推荐百度翻译 http://fanyi.baidu.com/
机翻日语效果还不错的。
或者试试谷歌翻译~

另,大致机翻看下这两个脚本的开头说明,1是在受到伤害前/后运行公共事件,2是在战斗指令之前/后运行公共事件,应该都是在事件里注释这样用。
要注释的内容比较复杂(可以做到的效果也很多),逐句翻吧。
可以重点看“# 例:”的部分,看例子大概会好懂一点。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 11:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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