【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

けいのすけ
記事: 49
登録日時: 2022年11月02日(水) 04:59

【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by けいのすけ »

https://plugin.fungamemake.com/archives/23762

上記のトリアコンタン様カスタムメニュー作成プラグインでアクターの装備を選択肢にしたいと考えています。

アクター一覧のウインドウを作ってアクターを選ぶ事は出来るんですがその選んだアクターの装備一覧がウインドウに出てきません。
「一覧取得スクリプト」の項目で
>this._actor.equips(); // メインメニューで選択したアクターの装備品
もしくは
>$gameParty.members()[v(1)].weapons(); // 変数[1]のPTメンバーの装備武器
というのがあるのですが上のメインメニューで選択したアクターというのがアクター一覧で選択したアクターにならず下の変数メンバーの方も[v(1)]の1を該当する変数に変えても反映されず…

一覧取得スクリプトの項目のヘルプに「詳細ウインドウ識別子を指定した場合は無効」とあるのでここの設定をミスってるのかとも思いますがコレは一覧ウインドウIDという項目の事かと思いそこは設定無しにしてあるんですが…

どなたかお知恵をお貸し下さい……。
最後に編集したユーザー けいのすけ [ 2022年11月21日(月) 21:40 ], 累計 1 回
けいのすけ
記事: 49
登録日時: 2022年11月02日(水) 04:59

Re: トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by けいのすけ »

viewtopic.php?t=12700

上記のトピックを参考にさせて頂き希望が叶いました。
ありがとうございました。
参考までに以下は実際のスクリプトです。


一覧取得スクリプトに↓を入れる
$gameParty.members()[$gameVariables.value(1)].armors(); // パーティ変数(1)番目のアクターの装備防具

項目描写スクリプトに↓を入れる
this.drawItemName(item, r.x, r.y, r.width); // アイテムやスキルの名称

この項目描写スクリプトってのを設定しないとダメだったようです。
けいのすけ
記事: 49
登録日時: 2022年11月02日(水) 04:59

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by けいのすけ »

ところで一つ疑問が出たんですが

一覧表示される項目で装備品全体>equips();の時は装備なしのスロット分の空きスペースも表示されてるんですが種類別の時、今回の例だと>armors();の時は空きスロットを無視して防具だけ一覧に並べる感じで、これだと選択時のindexと装備スロットIDが一致しなくなってしまいますね。

防具だけの一覧で且つ空きスロットも考慮した配置(>equips();の時のような)にする事は出来ませんでしょうか?
ご存知の方いらっしゃいましたら教えて下さい。
ecf5DTTzl6h6lJj02
記事: 752
登録日時: 2018年12月23日(日) 13:55

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by ecf5DTTzl6h6lJj02 »

こんにちは。
けいのすけ さんが書きました:ところで一つ疑問が出たんですが

一覧表示される項目で装備品全体>equips();の時は装備なしのスロット分の空きスペースも表示されてるんですが種類別の時、今回の例だと>armors();の時は空きスロットを無視して防具だけ一覧に並べる感じで、これだと選択時のindexと装備スロットIDが一致しなくなってしまいますね。

防具だけの一覧で且つ空きスロットも考慮した配置(>equips();の時のような)にする事は出来ませんでしょうか?
ご存知の方いらっしゃいましたら教えて下さい。
装備品を選択して、選択した装備品によって処理を分岐させたいという場合、
選択時のIndexと装備スロットIDの一致を気にする必要性はないと思います。
インデックス格納変数の下に、選択項目格納変数という項目があるはずです。
001.jpg
001.jpg (49.47 KiB) 閲覧された回数 1753 回
ここで、変数を指定すると、その変数に、選択した装備品のデータ(オブジェクト)が格納されます。
これを使って、選択した装備品が、一致するか条件分岐すれば良いです。
例えば、選択項目格納変数を 0008 番に設定して、防具ID 0011 番のアイテムが選択されたかで条件分岐する場合、
装備品選択のカスタムメニューを呼び出した後に、条件分岐のスクリプトで、

コード: 全て選択

$gameVariables.value(8) === $dataArmors[11]
と書けば分岐できるはずです。
けいのすけ
記事: 49
登録日時: 2022年11月02日(水) 04:59

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by けいのすけ »

ecf5DTTzl6h6lJj02さんありがとうございます。
ただ、選択肢の後に

$gameActors.actor(アクターID).changeEquipById(装備タイプ, 装備品)

のようにして該当装備の変更を行いたいので装備スロットIDが欲しいんですよね…。
ecf5DTTzl6h6lJj02
記事: 752
登録日時: 2018年12月23日(日) 13:55

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by ecf5DTTzl6h6lJj02 »

けいのすけ さんが書きました:ecf5DTTzl6h6lJj02さんありがとうございます。
ただ、選択肢の後に

$gameActors.actor(アクターID).changeEquipById(装備タイプ, 装備品)

のようにして該当装備の変更を行いたいので装備スロットIDが欲しいんですよね…。
changeEquipById(装備タイプ, アイテムID) を使って装備品を変更するの場合、
必要なのは装備スロットIDではなく装備タイプです。
変更するときは、変更するアイテムから装備タイプを引っ張ってくればいいだけのはずで、
例えば、防具ID 0046 番のアイテムと変更する場合には、

コード: 全て選択

changeEquipedById($dataArmors[46].etypeId, 46)
で変更してしまえばよく、装備スロットIDを取得する必要はないです。

選択したアイテムの装備スロットが変更するアイテムの装備スロットと一致するかを判断したいのだという場合でも、その装備スロットに装備できる装備タイプが決まっている関係上、
変更する装備品と、選択した装備品の装備タイプが一致しているかを判断すればよく、
例えば、選択項目核の変数 が 0008番、 変更するのが防具ID 0046 番だとした場合は、

コード: 全て選択

$gameVariables.value(8).etypeId === $dataArmors[46].etypeId
で、判定できるので、やはり、装備スロットIDを必要とはしないです。

ここまでの、質問の内容からだと、『装備スロットIDを必要とはしない』という結論に至りますが、
具体的に、どういったイベントの流れで、装備品の変更を行いたいのでしょう。
それによっては、装備品スロットIDが必要なのか否かの判断が変わってきます。
けいのすけ
記事: 49
登録日時: 2022年11月02日(水) 04:59

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by けいのすけ »

度々ご返信いただきありがとうございます。
理解が足りずすみません。

現状Ruたん様の同じ名前の装備タイプなら同じものを装備できるように - Torigoya_SameEquipType.jsを利用させて頂いてまして同じ装備タイプのアイテムを複数装備したいと考えてます。

https://plugin.fungamemake.com/archives/27487

装備タイプとしては
武器
道具
道具
道具
道具
道具


という感じで武器以外のアイテムは全て同じ装備タイプですがスロットの位置は決まっていない状態です。


ちなみに素人考えで装備スロットIDが分からなくても該当アクターの装備品を全て変数に取得してから条件分岐で先に選択した装備を見つけられるかな?と思い(カスタムメニュー作成スクリプトの)選択項目格納変数の値からアクターIDを調べようと試したんですが…

選択項目格納変数の値がアイテムの時は
$gameVariables.value(1).name
とか
$gameVariables.value(1).id
でIDや名称を取得できたんですが選択項目格納変数の値がアクターの時にIDが取得できませんでした。

アクターのデータは取得方法が違うんでしょうか……

追記
アクターIDは $gameVariables.value(1).actorId()  で取得できました。
最後に編集したユーザー けいのすけ [ 2022年11月23日(水) 15:39 ], 累計 1 回
けいのすけ
記事: 49
登録日時: 2022年11月02日(水) 04:59

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by けいのすけ »

追記ですみません。ちょっとつまづいた箇所の質問です。

教えて頂いたコードのchangeEquipedById($dataArmors[46].etypeId, 46)

changeEquiped の「ed」って必要ですか?

$gameActors.actor(アクターID).changeEquipById(装備タイプ, 装備品)
のコードだとEquipedではなくてEquipなんですが…
ecf5DTTzl6h6lJj02
記事: 752
登録日時: 2018年12月23日(日) 13:55

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by ecf5DTTzl6h6lJj02 »

けいのすけ さんが書きました:追記ですみません。ちょっとつまづいた箇所の質問です。

教えて頂いたコードのchangeEquipedById($dataArmors[46].etypeId, 46)

changeEquiped の「ed」って必要ですか?

$gameActors.actor(アクターID).changeEquipById(装備タイプ, 装備品)
のコードだとEquipedではなくてEquipなんですが…
失礼しました。
ご指摘の通り、 changeEquipById が正しいです。
ただ今回の場合、装備スロットIDが必要だとわかりましたので、こちらではなく、
changeEquip(装備スロットID, 装備品) のメソッドで装備変更することになりますが。
けいのすけ さんが書きました: 現状Ruたん様の同じ名前の装備タイプなら同じものを装備できるように - Torigoya_SameEquipType.jsを利用させて頂いてまして同じ装備タイプのアイテムを複数装備したいと考えてます。

装備タイプとしては
武器
道具
道具
道具
道具
道具


という感じで武器以外のアイテムは全て同じ装備タイプですがスロットの位置は決まっていない状態です。
確かに、この場合だと、装備スロットIDが必要になりそうですね。
また、空欄に装備することも考えて空欄を表示する必要もあります。
一覧取得スクリプトの内容を

コード: 全て選択

$gameParty.members()[$gameVariables.value(1)].equips().filter((equip, index) => index > 0);
に変更してみてください。
武器以外の装備スロットの内容が空欄含めて列挙されるはずです。
ただ、カスタムメニュー作成プラグインに不具合があるようで、
空欄の項目を描画したり、選択したりする際に、エラーが出てしまうので、
JavaScriptを編集できるソフト(メモ帳やテキストエディタでもできますがお勧めはVisualStudioCode)を使用して、
プラグインに以下の変更を加えてください。
(元のファイルのバックアップはしっかりとっておいてください)
  1. 2018行目あたりにあるisCommandItem というメソッドの定義の中の

    コード: 全て選択

    return item.Text;

    コード: 全て選択

    return item ? item.Text : undefined;
    に変更してください。
  2. 1971行目あたりにある playOkSound というメソッドの定義の中の

    コード: 全て選択

    if (item.OkSound) {

    コード: 全て選択

    if (item && item.OkSound) {
    に変更してください。
    (PlayOkSoundメソッドの定義は2つありますが、1971行目あたりから始まるほうです)
インデックス格納変数 に +1 した値が、選択した装備スロットIDになるはずです。
キャンセルした場合、インデックス格納変数に -1 が入るということにご注意ください。
ちなみに素人考えで装備スロットIDが分からなくても該当アクターの装備品を全て変数に取得してから条件分岐で先に選択した装備を見つけられるかな?と思い(カスタムメニュー作成スクリプトの)選択項目格納変数の値からアクターIDを調べようと試したんですが…

選択項目格納変数の値がアイテムの時は
$gameVariables.value(1).name
とか
$gameVariables.value(1).id
でIDや名称を取得できたんですが選択項目格納変数の値がアクターの時にIDが取得できませんでした。

アクターのデータは取得方法が違うんでしょうか……
アクターのデータには、データベース上のアクターのデータを扱うものと、
ゲーム内でのアクターの状態を扱うものの2種類があり、
選択項目格変数に入ってくるものは、後者です。
前者の場合は、上記のスクリプトで取得できますが、
後者の場合、アクター名は

コード: 全て選択

name()
アクターIDは

コード: 全て選択

actorId()
で取得する必要があります。
(こうじゃないやり方もありますが、プログラムの作法的に、こうしたほうが良いです)
最後に編集したユーザー ecf5DTTzl6h6lJj02 [ 2022年11月23日(水) 19:36 ], 累計 1 回
けいのすけ
記事: 49
登録日時: 2022年11月02日(水) 04:59

Re: 【解決済み】トリアコンタン様カスタムメニュー作成で装備の選択肢を作りたい

投稿記事 by けいのすけ »

いろいろ詳しく教えて頂いてありがとうございます!
四苦八苦してますが少しづつ形になってきました。

最終的にはドラクエみたいにアクター一人一人が道具を個別に持てて使ったり装備したり出来るようにしたいと考えてます。
お力添え本当にありがとうございます!
返信する

“MV:質問”に戻る