text: //
  //  条件付き追加効果 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<texts.length;i++){
  			if (flag){
  				if (texts[i].match(/^<\/追加効果>/)){
  					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<cEff.length;i++){
  			if (Math.random() < (cEff[i]['rate'] / 100)){
  				if (ConditionallyManager.checkConditions(user,targets[0],cEff[i]['conditions'])){
  					var action = new Game_Action(user);
  					switch(cEff[i]['type']){
  					case 'I':
  					case 'i':
  						action.setItem(cEff[i]['id']);
  						break;
  					case 'S':
  					case 's':
  						action.setSkill(cEff[i]['id']);
  						break;
  					}
  					var tgr = [];
  					if (action.item().scope === item.scope){
  						var r = targets.filter(function(t){ return t.isDead() })
  						if (r.length !== targets.length){ tgr = targets }
  					}else if (action.isForOne() && action.isForFriend()){
  						if (user.isAlive()){ tgr = [user] }
  					}else if (action.isForOne() && action.isForOpponent() && this._lastAction.isForOpponent()){
  						for(var j=0;j<targets.length;j++){
  							if (targets[j].isAlive()){ tgr = [targets[j]]; break }
  						}
  					}else{ tgr = action.makeTargets() }
  					if (tgr.length > 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;	
  	};
  	
  	////////////////////////////////////////////////////////////////////////////////////
  }());
  