RPGツクール VX Ace:スクリプトでのアイテムの扱い

月曜日 , 25, 7月 2016 Leave a comment

クラスの継承関係

 

 RPG Maker VX Aceのアイテムは親クラスが、RPG::BaseItemクラスです。

 RPG::BaseItemは、広義のアイテムでスキル(RPG::Skill)や、職業(RPG::Class)、キャラクターを表すRPG::ActorなどもRPG:BaseItemを継承しています。

 

 そこから更に派生して、使用することができるアイテムはRPG::UsableItemを持ちます。これはポーションなどの利用できるアイテムに加えて、スキルも含まれます。

 もう一つ装備可能なアイテムとしてRPG::EquipItemを親とするものもあります。

 

 今回、アイテムとして調べるクラスは、メニューの「アイテム」から表示することができる以下の3つとします。

 

RPG::Item

RPG::Weapon

RPG::Armor

 

 メニューのアイテムにはもう一つ「大事なもの」がありますが、これはItemクラスのitype_idが2のものを「大事なもの」として分類するので、クラスとしては3つです。

001

 

アイテムのデータベース

 

 ゲームに登録されているアイテム(データベースに登録されているもの)は、以下のグローバル変数でアクセスできます。

 

$data_items         = load_data("Data/Items.rvdata2")
$data_weapons       = load_data("Data/Weapons.rvdata2")
$data_armors        = load_data("Data/Armors.rvdata2")

 

 $data_itemsはRPG::Itemsクラスの配列で、0番めはnilです。

 

アイテムの判別

 

 それぞれのアイテムにアイテムか武器か、それとも防具かを判定するIDのようなものが欲しかったのですが、実際のコードを見ると以下のように判定していました。

 

Window_ItemList::include?

 

    case @category
    when :item
      item.is_a?(RPG::Item) && !item.key_item?
    when :weapon
      item.is_a?(RPG::Weapon)
    when :armor
      item.is_a?(RPG::Armor)
    when :key_item
      item.is_a?(RPG::Item) && item.key_item?
    else
      false
    end

 

 クラスを見てチェックしているんですね。

 データベースを拡張する際にメモ欄にCSVで拡張情報持たす場合にちょっと工夫が必要になりそう。

 

プレイヤーの所持アイテムは?

 

 上記、include?メソッドはプレイヤーの所持アイテムをループさせて、アイテムで表示するのか、武器で表示するのかという判定で利用しています。

 該当箇所は以下。

 

  def make_item_list
    @data = $game_party.all_items.select {|item| include?(item) }
    @data.push(nil) if include?(nil)
  end

 

 所持アイテムは「$game_party.all_items」で取得可能ということがわかります。

 

 ということで、アイテム周りのコードをざっと見てみました。

 RPGツクール VX Aceのアイテムの扱いがわかってきたのではないでしょうか?

 


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です