319 lines
11 KiB
JavaScript
319 lines
11 KiB
JavaScript
//
|
|
// ステートターン操作効果 ver1.01
|
|
//
|
|
// ------------------------------------------------------
|
|
// Copyright (c) 2016 Yana
|
|
// Released under the MIT license
|
|
// http://opensource.org/licenses/mit-license.php
|
|
// ------------------------------------------------------
|
|
//
|
|
// author Yana
|
|
//
|
|
|
|
var Imported = Imported || {};
|
|
Imported["ControlStateTurnEffect"] = 1.01;
|
|
/*:
|
|
* @target MZ MV
|
|
* @plugindesc ver1.01/ステートや強化弱体の効果ターンを操作する効果を設定できるようにします。
|
|
* @author Yana
|
|
*
|
|
* @param StateTurnMax
|
|
* @text ステートターン最大値
|
|
* @desc ステートの加算されるターン数の最大値です。
|
|
* このプラグインで追加されたターンはこの数値以上にはなりません。
|
|
* @default 10
|
|
*
|
|
* @param BuffTurnMax
|
|
* @text 強化ターン最大値
|
|
* @desc 強化の加算されるターン数の最大値です。
|
|
* このプラグインで追加されたターンはこの数値以上にはなりません。
|
|
* @default 10
|
|
*
|
|
* @param DebuffTurnMax
|
|
* @text 弱体ターン最大値
|
|
* @desc 弱体の加算されるターン数の最大値です。
|
|
* このプラグインで追加されたターンはこの数値以上にはなりません。
|
|
* @default 10
|
|
*
|
|
* @help ------------------------------------------------------
|
|
* 使用方法
|
|
* ------------------------------------------------------
|
|
* アイテムやスキルのメモ欄に、
|
|
* <ステートターン追加:x,yターン>
|
|
* または、
|
|
* <AddStateTurn:x,yTurn>
|
|
* と記述すると、そのスキルの使用効果に、IDx番のステートの効果ターンが
|
|
* yターン増加(減少)する効果が追加されます。yには-も指定できます。
|
|
* xに0を指定すると、付与されているすべてステートの効果ターンが操作されます。
|
|
*
|
|
* アイテムやスキルのメモ欄に、
|
|
* <強化ターン追加:x,yターン>
|
|
* または、
|
|
* <AddBuffTurn:x,yTurn>
|
|
* と記述すると、そのスキルの使用効果に、IDx番の強化の効果ターンが
|
|
* yターン増加(減少)する効果が追加されます。yには-も指定できます。
|
|
* xに-1を指定すると、付与されているすべて強化の効果ターンが操作されます。
|
|
*
|
|
* アイテムやスキルのメモ欄に、
|
|
* <弱体ターン追加:x,yターン>
|
|
* または、
|
|
* <AddDebuffTurn:x,yTurn>
|
|
* と記述すると、そのスキルの使用効果に、IDx番の弱体の効果ターンが
|
|
* yターン増加(減少)する効果が追加されます。yには-も指定できます。
|
|
* xに-1を指定すると、付与されているすべて弱体の効果ターンが操作されます。
|
|
*
|
|
* ------------------------------------------------------
|
|
* 利用規約
|
|
* ------------------------------------------------------
|
|
* 当プラグインはMITライセンスで公開されています。
|
|
* 使用に制限はありません。商用、アダルト、いずれにも使用できます。
|
|
* 二次配布も制限はしませんが、サポートは行いません。
|
|
* 著作表示は任意です。行わなくても利用できます。
|
|
* 要するに、特に規約はありません。
|
|
* バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
|
|
* https://twitter.com/yanatsuki_
|
|
* 素材利用は自己責任でお願いします。
|
|
* ------------------------------------------------------
|
|
* 更新履歴:
|
|
* ver1.01:
|
|
* 解除タイミングが設定されていないステートが解除されることのあるバグを修正。
|
|
* ver1.00:
|
|
* 公開
|
|
*/
|
|
(function () {
|
|
////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
var parameters = PluginManager.parameters("ControlStateTurnEffect");
|
|
var stateTurnMax = Number(parameters["StateTurnMax"]);
|
|
var buffTurnMax = Number(parameters["BuffTurnMax"]);
|
|
var debuffTurnMax = Number(parameters["DebuffTurnMax"]);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
DataManager.controlStateTurnEffect = function (item) {
|
|
if (item._ctrlStateTurnEffect) {
|
|
return item._ctrlStateTurnEffect;
|
|
}
|
|
var texts = item.note.split("\n");
|
|
item._ctrlStateTurnEffect = {};
|
|
for (var i = 0, max = texts.length; i < max; i++) {
|
|
if (
|
|
texts[i].match(
|
|
/<(?:ステートターン追加|AddStateTurn):(\d+),([+-]?\d+)(?:ターン|Turn)?>/i
|
|
)
|
|
) {
|
|
item._ctrlStateTurnEffect[Number(RegExp.$1)] = Number(RegExp.$2);
|
|
}
|
|
}
|
|
return item._ctrlStateTurnEffect;
|
|
};
|
|
|
|
DataManager.controlBuffTurnEffect = function (item) {
|
|
if (item._ctrlBuffTurnEffect) {
|
|
return item._ctrlBuffTurnEffect;
|
|
}
|
|
var texts = item.note.split("\n");
|
|
item._ctrlBuffTurnEffect = {};
|
|
for (var i = 0, max = texts.length; i < max; i++) {
|
|
if (
|
|
texts[i].match(
|
|
/<(?:強化ターン追加|AddBuffTurn):(-?\d+),([+-]?\d+)(?:ターン|Turn)?>/i
|
|
)
|
|
) {
|
|
item._ctrlBuffTurnEffect[Number(RegExp.$1)] = Number(RegExp.$2);
|
|
}
|
|
}
|
|
return item._ctrlBuffTurnEffect;
|
|
};
|
|
|
|
DataManager.controlDebuffTurnEffect = function (item) {
|
|
if (item._ctrlDebuffTurnEffect) {
|
|
return item._ctrlDebuffTurnEffect;
|
|
}
|
|
var texts = item.note.split("\n");
|
|
item._ctrlDebuffTurnEffect = {};
|
|
for (var i = 0, max = texts.length; i < max; i++) {
|
|
if (
|
|
texts[i].match(
|
|
/<(?:弱体ターン追加|AddDebuffTurn):(-?\d+),([+-]?\d+)(?:ターン|Turn)?>/i
|
|
)
|
|
) {
|
|
item._ctrlDebuffTurnEffect[Number(RegExp.$1)] = Number(RegExp.$2);
|
|
}
|
|
}
|
|
return item._ctrlDebuffTurnEffect;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
var __GAction_hasItemAnyValidEffects =
|
|
Game_Action.prototype.hasItemAnyValidEffects;
|
|
Game_Action.prototype.hasItemAnyValidEffects = function (target) {
|
|
if (__GAction_hasItemAnyValidEffects.call(this, target)) {
|
|
return true;
|
|
}
|
|
if (this.checkStateTurnEffectValid(target)) {
|
|
return true;
|
|
}
|
|
if (this.checkBuffTurnEffectValid(target)) {
|
|
return true;
|
|
}
|
|
if (this.checkDebuffTurnEffectValid(target)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
Game_Action.prototype.checkStateTurnEffectValid = function (target) {
|
|
var ctrlStateTurnEffect = DataManager.controlStateTurnEffect(this.item());
|
|
for (var key in ctrlStateTurnEffect) {
|
|
var id = Number(key);
|
|
if (id === 0 && target._stateTurns !== {}) {
|
|
return true;
|
|
} else if (target.isStateAffected(id)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
Game_Action.prototype.checkBuffTurnEffectValid = function (target) {
|
|
var ctrlBuffTurnEffect = DataManager.controlBuffTurnEffect(this.item());
|
|
for (var key in ctrlBuffTurnEffect) {
|
|
var id = Number(key);
|
|
if (id === -1) {
|
|
for (var i = 0; i < 8; i++) {
|
|
if (target._buffs[i] > 0) {
|
|
return true;
|
|
}
|
|
}
|
|
} else if (target.isBuffAffected(id)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
Game_Action.prototype.checkDebuffTurnEffectValid = function (target) {
|
|
var ctrlDebuffTurnEffect = DataManager.controlDebuffTurnEffect(this.item());
|
|
for (var key in ctrlDebuffTurnEffect) {
|
|
var id = Number(key);
|
|
if (id === -1) {
|
|
for (var i = 0; i < 8; i++) {
|
|
if (target._buffs[i] < 0) {
|
|
return true;
|
|
}
|
|
}
|
|
} else if (target.isDebuffAffected(id)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
var __GAction_apply = Game_Action.prototype.apply;
|
|
Game_Action.prototype.apply = function (target) {
|
|
__GAction_apply.call(this, target);
|
|
var result = target.result();
|
|
if (result.isHit()) {
|
|
this.applyStateTurnEffect(target);
|
|
this.applyBuffTurnEffect(target);
|
|
this.applyDebuffTurnEffect(target);
|
|
}
|
|
};
|
|
|
|
Game_Action.prototype.applyStateTurnEffect = function (target) {
|
|
var ctrlStateTurnEffect = DataManager.controlStateTurnEffect(this.item());
|
|
for (var key in ctrlStateTurnEffect) {
|
|
var id = Number(key);
|
|
if (id === 0) {
|
|
for (var key2 in target._stateTurns) {
|
|
target._stateTurns[key2] += ctrlStateTurnEffect[key];
|
|
target._stateTurns[key2] = Math.min(
|
|
target._stateTurns[key2],
|
|
stateTurnMax
|
|
);
|
|
this.makeSuccess(target);
|
|
}
|
|
} else {
|
|
if (target.isStateAffected(id) && target._stateTurns[id]) {
|
|
target._stateTurns[id] += ctrlStateTurnEffect[id];
|
|
target._stateTurns[id] = Math.min(
|
|
target._stateTurns[id],
|
|
stateTurnMax
|
|
);
|
|
this.makeSuccess(target);
|
|
}
|
|
}
|
|
}
|
|
for (var key in target._stateTurns) {
|
|
var id = Number(key);
|
|
var state = $dataStates[id];
|
|
if (target._stateTurns[key] <= 0 && state.autoRemovalTiming !== 0) {
|
|
target.removeState(id);
|
|
}
|
|
}
|
|
};
|
|
|
|
Game_Action.prototype.applyBuffTurnEffect = function (target) {
|
|
var ctrlBuffTurnEffect = DataManager.controlBuffTurnEffect(this.item());
|
|
for (var key in ctrlBuffTurnEffect) {
|
|
var id = Number(key);
|
|
if (id === -1) {
|
|
for (var i = 0; i < 8; i++) {
|
|
if (target.isBuffAffected(i)) {
|
|
target._buffTurns[i] += ctrlBuffTurnEffect[id];
|
|
target._buffTurns[i] = Math.min(target._buffTurns[i], buffTurnMax);
|
|
this.makeSuccess(target);
|
|
}
|
|
}
|
|
} else {
|
|
if (target.isBuffAffected(id)) {
|
|
target._buffTurns[id] += ctrlBuffTurnEffect[id];
|
|
target._buffTurns[id] = Math.min(target._buffTurns[id], buffTurnMax);
|
|
this.makeSuccess(target);
|
|
}
|
|
}
|
|
}
|
|
for (var i = 0; i < 8; i++) {
|
|
if (target._buffTurns[i] <= 0) {
|
|
target.removeBuff(i);
|
|
}
|
|
}
|
|
};
|
|
|
|
Game_Action.prototype.applyDebuffTurnEffect = function (target) {
|
|
var ctrlDebuffTurnEffect = DataManager.controlDebuffTurnEffect(this.item());
|
|
for (var key in ctrlDebuffTurnEffect) {
|
|
var id = Number(key);
|
|
if (id === -1) {
|
|
for (var i = 0; i < 8; i++) {
|
|
if (target.isDebuffAffected(i)) {
|
|
target._buffTurns[i] += ctrlDebuffTurnEffect[id];
|
|
target._buffTurns[i] = Math.min(
|
|
target._buffTurns[i],
|
|
debuffTurnMax
|
|
);
|
|
this.makeSuccess(target);
|
|
}
|
|
}
|
|
} else {
|
|
if (target.isDebuffAffected(id)) {
|
|
target._buffTurns[id] += ctrlDebuffTurnEffect[id];
|
|
target._buffTurns[id] = Math.min(
|
|
target._buffTurns[id],
|
|
debuffTurnMax
|
|
);
|
|
this.makeSuccess(target);
|
|
}
|
|
}
|
|
}
|
|
for (var i = 0; i < 8; i++) {
|
|
if (target._buffTurns[i] <= 0) {
|
|
target.removeBuff(i);
|
|
}
|
|
}
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////
|
|
})();
|