查看: 1537|回复: 2

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

[复制链接]
梦石
0
星屑
558
在线时间
377 小时
注册时间
2012-7-10
回帖
1207
发表于 2018-1-3 23:38:18 | 显示全部楼层 |阅读模式

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

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

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

BMSP ダメージイベント[DAMAGEEVENT] Ver1.02
[pre lang="ruby"]#==============================================================================
# ■ BMSP ダメージイベント[DAMAGEEVENT] Ver1.02 2013/10/20
#------------------------------------------------------------------------------
#  ダメージを受けるタイミングでイベントを実行することができます.
#==============================================================================
#------------------------------------------------------------------------------
# ■内容
# ダメージを受けるタイミングでイベントを実行することができます.
# 特定のダメージにエフェクトを付加したり,
# キャラクターの台詞やボイスを入れたりすることができます.
#
# 位置:特に指定はありません
#
# ■使用方法
# スクリプトに丸ごと貼り付けていただければ使用できます.
#
# ●コモンイベントの作成方法
# ・コモンイベントの名前
#   なんでも構いません.わかりやすい名前を付けて下さい
# ・トリガー
#   なし
# ・実行内容
#   一行目に注釈を作成してください.
#   内容は
#     ==ダメージイベント:%types%:%timing%==
#   と記述します.
#
#   %types%は以下のタイプを任意個"|"で区切って記述します.
#   ここに書かれたタイプの状況すべてでイベントが実行される可能性が生まれます.
#   反撃:反撃時に実行されます.
#   反射:反射時に実行されます.
#   身代わり:身代わり時に実行されます.
#   失敗:失敗時に実行されます.
#   会心:会心時に実行されます.
#   ミス:ミス時に実行されます.
#   回避:回避時に実行されます.
#   HP:HPダメージ時に実行されます.
#   MP:MPダメージ時に実行されます.
#   TP:TPダメージ時に実行されます.
#   ステート付加:ステート付加時に実行されます.
#   ステート解除:ステート解除時に実行されます.
#
#   %timing%は「表示前」もしくは「表示後」で置き換えます.
#   表示前:メッセージ表示直前にコモンイベントを実行します
#   表示後:メッセージ表示直後にコモンイベントを実行します
#
#   二行目から注釈でないイベントコマンドまでは条件を表す注釈となります.
#   注釈1つにつき必ず満たすべき条件を書きます.
#   また,注釈内1行につきいづれかを満たせば良い条件を書きます.
#   例
#     注釈:条件1
#         :条件2
#     注釈:条件3
#   この例では,条件1かつ条件3を満たすときまたは,
#   条件2かつ条件3を満たすときにこのイベントが実行されます.
#   条件以降については任意のイベントコマンドを並べることが出来ます.
#
# ●条件の書き方
# 条件部分はevalで評価しているのでrubyに書ける式を自由に書くことが出来ます.
# 各タイプに応じて特殊な変数を使用することができます.
# □反撃
# ・subject
#   反撃を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   反撃をされるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   反撃時に行う行動(スキル)を参照できます.(RPG::Skill)
#
# □反射
# ・subject
#   反射を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   反射をされるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   反射を行うアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □身代わり
# ・subst
#   身代わりを行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   身代わりをされるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
#
# □失敗
# ・target
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □会心
# ・subject
#   クリティカル攻撃を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   クリティカル攻撃を受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □ミス
# ・target
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □回避
# ・subject
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   回避を行うアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   回避するアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □HP
# ・subject
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   HPダメージを受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □MP
# ・subject
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   MPダメージを受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □TP
# ・subject
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   TPダメージを受けるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・action
#   使用したアイテム・スキルを参照できます.(RPG::Item,RPG::Skill)
#
# □ステート付加
# ・subject
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   ステートを付加されるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・state
#   付加されるステートを参照できます.(RPG::State)
#
# □ステート解除
# ・subject
#   アイテム・スキルを使用したアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・target
#   ステートを解除されるアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・state
#   解除されるステートを参照できます.(RPG::State)
#
# 各タイプで使用可能な変数から参照できる値や,
# その他の情報の参照についてはスクリプトエディタや
# ヘルプのVX Ace データ構造から各自が確認してください.
#
# 例:ID1のアクターが大ダメージを受けたときにボイス再生
#   注釈:==ダメージイベント:HP:表示後==
#   注釈:target.actor? && target.id == 1
#   注釈:target.result.hp_damage * 100 / target.mhp >= 50
#   SE の演奏:xxxx
#
# 例:会心の一撃によるダメージは画面をフラッシュ
#   注釈:==ダメージイベント:HP:表示前==
#   注釈:target.result.critical
#   画面のフラッシュ:xxxx
#
# もし条件の書き方がよくわからなければ掲示板(http://blueredzone.bbs.fc2.com/)
# あたりにでも書いて頂ければ条件式もお作りします.
#
# ■注意
# このスクリプトでは
# 「Scene_Battle」「Window_BattleLog」
# のメソッドを改変しています.
# ■情報
# このスクリプトはgentlawkによって作られたものです.
# 利用規約はhttp://blueredzone.comをご覧ください.
#------------------------------------------------------------------------------
module BMSP
  @@includes ||= {}
  @@includes[:DamageEvent] = 1.02
  module DamageEvent
    #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
    #詳細設定
   
    #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
    /==ダメージイベント:(.+):(前|後)==/o
    #--------------------------------------------------------------------------
    # ● 対象コモンイベントの初期化
    #--------------------------------------------------------------------------
    def self.init_commons
      types = [:counter, :reflection, :substitute, :failure, :critical, :miss, :evasion,
              :hp_damage, :mp_damage, :tp_damage, :added_st, :removed_st]
      @commons = {}
      types.each do |type|
        @commons[type] = {:before=>[], :after=>[]}
      end
      $data_common_events.each do |common|
        next if common.nil?
        types,timing,cond = self.check_damageevent(common)
        next if types.nil?
        types.each do |type|
          @commons[type][timing].push([common, cond])
        end
      end
    end
    #--------------------------------------------------------------------------
    # ● 条件にマッチするコモンイベントを取得
    #--------------------------------------------------------------------------
    def self.commons(type, timing, binding)
      init_commons if @commons.nil?
      return @commons[type][timing].select{ |common,cond|
        check_condition(cond, binding)
      }.map{|cc| cc.first }
    end
    #--------------------------------------------------------------------------
    # ● ダメージイベントかチェックして情報を取得
    #--------------------------------------------------------------------------
    def self.check_damageevent(common_event)
      list = common_event.list
      index = 0
      return nil if list[index].code != 108 # 注釈じゃない
      define_comment = list[index].parameters[0]
      index += 1
      while list[index].code == 408
        index += 1
      end
      return nil unless define_comment =~ /==ダメージイベント:(.+):(表示前|表示後)==/o
      types = $1.split('|')
      timing = $2 == "表示前" ? :before : :after
      # 対象タイプを変換
      types.map!{|type| self.translate_type(type)}.compact!
      return nil if types.empty?
      # 条件文を抽出
      cond = []
      size = -1
      while list[index].code == 108
        size += 1
        cond[size] = [list[index].parameters[0]]
        index += 1
        while list[index].code == 408
          cond[size].push(list[index].parameters[0])
          index += 1
        end
      end
      return types,timing,cond
    end
    #--------------------------------------------------------------------------
    # ● 条件を満たすかチェック
    #--------------------------------------------------------------------------
    def self.check_condition(formulas, binding)
      return formulas.inject(true){|ret, subformulas|
        ret && subformulas.inject(false){|r, formula|
          r || binding.eval(formula)
        }
      }
    end
    #--------------------------------------------------------------------------
    # ● タイプ変換
    #--------------------------------------------------------------------------
    def self.translate_type(type)
      case type
      when "反撃"        ; :counter
      when "反射"        ; :reflection
      when "身代わり"    ; :substitute
      when "失敗"        ; :failure
      when "会心"        ; :critical
      when "ミス"        ; :miss
      when "回避"        ; :evasion
      when "HP"          ; :hp_damage
      when "MP"          ; :mp_damage
      when "TP"          ; :tp_damage
      when "ステート付加"; :added_st
      when "ステート解除"; :removed_st
      else nil
      end
    end
    #--------------------------------------------------------------------------
    # ● 条件を評価
    #--------------------------------------------------------------------------
    def self.eval(formulas, use, user, targets)
      return formulas.inject(true){|ret, subformulas|
        ret && subformulas.inject(false){|r, formula|
          r || Kernel.eval(formula)
        }
      }
    end
    #--------------------------------------------------------------------------
    # ● バグの例外クラス
    #--------------------------------------------------------------------------
    class BUG < StandardError
    end
    #--------------------------------------------------------------------------
    # ● 導入スクリプトの例外クラス
    #--------------------------------------------------------------------------
    class REQUIRE < StandardError
    end
  end
  #--------------------------------------------------------------------------
  # ● 必須スクリプトのチェック
  #--------------------------------------------------------------------------
  class << self
    if method_defined?(:check_require)
      alias damageevent_check_require check_require
    end
  end
  def self.check_require(require, version)
    return true
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
  attr_reader :bmsp_damageevent_subject
  #--------------------------------------------------------------------------
  # ● ログウィンドウの作成
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_create_log_window create_log_window
  def create_log_window
    bmsp_damageevent_create_log_window
    @log_window.method_bmsp_damageevent_execute_common_event =
      method(:bmsp_damageevent_execute_common_event)
  end
  #--------------------------------------------------------------------------
  # ● コモンイベントの実行
  #--------------------------------------------------------------------------
  def bmsp_damageevent_execute_common_event(common_event)
    interpreter = Game_Interpreter.new
    interpreter.setup(common_event.list)
    loop do
      interpreter.update
      wait_for_message
      wait_for_effect if $game_troop.all_dead?
      break unless interpreter.running?
      update_for_wait
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘行動の実行
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_execute_action execute_action
  def execute_action
    @bmsp_damageevent_subject = @subject
    bmsp_damageevent_execute_action
  end
  #--------------------------------------------------------------------------
  # ● 反撃の発動
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_invoke_counter_attack invoke_counter_attack
  def invoke_counter_attack(target, item)
    @bmsp_damageevent_subject = target
    bmsp_damageevent_invoke_counter_attack(target, item)
    @bmsp_damageevent_subject = @subject
  end
  #--------------------------------------------------------------------------
  # ● 魔法反射の発動
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_invoke_magic_reflection invoke_magic_reflection
  def invoke_magic_reflection(target, item)
    @bmsp_damageevent_subject = target
    bmsp_damageevent_invoke_magic_reflection(target, item)
    @bmsp_damageevent_subject = @subject
  end
end
#==============================================================================
# ■ Window_BattleLog
#==============================================================================
class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● コモンイベント呼び出し用メソッドの設定
  #--------------------------------------------------------------------------
  def method_bmsp_damageevent_execute_common_event=(method)
    @method_bmsp_damageevent_execute_common_event = method
  end
  #--------------------------------------------------------------------------
  # ● 文章の追加
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_add_text add_text
  def add_text(text)
    /.*`(.*)'/ =~ caller[0]
    bmsp_dagameevent_execute_event($1, :before)
    bmsp_damageevent_add_text(text)
    bmsp_dagameevent_execute_event($1, :after)
  end
  #--------------------------------------------------------------------------
  # ● フック対象メソッドのマッチ
  #--------------------------------------------------------------------------
  def bmsp_dagameevent_match(method, timing)
    case method
    when "display_counter"       ; type = :counter
    when "display_reflection"    ; type = :reflection
    when "display_substitute"    ; type = :substitute
    when "display_failure"       ; type = :failure
    when "display_critical"      ; type = :critical
    when "display_miss"          ; type = :miss
    when "display_evasion"       ; type = :evasion
    when "display_hp_damage"     ; type = :hp_damage
    when "display_mp_damage"     ; type = :mp_damage
    when "display_tp_damage"     ; type = :tp_damage
    when "display_added_state"   ; type = :added_st
    when "display_removed_state" ; type = :removed_st
    else; return []
    end
    BMSP::DamageEvent.commons(type, timing, @bmsp_damageevent_binding)
  end
  #--------------------------------------------------------------------------
  # ● マッチするイベントの実行
  #--------------------------------------------------------------------------
  def bmsp_dagameevent_execute_event(method, timing)
    commons = bmsp_dagameevent_match(method, timing)
    commons.each do |common|
      SceneManager.scene.method(:bmsp_damageevent_execute_common_event).call(common)
    end
  end
  #--------------------------------------------------------------------------
  # ● 反撃の表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_counter display_counter
  def display_counter(subject, action)
    target = SceneManager.scene.bmsp_damageevent_subject
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_counter(subject, action)
  end
  #--------------------------------------------------------------------------
  # ● 反射の表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_reflection display_reflection
  def display_reflection(subject, action)
    target = SceneManager.scene.bmsp_damageevent_subject
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_reflection(subject, action)
  end
  #--------------------------------------------------------------------------
  # ● 身代わりの表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_substitute display_substitute
  def display_substitute(subst, target)
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_substitute(subst, target)
  end
  #--------------------------------------------------------------------------
  # ● 失敗の表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_failure display_failure
  def display_failure(target, action)
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_failure(target, action)
  end
  #--------------------------------------------------------------------------
  # ● クリティカルヒットの表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_critical display_critical
  def display_critical(target, action)
    subject = SceneManager.scene.bmsp_damageevent_subject
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_critical(target, action)
  end
  #--------------------------------------------------------------------------
  # ● ミスの表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_miss display_miss
  def display_miss(target, action)
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_miss(target, action)
  end
  #--------------------------------------------------------------------------
  # ● 回避の表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_evasion display_evasion
  def display_evasion(target, action)
    subject = SceneManager.scene.bmsp_damageevent_subject
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_evasion(target, action)
  end
  #--------------------------------------------------------------------------
  # ● HP ダメージ表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_hp_damage display_hp_damage
  def display_hp_damage(target, action)
    subject = SceneManager.scene.bmsp_damageevent_subject
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_hp_damage(target, action)
  end
  #--------------------------------------------------------------------------
  # ● MP ダメージ表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_mp_damage display_mp_damage
  def display_mp_damage(target, action)
    subject = SceneManager.scene.bmsp_damageevent_subject
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_mp_damage(target, action)
  end
  #--------------------------------------------------------------------------
  # ● TP ダメージ表示
  #--------------------------------------------------------------------------
  alias bmsp_damageevent_display_tp_damage display_tp_damage
  def display_tp_damage(target, action)
    subject = SceneManager.scene.bmsp_damageevent_subject
    @bmsp_damageevent_binding = binding
    bmsp_damageevent_display_tp_damage(target, action)
  end
  #--------------------------------------------------------------------------
  # ● ステート付加の表示(再定義)
  #--------------------------------------------------------------------------
  def display_added_states(target)
    target.result.added_state_objects.each do |state|
      state_msg = target.actor? ? state.message1 : state.message2
      target.perform_collapse_effect if state.id == target.death_state_id
      next if state_msg.empty?
      subject = SceneManager.scene.bmsp_damageevent_subject
      @bmsp_damageevent_binding = binding
      bmsp_dagameevent_execute_event("display_added_state", :before)
      replace_text(target.name + state_msg)
      bmsp_dagameevent_execute_event("display_added_state", :after)
      wait
      wait_for_effect
    end
  end
  #--------------------------------------------------------------------------
  # ● ステート解除の表示(再定義)
  #--------------------------------------------------------------------------
  def display_removed_states(target)
    target.result.removed_state_objects.each do |state|
      next if state.message4.empty?
      subject = SceneManager.scene.instance_eval{@subject}
      @bmsp_damageevent_binding = binding
      bmsp_dagameevent_execute_event("display_removed_state", :before)
      replace_text(target.name + state.message4)
      bmsp_dagameevent_execute_event("display_removed_state", :after)
      wait
    end
  end
end
                                                [/pre]

BMSP 行動前イベント[EVENTBOFOREACTION] Ver1.02
[pre lang="ruby"]#==============================================================================
# ■ BMSP 行動前イベント[EVENTBOFOREACTION] Ver1.02 2014/05/25
#------------------------------------------------------------------------------
#  戦闘中バトラーの行動直前にコモンイベントを実行できます.
#==============================================================================
#------------------------------------------------------------------------------
# ■内容
# 戦闘中バトラーの行動直前にコモンイベントを実行できます.
# これにより特定の条件下において発展するスキルや攻撃前のカットインなど
# 様々な機能を導入できます.
#
# 位置:特に指定はありません
#
# ■使用方法
# スクリプトに丸ごと貼り付けていただければ使用できます。
#
# ●コモンイベントの作成方法
# ・コモンイベントの名前
#   なんでも構いません.わかりやすい名前を付けて下さい
# ・トリガー
#   なし
# ・実行内容
#   一行目に注釈を作成してください.
#   内容は
#     ==行動前イベント:使用%display%==
#   と記述します.
#   %display%は「前」もしくは「後」で置き換えます.
#   前:スキル・アイテム使用前にコモンイベントを実行します
#   後:スキル・アイテム使用後(名前が表示され,MPなどが消費された直後)に
#       コモンイベントを実行します
#
#   二行目から注釈でないイベントコマンドまでは条件を表す注釈となります.
#   注釈1つにつき必ず満たすべき条件を書きます.
#   また,注釈内1行につきいづれかを満たせば良い条件を書きます.
#   例
#     注釈:条件1
#         :条件2
#     注釈:条件3
#   この例では,条件1かつ条件3を満たすときまたは,
#   条件2かつ条件3を満たすときにこのイベントが実行されます.
#   条件以降については任意のイベントコマンドを並べることが出来ます.
#   例えば発展スキルなどの様な機能にするには戦闘行動の強制を利用します.
#   使用例
#     注釈:==行動前イベント:使用後==
#     注釈:use.id == 1
#     注釈:user.id == 1
#     注釈:targets.include?($game_troop.members[1])
#
# ●条件の書き方
# 条件部分はevalで評価しているのでrubyに書ける式を自由に書くことが出来ます.
# 特殊な変数として以下の3つがあります.
# ・use
#   使用するスキル・アイテムを参照できます.(RPG::Skill,RPG::Item)
# ・user
#   使用するアクター・エネミーを参照できます.(Game_Actor,Game_Enemy)
# ・targets
#   スキル・アイテムのターゲットとなるアクター・エネミーの配列です.
#   「使用後」のイベントでしか参照できません.
#   「使用前」のイベントでは空配列となります.
# useやuser,targetsから参照できる値や,
# その他の情報の参照についてはスクリプトエディタや
# ヘルプのVX Ace データ構造から各自が確認してください.
# 例:アクター001がスキル「防御」を使用したときに実行
#   注釈:user.id == 1
#   注釈:use.name == "防御"
# 例:アクター001またはアクター002がアイテムを使用したときに実行
#   注釈:user.id == 1
#       :user.id == 2
#   注釈:use.is_a?(RPG::Item)
# 例:ターゲットにインデックス1のエネミーが含まれる場合に実行
#   注釈:targets.include?($game_troop.members[1])
# 例:スイッチ001がONで,所持金が変数001の値以上の時に実行
#   注釈:$game_switches[1] (わかりやすく書くと $game_switches[1] == true )
#   注釈:$game_party.gold >= $game_variables[1]
# 例:天候が雨の時に実行
#   注釈:$game_troop.screen.weather_type == :rain
#
# もし条件の書き方がよくわからなければ掲示板(http://blueredzone.bbs.fc2.com/)
# あたりにでも書いて頂ければ条件式もお作りします.
#
# ちょっと応用した条件を書くことも・・・
# 例:ターゲットがスライムのみの場合実行
#   注釈:targets.size == 1 ? targets[0].original_name == "スライム" : false
#     以下はエラーになる可能性があるので注意!
#   注釈:targets.size == 1
#   注釈:targets[0].original_name == "スライム"
# 例:毎月7のつく日は実行
#   注釈:Time.now.day.to_s.include?("7")
# 例:パーティーの平均レベルが合計100以上
#   注釈:$game_party.members.inject{|sum, a| sum += a.level} >= 100
# 例:ローカル変数を使ったりもできる
#   注釈:a = 10; b = $game_variables[1]; a < b
#
# ■注意
# このスクリプトでは
# 「Scene_Battle」
# のメソッドを改変しています。
# ■情報
# このスクリプトはgentlawkによって作られたものです。
# 利用規約はhttp://blueredzone.comをご覧ください。
#------------------------------------------------------------------------------
module BMSP
  @@includes ||= {}
  @@includes[:EventBeforeAction] = 1.02
  module EventBeforeAction
    #--------------------------------------------------------------------------
    # ● 条件にマッチするコモンイベントを取得
    #--------------------------------------------------------------------------
    def self.commons(item, user, after_display, targets)
      return $data_common_events.select{ |ce|
        next false if ce.nil?
        check_condition(ce, item, user, after_display, targets)
      }
    end
    #--------------------------------------------------------------------------
    # ● 条件を満たすかチェック
    #--------------------------------------------------------------------------
    def self.check_condition(common_event, item, user, after_display, targets)
      list = common_event.list
      index = 0
      return false if list[index].code != 108 # 注釈じゃない
      define_comment = list[index].parameters[0]
      index += 1
      while list[index].code == 408
        index += 1
      end
      type = after_display ? "後" : "前"
      return false if define_comment != "==行動前イベント:使用#{type}=="
      # 条件文を抽出
      cond = []
      size = -1
      while list[index].code == 108
        size += 1
        cond[size] = [list[index].parameters[0]]
        index += 1
        while list[index].code == 408
          cond[size].push(list[index].parameters[0])
          index += 1
        end
      end
      return self.eval(cond, item, user, targets)
    end
    #--------------------------------------------------------------------------
    # ● 条件を評価
    #--------------------------------------------------------------------------
    def self.eval(formulas, use, user, targets)
      return formulas.inject(true){|ret, subformulas|
        ret && subformulas.inject(false){|r, formula|
          r || Kernel.eval(formula)
        }
      }
    end
  end
end
#==============================================================================
# ■ BattleManager
#==============================================================================
module BattleManager
  #--------------------------------------------------------------------------
  # ● action_battlersに含まれるか
  #--------------------------------------------------------------------------
  def self.include_action_battlers?(battler)
    return @action_battlers.include?(battler)
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias bmsp_eventbeforeaction_update update
  def update
    catch(:bmsp_eventbeforeaction_abortjump){
      bmsp_eventbeforeaction_update
    }
  end
  #--------------------------------------------------------------------------
  # ● 戦闘行動の処理
  #--------------------------------------------------------------------------
  alias bmsp_eventboforeaction_process_action process_action
  def process_action
    catch(:bmsp_eventbeforeaction_forced_action_self_jump){
      bmsp_eventboforeaction_process_action
    }
  end
  #--------------------------------------------------------------------------
  # ● 行動前前イベントの処理
  #--------------------------------------------------------------------------
  def bmsp_process_before_action_event(after_display,targets = [])
    item = @subject.current_action.item
    ces = BMSP::EventBeforeAction.commons(item, @subject, after_display, targets)
    ces.each do |ce|
      bmsp_execute_common_event(ce)
    end
  end
  #--------------------------------------------------------------------------
  # ● コモンイベントの実行
  #--------------------------------------------------------------------------
  def bmsp_execute_common_event(common_event)
    interpreter = Game_Interpreter.new
    interpreter.setup(common_event.list)
    loop do
      interpreter.update
      wait_for_message
      wait_for_effect if $game_troop.all_dead?
      process_forced_action
      BattleManager.judge_win_loss
      break unless interpreter.running?
      update_for_wait
      throw(:bmsp_eventbeforeaction_abortjump) if scene_changing?
    end
    # 自分の行動が強制されたら元の行動をカット
    unless @subject.current_action
      process_action_end
      throw(:bmsp_eventbeforeaction_forced_action_self_jump)
    end
    # 行動制約のあるステートが自分に付加されたら行動をカット
    unless @subject.movable?
      throw(:bmsp_eventbeforeaction_forced_action_invalid_action)
    end
   
    # 自分がパーティーから外れたら行動をカット
    if @subject.actor? and !$game_party.members.include?(@subject)
      @subject.clear_actions
      process_action_end
      throw(:bmsp_eventbeforeaction_forced_action_self_jump)
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘行動の実行
  #--------------------------------------------------------------------------
  alias bmsp_eventbeforeaction_execute_action execute_action
  def execute_action
    catch(:bmsp_eventbeforeaction_forced_action_invalid_action){
      bmsp_process_before_action_event(false)
      @status_window.open
      bmsp_eventbeforeaction_execute_action
    }
  end
  #--------------------------------------------------------------------------
  # ● アニメーションの表示
  #--------------------------------------------------------------------------
  alias bmsp_eventbeforeaction_show_animation show_animation
  def show_animation(targets, animation_id)
    bmsp_process_before_action_event(true,targets)
    refresh_status
    @status_window.open
    bmsp_eventbeforeaction_show_animation(targets, animation_id)
  end
end
                                                [/pre]
太久没有来6R了,都是新面孔啊。
帮忙宣传游戏ing,虽说不常上线。
梦石
0
星屑
558
在线时间
377 小时
注册时间
2012-7-10
回帖
1207
 楼主| 发表于 2018-1-10 18:45:18 | 显示全部楼层
没人懂日文吗?
太久没有来6R了,都是新面孔啊。
帮忙宣传游戏ing,虽说不常上线。
回复

使用道具 举报

梦石
1
星屑
22078
在线时间
4885 小时
注册时间
2014-12-22
回帖
1509

开拓者

发表于 2018-1-10 23:11:35 | 显示全部楼层
不懂日文,推荐百度翻译 http://fanyi.baidu.com/
机翻日语效果还不错的。
或者试试谷歌翻译~

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部