// // 行動時評価式追加 ver1.00 // // ------------------------------------------------------ // Copyright (c) 2017 Yana // Released under the MIT license // http://opensource.org/licenses/mit-license.php // ------------------------------------------------------ // // author Yana // var Imported = Imported || {}; Imported['ActionEvals'] = 1.00; /*: * @plugindesc ver1.00/行動時に設定した式を判定するように機能を追加します。 * @author Yana * * @param UseTraits * @desc 特徴を評価するかの設定です。 * trueで行動者の特徴に記述された評価式も評価を行います。 * @default true * * @help プラグインコマンドはありません。 * * 行動前、行動後などに評価されるeval式を特徴やスキル、アイテムに設定できるようにします。 * * ※このプラグインはBeforeCommon(行動前コモン)よりも下に配置してください。 * * ------------------------------------------------------ * 使い方 * ------------------------------------------------------ * ************************************************* * ・行動前に式を評価する * (BattleManager.startActionの後) * ************************************************* * アイテムやスキル、または特徴を持ったオブジェクトのメモ欄に、 * <行動前評価式> * 計算式1行目 * 計算式2行目 * ・・・ * * または、 * * formula1 * formula2 * ・・・ * * * ************************************************* * ・ダメージを計算する直前に対象毎に式を評価する * (Game_Action.makeDamageValueの前) * ************************************************* * アイテムやスキル、または特徴を持ったオブジェクトのメモ欄に、 * <行動前対象毎評価式> * 計算式1行目 * 計算式2行目 * ・・・ * * または、 * * formula1 * formula2 * ・・・ * * * ************************************************* * ・使用効果適用後に対象毎に式を評価する * (Game_Action.applyItemUserEffectの後) * ************************************************* * アイテムやスキル、または特徴を持ったオブジェクトのメモ欄に、 * <行動後対象毎評価式> * 計算式1行目 * 計算式2行目 * ・・・ * * または、 * * formula1 * formula2 * ・・・ * * * ************************************************* * ・行動を終了する直前に式を評価する * (BattleManager.endActionの前) * ************************************************* * アイテムやスキル、または特徴を持ったオブジェクトのメモ欄に、 * <行動後評価式> * 計算式1行目 * 計算式2行目 * ・・・ * * または、 * * formula1 * formula2 * ・・・ * * * それぞれの計算式では、ダメージ計算式と同じように、 * a:使用者 * b:対象 * v:変数 * が使用可能です。 * また、 * s:スイッチ * action:現在のアクション * * 実行されるタイミングが対象毎以外の場合は、 * b:すべて対象の配列 * となります。 * * ------------------------------------------------------ * 利用規約 * ------------------------------------------------------ * 当プラグインはMITライセンスで公開されています。 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。 * 二次配布も制限はしませんが、サポートは行いません。 * 著作表示は任意です。行わなくても利用できます。 * 要するに、特に規約はありません。 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。 * https://twitter.com/yanatsuki_ * 素材利用は自己責任でお願いします。 * ------------------------------------------------------ * 更新履歴: * ver1.00: * 公開 */ (function() { //////////////////////////////////////////////////////////////////////////////////// 'use strict'; var parameters = PluginManager.parameters('ActionEvals'); var useTraits = parameters['UseTraits'] === 'true'; //////////////////////////////////////////////////////////////////////////////////// var executeActionEval = function(mode, target) { if (BattleManager._subject) { var a = BattleManager._subject; var b = target ? target : BattleManager._targets; var action = BattleManager._action; var v = $gameVariables._data; var s = $gameSwitches._data; if (action) { var evals = []; if (useTraits) { var traits = a.traitObjects(); for (var i = 0, max = traits.length; i < max; i++) { evals.push(actionEvals(traits[i])[mode]); } } evals.push(actionEvals(action.item())[mode]); if (target) b = target; for (var i = 0, max = evals.length; i < max; i++){ if (evals[i]) eval(evals[i]); } } } }; var actionEvals = function(item) { if (item._actionEvals) return item._actionEvals; item._actionEvals = {before1:'',before2:'',after1:'',after2:'' }; var texts = item.note.split('\n'); for (var i=0,max=texts.length;i/.test(texts[i])) { i++; for (var j=i;j/.test(texts[j])) { i = j; break; } else { item._actionEvals.before1 += '\n' + texts[j]; } } } else if (/<(?:行動前対象毎評価式|BeforeTargetsActionEval)>/.test(texts[i])) { i++; for (var j=i;j/.test(texts[j])) { i = j; break; } else { item._actionEvals.before2 += '\n' + texts[j]; } } } else if (/<(?:行動後評価式|AfterActionEval)>/.test(texts[i])) { i++; for (var j=i;j/.test(texts[j])) { i = j; break; } else { item._actionEvals.after1 += '\n' + texts[j]; } } } else if (/<(?:行動後対象毎評価式|AfterTargetsActionEval)>/.test(texts[i])) { i++; for (var j=i;j/.test(texts[j])) { i = j; break; } else { item._actionEvals.after2 += '\n' + texts[j]; } } } } return item._actionEvals; }; //////////////////////////////////////////////////////////////////////////////////// var __BManager_startAction = BattleManager.startAction; BattleManager.startAction = function() { __BManager_startAction.call(this); if (Imported['BeforeCommon'] && this._execBeforeCommon) return; executeActionEval('before1'); }; var __BManager_endAction = BattleManager.endAction; BattleManager.endAction = function() { executeActionEval('after1'); __BManager_endAction.call(this); }; //////////////////////////////////////////////////////////////////////////////////// var __GAction_makeDamageValue = Game_Action.prototype.makeDamageValue; Game_Action.prototype.makeDamageValue = function(target, critical) { if (!$gameTemp._callTestEvaluate) executeActionEval('before2', target); return __GAction_makeDamageValue.call(this, target, critical); }; var __GAction_applyItemUserEffect = Game_Action.prototype.applyItemUserEffect; Game_Action.prototype.applyItemUserEffect = function(target) { __GAction_applyItemUserEffect.call(this, target); executeActionEval('after2', target); }; var __GAction_evaluate = Game_Action.prototype.evaluate; Game_Action.prototype.evaluate = function() { this._callTestEvaluate = true; var result = __GAction_evaluate.call(this); this._callTestEvaluate = false; return result; }; //////////////////////////////////////////////////////////////////////////////////// }());