【解決】イベントを指定のリージョンへ移動させたい

アバター
わかさぎ
記事: 9
登録日時: 2017年3月14日(火) 06:30

【解決】イベントを指定のリージョンへ移動させたい

投稿記事by わかさぎ » 2017年3月22日(水) 01:32

お世話になっております。
表題の件で頭を悩ませており、お知恵をお借りできればと質問をした次第です。

【やりたいこと】
・マップのイベント位置を保持しながらキャラクターを指定のリージョンまで移動させたい

【使用中プラグイン】
指定のリージョンを踏むとセルフスイッチ操作 TMMoveEx.js
マップのイベント位置保持 YEP_SaveEventLocations.js

【現状】
自律移動にてイベントを指定リージョンの元まで移動させているのですが、その場合だとマップ移動をした際、保持された場所で自律移動が最初から動いてしまい、予想していない場所へと行ってしまいます。
マップイベント位置保持は外したくないプラグインのため、
自律移動ではなく指定リージョン先へ移動するようにすれば解決しそうだと思うのですが、
指定リージョンへ移動する術がわかりません……

できれば、イベントが通るルートもリージョン指定し、その上を通って指定リージョンまで動かしたいのですが、
そうしたい場合どうすれば良いのか、またそういった動きを可能にするプラグインがもしあるのであれば
教えていただきたくお願い致します……。
最後に編集したユーザー わかさぎ on 2017年3月23日(木) 04:15 [ 編集 2 回目 ]

アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

Re: イベントを指定のリージョンへ移動させたい

投稿記事by ビービー » 2017年3月22日(水) 16:07

こんにちは。

リージョンではないのですが、ご希望の動作がおそらくできるのではないかと思いましたので、書き込ませていただきます。

変数でイベントの位置を確認するやり方になります。

◆変数の操作:#0051 イベント位置X = このイベントのマップX
◆変数の操作:#0052 イベント位置Y = このイベントのマップY
◆条件分岐:イベント位置Y ≠ 2
◆移動ルートの設定:このイベント
:        :◇上に移動

:それ以外のとき
◆条件分岐:イベント位置X ≠ 15
◆移動ルートの設定:このイベント (ウェイト)
:        :◇右に移動

:分岐終了

:分岐終了

※条件分岐の2と5には到達したい位置の座標を入れてください。
※◇上に移動◇右に移動はイベントの位置によって変わります。
このイベント例はイベントの初期位置が到達点より左下にあればどこにいようと到達点へ向かいます。
障害物がなければですが。
障害物がある場合も条件分岐を増やすことで可能になると思います。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
アバター
ドレミファソ
記事: 14
登録日時: 2017年3月07日(火) 21:37

Re: イベントを指定のリージョンへ移動させたい

投稿記事by ドレミファソ » 2017年3月22日(水) 16:18

力技ではありますが

イベントを並列処理にして
変数を一つ使う事でできる方法を考えてみました。



目的地まで移動するイベントを並列処理にします。
イベントのメモに<Save Event Location>を入れます。
(YEP_SaveEventLocations.jsの為)


条件分岐で変数が0の時
 移動ルートの設定を使って
  そのイベントを目的地まで1歩分だけ移動
   変数を+1
    ウエイト 30 (これを入れることで次の移動がスムーズになります。)


後はこの命令を

条件分岐で変数が1の時
 移動ルートの設定を使って
  そのイベントを目的地まで1歩分だけ移動
   変数を+1
    ウエイト 30 

条件分岐で変数が2の時
 移動ルートの設定を使って
  そのイベントを目的地まで1歩分だけ移動
   変数を+1
    ウエイト 30 

条件分岐で変数が3の時
 移動ルートの設定を使って
  そのイベントを目的地まで1歩分だけ移動
   変数を+1
    ウエイト 30 

のように一歩ずつ設定していきます。
一歩ずつの所が大変めんどい力技ですが

YEP_SaveEventLocations.jsのプラグインを使いつつ
目的地に確実に連れていけると思います。

ちなみに一歩動かすときの左下のチェック項目は全部外してOKです。
移動は実行内容で行うため

自律移動での移動は設定しません。
アバター
ネコタ
記事: 173
登録日時: 2016年7月10日(日) 18:35
連絡を取る:

Re: イベントを指定のリージョンへ移動させたい

投稿記事by ネコタ » 2017年3月22日(水) 17:19

こんばんは。
ちょっと長くて面倒くさいですが、リージョンを使ったやり方を組んでみました。

仕様としては、リージョン50~52の位置からスタートし、50→51→52→50→・・・とリージョンの上を順番に進んでいき、53に到達した時点で移動を終了します(50~52の隣に53がある場合は、53へ優先して移動します)。基本的に一方通行となりますが、仮に複数方向に同じタイルがある場合には、優先順位の高い順として右、左、下、上、となります。



トリガー:並列処理

≪実行内容≫

コード: 全て選択

◆注釈:目的地まで自立移動します。
◆注釈:隣のリージョンが53番なら、その方向に移動します。
◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
◆変数の操作:#0034 【情報取得】イベントX += 1
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
◆条件分岐:【取得情報】リージョン = 53
  ◆移動ルートの設定:このイベント (ウェイト)
  :        :◇右に移動
  ◆ラベルジャンプ:移動終了
  ◆
:分岐終了
◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
◆変数の操作:#0034 【情報取得】イベントX -= 1
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
◆条件分岐:【取得情報】リージョン = 53
  ◆移動ルートの設定:このイベント (ウェイト)
  :        :◇左に移動
  ◆ラベルジャンプ:移動終了
  ◆
:分岐終了
◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
◆変数の操作:#0035 【情報取得】イベントY += 1
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
◆条件分岐:【取得情報】リージョン = 53
  ◆移動ルートの設定:このイベント (ウェイト)
  :        :◇下に移動
  ◆ラベルジャンプ:移動終了
  ◆
:分岐終了
◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
◆変数の操作:#0035 【情報取得】イベントY -= 1
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
◆条件分岐:【取得情報】リージョン = 53
  ◆移動ルートの設定:このイベント (ウェイト)
  :        :◇上に移動
  ◆ラベルジャンプ:移動終了
  ◆
:分岐終了
◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
◆注釈:現在のリージョンが50番なら、51番の方向に移動します。
◆条件分岐:【取得情報】リージョン = 50
  ◆変数の操作:#0034 【情報取得】イベントX += 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 51
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇右に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
  ◆変数の操作:#0034 【情報取得】イベントX -= 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 51
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇左に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
  ◆変数の操作:#0035 【情報取得】イベントY += 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 51
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇下に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
  ◆変数の操作:#0035 【情報取得】イベントY -= 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 51
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇上に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆
:分岐終了
◆注釈:現在のリージョンが51番なら、52番の方向に移動します。
◆条件分岐:【取得情報】リージョン = 51
  ◆変数の操作:#0034 【情報取得】イベントX += 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 52
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇右に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
  ◆変数の操作:#0034 【情報取得】イベントX -= 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 52
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇左に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
  ◆変数の操作:#0035 【情報取得】イベントY += 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 52
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇下に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
  ◆変数の操作:#0035 【情報取得】イベントY -= 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 52
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇上に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆
:分岐終了
◆注釈:現在のリージョンが52番なら、50番の方向に移動します。
◆条件分岐:【取得情報】リージョン = 52
  ◆変数の操作:#0034 【情報取得】イベントX += 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 50
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇右に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
  ◆変数の操作:#0034 【情報取得】イベントX -= 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 50
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇左に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
  ◆変数の操作:#0035 【情報取得】イベントY += 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 50
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇下に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
  ◆変数の操作:#0035 【情報取得】イベントY -= 1
  ◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
  ◆条件分岐:【取得情報】リージョン = 50
    ◆移動ルートの設定:このイベント (ウェイト)
    :        :◇上に移動
    ◆ラベルジャンプ:移動終了
    ◆
  :分岐終了
  ◆
:分岐終了
◆ラベル:移動終了
◆注釈:現在のリージョンが53番なら、移動を終了してセルフスイッチAをONにします。
◆変数の操作:#0034 【情報取得】イベントX = このイベントのマップX
◆変数の操作:#0035 【情報取得】イベントY = このイベントのマップY
◆指定位置の情報取得:【取得情報】リージョン, リージョンID, ({【情報取得】イベントX},{【情報取得】イベントY})
◆条件分岐:【取得情報】リージョン = 53
  ◆セルフスイッチの操作:A = ON
  ◆
:分岐終了
◆ウェイト:2フレーム
最後に編集したユーザー ネコタ on 2017年3月26日(日) 18:06 [ 編集 1 回目 ]
猫民のんたんのアトリエ
http://nekotaminontan.blog.fc2.com/
アイス
記事: 48
登録日時: 2017年2月19日(日) 11:49

Re: イベントを指定のリージョンへ移動させたい

投稿記事by アイス » 2017年3月22日(水) 18:54

Hi, わかさぎ

せっかくなので順に説明してみたいと思います
実現できればいいやというのであれば
一番↓にある----以下を見て下さい


リージョンにこだわる意味は何でしょう?

推測ですがイベントを指定位置に到達した時に
何かしらの変化を起こさせる方法を模索していた所、
TMMoveEx.jsの指定リージョン踏み込み時セルフスイッチ作動
を見つけられたんだと思いますが

このリージョンのせいで質問内容及び質問者さんの
考えがややこしくなってる気がします

難しく考えず特定のイベントが指定位置に到達時
何らかのイベントを実行させる場合には
並列処理で
変数の操作からそのイベントのマップX(変数1)とY(変数2)を取得し
その後条件分岐で変数1と変数2が指定されたマップの位置と同じ時
と入力してやれば良いと思います

トリガー:並列処理
◆変数の操作:#0001 イベントX = このイベントのマップX
◆変数の操作:#0002 イベントY = このイベントのマップY
◆条件分岐:イベントX = 2
◆条件分岐:イベントY = 7
◆注釈:座標2,7にイベントが来た時何かが起きる

:分岐終了

:分岐終了


んで問題の自律移動がマップ切り替え時に
再度一番目からの動きをしてしまうとの事ですが

これもリージョンで考えるから
ややこしくなってると思います

単純にその指定した位置に移動させればいいわけですから

移動ルートの設定からスクリプトコマンドで

コード: 全て選択

this.moveTowardCharacter({x: 2, y: 7})


↑指定された座標に向かって一歩進むという命令です
(この場合X2のY7の座標に向かってる)
あとはオプションで動作を繰り返すにチェック状態で
この問題は解決されると思います

次に
>できれば、イベントが通るルートもリージョン指定し
とありますが
どの程度の規模なのかにもよるんですが
要するにイベントが通るルートをこちら側で指定したい
という事なのでそうなると
上記のスクリプト命令では移動ルートが指定できません
かといって再度移動ルートを作ったら(ry
なのでここで初めてリージョンフラグが成立します

質問者さんは指定リージョン上をイベントが歩かせるように
とありますが
パっと思いついた方法はその逆で
指定リージョンをイベントが進まないようにする方法です

YEP_SaveEventLocations.jsを導入されてるとの事なので
同じくYanflyさんのYEP_RegionRestrictionsを導入すれば
指定リージョンにイベントが踏み込まないようにできるはずです

これを使えば自ずとそのイベントは指定位置に
こちらの思惑通りの移動ルートで進んでくれるかと思います

ただ上記のスクリプト命令は果てしなくバカです
(指定位置に最も短距離で行きやがる為
 見事なまでにリージョンに突撃を繰り返します)

そこで高度()な経路探索を提供するプラグインを使います
(ユーザー登録でもらえる公式プラグイン:名前ど忘れした)

このプラグインを導入することでリージョンに突撃せず
思惑通りのルートで進んでくれるかと思います

ただ途中でも言いましたが質問者さんが
どの程度の規模で指定イベントを移動させるかにもよるので
(町中であれば他のイベントにも支障が出たりetc)
その辺りが書かれていると回答者さんも
細かく回答しやすいかと思います

----------------
小規模なら
移動ルートの設定からスクリプトコマンドで

コード: 全て選択

this.moveTowardCharacter({x: 0, y: 0})

あとは動作を繰り返すだけ

大規模なら
①YEP_SaveEventLocationsで
イベント位置保持
②YEP_RegionRestrictionsで
指定リージョンに侵入を阻止
③TMMoveExで
指定リージョン侵入時セルフスイッチON
④公式プラグインの高度な経路探索プラグインで
指定座標に移動
プラグインの導入順番には気を付けた方がいいかもしれないです
(挙動がおかしければ導入順番を変えてみると良いです)
アバター
まっつUP
記事: 1155
登録日時: 2016年8月11日(木) 15:38
お住まい: タケノコ王国

Re: イベントを指定のリージョンへ移動させたい

投稿記事by まっつUP » 2017年3月22日(水) 19:08

わかさぎ様
お世話になります。
そのリージョンの座標が分かっていてかつ、そこが通行可能ならば
YEP_MoveRouteCoreを導入して
特定の座標に移動する処理を行うとよいと思います。(自律移動で十分でしょう。)
RPGで笑顔を・・・

ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup

github
https://github.com/mattuup/RPGMakerMZ
アバター
わかさぎ
記事: 9
登録日時: 2017年3月14日(火) 06:30

Re: イベントを指定のリージョンへ移動させたい

投稿記事by わかさぎ » 2017年3月22日(水) 22:39

皆様
こんばんは、レスポンスありがとうございます。
まさかこんなにも方法があるのかと目から鱗です。
また自分の思考がかなり凝り固まっていたことが分かりお恥ずかしい限りです。
皆様にご教示いただいたことをひとつひとつ試してみたいと思います!
解決致しましたらまたご報告させていただきます!
アバター
わかさぎ
記事: 9
登録日時: 2017年3月14日(火) 06:30

Re: イベントを指定のリージョンへ移動させたい

投稿記事by わかさぎ » 2017年3月23日(木) 04:14

無事解決いたしました!
アイス様の言う通り、考えがややこしくなっていました・・・。
アイス様から教えていただいた大規模のやり方と
まっつUP様の教えていただいたプラグインを組み合わせた結果、理想的な動きになりました!

①YEP_SaveEventLocations イベント位置保持
 MAPメモ欄に<Save Event Locations>

②YEP_RegionRestrictions 指定リージョンに侵入を阻止
 下記三番の自律移動するイベントが侵入しないようにする為

③YEP_MoveRouteCore 自律移動にスクリプトで座標指定
 イベントの自律移動項目のスクリプトにリージョンの座標を指定する

④TMMoveEx 指定リージョン侵入時セルフスイッチON
 イベントのメモ欄に<stepSwitchOnA:リージョンID>記載


結果:マップ移動してもイベントは位置を保持したまま、かつ障害物を避けながら目指した場所へスムーズに行くようになりました!

皆様から教えていただいた方法はどれも思いつかなかったものでしたので、とても勉強になりました。柔軟な発想や工夫に脱帽です。本当にありがとうございます。
もっと頭を柔らかくして考えていきたいと思いますが、また何か質問が出来た際はお世話になるかもしれません・・・。その際は何卒よろしくお願い致します。

お時間を頂きありがとうございました!

“MV:質問” へ戻る