はじめまして。
「BattleLayout-SaGa.js」と「FTKR_BattleActionPoints.js」の併用時、APが不足しているスキルを使用できないように改変したいとのことで、その他にも競合などによる不具合は見つかったものの、ご要望の件につきましては動作が確認できましたので共有させていただきたいと思います。
以下の環境で検証しております。
RPGツクールMV(コアスクリプトv1.6.2)
BattleLayout-SaGa.js(ver1.062)
FTKR_BattleActionPoints.js(v1.1.0)
検証用の設定として、画像がわかりづらいですが以下のようになっています。
・プラグインの順序は「BattleLayout-SaGa.js」を上にしています。
・「FTKR_BattleActionPoints.js」のプラグインパラメータとして「Init Max AP(パーティのAPの最大値)」を「15」に設定しています。
・戦闘開始時の AP の初期値は「4」のままです。
・検証用のスキルとして AP 3 で発動可能なスキルを2つ、 AP 15 で発動可能なスキルを1つ設定しました。
今回は「BattleLayout-SaGa.js」側を改変したいとのことなので、まずは該当プラグインの 1434 行目にある
Window_ActorCommand.prototype.makeCommandContents というメソッドを改変します。
JavaScript:
// BattleLayout-SaGa.js ver1.062
Window_ActorCommand.prototype.makeCommandContents = function (cl) {
switch (cl) {
case 'attack':
this.addAttackCommand();
break;
case 'guard':
this.addGuardCommand();
break;
case 'escape':
this.addCommand(TextManager.escape, 'escape', BattleManager.canEscape());
break;
case 'stateHelp':
this.addCommand(stateHelpText, 'stateHelp');
break;
case 'formation':
this.addCommand(formationText, 'formation');
break;
case 'log':
this.addCommand(logText, 'log');
break;
case 'equip':
this.addCommand(equipText, 'equip', this._actor.isAddEquipCommand());
break;
default:
if (typeof cl === 'string') {
if (cl.match(/([is])(\d+)/i)) {
var type = RegExp.$1.toUpperCase();
if (type === 'I') {
cl = $dataItems[parseInt(RegExp.$2, 10)];
} else {
cl = $dataSkills[parseInt(RegExp.$2, 10)];
}
}
}
var canUse = true;
if (DataManager.isItem(cl)) canUse = this.canUseItem(cl);
if (DataManager.isSkill(cl)) canUse = this._actor.canUse(cl);
if (DataManager.isWeapon(cl)) canUse = true;
this.addCommand(cl.name, 'direct', canUse, cl);
}
};
上記の下の方にあるコードでアイテムやスキルの使用可否の判定が設定されています。この中のスキルの使用可否を判定するコードを以下のように改変します。
Rich (BB code):
// 変更前のコード。
if (DataManager.isSkill(cl)) canUse = this._actor.canUse(cl);
// 変更後のコード。赤字が追加部分。
if (DataManager.isSkill(cl)) canUse = this._actor.canUse(cl) && this._actor.itemApCost(cl) <= $gameParty.actionPoint();
「BattleLayout-SaGa.js」の本来の挙動はデフォルトの判定を引き継いでいるようでしたが、それに加えてアクターが所持するスキルの消費 AP よりパーティの現在の総 AP が多い場合にスキルが使用できるように変更しました。
これにより以下の画像のように AP が足りている場合にスキルが使用可能になっています(パーティの総 AP はターンごとにプラグインの初期設定で全回復しています)。
今回の作業は以上になりますが、検証段階で以下の不具合を確認しました。競合による潜在的な不具合が多数潜んでいる懸念から「BattleLayout-SaGa.js」と「FTKR_BattleActionPoints.js」の併用によるバトルシステムの構築は個人的には非推奨です。
| 「FTKR_BattleActionPoints.js」での不具合 |
・戦闘開始時ひとり目のアクターの行動選択時にキャンセル操作をすると AP の値が NaN となり、AP を使用する行動が不可能になります。
・2ターン目以降も複数回のキャンセル操作で AP が NaN になります。
・パーティの総 AP が NaN の状態で「戦う」を選択すると、敵のターンが無限に繰り返されます。
・パーティの総 AP が 0 になり次第、ターンが開始されました。
・敵側の初回ターンが2回繰り返されています。
・上記について、このプラグインは「FTKR_AlternatingTurnBattle.js」との併用を前提に設計されているようで、単体では機能が欠落している可能性があります。ちなみに「FTKR_AlternatingTurnBattle.js」を追加すると「BattleLayout-SaGa.js」との競合によるエラーで以下のように動作が停止されます。
| 「BattleLayout-SaGa.js」と「FTKR_BattleActionPoints.js」を併用した時の不具合 |
・「FTKR_BattleActionPoints.js」の機能である AP の表示を行うウィンドウと、スキルの使用コストが表示されません。
・こちらでは AP が NaN になると敵のターンが開始され、やはり無限に繰り返されます。
今回のプラグインについて私は使い方を把握していないため、まだ何かあるかもしれませんが、今のところこれぐらいの不具合がありました。これらについて既に解消済みの場合はご容赦ください。
私からは以上になります。上記をご確認の上、お試しください。