white-thirst/www/js/plugins/DeadOrAliveItem.js
2025-01-07 13:09:58 -06:00

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;
};
})();