65 lines
2.4 KiB
JavaScript
65 lines
2.4 KiB
JavaScript
/*:
|
|
@plugindesc 上位ステート ver1.1
|
|
@author うなぎおおとろ(twitter https://twitter.com/unagiootoro8388?lang=ja)
|
|
@help
|
|
毒状態のときに毒攻撃を受けると、猛毒状態になる、というような上位のステートが作成できるようになるプラグインです。
|
|
[上位ステート]
|
|
ステートID3のステートときに当該ステートにする攻撃を受けた時、当該ステートを
|
|
ステートID4のステートにしたい場合、
|
|
ステートID3のステートのメモ欄に
|
|
<上位ステートID 4>
|
|
<共存不可ステートID 4>
|
|
と記述し、ステートID4のステートのメモ欄に
|
|
<共存不可ステートID 3>
|
|
と記述してください。
|
|
|
|
[共存不可ステート]
|
|
ステートID3のステートはステートID4のステートと共存できないようにする場合、
|
|
ステートID3のステートのメモ欄に
|
|
<共存不可ステートID 4>
|
|
と記述し、ステートID4のステートのメモ欄に
|
|
<共存不可ステートID 3>
|
|
と記述してください。共存不可の設定が片方のステートだけにならないように注意してください。
|
|
また、
|
|
<共存不可ステートID 5, 6>
|
|
というように記述することで、複数のステートと共存できないようにすることも可能です。
|
|
*/
|
|
|
|
(() => {
|
|
Game_Battler.prototype.SuperState__addState = Game_Battler.prototype.addState;
|
|
|
|
let getCoexistanceStateId = (stateId) => {
|
|
let state = $dataStates[stateId];
|
|
if (state.note.match(/<共存不可ステートID (.+)>/)) {
|
|
return RegExp.$1
|
|
.replace(/[\s\r\n]/, "")
|
|
.split(",")
|
|
.map((s) => parseInt(s));
|
|
}
|
|
return [];
|
|
};
|
|
|
|
let getSuperStateId = (stateId) => {
|
|
let state = $dataStates[stateId];
|
|
if (state.note.match(/<上位ステートID (\d+)>/)) {
|
|
return parseInt(RegExp.$1);
|
|
}
|
|
};
|
|
|
|
Game_Battler.prototype.addState = function (stateId) {
|
|
let notCoexistanceStateId = getCoexistanceStateId(stateId);
|
|
let nowStateId = this.states().map((state) => state.id);
|
|
for (let id of notCoexistanceStateId) {
|
|
if (nowStateId.includes(id)) return;
|
|
}
|
|
if (this.isStateAffected(stateId)) {
|
|
let superStateId = getSuperStateId(stateId);
|
|
if (superStateId) {
|
|
this.eraseState(stateId);
|
|
this.SuperState__addState(superStateId);
|
|
return;
|
|
}
|
|
}
|
|
this.SuperState__addState(stateId);
|
|
};
|
|
})();
|