【解決】VX RGSS2【アイテム消費スキル】に残りの所持数表示

金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

【解決】VX RGSS2【アイテム消費スキル】に残りの所持数表示

投稿記事by 金田一光彦 » 2018年10月07日(日) 00:26

毎度お世話になっております。
Space not farさんのhttp://muspell.raindrop.jp/file/rgss2_itemcost.txt
アイテム消費スキルで、本来MP使用料がでる場所に消費アイテムの残り所持数を「残り〇〇」の様に表示したいのですが、どうすれば改造できるかわからずつんでいます。
$game_party.item_number($data_items[$1.to_i])
このコードがキーとなると思うのですが…自分なりに色々改造に挑戦したもののできない状態です。
スキル画面で、スキル名の横に(MP表示される場所に)「所持数〇〇」と表示できるようになるのであれば改造してくださる方の書きやすいように改造してくださってもかまいません。
よろしくお願いいたします。
最後に編集したユーザー 金田一光彦 on 2018年10月09日(火) 23:26 [ 編集 1 回目 ]

faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: VX RGSS2【アイテム消費スキル】に残りの所持数表示

投稿記事by faida » 2018年10月07日(日) 12:24

こんにちは。

改造を試したということは、改変場所については既知のものであるとしてよろしいですかね。
一応、Window_Skill内該当箇所を載せておきます。

コード: 全て選択

  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      rect.width -= 4
      enabled = @actor.skill_can_use?(skill)
      draw_item_name(skill, rect.x, rect.y, enabled)
      self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2)
    end
  end
さて、スキルの消費アイテムIDに関しては「SNF.skill_itemcost(skill, 0)」を、その個数に関しては
「SNF.skill_itemcost(skill, 1)」を使用することによって得られます。
そしてその所持数に関しては、金田一光彦さんの見立て通り、$game_party.item_number(item)で取得できますが、
そのitemの取得方法は$data_items[SNF.skill_itemcost(skill, 0)]となります。

さて、ここで重要となるポイントは2つとなります。
1. そのスキルがアイテム消費スキルかを判別する
2. そのスキルの消費アイテムの所持数を描画する
1は至極簡単、消費アイテムIDが存在すればよいので、「if SNF.skill_itemcost(skill, 0)」で事足ります。
2もまぁ……テキスト描画領域が限られているので、テキストに関してはお任せします。
改変を行ったスクリプトを以下に示します。お持ち帰り用ですので、多分このまま使えると思います。

コード: 全て選択

class Window_Skill
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      rect.width -= 4
      enabled = @actor.skill_can_use?(skill)
      draw_item_name(skill, rect.x, rect.y, enabled)
      if SNF.skill_itemcost(skill, 0)
        item = $data_items[SNF.skill_itemcost(skill, 0)]
        num = $game_party.item_number(item).to_s
        self.contents.draw_text(rect, "残り "+num, 2)
      else
        self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2)
      end
    end
  end
end
何か不明点等あれば遠慮なくどうぞ。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

Re: VX RGSS2【アイテム消費スキル】に残りの所持数表示

投稿記事by 金田一光彦 » 2018年10月07日(日) 22:19

faida様

毎度のことながらお世話になっております。
教えていただいたスクリプトをそのまま使うと他のMP表示系(Kamesoftさんのオーバードライブ技でMP0は非表示など)と競合してしまうのでエイリアス化したら効果がなくなってしまいました。
以下のようにしたのですが効果がなくなってしまったのですが、どこがいけないのかご検討付きますでしょうか?
スクリプトの導入位置を変えたりしてみましたがそれでも直りませんでした…

コード: 全て選択

class Window_Skill
 alias snf_item_use_skill draw_item
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      rect.width -= 4
      enabled = @actor.skill_can_use?(skill)
      draw_item_name(skill, rect.x, rect.y, enabled)
      if SNF.skill_itemcost(skill, 0)
        item = $data_items[SNF.skill_itemcost(skill, 0)]
        num = $game_party.item_number(item).to_s
        self.contents.draw_text(rect, "残り "+num, 2)
      else
        self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2)
      end
      snf_item_use_skill(index)
    end
  end
end
faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: VX RGSS2【アイテム消費スキル】に残りの所持数表示

投稿記事by faida » 2018年10月08日(月) 08:01

答えは簡単です。

コード: 全て選択

    rect = item_rect(index)
    self.contents.clear_rect(rect)
ここの二行は「描画領域の取得」ならびに「その部分の削除」となっています。
これは元々のメソッドに存在する処理で、おそらくどのスクリプトでも搭載されているでしょう。
つまりエイリアスで元の処理に飛ばすと、もちろん描画したものが消えてしまいます。

こういう場合には処理を入れる箇所を工夫しましょう。以下は一例です。

コード: 全て選択

class Window_Skill
 alias snf_item_use_skill draw_item
  def draw_item(index)
    snf_item_use_skill(index)
    skill = @data[index]
    if skill != nil
      enabled = @actor.skill_can_use?(skill)
      if SNF.skill_itemcost(skill, 0)
        rect = item_rect(index)
        self.contents.clear_rect(rect)
        rect.width -= 4
        draw_item_name(skill, rect.x, rect.y, enabled)
        item = $data_items[SNF.skill_itemcost(skill, 0)]
        num = $game_party.item_number(item).to_s
        self.contents.draw_text(rect, "残り "+num, 2)
      end
    end
  end
end
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

Re: VX RGSS2【アイテム消費スキル】に残りの所持数表示

投稿記事by 金田一光彦 » 2018年10月09日(火) 23:25

faida 様

解説ありがとうございます。

コード: 全て選択

    rect = item_rect(index)
    self.contents.clear_rect(rect)

の意味をあまり理解していなかったのでとても勉強になりました。
エイリアスも、導入行を変えてみると言う工夫、参考になります。 ありがとうございました。

“VX / Ace:スクリプト素材のリクエスト” へ戻る