【解決済】アイテムを順番通りに使用したらイベントが進むようにしたい

よしお
記事: 22
登録日時: 2021年7月28日(水) 12:01

【解決済】アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by よしお » 2021年12月14日(火) 14:35

こんにちは、度々お世話になります。よしおです。

今回はアイテムを順番通りに使用するとイベントが進むようなイベントを作りたいのですが自分で調べてみても出てこず、投稿させていただきました。

例えばオブジェクトの前で四つのアイテム(仮でA、B、C、D)を入手した状態で、ADBCの順番でアイテムを使用するとオブジェクトが動いて場所移動ができる、というような感じです。加えて言うと順番が間違っていたら間違いのテキストが表示されるようなイベントを作成したいと考えております。


自分でも試したのですが、条件分岐だと一つのアイテムを入れてしまうと場所移動してしまって思う感じにはならず、隠しアイテムを最後のアイテムCに仕込む、というのも考えたのですが間違えて選択し使用した場合になぞ解きをせずに進んでしまう可能性があるので断念しました。


拙い文章で長々と失礼しました。お手数おかけしますが、どうかご教示いただけますと幸いです。
最後に編集したユーザー よしお on 2022年1月03日(月) 10:52 [ 編集 1 回目 ]

ゆわか
記事: 299
登録日時: 2015年11月10日(火) 20:08
連絡を取る:

Re: アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by ゆわか » 2021年12月14日(火) 20:09

いくつかの方法があります。

・選択肢を使ってアイテムの使用を表現する
・アイテム選択イベントを使って使用する
・メニューからアイテム欄を開いて実際に使用する

方法はともかくとして、どうやらうまく組めてないのは「条件分岐」のようにお見受けします。

とりあえず、アイテム選択のイベントコマンドを使ってアイテムを使用し
ADBCという答えを変数にいれる方法を提案します。

1回目のアイテム選択を実行します。
取得したアイテム番号がAと同じの場合のみ、答えの変数に+1000します。
それ以外の場合は何も加算しません。

続けて2回目のアイテム選択を実行します。
Dが使用されたら+100

続けて3回目のアイテム選択を実行。
Bなら+10、

最後のアイテム選択を実行
Cなら+1とします。
正しく入力されていれば、答えの変数の中身は、1111となります。多分。

なので、この後のイベントに
答えの変数が1111か否か、という条件分岐を入れればうまく分岐できるはず。

失敗後、やり直す前に答えの変数を0にしておくのを忘れないようにね。

もし上記の方法でうまくいかない場合は、どの方法でアイテムを選択しているかというのと
実際にどんなイベントを入力したかをコピペすると、どこに問題があるかわかってもらいやすいと思います。
よしお
記事: 22
登録日時: 2021年7月28日(水) 12:01

Re: アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by よしお » 2021年12月15日(水) 15:44

ゆわかさん初めまして。返信が遅くなり申し訳ございません。

ご教示いただきありがとうございます!

一通り読んでなんとなく理解したのですが、取得したアイテム番号がAと同じの場合のみ答えの変数に+1000をどのように組めばいいのかわからず…。

念のため一つ確認しておきたいのですが、アイテム選択を実行というのはアイテム選択の処理を行うという認識であっていますでしょうか?

お手数おかけしますがご教示いただけると幸いです。
名無し蛙
記事: 308
登録日時: 2015年11月23日(月) 02:46

Re: アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by 名無し蛙 » 2021年12月21日(火) 03:29

既に解決されているかも知れませんが気になったので方法を解説しておきます。
このテのギミックは列に溜めこみ、列を判定するという考え方が重要になります。
今回は処理の流れが分かりやすいようにアクター1の名前、という文字列を利用しましょうか。
以下のスクリプトコードを利用します。

コード: 全て選択

// アクター1の名前を初期化する
$gameActors.actor(1).setName("");

// アクター1の名前に文字("A")を詰め込む
$gameActors.actor(1)._name += "A"

// アクター1の名前が4文字以上なら真を返す
4 <= $gameActors.actor(1)._name.length

①ギミックがあるマップ(指定の位置)に入ったら判定用文字列を初期化する

コード: 全て選択

◆スクリプト:$gameActors.actor(1).setName("");

②指定のアイテムを使用したらコモンイベントで個別詰め込み処理とその直後に共用判定処理を記述する。

コード: 全て選択

◆スクリプト:$gameActos.actor(1)._name += "A";
◆コモンイベント:共用判定処理

③コモンイベント「共用判定処理」では文字列のチェック及び文字数のチェックを行う

コード: 全て選択

◆条件分岐:ハロルドの名前がADBC
  ◆注釈:扉は開かれる
  ◆イベント処理の中断
  ◆
:分岐終了
◆条件分岐:スクリプト:4 <= $gameActors.actor(1)._name.length
  ◆注釈:もう一度最初からやりなおしてください
  ◆スクリプト:$gameActors.actor(1).setName("");
  ◆
:分岐終了

基本はこんな流れだと思います。
今回はアクターの名前を使って判定してますけど、変数($gameVariables)でも同様の事は出来ます。
まぁ、その辺は好みですね。
ゆわか氏の方法、というか文字列・スクリプトコードを使わずに
数値弄りでこの流れを再現する事も可能ですけど(試行カウンターで桁移動してから判定用変数に格納?)
あまり直感的ではないので逆に初心者にはオススメ出来ません。
ゆわか
記事: 299
登録日時: 2015年11月10日(火) 20:08
連絡を取る:

Re: アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by ゆわか » 2021年12月21日(火) 09:51

お返事に気づくの遅くなってすみません。
名無し蛙 さま、フォローありがとうございます。

一応、ご質問へ回答させていただきますが
どちらでも、自分にあった方法で実装してくださいね。

>アイテム選択を実行というのはアイテム選択の処理を行うという認識
はいそうです。

>取得したアイテム番号がAと同じの場合のみ答えの変数に+1000
例えば、アイテムAのIDが1の場合、以下のようになります。

◆アイテム選択の処理:アイテム番号取得, 通常アイテム
◆条件分岐:アイテム番号取得 = 1
◆変数の操作:#0002 答えの数 += 1000

:分岐終了
◆条件分岐:アイテム番号取得 = 0
何も選択されず、キャンセルされた時の動作を入れる。
中断するとか、最初からやり直すとか。

:分岐終了

以上です。
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by ムノクラ » 2021年12月21日(火) 19:56

先輩方が回答しているので、不要とは思いましたが、
・もうちょっとシンプルなやり方がありそう
・書かれてないけど、こういうことをやりたいのかな?
という過去の事例もあり、サンプルが下記でダウンロードできるのを紹介いたします。

「魔女の家」の人形パズルっぽいイベントの作り方(アイテム選択の処理の使い方) #RPGツクールMZ #RPGツクールMV
https://fungamemake.com/archives/13692
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
よしお
記事: 22
登録日時: 2021年7月28日(水) 12:01

Re: アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by よしお » 2021年12月22日(水) 08:55

返信が遅くなりまして申し訳ございません。

名無し蛙さん、ゆわかさん、ムノクラさんありがとうございます!
ずっとわからなくてぐるぐるしていたので本当に助かりました…!

すべてのやり方を試してみて自分に合ったものを組み込みたいと思います。

できたできないにかかわらず試したらまたここに送信したいと思いますその時はお手すきの際にでもご教示いただけると幸いです。
よしお
記事: 22
登録日時: 2021年7月28日(水) 12:01

Re: アイテムを順番通りに使用したらイベントが進むようにしたい

投稿記事by よしお » 2022年1月03日(月) 10:52

あけましておめでとうございます!遅くなりました!申し訳ございません...!!

ご教示いただいた方法で解決いたしましたのでご報告させていただきます!
名無し蛙さん、ゆわかさん、ムノクラさん本当にありがとうございました!

“MV:質問” へ戻る