RPGツクールMV

RPGツクールMVのプラグインでアイテム情報を取得する方法

この記事では、RPGツクールMVのプラグインからアイテム(武器・防具)の情報を取得する方法を紹介します。

RPGツクールMVのアイテムの情報は、グローバル変数に配列として格納されています。

変数名 内容
$dataItems データベースで設定したアイテムのオブジェクト配列
$dataWeapons データベースで設定した武器のオブジェクト配列
$dataArmors データベースで設定した防具のオブジェクト配列
$gameParty._items パーティが持っているアイテムのオブジェクト配列

グローバル変数とは、プログラム全体から参照できる変数のことです。

配列の中身は、アイテム・武器・防具それぞれのオブジェクトになっています。

オブジェクトは特定のものについて情報と処理を集めたものです。

アイテムオブジェクトだったら、アイテム名や価格などの情報があつまっています。

オブジェクトの情報はプロパティに格納されており、オブジェクト.プロパティ名で取得することができます。

    var item = $dataItems[1];   // データベースから1番のアイテムを取得
    var itemName = item.name;   // nameプロパティからアイテム名を取得

アイテムの情報を取得するには、オブジェクトにどんなプロパティがあるかを知っておかなければいけません。

そこで、アイテムオブジェクト、武器オブジェクト、防具オブジェクトにどんなプロパティがあるかをまとめました。

プロパティのほとんどがデータベース→アイテム(武器・防具)から設定できる項目と対応しているので、わりとわかりやすいんじゃないでしょうか。

ちなみに、オブジェクトのプロパティに別のオブジェクトが入っている場合もあります。

アイテムオブジェクトのdamageプロパティにはダメージオブジェクト、effectsプロパティは配列にエフェクトオブジェクトが入っています。

アイテムオブジェクト
  ┣アイテムオブジェクトのプロパティ
  ┣ダメージオブジェクト
  ┃  ┗ダメージオブジェクトのプロパティ
  ┃  
  ┗エフェクトオブジェクト
     ┗エフェクトオブジェクトのプロパティ

プロパティ名をピリオドでつなげることで、入れ子になっているオブジェクトのプロパティを取得できます。

アイテムオブジェクトにのdamegeプロパティに入っているダメージオブジェクトから属性IDを取得するには、 item.damage.elementId となります。
RPGツクールMV アイテムオブジェクト オブジェクトの入れ子

アイテム関連のオブジェクト

アイテムオブジェクトのプロパティ

プロパティ名 データ型 内容
animationId Number 使用時のアニメーションID
consumable Boolean 消耗するか
(する:true / しない:false)
damage Object ダメージ(オブジェクト)
description String アイテムの説明
effects [Object]Array エフェクト(オブジェクト)の配列
hitType Number 命中タイプ

命中タイプ
0 必中
1 物理攻撃
2 魔法攻撃
iconIndex Number アイコン画像のID番号
id Number アイテムID
itypeId Number アイテムタイプID

アイテムタイプ
1 通常アイテム
2 大事なもの
3 隠しアイテムA
4 隠しアイテムB
meta Object メモ欄のノートタグ
name String アイテム名
note String メモ
occasion Number 使用可能時

使用可能時
0 常時
1 バトル画面
2 メニュー画面
3 使用不可
price Number アイテムの価格
repeats Number 連続回数(1~9)
scope Number 効果範囲

範囲
0 なし
1 敵単体
2 敵全体
3 敵1体ランダム
4 敵2体ランダム
5 敵3体ランダム
6 敵4体ランダム
7 味方単体
8 味方全体
9 味方単体(戦闘不能)
10 味方全体(戦闘不能)
11 使用者
speed Number 速度補正
successRate Number 成功率(0〜100)
tpGain Number 得TP(0~100)

ダメージオブジェクトのプロパティ

アイテムオブジェクトのdamageプロパティに代入されているオブジェクトです。

プロパティ データ型 内容
critical Boolean 会心
(あり:true / なし:false)
elementId Number -1または0または属性ID

属性
-1 通常攻撃
0 なし
1以降 データベース→タイプ→属性のリストに対応
formula String 計算式
type Number ダメージタイプ

ダメージタイプ
0 なし
1 HPダメージ
2 MPダメージ
3 HP回復
4 MP回復
5 HP吸収
6 MP吸収
variance Number 分散度(0〜100)

エフェクトオブジェクトのプロパティ

アイテムオブジェクトのeffectsプロパティに代入されているオブジェクトです。

プロパティ データ型 内容
code Number 使用効果コード
dataId Number codeごとに使うID
value1 Number codeごとに使う値1
value2 Number codeごとに使う値2
使用効果code一覧
code 使用効果 dataId value1 value2
11 HP回復 0 回復量
(0〜100(%))
回復量
(固定値)
12 MP回復 0 回復量
(0〜100(%))
回復量
(固定値)
13 TP回復 0 回復量
(固定値)
0
21 ステート付与 0またはステートID
※0は通常攻撃
確率(0〜100) 0
22 ステート解除 ステートID 確率(0〜100) 0
31 能力強化 ステータスID ターン数(1~1000) 0
32 能力弱体 ステータスID ターン数(1~1000) 0
33 能力強化の解除 ステータスID 1 0
34 能力弱体の解除 ステータスID 1 0
41 特殊効果(逃げる) 0 1 0
42 成長 ステータスID 上昇値 0
43 スキル習得 スキルID 1 0
44 コモンイベント コモンイベントID 1 0

武器・防具関連のオブジェクト

武器オブジェクトのプロパティ

プロパティ名 データ型 内容
animationId Number アニメーションID(なしの時は0)
description String 武器の説明
etypeId Number 装備タイプ(武器の場合:1)
iconIndex Number アイコン画像のインデックス番号
id Number 武器ID
meta Object メモ欄のノートタグ
name String 武器名
note String メモ欄
params [Number]Array 能力値の配列

インデックス 能力値
0 最大HP
1 最大MP
2 攻撃力
3 防御力
4 魔法力
5 魔法防御
6 敏捷性
7
price Number 価格
traits [Object]Array 特徴(オブジェクト)の配列
wtypeId Number 0または武器タイプ

武器タイプID
0 なし
1以降 データベース→タイプ→武器タイプのリストに対応

防具オブジェクトのプロパティ

プロパティ名 データ型 内容
atypeId Number 0または防具タイプID

防具タイプ
0 なし
1以降 データベース→タイプ→防具タイプのリストに対応
description String 防具の説明
etypeId Number 装備タイプID(2以降)
iconIndex Number アイコン画像のインデックス
id Number 防具ID
meta Object メモ欄のノートタグ
name String 防具名
note String メモ欄
params [Number]Array 能力値の配列

インデックス 能力値
0 最大HP
1 最大MP
2 攻撃力
3 防御力
4 魔法力
5 魔法防御
6 敏捷性
7
price Number 価格
traits [Object]Array 特徴(オブジェクト)の配列

特徴オブジェクトのプロパティ

武器・防具のtraitsプロパティに代入されているオブジェクトです。

valueが確率(%)、上昇率(%)のものはプロパティの値が小数で代入されています。
(例)10%の場合→プロパティの値は0.1

プロパティ名 データ型 内容
code Number 特徴タイプのID
dataId Number codeで使うID
value Number codeで使う値
特徴オブジェクトのcodeまとめ
code 内容 dataId value
11 属性有効度 属性ID 確率(%)
12 弱体有効度 ステータスID 確率(%)
13 ステート有効度 ステートID 確率(%)
14 ステート無効化 ステートID 1
21 通常能力値 ステータスID 上昇率(%)
22 追加能力値
ID 内容
0 命中率
1 回避率
2 会心率
3 会心回避率
4 魔法回避率
5 魔法反射率
6 反撃率
7 HP再生率
8 MP再生率
9 TP再生率
上昇率(%)
23 特殊能力値
ID 内容
0 狙われ率
1 防御効果率
2 回復効果率
3 薬の知識
4 MP消費率
5 TPチャージ率
6 物理ダメージ率
7 魔法ダメージ率
8 床ダメージ率
9 経験獲得率
上昇率(%)
31 攻撃時属性 属性ID 1
32 攻撃時ステート ステートID 確率(%)
33 攻撃速度補正 0 補正値
34 攻撃追加回数 0 攻撃追加回数
(-9.0〜9.0)
41 スキルタイプ追加 スキルタイプID 1
42 スキルタイプ封印 スキルタイプID 1
43 スキル追加 スキルID 1
44 スキル封印 スキルID 1
51 武器タイプ装備 武器タイプID 1
52 防具タイプ装備 防具タイプID 1
53 装備固定 装備タイプID 1
54 装備封印 装備タイプID 1
55 スロットタイプ
スロットタイプ
0 通常
1 二刀流
1
61 行動回数追加 0 確率(%)
62 特殊フラグ
特殊フラグ
0 自動戦闘
1 防御
2 身代わり
3 TP持ち越し
1
63 消滅エフェクト
消滅エフェクト
0 通常
1 ボス
2 消えない
1
64 パーティ能力
パーティ能力
0 エンカウント半減
1 エンカウント無効
2 不意打ち無効
3 先制攻撃率アップ
4 獲得金額2倍
5 アイテム入手率2倍
1

各種IDまとめ

ID 内容
アイテムID データベース→アイテムのID
(データベース順に1から連番)
武器ID データベース→武器のID
(データベース順に1から連番)
防具ID データベース→防具のID
(データベース順に1から連番)
ステータスID
Index ステータス
0 最大HP
1 最大MP
2 攻撃力
3 防御力
4 魔法力
5 魔法防御
6 敏捷性
7
スキルID データベース→スキルのID
(データベース順に1から連番)
ステートID データベース→ステートのID
(データベース順に1から連番)
属性ID データベース→タイプ→属性のID
(データベース順に1から連番)
スキルタイプID データベース→タイプ→スキルタイプのID
(データベース順に1から連番)
武器タイプID データベース→タイプ→武器タイプのID
(データベース順に1から連番)
防具タイプID データベース→タイプ→防具タイプのID
(データベース順に1から連番)
装備タイプID データベース→タイプ→装備タイプのID
(データベース順に1から連番)

ノートタグ(metaプロパティ)を使って独自の項目を設定する

アイテムや武器、防具は設定できる項目が決まっていますが、ゲームによってはオリジナルの項目を設定したいこともあるかと思います。

アイテムに独自の項目を設定するには、アイテム(武器、防具)のメモ欄にノートタグを書きます。
RPGツクールMV ノートタグ

<タグ名:値>

ノートタグの値は文字列でも、クォーテーションで囲む必要はありません。

設定したノートタグの値は、アイテム(武器、防具)オブジェクトのmetaプロパティから取得できます。

metaプロパティの値はオブジェクトで、ノートタグと同じ名前のプロパティを持っています。

アイテムID1番のメモ欄に<MyItemProp:テスト> と書くと、metaプロパティのオブジェクトにMyItemPropというプロパティができ、値にテストという文字が入っているということです。

あとは変数に取得するなりして使えばよいです。

    var content = $dataItems[1].meta['MyItemProp'];

metaプロパティとnoteプロパティの違い

アイテム(武器、防具)のメモ欄はmetaプロパティだけではなく、noteプロパティにも代入されています。

noteプロパティにはノートタグ以外の内容も含めて、メモ欄の内容が文字列としてすべて入ります。

metaプロパティにはオブジェクトがはいっていて、メモ欄の内容のうちノートタグで記載したものがオブジェクトのプロパティとして追加されます。

ノートタグを使う時の注意点

ほかのプラグインとかぶらない名前をつける

プラグインは全体を関数化することで変数をローカル化することができましたが、ノートタグはローカル化できません。

そのため、ノートタグ名にプラグインの頭文字をつけるなどして、ほかのプラグインとノートタグ名がかぶらないようにする必要があります。

<MyPluginContent:テスト>

<content:テスト>

値が数値の場合は、数値に変換する

ノートタグの値は文字列として代入されています。

ノートタグの値に数値を入れて計算をする場合は、ノートタグの値をNumberオブジェクトで数値に変換する必要があります。

(例)アイテムID1番のメモ欄に

<MyItemProp:1>

と入れ、MyItemPropの値に1を足す場合:

    var content = Number($dataItems[1].meta['MyItemProp']) + 1;  // -> 2

数値変換をしないでそのまま1を足してしまうと、数値の足し算ではなく、文字列の連結として扱われてしまいます。

そのため1という文字と1という文字をつなげて「11」という文字ができてしまいます。

    var content = $dataItems[1].meta['MyItemProp'] + 1;        // -> 11