//============================================================================= // DeadOrAliveItem.js //============================================================================= /*: * @plugindesc make item/skill whose scope is both dead or alive. * @author Sasuke KANNAZUKI * * @help This plugin does not provide plugin commands. * * Skill/Item Note: * * * usage example: * - a skill that revive dead member with full HP, * if use it to living menber, recover full HP. */ /*:ja * @plugindesc 戦闘不能かどうかに関係なく、仲間に使える技/アイテムを作成 * @author 神無月サスケ * * @help このプラグインにはプラグインコマンドはありません。 * * スキル/アイテムのメモに以下のように書いてください * 生死問わず仲間1体への効果になります *  生死問わず仲間全体への効果になります * * 使用例: * 死者をHP全快で蘇生させる技だが、生きている味方に使用してもHP全快する */ (function() { // added item.scope // 20 : single friend (dead or alive) // 21 : all friends (dead or alive) // // process data in item.note // (for efficiency, note is processed at first.) // var _Scene_Boot_start = Scene_Boot.prototype.start; Scene_Boot.prototype.start = function() { _Scene_Boot_start.call(this); DataManager.processItemScope(); }; DataManager.processItemScope = function() { for (var i = 1; i < $dataSkills.length; i++) { DataManager.checkEachItemScope($dataSkills[i]); } for (var i = 1; i < $dataItems.length; i++) { DataManager.checkEachItemScope($dataItems[i]); } }; DataManager.checkEachItemScope = function(item) { var result = item.meta.scope; if (result){ if(result == 'oneDeadOrAlive') { item.scope = 20; } else if (result == 'allDeadOrAlive') { item.scope = 21; } } }; // // make status "dead or alive" // Game_Action.prototype.isDeadOrAlive = function() { return this.checkItemScope([20, 21]); }; var _Game_Action_isForFriend = Game_Action.prototype.isForFriend; Game_Action.prototype.isForFriend = function() { if (_Game_Action_isForFriend.call(this)) { return true; } return this.checkItemScope([20, 21]); }; var _Game_Action_isForDeadFriend = Game_Action.prototype.isForDeadFriend; Game_Action.prototype.isForDeadFriend = function() { if (_Game_Action_isForDeadFriend.call(this)) { return true; } return this.checkItemScope([20, 21]); }; var _Game_Action_isForOne = Game_Action.prototype.isForOne; Game_Action.prototype.isForOne = function() { if (_Game_Action_isForOne.call(this)) { return true; } return this.checkItemScope([20]); }; var _Game_Action_isForAll = Game_Action.prototype.isForAll; Game_Action.prototype.isForAll = function() { if (_Game_Action_isForAll.call(this)) { return true; } return this.checkItemScope([21]); }; var _Game_Action_needsSelection = Game_Action.prototype.needsSelection; Game_Action.prototype.needsSelection = function() { if (_Game_Action_needsSelection.call(this)) { return true; } return this.checkItemScope([20]); }; // // smooth/random target // Game_Unit.prototype.smoothTargetDeadOrAlive = function(index) { if (index < 0) { index = 0; } var member = this.members()[index]; return member ? member : this.members()[0]; }; Game_Unit.prototype.randomTargetDeadOrAlive = function() { var randomDeadTarget = this.randomDeadTarget(); if( randomDeadTarget ) { return randomDeadTarget; } return this.randomTarget(); }; var _Game_Action_decideRandomTarget = Game_Action.prototype.decideRandomTarget; Game_Action.prototype.decideRandomTarget = function() { var target; if(this.isDeadOrAlive()){ target = this.friendsUnit().randomTargetDeadOrAlive(); if (target) { this._targetIndex = target.index; } else { this.clear(); } return; } _Game_Action_decideRandomTarget.call(this); }; var _Game_Action_targetsForFriends = Game_Action.prototype.targetsForFriends; Game_Action.prototype.targetsForFriends = function() { var targets = []; var unit = this.friendsUnit(); if(this.isDeadOrAlive()) { if (this.isForOne()) { targets.push(unit.smoothTargetDeadOrAlive(this._targetIndex)); } else { targets = unit.members(); } return targets; } return _Game_Action_targetsForFriends.call(this); }; var _Game_Action_itemTargetCandidates = Game_Action.prototype.itemTargetCandidates; Game_Action.prototype.itemTargetCandidates = function() { if (!this.isValid()) { return []; } else if (this.isDeadOrAlive()) { return this.friendsUnit().members(); } return _Game_Action_itemTargetCandidates.call(this); }; var _Game_Action_testApply = Game_Action.prototype.testApply; Game_Action.prototype.testApply = function(target) { if(_Game_Action_testApply.call(this, target)) { return true; } // for convenience, always true if(this.isDeadOrAlive()) { return true; } return false; }; })();