【解決済み】現在装備している武器、防具のアイテムIDを取得するスクリプトについて

ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

【解決済み】現在装備している武器、防具のアイテムIDを取得するスクリプトについて

投稿記事by ま~くん » 2017年8月21日(月) 21:59

いつもお世話になっています。

メニュー画面-装備変更画面で、現在装備している武器、防具のアイテムIDを取得するスクリプトを教えてほしいです。
また装備を変更する段階で、変更しようとする装備を選択した場合(選択されたアイテムが点滅している場合)の、
アイテムIDを取得するスクリプトも教えてほしいです。

現在装備している武器、防具のアイテムIDを取得するスクリプトなんですけど、以下のトピックを参考にしてみました。
でも一つ前に装備していたアイテムIDが取得されているみたいで、うまく動作しません。
$gameActors._data[1]._equips[0]._dataClass
$gameActors._data[1]._equips[0]._itemId

アクターの装備IDを変数に代入したい
http://tm.lucky-duet.com/viewtopic.php?t=2098

どうぞよろしくお願いします。
最後に編集したユーザー ま~くん on 2017年8月24日(木) 19:35 [ 編集 3 回目 ]

アバター
しぐれん
記事: 973
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトを教えてほしいですにゃ~

投稿記事by しぐれん » 2017年8月21日(月) 22:13

現在装備している装備品はactor.equips()[装備の位置]で取得できます。
0だと武器が返ってくるはずです。

選択しようとして点滅しているあたりは、Scene_EquipおよびEquip関連のWindowにあります。
確かScene_Equipにある_slotWindow.index()で取れたはずです。
クラスとしてはWindow_EquipSlotですね。

なお、調べる手間を小さくするためにRPGMakerMV Intellisenseがあると、早く解決すると思います。
http://ntgame.wpblog.jp/2017/08/04/post-718/
現在、プラグイン依頼はお休み中です。
ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトについて

投稿記事by ま~くん » 2017年8月22日(火) 11:58

しぐれんさん、回答ありがとうです。

回答の内容がむつかしくて半分くらいしかわからないです。
教えてもらったツール使ってもっと勉強します。
最後に編集したユーザー ま~くん on 2017年8月24日(木) 19:14 [ 編集 1 回目 ]
ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトについて

投稿記事by ま~くん » 2017年8月23日(水) 13:22

いつもお世話になってます。

現在装備している武器、防具のアイテムIDを取得するスクリプトは、
$gameActors._data[1]._equips[0]._dataClass
$gameActors._data[1]._equips[0]._itemId
でうまくいきそうです。
なんか勘違いしていました。

でも変更しようとする装備を選択した場合がうまくいきません。
いろいろためしてるんですけど、
「Cannot read property 'index' of undefined」
ってエラーでぜんぜん進まないです。
Window_EquipStatus.prototype.drawNewParam関数を書き換えたいんですけど、
この関数のなかに書いたらいけなかったんでしょうか?
最後に編集したユーザー ま~くん on 2017年8月24日(木) 19:14 [ 編集 1 回目 ]
アバター
剣崎 宗二
記事: 680
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトを教えてほしいですにゃ~

投稿記事by 剣崎 宗二 » 2017年8月23日(水) 14:43

お疲れ様ですにゃ。
具体的に何がしたいのか分かりにくいですにゃ。にゃので、
「Window_EquipStatus.prototype.drawNewParam関数内で、現在選択している/装備しようとしている武器のIDを取得したいにゃ~」
と質問を定義させて頂きますにゃ。

その場合、
this._tempActor.equips()[0]._itemId
をお試しくださいにゃ。

尚、0は武器の場合ですにゃ。他の装備の場合はスロットIDを入れてくださいにゃ。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトについて

投稿記事by ま~くん » 2017年8月23日(水) 15:27

剣崎 宗二さん、アドバイスありがとです。
うまくやりたいことが伝えられなくてごめんなさい。

独自のパラメータを定義したので、それを装備メニューのパラメータ欄に反映させたいと思ってます。
装備変更前のパラメータは、
Window_EquipStatus.prototype.drawCurrentParam関数を書き換えて表示させました。

コード: 全て選択

    Window_EquipStatus.prototype.drawCurrentParam = function(x, y, paramId) {
        this.resetTextColor();
        this.drawText($gameBaseStr, x, 36, 48, 'right');
        this.drawText($gameOffPower, x, 72, 48, 'right');
        this.drawText($gameBaseDef, x, 108, 48, 'right');
        this.drawText($gameDefPower, x, 144, 48, 'right');
        this.drawText($gameMaxHp, x, 180, 48, 'right');
        this.drawText($gameCurrentHp, x, 216, 48, 'right');
    };

$game~が自分で定義したパラメータです。

次に、装備スロットを選択し装備させたいアイテムを選択させたとき(アイテムが点滅しているとき)のパラメータを、
右矢印の先に表示させたいと考えてます。
Window_EquipStatus.prototype.drawNewParam関数を書き換えたらよさそうなんですけど、
まだ具体的なコードは書けていない状態です。

コード: 全て選択

Window_EquipStatus.prototype.drawNewParam = function(x, y, paramId) {
};

switch (現在装備している武器ID) {
 case 1:
  switch (選択された武器ID) {
   case 2:
  };
};
こういう制御文を考えているところです。
最後に編集したユーザー ま~くん on 2017年8月24日(木) 19:12 [ 編集 1 回目 ]
アバター
剣崎 宗二
記事: 680
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトを教えてほしいですにゃ~

投稿記事by 剣崎 宗二 » 2017年8月23日(水) 16:40

お疲れ様ですにゃ。

やりたい事は分かりましたにゃ。ただその場合、ねこ様の設計がWindow_EquipStatusの仕様の相性が悪いにゃ。
Window_EquipStatusは、装備した前のユーザーデータ(this._actor)と、装備した後のユーザーデータ(this._tempActor)を用意して、それぞれdrawCurrentActorとdrawNewParamで描画する仕様にゃ。
ねこ様のdrawCurrentParamを見る限り、設置した追加パラメーターが各ユーザーデータと紐づいていにゃいにゃ。($系は全ゲーム、全アクターでの共有ですにゃ)
これでは装備した後の追加パラメーターを表示する事は難しいにゃ…


変数名から何をしようとしてるのかを読み取ってコードを書き換えてみるとこうにゃるにゃ。

コード: 全て選択

Window_EquipStatus.prototype.drawCurrentParam = function(x, y, paramId) {
        this.resetTextColor();
        var mainWeapon = this._actor.equips()[0];
        var sideWeapon = this._actor.equips()[1];
       
        this.drawText(mainWeapon ? mainWeapon.params[2] : 0, x, 36, 48, 'right');    //$gameBaseStr = 主武器攻撃力?
        this.drawText(sideWeapon ? sideWeapon.params[2] : 0, x, 72, 48, 'right');   //$gameOffPower = サブ武器攻撃力?
        this.drawText(mainWeapon ? mainWeapon.params[3] : 0, x, 108, 48, 'right');   //$gameBaseDef = 主武器防御力?
        this.drawText(sideWeapon ? sideWeapon.params[3] : 0, x, 144, 48, 'right');  //$gameDefPower = サブ武器防御力?
        this.drawText(this._actor.mhp, x, 180, 48, 'right');     //$gameMaxHp = 最大HP?
        this.drawText(this._actor.hp, x, 216, 48, 'right'); //$gameCurrentHp = 現在HP?
    };


コード: 全て選択

Window_EquipStatus.prototype.drawNewParam = function(x, y, paramId) {
        this.resetTextColor();
        var mainWeapon = this._tempActor.equips()[0];
        var sideWeapon = this._tempActor.equips()[1];
       
        this.drawText(mainWeapon ? mainWeapon.params[2] : 0, x, 36, 48, 'right');    //$gameBaseStr = 主武器攻撃力?
        this.drawText(sideWeapon ? sideWeapon.params[2] : 0, x, 72, 48, 'right');   //$gameOffPower = サブ武器攻撃力?
        this.drawText(mainWeapon ? mainWeapon.params[3] : 0, x, 108, 48, 'right');   //$gameBaseDef = 主武器防御力?
        this.drawText(sideWeapon ? sideWeapon.params[3] : 0, x, 144, 48, 'right');  //$gameDefPower = サブ武器防御力?
        this.drawText(this._tempActor.mhp, x, 180, 48, 'right');     //$gameMaxHp = 最大HP?
        this.drawText(this._tempActor.hp, x, 216, 48, 'right'); //$gameCurrentHp = 現在HP?
    };



各パラメーターが何を意味しているのかはこちらの推測にゃのでミスしている可能性が高いにゃ。その場合はそのパラメーターの意味合いを教えてくださいにゃ。

また、どうしてもswitch caseでやらにゃきゃいけにゃい理由があるにゃら止めはしませんにゃ。
その場合は「選択された武器ID」の部分で前に話した

コード: 全て選択

this._tempActor.equips()[0]._itemId

をお使いくださいにゃ。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトを教えてほしいです

投稿記事by ま~くん » 2017年8月23日(水) 18:05

剣崎 宗二さん、コードまで書いてくれてありがとうです。

書いていただいたコードをちょっと書き換えて動作させたら、思い通りに動いてくれました。

コード: 全て選択

    Window_EquipStatus.prototype.drawCurrentParam = function(x, y, paramId) {
        this.resetTextColor();
        var mainWeapon = this._actor.equips()[0];
        //var sideWeapon = this._actor.equips()[1];
        $gameOffPower = mainWeapon ? $gameBaseStr + mainWeapon.params[2] : $gameBaseStr;
               
        this.drawText($gameBaseStr, x, 36, 48, 'right');    //$gameBaseStr = 素の攻撃力
        this.drawText($gameOffPower, x, 72, 48, 'right');   //$gameOffPower = 武器をもったときの攻撃力
        this.drawText($gameBaseDef, x, 108, 48, 'right');   //$gameBaseDef = 素の防御力
        this.drawText($gameDefPower, x, 144, 48, 'right');  //$gameDefPower = 防具を装備したときの防御力
        this.drawText($gameMaxHp, x, 180, 48, 'right');     //$gameMaxHp = 最大HP
        this.drawText($gameCurrentHp, x, 216, 48, 'right'); //$gameCurrentHp = 現在HP
    };

コード: 全て選択

    Window_EquipStatus.prototype.drawNewParam = function(x, y, paramId) {
        //this.resetTextColor();
        var mainWeapon = this._tempActor.equips()[0];
        //var sideWeapon = this._tempActor.equips()[1];
        $gameOffPower = mainWeapon ? $gameBaseStr + mainWeapon.params[2] : $gameBaseStr;
       
        this.drawText($gameBaseStr, x, 36, 48, 'right');    //$gameBaseStr = 素の攻撃力
        this.drawText($gameOffPower, x, 72, 48, 'right');   //$gameOffPower = 武器をもったときの攻撃力
        this.drawText($gameBaseDef, x, 108, 48, 'right');   //$gameBaseDef = 素の防御力
        this.drawText($gameDefPower, x, 144, 48, 'right');  //$gameDefPower = 防具を装備したときの防御力
        this.drawText($gameMaxHp, x, 180, 48, 'right');     //$gameMaxHp = 最大HP
        this.drawText($gameCurrentHp, x, 216, 48, 'right'); //$gameCurrentHp = 現在HP
    };

$gameBaseStr = 素の攻撃力
$gameOffPower = 武器をもったときの攻撃力
$gameBaseDef = 素の防御力
$gameDefPower = 防具を装備したときの防御力
$gameMaxHp = 最大HP
$gameCurrentHp = 現在HP
独自に定義したパラメータはこのようになってます。
別のプラグインで変数で定義して、ゲーム開始時に決定する値を入れてます。
あとメニュー画面-ステータス欄からも参照しているので、mainWeaponの評価を$gameOffPowerに代入する形にしました。

質問なんにゃけど、mainWeapon.params[2]の数字2が武器の攻撃力を表してるですか?
他の数字が防具とか表してるですか?
最後に編集したユーザー ま~くん on 2017年8月24日(木) 19:11 [ 編集 1 回目 ]
アバター
剣崎 宗二
記事: 680
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトを教えてほしいですにゃ~

投稿記事by 剣崎 宗二 » 2017年8月23日(水) 19:39

その改変ですと
$gameOffPower = 武器をもったときの攻撃力

以外は依然、動かないと思うのにゃ…まぁご本人がそれで大丈夫ならいいにゃ。


質問なんにゃけど、mainWeapon.params[2]の数字2が武器の攻撃力を表してるですにゃ~?

これは展開すると

コード: 全て選択

this._actor.equips()[0].params[2]

になるにゃ。0が装備箇所(0=主武器)、2がパラメータ(2=攻撃力)を表しているにゃ。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

Re: 現在装備している武器、防具のアイテムIDを取得するスクリプトを教えてほしいです

投稿記事by ま~くん » 2017年8月23日(水) 20:18

その改変ですと
$gameOffPower = 武器をもったときの攻撃力
以外は依然、動かないと思うのにゃ…まぁご本人がそれで大丈夫ならいいにゃ。

仕様を整理したら武器だけの値変更だけで大丈夫です。
防具は呪われてるのでぬげないのですw

これは展開すると
this._actor.equips()[0].params[2]
になるにゃ。0が装備箇所(0=主武器)、2がパラメータ(2=攻撃力)を表しているにゃ。

なるほど~勉強になります。

今回はコードまで書いてくれて本当に助かりました。
また機会がありましたらアドバイスよろしくお願いします。

“MV:質問” へ戻る