(解決済)[VXace]イベント実行中に他のイベントの自律移動をストップさせる

みるく
記事: 25
登録日時: 2017年7月15日(土) 01:05

(解決済)[VXace]イベント実行中に他のイベントの自律移動をストップさせる

投稿記事by みるく » 2017年8月04日(金) 19:04

こんにちは\(^o^)/
暑いですね!

VXaceで質問なのですが、、、

たとえば町の中で
あるNPCと会話をしている最中に、
マップ上の他のNPCが動き回ってるのが気になります。


つまり。
イベント実行中は、自律移動で「ランダム」「近づく」「カスタム」
になっている他のイベントを動かしたくないのですが、
これって設定する方法とかありましたでしょうか? ><

簡単にできそうな気がするんですが、
もしかしてスクリプトで制御してあげないと止まってくれないでしょうか?

御存知の方、いらっしゃいましたら、教えてくださいませ!!
最後に編集したユーザー みるく on 2017年8月05日(土) 19:58 [ 編集 1 回目 ]

TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: [VXace]イベント実行中に他のイベントの自律移動をストップさせる

投稿記事by TOMO » 2017年8月04日(金) 22:14

イベントコマンド「スクリプト」で、

コード: 全て選択

$game_map.events.each {|id, event| event.lock }

とやれば、全てのイベントがストップします

また、ストップしたイベントを再開する場合は、
「lock」を「unlock」にしたものを実行すれば可能です

あと、特定イベントだけストップさせたい場合は、

コード: 全て選択

$game_map.events[1].lock

とやれば可能です
(数値はイベントIDで、同じく再開は「unlock」です)
ANS
記事: 10
登録日時: 2017年6月25日(日) 10:17

Re: [VXace]イベント実行中に他のイベントの自律移動をストップさせる

投稿記事by ANS » 2017年8月05日(土) 13:56

横槍失礼します。

こちらは別解ということで紹介しておきます。
該当箇所を下記のように変えてみてください。(※元のコードには触らずに"素材"の要領でコピペすればOK)

コード: 全て選択

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 停止時の更新
  #--------------------------------------------------------------------------
  def update_stop
    super
  # update_self_movement unless @move_route_forcing

    return if @move_route_forcing or $game_map.interpreter.running?
    update_self_movement
  end
end
一応解説しますが、update_self_movement というのが自律移動の更新処理なので、
それを条件つきで実行するように変えれば済みます。
$game_map.interpreter.running? が "イベント実行中か?" という判定です。
仮にこれを $game_message.visible に変えれば、 "メッセージ表示中か?" となります。このへんは好みで。
return はイベントコマンドでいえば「イベント処理の中断」ですね。

ただしこの方法では、大元の処理を変えているため、ゲーム全体の仕様変更になり、ゲーム中の変更はできません。
ゲーム中に制御したければ、ゲームスイッチ( $game_switches[switch_id]) を条件にするのが手軽ですかね。
みるく
記事: 25
登録日時: 2017年7月15日(土) 01:05

Re: [VXace]イベント実行中に他のイベントの自律移動をストップさせる

投稿記事by みるく » 2017年8月05日(土) 19:57

TOMO様 ANS様

ありがとうございます!!

導入してみたら、無事、彼奴らの動きをストップさせることができました(^0^)/

皆さんスゴイですねー!

助かりました_(._.)_

“VX / Ace:質問” へ戻る