brainwashing-school/js/plugins/SuperState.js
2025-05-30 08:36:40 -05:00

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