186 lines
5.5 KiB
JavaScript
186 lines
5.5 KiB
JavaScript
//=============================================================================
|
|
// 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:
|
|
* <scope:oneDeadOrAlive>
|
|
* <scope:allDeadOrAlive>
|
|
* usage example:
|
|
* - a skill that revive dead member with full HP,
|
|
* if use it to living menber, recover full HP.
|
|
*/
|
|
/*:ja
|
|
* @plugindesc 戦闘不能かどうかに関係なく、仲間に使える技/アイテムを作成
|
|
* @author 神無月サスケ
|
|
*
|
|
* @help このプラグインにはプラグインコマンドはありません。
|
|
*
|
|
* スキル/アイテムのメモに以下のように書いてください
|
|
* <scope:oneDeadOrAlive> 生死問わず仲間1体への効果になります
|
|
* <scope:allDeadOrAlive> 生死問わず仲間全体への効果になります
|
|
*
|
|
* 使用例:
|
|
* 死者を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;
|
|
};
|
|
})();
|