マップの各イベントについて、実行される前に共通でコモンイベントを実行させたい。

unagiman
記事: 6
登録日時: 2022年5月04日(水) 19:25

マップの各イベントについて、実行される前に共通でコモンイベントを実行させたい。

投稿記事by unagiman » 2022年5月04日(水) 19:55

初心者です。
マップ上に複数のキャラクターがいます。
それでキャラに話しかけるとそれぞれのイベントが起きるのですが、
そのイベントが実行される前に全キャラ共通で特定のコモンイベントを実行させたいと思っています。

例えばプレイヤーにA・B・Cの3人がおり、マップ上に複数のNPCがいるとします。
・AがNPCに話すと「Aですね」とNPCが返し、続いて対A用のイベントを実行する。
・BがNPCに話すと「Bですね」とNPCが返し、今度は対B用のイベントを実行する。
・CがNPCに話すと「Cはダメ」とNPCが返し、その後のイベントは実行しない。

このようなNPCの挙動をコモンイベントにし、それをスクリプトで全NPC共通で処理させたいです。
人物でないNPCには無意味なので、トリガーは「決定ボタン」、プライオリティは「通常キャラと同じ」
グラフィックはCharactersフォルダ内の「NPC_XX」のイベントのみ、という風に限定します。

いちいちNPCに書く手間をなくすのが目的になります。
自分で調べてGame_Playerクラスのstart_map_eventあたりをいろいろ触ってみたのですが、
うまくいきませんでした。
何かうまい方法を教えてもらえると嬉しいです。

名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: マップの各イベントについて、実行される前に共通でコモンイベントを実行させたい。

投稿記事by 名無し蛙 » 2022年5月04日(水) 21:14

方法自体は色々ありますね
最終的にインタプリタに処理をさせるより前にリストをすり替えさえすれば良いと思います
一番、簡単なのは多分Game_Event#setup_page_settingsですかね

コード: 全て選択

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ○ イベントページの設定をセットアップ
  #--------------------------------------------------------------------------
  alias :_old_setup_page_settings :setup_page_settings
  def setup_page_settings
    _old_setup_page_settings
    if @character_name.include?("NPC_")
      @list = $data_common_events[1].list
    end
  end
end

こんな感じでリストを代入し直せばコモンイベントのリストが適用されると思います。
更に正規表現を使えばファイル名でコモンイベントIDを指定する事も可能です。

コード: 全て選択

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ○ イベントページの設定をセットアップ
  #--------------------------------------------------------------------------
  alias :_old_setup_page_settings :setup_page_settings
  def setup_page_settings
    _old_setup_page_settings
    if @character_name =~ /NPC\_(\d+)/
      @list = $data_common_events[$1.to_i].list
    end
  end
end

これでファイル名がNPC_16.pngとかだとコモンイベント16番がリストに入りますね。
unagiman
記事: 6
登録日時: 2022年5月04日(水) 19:25

Re: マップの各イベントについて、実行される前に共通でコモンイベントを実行させたい。

投稿記事by unagiman » 2022年5月05日(木) 00:02

Eventクラスだったのですね。その方法で、イベントをコモンイベントに置換できました。
また以下でコモンイベント→イベントと順にも実行されました。ありがとうございました。
@list = $data_common_events[1].list + @list

“VX / Ace:質問” へ戻る