【解決済み】「SceneCustomMenu」でアイテムを使用する方法

ぼた餅
記事: 187
登録日時: 2016年7月17日(日) 20:22

【解決済み】「SceneCustomMenu」でアイテムを使用する方法

投稿記事by ぼた餅 » 2020年8月23日(日) 16:06

こんにちは^_^/

いつもお助けいただきありがとうございます。
連日での質問になりますがご容赦くださいませ。


ざっくり言えば、トリアコンタンさん制作「SceneCustomMenu」にて所持アイテムの画面を1から作り直そうと思いました。
武器防具の種類分け等はできたのですが、【選択してアイテムを使用する】という動作のみが実現できておりません。

方法は問いませんので、デフォのアイテム画面みたく選択して使用するにはどう記述すればいいのか教えていただけないでしょうか?


よろしくお願い申し上げます。
最後に編集したユーザー ぼた餅 on 2020年9月03日(木) 22:15 [ 編集 1 回目 ]

アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: 「SceneCustomMenu」でアイテムを使用する方法

投稿記事by にゃたま » 2020年8月24日(月) 13:50

ぼた餅様

私もこちらのプラグイン使わせてもらってますが、
このプラグインはオリジナルのシステムを作成するのは便利ですが
単純に見た目を変えたいだけならトリアコンタン様のウィンドウデザインのプラグイン等で
作ったほうがはるかに楽です。

尚、このプラグインを使ってツクールのアクターやアイテムのデータベースを利用するなら
データ構造を理解していないと難しいと思います。やや玄人向けのプラグインであると思います。
なのでコンソールで$gameActorsや$dataItemsを見ながらデータ内を参照しなければなりません。

例えばアイテムでキャラクターを回復させたいなら$dataItemsからアイテムの情報をひっぱってきて
そのアイテムの効果に回復の効果(code:11)が含まれているのかを参照します。
回復の効果が含まれていればその値(value1や2)でアクターのHPを増減させるコードを記述します。
ただし単純にHPを加算させただけでは最大値を超えてしまうので
最大値を超えないように条件分岐を追加する必要もあります。
なのでなにもかも内部的な動作をスクリプトを駆使して追加しなくてはなりません。
アイテムを使用して何がしたいのかによるかと思います。

とりあえず以下にサンプルとしてコードを記述しました。
これはアイテムが使用されたときに実行されるコモンイベントです。
ゲーム変数2には選択アイテムのインデックス、
ゲーム変数4には選択アクターのインデックスが含まれていることが前提です。

コモンイベントも動作するようにしてありますがこれ以外の動作は
ご自身で追加してみてください。

1から10まで自分で動作を記述しなくてはなりませんが
できれば思い通りのものがつくれると思います。頑張ってください。

コード: 全て選択

◆スクリプト:$gameTemp._selectItem = $gameParty.allItems()[$gameVariables.value(2)];
◆スクリプト:$gameTemp._selectActor = $gameActors._data[$gameParty._actors[$gameVariables.value(4)]];
◆変数の操作:#0003 アイテム名 = $gameTemp._selectItem.name
◆変数の操作:#0005 アクター名 = $gameTemp._selectActor._name
◆スクリプト:this._i = 0;
◆文章:なし, ウィンドウ, 下
:  :\V[5]に\V[3]を使用しますか?
◆選択肢の表示:はい, いいえ (ウィンドウ, 右, #1, #2)
:はいのとき
  ◆ループ
    ◆条件分岐:スクリプト:$dataItems[$gameTemp._selectItem.id].effects[this._i].code === 11
      ◆スクリプト:$gameActors._data[$gameTemp._selectActor._actorId]._hp +=
      :     :$dataItems[$gameTemp._selectItem.id].effects[this._i].value2;
      :     :$gameActors._data[$gameTemp._selectActor._actorId]._hp +=
      :     :$gameActors._data[$gameTemp._selectActor._actorId].mhp *
      :     :$dataItems[$gameTemp._selectItem.id].effects[this._i].value1;
      ◆スクリプト:if($gameActors._data[$gameTemp._selectActor._actorId]._hp >
      :     :  $gameActors._data[$gameTemp._selectActor._actorId].mhp){
      :     :  $gameActors._data[$gameTemp._selectActor._actorId]._hp =
      :     :  $gameActors._data[$gameTemp._selectActor._actorId].mhp;
      :     :}
      ◆SEの演奏:Decision1 (90, 100, 0)
      ◆
    :分岐終了
    ◆条件分岐:スクリプト:$dataItems[$gameTemp._selectItem.id].effects[this._i].code === 44
      ◆スクリプト:this.setupChild($dataCommonEvents[$dataItems[$gameTemp._selectItem.id].effects[this._i].dataId].list, 0);
      ◆
    :分岐終了
    ◆スクリプト:this._i++;
    ◆条件分岐:スクリプト:this._i >= $dataItems[$gameTemp._selectItem.id].effects.length
      ◆ループの中断
      ◆
    :分岐終了
    ◆
  :以上繰り返し
  ◆
:いいえのとき
  ◆
:分岐終了
ぼた餅
記事: 187
登録日時: 2016年7月17日(日) 20:22

Re: 「SceneCustomMenu」でアイテムを使用する方法

投稿記事by ぼた餅 » 2020年8月25日(火) 01:16

にゃたまさん

こんばんは。
返信ありがとうございます。

仕事でしばらくパソコン触れないので週末に試してみますね。
実現できるかどうか楽しみでわくわくです(^o^)
ぼた餅
記事: 187
登録日時: 2016年7月17日(日) 20:22

Re: 「SceneCustomMenu」でアイテムを使用する方法

投稿記事by ぼた餅 » 2020年8月30日(日) 19:30

本日試しました。

ありがとうございます!
無事アイテム処理の挙動を実現できました。


ただ一つだけどうしてもできないことがありまして…

コード: 全て選択

$gameTemp._selectItem = $gameParty.allItems()[$gameVariables.value(1)];

これで変数の並び順の所持アイテムを取得できるのは理解できました。
しかしプラグインのパラメータ「フィルタスクリプト」にて【メモ欄に<xxx>】と対象を絞っている場合はどう記述すればいいのでしょうか?
上記のままですとメモ欄が無視されてしまいます。


程度の低い質問で恐縮ですが、何卒ご教示お願い申し上げます。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: 「SceneCustomMenu」でアイテムを使用する方法

投稿記事by にゃたま » 2020年9月01日(火) 00:59

ぼた餅様

お疲れ様です。返信を見るのが遅くなりすみません。

リストのパラメータは以下のように設定されているでしょうか?
一覧取得スクリプト:$gameParty.allItems(); // 所持アイテム
フィルタスクリプト:item.meta['value']; // メモ欄に<value>の記述がある

このときアイテムのメモ欄に<value>とするとそのアイテムのみが抽出されるかと思います。
つまりフィルタスクリプトの条件に合わないものは表示されないはずです。
なので所持している全アイテムのメモ欄に<value>が存在しなければ何も表示されないかと思います。

あと気になったところは、$gameTemp._selectItem = $gameParty.allItems()[$gameVariables.value(1)];
としていますがゲーム変数1番に選択アイテムインデックスを入れているということでよろしいでしょうか?
私のサンプルでは2番になっています。

ぼた餅様のようにゲーム変数1を指定したなら「インデックス格納変数」には1を指定する必要があります。
上記念の為ご確認ください。
ecf5DTTzl6h6lJj02
記事: 455
登録日時: 2018年12月23日(日) 13:55

Re: 「SceneCustomMenu」でアイテムを使用する方法

投稿記事by ecf5DTTzl6h6lJj02 » 2020年9月02日(水) 14:34

こんにちは。
横から失礼します。

インデックス格納変数に格納される数値はカーソルのインデックス(カーソル位置)です。
今回のようにフィルタをかけている場合に対して、

コード: 全て選択

$gameParty.allItems()[$gameVariables.value(インデックス格納変数のID)];

という形で、使用したアイテムの情報を引っ張ってくると、インデックスの番号が一致せず、間違ったアイテムの情報を引っ張ってきてしまう状況があり得ます。
使用アイテムの情報を取得する際にも、フィルターをかけなければいけません。

コード: 全て選択

$gameParty.allItems().filter(item=>item.meta['フィルタに使うメタの名前'])[$gameVariables.value(インデックス格納変数のID)];

として、使用アイテム情報を取得する必要があります。
また、$gameParty.allItems()になっている部分は、
使っている一覧取得スクリプトに合わせて、コードを変更してください。
(表示するのが武器や防具の時にallItemsで引っ張ってくると、正しく取得できませんので)
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: 「SceneCustomMenu」でアイテムを使用する方法

投稿記事by にゃたま » 2020年9月02日(水) 15:11

ecf5DTTzl6h6lJj02様

うっかりしていました。
確かにフィルタをかけた場合には抽出するアイテム情報にもコモンイベント内で
フィルタをかける必要があることを失念していました。

フィルタをかけた後の動作確認をおざなりにしていました。
大変失礼しました。フォローありがとうございます。

追記
余談ですがこのプラグインはインデックスが変数に格納されるという点で
やはり玄人向けなんだな…と思います。
アロー関数は正直なところ知らなかったのでこれが使いこなせないと
フィルタスクリプトの構文は書きにくいかな…と思ったり。
ということでアロー関数勉強しておきます。
選択したアイテムオブジェクトがそのままゲーム変数に格納されたほうが
わかりやすい感じもしますね…それはそうとインデックスも必要ですが。
ぼた餅
記事: 187
登録日時: 2016年7月17日(日) 20:22

Re: 「SceneCustomMenu」でアイテムを使用する方法

投稿記事by ぼた餅 » 2020年9月03日(木) 22:15

にゃたまさん、ecf5DTTzl6h6lJj02さん

返信が大変遅くなり申し訳ございません。
時間ができ、たった今確認いたしました。
私の言葉足らずな説明が途中で混乱を招いた点に関しましてはお詫び申し上げます。


試したところ求めていた挙動が実現できました。
取得の際にフィルターをかけるんですね、勉強になります。

お二方のご協力のおかげで希望ぴったりの物が完成しました!
丁寧でわかりやすい説明をいただきありがとうございます!

“MV:質問” へ戻る