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つです。
ゲームに登録されているアイテム(データベースに登録されているもの)は、以下のグローバル変数でアクセスできます。
$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