1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

【解決済】スクリプトで「ステートID◯になっていたら」の書き方は…?

豆豆豆2019-01-17に開始した「ツクールMV」の中の討論

  1. 豆豆豆

    豆豆豆 ユーザー

    皆様、いつも大変お世話になっております。
    この度、装備画面の装備中のアイテムが表示されるウインドウに
    装備画面を開いた該当のアクターが
    特定のステートに掛かっている場合のみアイコンを表示したく

    コード:
    Window_EquipSlot.prototype.drawItem = function(index) {
        if (this._actor) {
            var rect = this.itemRectForText(index);
            this.changeTextColor(this.systemColor());
            this.changePaintOpacity(this.isEnabled(index));
            this.drawText(this.slotName(index), rect.x, rect.y, 138, this.lineHeight());
            this.drawItemName(this._actor.equips()[index], rect.x + 138, rect.y);
            this.changePaintOpacity(true);
        if a.isStateAffected(1)){
            this.drawIcon(1, 1, 1);  
            }
        }
    };
    他のサイト様なども参考にし上記のようなコードを書き
    導入した所、上手く作動してくれません
    「if a.isStateAffected(1)){ 」と「 }」を1つ消すとアイコンは表示されるので
    「if a.isStateAffected(1)){ 」の書き方がおかしいとまでは分かるのですが
    当方の知識ではどの様な書き方が正しいのかが分からず作業が進まない状況です。
    どなたか良ければ御教示いただけないでしょうか。
    宜しくお願い致します。
     
    #1
    神無月サスケ がいいね!しました
  2. 神無月サスケ

    神無月サスケ ユーザー

    ええっと、豆豆豆さんのやりたいことがどうも文章から伝わらないのですが、
    「例えばステート1が付加されている時だけ、武器や防具のアイコンを表示、
    それ以外の時は表示しない」という意味でいいでしょうか?
    だとしたら、以下のようになります。
    PHP:
    Window_EquipSlot.prototype.drawItem = function(index) {
      if (
    this._actor) {
        var 
    rect this.itemRectForText(index);
        
    this.changeTextColor(this.systemColor());
        
    this.changePaintOpacity(this.isEnabled(index));
        
    this.drawText(this.slotName(index), rect.xrect.y138this.lineHeight());
        if (
    this._actor.isStateAffected(1)) {
          
    this.drawItemName(this._actor.equips()[index], rect.138rect.y);
        } else {
          var 
    equip this._actor.equips()[index];
          
    this.drawText(equip equip.name ''rect.138 Window_Base._iconWidth 4rect.y312this.lineHeight());
        }
        
    this.changePaintOpacity(true);
      }
    };
    以上はイベントコマンド「スクリプト」でやるには長すぎるので、
    改行を減らすか、またはプラグイン化してご使用下さい。
    ポイントは、「a.isStateAffected(1)」というのは、戦闘計算式の中でしか使えず、
    ここでは「this._actor.isStateAffected(1)」のようにする必要があること、
    「if (...)」のように、ifの後はかならず括弧を付けること、がポイントでしょうか。
    また、this.drawItemNameは、アイテムの名前だけでなくアイコンも描画する関数です。

    もし、違う意味(ステートのアイコンを表示したい)の場合、そもそも装備用のスロットに、
    そういうアイコンを表示するスペースがないですよね。
    そこんところご検討ください。
     
    #2
    豆豆豆 がいいね!しました
  3. 豆豆豆

    豆豆豆 ユーザー

    神無月サスケ様
    いつも、ありがとうございます 泣

    説明不足で申し訳ございませんでした。
    当方がしたかったことは
    装備のアイコン、ステート毎のアイコンを表示など複雑なことではなく
    最初の投稿内容に書かせていただいた
    「「this.drawIcon(1, 1, 1);」で表示される1種類のアイコンを
    特定のステートに掛かっている時のみ表示したい」でした。
    説明不足で申し訳ございません。

    しかし、これも神無月サスケ様が補足で説明して下さった
    こちらの説明で無事に理想通り表示させることが出来で解決できました。
    この説明は、この質問内容だけではなく
    今後、スクリプトを改変する際などに大変役立つことで
    とてもとても大変勉強になりました。
    この度も本当にありがとうございました;;
     
    #3
    メルサイア神無月サスケ がいいね!しています

このページを共有