ページ 11

【解決済み】「カスタムメニュー作成プラグイン」でパーティメンバーを表示しメモ欄を参照したい

Posted: 2020年7月17日(金) 01:56
by 論理イヌ
【やりたいこと】
「カスタムメニュー作成プラグイン」(https://triacontane.blogspot.com/2020/03/blog-post.html)を使っています。

一覧に「パーティにいるメンバー」の「HP」や「メモ欄」の値を表示したいと思っています。
しかし「一覧取得スクリプト」で「パーティメンバー」を選択すると、itemに「メモ欄」のデータがありません。
逆に「一覧取得スクリプト 」で「データベースのアクター」を選択すると、「HP」が入手できませんし、全員が表示されています。

「パーティにいるメンバー」の「メモ欄」を取得する方法か、
「データベースのアクター」のうち、「パーティにいるメンバー」に絞り込めるような方法はないでしょうか?

【試したこと】
・「一覧取得スクリプト 」で「データベースのアクター」にしたうえで、
下記をフィルターに入れてみましたが、効果がないようでした。

コード: 全て選択

//アクターがパーティーにいるか
$gameParty.members().contains($gameActors.actor(item.id))


・「一覧取得スクリプト 」で「データベースのアクター」にしたうえで、
「項目描画スクリプト 」に下記を入れてみましたが、描画されませんでした。

コード: 全て選択

$dataActors[item.id].meta['value']


アドバイスお願いいたします。

Re: 「カスタムメニュー作成プラグイン」でパーティメンバーを表示しメモ欄を参照したい

Posted: 2020年7月17日(金) 12:09
by 剣崎 宗二
気になった部分だけ先に。

・「一覧取得スクリプト 」で「データベースのアクター」にしたうえで、
「項目描画スクリプト 」に下記を入れてみましたが、描画されませんでした。


これ、メモ欄には

コード: 全て選択

<value:テスト値>

のように入っていたのでしょうか?

そうではなくメモ欄の内容を丸ごと取得したいのであれば、

コード: 全て選択

$dataActors[item.id].note
として見てください。

Re: 「カスタムメニュー作成プラグイン」でパーティメンバーを表示しメモ欄を参照したい

Posted: 2020年7月17日(金) 13:57
by 論理イヌ
>剣崎 宗二さん

情報不足しておりすみません。

アクターのメモ欄にある記述の一例です。

コード: 全て選択

<iType:follow>
<sex:male>
<pet:dog,cat>


「一覧取得スクリプト」を「データベースのアクター」にすればmetaで情報を取得できますが、
やりたいこととしては、「仲間になったキャラ」のメモ欄に記述してある様々な情報を、
カスタムメニュー生成プラグインでfilterかけたり、表示したりしたいと思っています。

(1)データベースのアクターを取得するスクリプト

コード: 全て選択

$dataActors.filter(data => !!data);


(2)パーティメンバーを取得するスクリプト

コード: 全て選択

$gameParty.members();


(1)ですとmetaの情報が取得できるのですが、
(2)にすると、meta情報がありません。

Re: 「カスタムメニュー作成プラグイン」でパーティメンバーを表示しメモ欄を参照したい

Posted: 2020年7月17日(金) 18:18
by 剣崎 宗二
未だにそちらのやりたい事は完全に私には理解できてませんが、

「データベースのアクター」のうち、「パーティにいるメンバー」に絞り込めるような方法はないでしょうか?

コード: 全て選択

$gameParty.members();


と言う事から察するに、欲しいのはこう言う物ではないでしょうか。

コード: 全て選択

$gameParty.members().map(ac => { return ac ? ac.actor() : null });

Re: 「カスタムメニュー作成プラグイン」でパーティメンバーを表示しメモ欄を参照したい

Posted: 2020年7月17日(金) 20:17
by 論理イヌ
>剣崎 宗二さん

うまく伝えられず、申し訳ないです。

やりたいことはこの2つです。
(1)パーティメンバーの一覧を抽出する
(2)抽出したアクターのメモ欄や現在のHPやステートを表示する

(1)を達成するため、抽出条件に下記の(a)を設定すると、
 取得できるデータ(json)にメモ欄がありません。

(2)を達成するために、抽出条件に(b)を設定すると、
 パーティメンバー以外が抽出されてしまううえ、取得できるデータにHPやステートはありません。

(1)と(2)の両方を実現する方法を模索しておりますが、
ツクールの仕様やプラグインの仕様の理解が追いついておらず、
手探りしようにもどうすればいいかわからず……。
何かヒントだけでもいただければと思います。



(a)
・パーティメンバーを取得するスクリプト

コード: 全て選択

$gameParty.members();

取得できたデータ

コード: 全て選択

{
   "_hp": 450,
   "_mp": 90,
   "_tp": 0,
   "_hidden": false,
   "_paramPlus": [
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0
   ],
   "_states": [],
   "_stateTurns": {},
   "_stateSteps": {},
   "_buffs": [
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0
   ],
   "_buffTurns": [
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0
   ],
   "_actions": [],
   "_speed": 0,
   "_result": {
      "used": false,
      "missed": false,
      "evaded": false,
      "physical": false,
      "drain": false,
      "critical": false,
      "success": false,
      "hpAffected": false,
      "hpDamage": 0,
      "mpDamage": 0,
      "tpDamage": 0,
      "addedStates": [],
      "removedStates": [],
      "addedBuffs": [],
      "addedDebuffs": [],
      "removedBuffs": []
   },
   "_actionState": "",
   "_lastTargetIndex": 0,
   "_animations": [],
   "_damagePopup": false,
   "_effectType": null,
   "_motionType": null,
   "_weaponImageId": 0,
   "_motionRefresh": false,
   "_selected": false,
   "_actorId": 23,
   "_name": "ウィリアム",
   "_nickname": "",
   "_classId": 3,
   "_level": 1,
   "_characterName": "",
   "_characterIndex": 0,
   "_faceName": "",
   "_faceIndex": 0,
   "_battlerName": "",
   "_exp": {
      "3": 0
   },
   "_skills": [],
   "_equips": [],
   "_actionInputIndex": 0,
   "_lastMenuSkill": {
      "_dataClass": "",
      "_itemId": 0
   },
   "_lastBattleSkill": {
      "_dataClass": "",
      "_itemId": 0
   },
   "_lastCommandSymbol": "",
   "_profile": ""
}



(b)
・教えていただいたコード

コード: 全て選択

$gameParty.members().map(ac => { return ac ? ac.actor() : null });

・データベースのアクターを取得するスクリプト

コード: 全て選択

$dataActors.filter(data => !!data);

取得できたデータ

コード: 全て選択

{
   "id": 23,
   "battlerName": "",
   "characterIndex": 0,
   "characterName": "",
   "classId": 3,
   "equips": [],
   "faceIndex": 0,
   "faceName": "",
   "traits": [],
   "initialLevel": 1,
   "maxLevel": 99,
   "name": "ウィリアム",
   "nickname": "",
   "note": "<iType:chara>\n<agesex:waku_m>\n<fpict:3>",
   "profile": "",
   "meta": {
      "iType": "chara",
      "agesex": "waku_m",
      "fpict": "3"
   }
}

Re: 「カスタムメニュー作成プラグイン」でパーティメンバーを表示しメモ欄を参照したい

Posted: 2020年7月17日(金) 20:41
by 剣崎 宗二
まずこちら。

(2)を達成するために、抽出条件に(b)を設定すると、
 パーティメンバー以外が抽出されてしまううえ、取得できるデータにHPやステートはありません。


コード: 全て選択

$gameParty.members().map(ac => { return ac ? ac.actor() : null });

これで取れるデータにHPやステートが無いのは予想通りですが、本当にパーティメンバー以外も抽出されてるのですか?
(ゲームメンバーの実データが抽出されるはずです。私の方では「パーティメンバー以外が抽出」される現象が再現できませんでした。
なので、確認ですが、パーティメンバーとは戦闘メンバーの事ではないと解してます。戦闘メンバーのみを出したい場合はmembersをbattleMembersに差し替えてください)

----

(1)と(2)の両方を実現する方法を模索しておりますが

どういうコマンドで個別のhpなどを取得しようとしているのかは分かりませんので一例ですが、

コード: 全て選択

$gameParty.members()[0].hp

で現在HPが取れる状態にあるとしたら、metaを取りたい場合は同じように

コード: 全て選択

$gameParty.members()[0].actor().meta

とすれば宜しいかと。
単純に.hpの部分を.actor().metaに差し替える方式です。

Re: 「カスタムメニュー作成プラグイン」でパーティメンバーを表示しメモ欄を参照したい

Posted: 2020年7月17日(金) 21:28
by 論理イヌ
>剣崎 宗二さん

結論から申し上げるとできました!!

まず、抽出条件は正しく動いていました。
システムの初期パーティに、意図しないキャラが初期登録されており、それで抽出できていないと勘違いしておりました。

表示するmetaですが、下記のコードで表示することができました。

コード: 全て選択

this.drawText(`${$gameActors.actor(item.id).hp}`, r.x, r.y, r.width, 'right'); // 任意のテキスト描画(制御文字変換なし。右揃え)


プラグインでは下記のような表示用のスクリプトが用意されており、
私はずっと1行目で表示させようとしていましたが、
2行目で表示させたところ、あっさり表示されました。

コード: 全て選択

誤)this.drawTextEx(`${$gameActors.actor(item.id).hp}`, r.x, r.y, r.width); // 任意のテキスト描画(制御文字変換あり)
正)this.drawText(`${$gameActors.actor(item.id).hp}`, r.x, r.y, r.width, 'right'); // 任意のテキスト描画(制御文字変換なし。右揃え)



また、こちらのコードを教えてくださりありがとうございます。

コード: 全て選択

$gameParty.members()[0].actor().meta

スクリプト紹介サイト等で見たことのない、初めて見る表示の仕方です。
こういった方法で取得できると知ることができて、勉強になりました。

お付き合いいただきありがとうございました!!