【解決済】アイテム消費武器&投擲武器
Posted: 2017年2月05日(日) 21:44
初めて質問させていただきます。
件名の通り、アイテムを消費して使用する武器と、武器自体を投げて使用する武器(投げナイフなど)を
作りたいと思いましたが、それらしいプラグインもなかったので素人なりにスクリプトを書いてみました。
しかし、思うように動かないのが現状です。
スクリプトは以下の通りです。
------------------------ここから------------------------
(function() {
Game_Action.prototype.makeDamageValue = function(target, critical) {
var item = this.item();
var baseValue = this.evalDamageFormula(target);
var value = baseValue * this.calcElementRate(target);
if (this.isPhysical()) {
value *= target.pdr;
}
if (this.isMagical()) {
value *= target.mdr;
}
if (baseValue < 0) {
value *= target.rec;
}
if (critical) {
value = this.applyCritical(value);
}
value = this.applyVariance(value, item.damage.variance);
value = this.applyGuard(value, target);
value /= this.checkUseWeapon(target); //必要なアイテムが無い場合は攻撃力ダウン
value = Math.round(value);
return value;
};
Game_Action.prototype.checkUseWeapon = function(target) {
var weapon = target._equips[0]._itemId;
if (weapon.meta.use_item) {
if ($dataItems[weapon.meta.use_item] >= 1) {
$gameParty.loseItem($dataItems[weapon.meta.use_item], 1);
return 1;
} else {
return 4;
}
} else if (weapon.meta.use_weapon) {
$gameParty.loseItem($dataWeapons[weapon], 1, true);
return 1;
}
return 1;
};
})();
------------------------ここまで------------------------
補足ですが、武器のメモ欄に<use_item:1>として、アイテムの番号を指定します。
投擲武器の場合は<use_weapon>としています。
また、テストプレイにてアクターが攻撃しようとすると「Cannot read property '0' of undefined」と表示され、
エネミーが攻撃しようとすると「Cannot read property 'use_item' of undefined」と表示されます。
後者についてはアクターかエネミーかを判別して条件分岐すれば回避できそうな気もしますが……。
javascriptの知識も乏しく、限界を感じましたので、皆様のお力添えをいただきたいと思います。
どうぞよろしくお願いいたします。
件名の通り、アイテムを消費して使用する武器と、武器自体を投げて使用する武器(投げナイフなど)を
作りたいと思いましたが、それらしいプラグインもなかったので素人なりにスクリプトを書いてみました。
しかし、思うように動かないのが現状です。
スクリプトは以下の通りです。
------------------------ここから------------------------
(function() {
Game_Action.prototype.makeDamageValue = function(target, critical) {
var item = this.item();
var baseValue = this.evalDamageFormula(target);
var value = baseValue * this.calcElementRate(target);
if (this.isPhysical()) {
value *= target.pdr;
}
if (this.isMagical()) {
value *= target.mdr;
}
if (baseValue < 0) {
value *= target.rec;
}
if (critical) {
value = this.applyCritical(value);
}
value = this.applyVariance(value, item.damage.variance);
value = this.applyGuard(value, target);
value /= this.checkUseWeapon(target); //必要なアイテムが無い場合は攻撃力ダウン
value = Math.round(value);
return value;
};
Game_Action.prototype.checkUseWeapon = function(target) {
var weapon = target._equips[0]._itemId;
if (weapon.meta.use_item) {
if ($dataItems[weapon.meta.use_item] >= 1) {
$gameParty.loseItem($dataItems[weapon.meta.use_item], 1);
return 1;
} else {
return 4;
}
} else if (weapon.meta.use_weapon) {
$gameParty.loseItem($dataWeapons[weapon], 1, true);
return 1;
}
return 1;
};
})();
------------------------ここまで------------------------
補足ですが、武器のメモ欄に<use_item:1>として、アイテムの番号を指定します。
投擲武器の場合は<use_weapon>としています。
また、テストプレイにてアクターが攻撃しようとすると「Cannot read property '0' of undefined」と表示され、
エネミーが攻撃しようとすると「Cannot read property 'use_item' of undefined」と表示されます。
後者についてはアクターかエネミーかを判別して条件分岐すれば回避できそうな気もしますが……。
javascriptの知識も乏しく、限界を感じましたので、皆様のお力添えをいただきたいと思います。
どうぞよろしくお願いいたします。