『RPGツクールMZ』スキル・アイテム・武器・防具関連メソッド一覧
『RPGツクールMZ』の所持品(スキル・アイテム・武器・防具)の扱いについて調べました。
アイテムを使えるか判定するのにも、指定アイテムを、持っている?種類は?使える人はいる?使って効果ある?など判定することが大量にあります。
この辺の判定を行うためのメソッドにどんなものがあるのか、ガーっと並べていこうと思います。
例によって『RPGツクールMZ』非公式JavaScriptリファレンス のページにクラスなどリンクします。
アイテム関連クラス
アイテムに関連するデータは、ゲーム上のアイテムそのものの他に、武器・防具・スキルもほぼ同じデータで管理されています。
データベース
データベースに含まれるアイテム関連のデータ。
'data'フォルダの'Armors.json'、'Items.json'、'Skills.json'、'Weapons.json'の各JSONファイルに含まれるデータそのものです。
ゲーム内オブジェクト
コアスクリプト内では、JSONデータそのまま以外にメソッドを付加し使いやすくしたアイテム用クラスも使われます。
また、アイテムを処理するためのメソッドは次の静的クラスにも存在します。
そしてアイテムが使える状態にあるか、アイテムの効果があるかなどは次のクラスも関わってきます。
ウィンドウ
アイテム表示・選択用のWindow_Selectableクラスと、ステータス表示用のWindow_StatusBaseウィンドウがあります。
この辺りの扱いを調べれば、どんな使い方ができるかわかると思います。
両者のクラスそのものではなく、これらを継承した子孫クラスがたくさんあって、実際に使われているのは子孫クラスの方です。
名前から大体どの辺で使われているウィンドウかわかると思うので、利用例としてコードを読んでみるといいでしょう。
データベース参照
具体的な JavaScript での使い方で一番わかりやすいのはデータベースの中身がそのまま取り出せる大域変数です。
それぞれのIDで指定すればデータが取り出せ、プロパティで詳細を取得できます。
| データベース | 大域変数 | 継承関係 | 
|---|---|---|
| スキル | $dataSkills | RPG.MetaData-RPG.BaseItem-RPG.UsableItem-RPG.Skill | 
| アイテム | $dataItems | RPG.MetaData-RPG.BaseItem-RPG.UsableItem-RPG.Item | 
| 武器 | $dataWeapons | RPG.MetaData-RPG.BaseItem-RPG.EquipItem-RPG.Weapon | 
| 防具 | $dataArmors | RPG.MetaData-RPG.BaseItem-RPG.EquipItem-RPG.Armor | 
対応するクラスのプロパティに加え、継承元の RPG.BaseItem、RPG.UsableItem、 RPG.EquipItemおよびRPG.MetaDataのプロパティが利用できます。
たとえば、アイテムならRPG.MetaData-RPG.BaseItem-RPG.UsableItem-RPG.Itemと継承していますから、RPG.BaseItemに含まれるnameプロパティを次のような形で利用できます。
$dataItems[アイテムID].name
直接このような使い方をするだけではなく、ダメージ計算式のitem変数やGame_Item.object()メソッドを通して利用することも多いと思います。
Game_Party
アイテムは結局プレイヤーキャラクター(パーティーメンバー)が保持して使うものなので、『RPGツクールMZ』のコアスクリプトの場合Game_Partyクラスが入った大域変数$gamePartyを使ってできる操作が多くあります。
リファレンスのGame_Partyを読むと、次のようなアイテム関連メソッドがあります。
Game_Party: アイテム取得メソッド
| メソッド | 説明 | 
|---|---|
| allItems() | パーティの全アクターを配列で返す | 
| armors() | パーティが持つ全防具を配列で返す | 
| equipItems() | パーティが持つ全装備可能アイテムを配列で返す | 
| itemContainer( item ) | 指定アイテムが含まれるカテゴリ全体を配列で返す [アイテム][武器][防具]のいずれかのカテゴリ | 
| items() | アイテム(武器・防具を含まない)を配列で返す | 
| weapons() | パーティが持つ全武器を配列で返す | 
Game_Party: アイテム調査メソッド
| メソッド | 説明 | 
|---|---|
| canUse( item ) | 指定アイテムが使用可能か | 
| hasItem( item, includeEquip ) | 指定アイテムをパーティが持っているか | 
| hasMaxItems( item ) | 指定アイテムを最大数を持っているか | 
| isAnyMemberEquipped( item )  | 指定アイテムをいずれかのメンバーが装備しているか | 
| maxItems( item ) | 指定アイテムの最大数(規定値:99)を返す | 
| numItems( item ) | パーティが持っている指定アイテムの数を返す | 
Game_Party: アイテム操作メソッド
| メソッド | 説明 | 
|---|---|
| consumeItem( item ) | 指定アイテムを消費 | 
| discardMembersEquip( item, amount ) | 指定の装備を捨てる | 
| gainItem( item, amount, includeEquip ) | 指定アイテムを増やす | 
| initAllItems() | 全てのアイテムを初期化 | 
| loseItem( item, amount, includeEquip ) | 指定アイテムを減らす | 
Game_Party: その他メソッド
| メソッド | 説明 | 
|---|---|
| hasDropItemDouble() | [アイテム入手率2倍]のパーティ能力を持つか | 
| lastItem() | 最後に選択されたアイテムを返す | 
| setLastItem( item ) | 指定アイテムを最後のアイテムに設定 | 
| setupBattleTestItems() | 戦闘テストのアイテムの準備 | 
※引数のitemまた返り値はRPG.BaseItemです。
Game_Actor
またアイテムはGame_Actorのメソッドでも操作されます。
Game_ActorはGame_Actorsが入っている大域変数$gameActorsを使って次のように取得できます。
$gameActors.actor(アクターID);
またGame_Partyが入っている大域変数$gamePartyに次のメソッドを使って取得できます。
| メソッド | 説明 | 
|---|---|
| allBattleMembers() | 戦闘メンバーの全アクターを配列で返す | 
| allMembers() | パーティの全アクターを配列で返す | 
| battleMembers() | 戦闘に参加する全アクターを配列で返す | 
| hiddenBattleMembers() | 戦闘メンバー中で隠れている全アクターを配列で返す | 
| leader() | リーダーであるアクターを返す | 
| members() | 戦闘中なら battleMembers()その他ならallMembers()の返り値となる | 
| menuActor() | 現在のメニューで選択されているアクターを返す | 
| targetActor() | 対象アクターを返す | 
たとえば次のようにして取得します。
$gameActors.allBattleMembers();
あとBattleManagerで取得できます。
BattleManager.actor();
『RPGツクールMZ』の基本仕様として、アイテムはパーティ全体で保持しているのでGame_Partyにメソッドが集中していますが、スキルはアクター毎に保持しているのでGame_Actorの方にメソッドが多くあります。
Game_Actor: スキル調査メソッド
| メソッド | 説明 | 
|---|---|
| addedSkills() | [特徴]-[スキル]-[スキル追加]の配列を返す | 
| addedSkillTypes() | [特徴]-[スキル]-[スキルタイプ追加] の配列を返す | 
| attackSkillId() | 攻撃スキルのID(規定値:1)を返す。 [特徴]-[攻撃]-[攻撃スキル]の設定があればその値 | 
| canPaySkillCost( skill ) | 指定スキルを使用するだけのコストがあるか | 
| findNewSkills( lastSkills ) | 指定スキルを習得済みとして、未習得スキルの配列を返す | 
| guardSkillId() | 防御スキルのID(規定値:2)を返す | 
| hasSkill( skillId ) | 指定スキルを持っているか | 
| isLearnedSkill( skillId ) | 指定スキルを習得しているか | 
| isSkillSealed( stypeId ) | 指定スキルタイプが[特徴]-[スキル]-[スキル封印]か | 
| isSkillTypeSealed( stypeId ) | 指定スキルタイプが[特徴]-[スキル]-[スキルタイプ封印]されているか | 
| isSkillWtypeOk( skill ) | 指定スキルの発動条件に合う装備をしているか | 
| meetsSkillConditions( skill ) | 指定スキルを使用可能か | 
| paySkillCost( skill ) | スキルに必要なコスト(MP・TP)を消費 | 
| skills() | 取得済みスキルの配列を返す | 
| skillMpCost( skill ) | 指定スキルに必要なMPを返す | 
| skillTpCost( skill ) | 指定スキルに必要なTPを返す | 
| skillTypes() | スキルタイプの配列を返す | 
Game_Actor: スキル操作メソッド
| メソッド | 説明 | 
|---|---|
| displayLevelUp( newSkills ) | 指定スキルの習得とレベルアップのメッセージを表示 | 
| forceAction( skillId, targetIndex ) | 指定したスキルを強制する | 
| forgetSkill( skillId ) | 指定スキルを忘却(非習得に) | 
| initSkills() | スキルの初期化 | 
| lastBattleSkill() | 最後のスキルを返す | 
| learnSkill( skillId ) | 指定スキルを習得する | 
| setLastBattleSkill( skill ) | 最後の戦闘スキルを設定 | 
| setLastMenuSkill( skill ) | 最後に選択されたメニュースキルを設定 | 
Game_Actor: アイテム調査メソッド
| メソッド | 説明 | 
|---|---|
| canEquip( item ) | 指定アイテムを装備可能か | 
| canEquipArmor( item ) | 指定防具を装備可能か | 
| canEquipWeapon( item ) | 指定武器を装備可能か | 
| canUse( item ) | 指定アイテム・スキルを使用可能か | 
| isOccasionOk( item ) | 指定アイテムが現在[使用可能時]か | 
| meetsItemConditions( item ) | 指定アイテムを持っていて使用可能か | 
| meetsUsableItemConditions( item ) | 指定アイテムが使用可能なステートか | 
| testEscape( item ) | 指定アイテムが[使用効果]-[特殊効果]-[逃げる]を持っているか | 
アイテムの使用可能状態を調べるメソッドがたくさんありますが、アクターのステートなどを考慮していて、関係は次のようになっています。
isOccasionOk() + canMove() = meetsUsableItemConditions()
meetsUsableItemConditions() + $gameParty.hasItem() = meetsItemConditions()
meetsSkillConditions() or meetsItemConditions() = canUse()
つまりアイテム・スキル問わず使用可能か調べるならcanUse()、それがアイテムとわかっているならmeetsItemConditions()を使えば、現在使用可能かどうかを調べられるわけです。
Game_Actor: 装備調査メソッド
| メソッド | 説明 | 
|---|---|
| bestEquipItem( slotId ) | 指定スロットの最強装備を返す | 
| equips() | 装備データの配列を返す | 
| equipSlots() | 装備スロットの配列を返す | 
| isEquipped( item ) | 指定アイテムが装備されているか | 
| armors() | 装備している防具を配列で返す | 
| hasArmor( armor ) | 指定防具を装備しているか | 
| hasNoWeapons() | 武器を持っていない(素手)か | 
| hasWeapon( weapon ) | 指定武器を持っているか | 
| weapons() | 装備している武器を配列で返す | 
Game_Actor: アイテム操作メソッド
| メソッド | 説明 | 
|---|---|
| consumeItem( item ) | 指定アイテムを消費 | 
| useItem( item ) | 指定アイテムを使用 | 
| calcEquipItemPerformance( item ) | 指定アイテムと装備アイテムの能力の差分の値を返す | 
| changeEquip( slotId, item ) | 指定スロットを指定装備に変更 | 
| changeEquipById( etypeId, itemId ) | 指定装備タイプを指定装備に変更 | 
| discardEquip( item ) | 装備を捨て、所持品に残さない | 
| forceChangeEquip( slotId, item ) | 指定スロットの装備を(持ち物に戻さず)強制的に変更 | 
| releaseUnequippableItems( forcing ) | 装備不可アイテムの装備を外す | 
| tradeItemWithParty( newItem, oldItem ) | 所持アイテムを交換し、交換できたか返す | 
Game_Item
Game_ItemはJSONデータをくるんだクラスで、スキル・アイテム・武器・防具すべてを同じように扱える。
Game_Item: アイテム調査メソッド
| メソッド | 説明 | 
|---|---|
| isArmor() | 防具か | 
| isEquipItem() | 装備品か | 
| isItem() | アイテムか | 
| isNull() | 未設定か | 
| isSkill() | スキルか | 
| isUsableItem() | 使用できるアイテムか | 
| isWeapon() | 武器か | 
| itemId() | アイテムIDを返す | 
| object() | JSONデータを返す | 
Game_Item: アイテム操作メソッド
| メソッド | 説明 | 
|---|---|
| setEquip( isWeapon, itemId ) | 指定アイテムIDで装備品を設定 | 
| setObject( item ) | 指定JSONデータで書き換える | 
DataManager
静的クラスであるDataManagerにも、アイテムを扱うためのメソッドが存在します。
| メソッド | 説明 | 
|---|---|
| isArmor( item ) | 指定した項目が[防具]に含まれるか | 
| isItem( item ) | 指定した項目が[アイテム]に含まれるか | 
| isSkill( item ) | 指定した項目が[スキル]に含まれるか | 
| isWeapon( item ) | 指定した項目が[武器]に含まれるか | 
このへんGame_Itemと同じメソッドが並んでいて意味不明と思ったかもしれません。
ただこれGame_ItemではなくJSONデータであるRPG.BaseItem(を継承されたクラス)を判定するためのものなので、ちょっと意味合いが違います。
まとめ
アイテムの持っている情報は膨大で、それらを調べていくのも結構な手間なので、ざっくりとメソッド中心に調べました。
RPG.Enemy.DropItemやGame_Actionなど戦闘関連のクラスも、アイテムが関わってきますが、この辺りも無視しました。
いや…その…戦闘とかよくわからないし、一緒に帰って友達に噂とかされると恥ずかしいし…
レッツエンジョイ ツクールライフ!


Discussion