// // 条件付き追加効果 ver1.05 // // ------------------------------------------------------ // Copyright (c) 2016 Yana // Released under the MIT license // http://opensource.org/licenses/mit-license.php // ------------------------------------------------------ // // author Yana // var Imported = Imported || {}; Imported['ConditionallyAddEffect'] = 1.05; /*: * @plugindesc ver1.05/条件を満たすと発動する追加効果を設定できるようになります。 * @author Yana * * @param Display Add Effect Text * @desc 追加効果が発動した時のメッセージ。_nameが発動元スキル名に、 * _mes1,_mes2が追加効果のメッセージ1、2行目に置き換わります。 * @default _userの_nameの追加効果が発動した! * * @help プラグインコマンドはありません。 * * ※YEP_BattleEngineCoreよりも下に配置してください。 * * スキルやアイテムのメモ欄に * * <追加効果:I○,×%> * 発動条件 * * または、 * <追加効果:S○,×%> * 発動条件 * * と記述してください。 * * I○の場合は○番のアイテム、S○の場合は○番のスキルが条件を満たした時、×%の確率で追加効果として発動します。 * * 発動条件の詳細はConditionallyCoreのヘルプを参照してください。 * 発動時の表示メッセージはnullにすることで表示を無効化することができます。 * 発動時のメッセージは_userを発動者の名前に変換します。 * * ------------------------------------------------------ * 利用規約 * ------------------------------------------------------ * 当プラグインはMITライセンスで公開されています。 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。 * 二次配布も制限はしませんが、サポートは行いません。 * 著作表示は任意です。行わなくても利用できます。 * 要するに、特に規約はありません。 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。 * https://twitter.com/yanatsuki_ * 素材利用は自己責任でお願いします。 * ------------------------------------------------------ * 更新履歴: * ver1.05: * 追加効果に対して、反撃、反射が発生しないように変更。 * ver1.04: * 内部処理を大幅に変更。 * 複数の追加効果を設定しても正常に動くように修正。 * ver1.03: * YEP_BattleEngineCoreと併用時、行動終了時に減るステートのターンが倍減少していたバグを修正。 * ver1.021: * コンソールの表示を削除。 * ver1.02: * YEP_BattleEngineCore_ver1.28dとの併用化処理を追加。 * メモ欄に記述のSIにsiも使用できるように追加。 * ver1.01: * メッセージを非表示にする機能が正常に動作していなかったバグを修正。 * メッセージの変換順を変更。 * メッセージの制御文字に_userを追加。 * ver1.00: * 公開 */ (function(){ //////////////////////////////////////////////////////////////////////////////////// var parameters = PluginManager.parameters('ConditionallyAddEffect'); var displayAddEffectText = String(parameters['Display Add Effect Text'] || '_nameの追加効果が発動!'); //////////////////////////////////////////////////////////////////////////////////// function AddEffectManager() { throw new Error('This is a static class'); } AddEffectManager.initCond = function(note){ var texts = note.split('\n'); var flag = false; var result = []; for(var i=0;i/)){ result.push(effect); flag = false; }else{ effect['conditions'].push(ConditionallyManager.makeCondition(texts[i])); } }else if (texts[i].match(/^<追加効果:([ISis])(\d+),(\d+)[%%]>/)){ var effect = { 'type':RegExp.$1, 'id':parseInt(RegExp.$2), 'rate':parseInt(RegExp.$3), 'conditions':[] }; flag = true; } } return result; }; //////////////////////////////////////////////////////////////////////////////////// var _CAef_BManager_endAction = BattleManager.endAction; BattleManager.endAction = function(){ if (this._subject && !$gameTemp._checkAddEffect){ this.executeAddEffect(); $gameTemp._checkAddEffect = true; this._caefCallItem = this._lastAction.item(); } if (this._subject && this._subject.isAddEffects()){ var effect = this._subject.shiftCurrentAddEffects(); var action = effect[0]; this._execAddEffect = true; this._subject._actions.unshift(action); $gameTemp._caefTargets = effect[1]; this._logWindow.displayAddEffect(this._subject,this._caefCallItem); this.startAction(); this._subject.removeCurrentAction(); } else { this._execAddEffect = false; $gameTemp._caefTargets = null; $gameTemp._checkAddEffect = false; _CAef_BManager_endAction.call(this); } }; BattleManager.executeAddEffect = function(){ if ($gameTroop.aliveMembers().length === 0){ return } var item = this._lastAction.item(); if (!item){ return } item._condAddEffects = item._condAddEffects || AddEffectManager.initCond(item.note); var cEff = item._condAddEffects; var user = this._subject; var targets = this._lastTargets; if (!targets){ return } if (!targets[0]){ return } if (!targets[0]._lastHit){ return } user._addEffects = []; for(var i=0;i 0){ user.setAddEffects(action,tgr) } } } } }; //////////////////////////////////////////////////////////////////////////////////// Game_Battler.prototype.setAddEffects = function(action, targets) { if (this._addEffects === undefined) { this._addEffects = [] } this._addEffects.push([action, targets]); }; Game_Battler.prototype.isAddEffects = function() { if (this._addEffects && this._addEffects.length > 0){ return true } return false; }; Game_Battler.prototype.shiftCurrentAddEffects = function() { return this._addEffects.shift(); }; var __GBattler_useItem = Game_Battler.prototype.useItem; Game_Battler.prototype.useItem = function(item) { if ($gameTemp._checkAddEffect){ return } // 追加効果は消費が発生しない __GBattler_useItem.call(this, item); }; //////////////////////////////////////////////////////////////////////////////////// Window_BattleLog.prototype.displayAddEffect = function(subject,item){ var text = displayAddEffectText; if (text != 'null') { if (DataManager.isSkill(item)){ text = text.replace('_mes1',item.message1); text = text.replace('_mes2',item.message2); } text = text.replace('_user',subject.name()); text = text.replace('_name',item.name); this.push('addText', text); this.push('wait'); this.push('clear'); } }; //////////////////////////////////////////////////////////////////////////////////// var _CAef_GAction_makeTargets = Game_Action.prototype.makeTargets; Game_Action.prototype.makeTargets = function() { if ($gameTemp._caefTargets){ return $gameTemp._caefTargets; } else { return _CAef_GAction_makeTargets.call(this); } }; var _CAef_GAction_apply = Game_Action.prototype.apply; Game_Action.prototype.apply = function(target) { $gameTemp._tmpTarget = target; _CAef_GAction_apply.call(this,target); }; var _CAef_GAction_itemCnt = Game_Action.prototype.itemCnt; Game_Action.prototype.itemCnt = function(target) { if (BattleManager._execAddEffect){ return 0; } else { return _CAef_GAction_itemCnt.call(this,target); } }; var _CAef_GAction_itemMrf = Game_Action.prototype.itemMrf; Game_Action.prototype.itemMrf = function(target) { if (BattleManager._execAddEffect){ return 0; } else { return _CAef_GAction_itemMrf.call(this,target); } }; //////////////////////////////////////////////////////////////////////////////////// var _CAef_GActionResult_isHit = Game_ActionResult.prototype.isHit; Game_ActionResult.prototype.isHit = function() { var result = _CAef_GActionResult_isHit.call(this); $gameTemp._tmpTarget._lastHit = result; return result; }; //////////////////////////////////////////////////////////////////////////////////// }());