//============================================================================== // dsPassiveSkill.js // Copyright (c) 2015 - 2019 DOURAKU // Released under the MIT License. // http://opensource.org/licenses/mit-license.php //============================================================================== /*: * @plugindesc パッシブスキルを実装するプラグイン ver1.12.0 * @author 道楽 * * @param Show Battle * @desc パッシブスキルを戦闘中に表示するか * (true なら表示する / false なら表示しない) * @default true * @type boolean * * @param Show Battle Switch ID * @desc 戦闘中のパッシブスキル表示を制御するスイッチのID * (0なら「Show Battle」の設定に従う) * @default 0 * @type number * * @help * このプラグインは以下のメモタグの設定ができます。 * * ----------------------------------------------------------------------------- * スキルに設定するメモタグ * * -------- * ・装備できる武器の種類を追加(Equip Weapon) * * [武器タイプ] - 武器タイプの番号を2桁の数値で設定する。(数字) * * -------- * ・装備できる防具の種類を追加(Equip Armor) * * [防具タイプ] - 防具タイプの番号を2桁の数値で設定する。(数字) * * -------- * ・特定の通常能力値をアップ(Parameter Boost) * * [能力値番号] - 上昇させる通常能力値の番号を1桁の数値で設定する。(数字) * 0 - HP * 1 - MP * 2 - 攻撃力 * 3 - 防御力 * 4 - 魔法力 * 5 - 魔法防御 * 6 - 敏捷性 * 7 - 運 * [上昇量(%)] - 能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * 装備なし状態の能力値に対しての倍率がかかる。 * * -------- * ・一定の条件下において、特定の通常能力値をアップ(Parameter Boost Ex) * * [能力値番号] - passivePBST参照 * [上昇量(%)] - passivePBST参照 * [参照する条件] - 効果を発揮する条件を以下の中から設定する。(文字列) * HPUP - HPが特定の値以上の場合に効果を発揮 * HPLW - HPが特定の値以下の場合に効果を発揮 * MPUP - MPが特定の値以上の場合に効果を発揮 * MPLW - MPが特定の値以下の場合に効果を発揮 * TPUP - TPが特定の値以上の場合に効果を発揮 * TPLW - TPが特定の値以下の場合に効果を発揮 * STAT - 特定のステートを受けている場合に効果を発揮 * [判定する値] - 条件の判定に使用するパーセンテージ。(数字) * STATの場合はステート番号。(数字) * * 例) HP50%以下で攻撃力が50%アップするスキルを作成する場合 * * * -------- * ・特定の追加能力値をアップ(XParameter Boost) * * [能力値番号] - 上昇させる追加能力値の番号を1桁の数値で設定する。(数字) * 0 - 命中率 * 1 - 回避率 * 2 - 会心率 * 3 - 会心回避率 * 4 - 魔法回避率 * 5 - 魔法反射率 * 6 - 反撃率 * 7 - HP再生率 * 8 - MP再生率 * 9 - TP再生率 * [上昇量] - 能力値の上昇量。(数字) * * -------- * ・一定の条件下において、特定の追加能力値をアップ(XParameter Boost Ex) * * [能力値番号] - passiveXPBST参照 * [上昇量] - passiveXPBST参照 * [参照する条件] - passivePBSTEX参照 * [判定する値] - passivePBSTEX参照 * * 例) MP最大時にHPが5%再生するスキルを作成する場合 * * * -------- * ・特定の特殊能力値をアップ(SParameter Boost) * * [能力値番号] - 上昇させる特殊能力値の番号を1桁の数値で設定する。(数字) * 0 - 狙われ率 * 1 - 防御効果率 * 2 - 回復効果率 * 3 - 薬の知識率 * 4 - MP消費率 * 5 - TPチャージ率 * 6 - 物理ダメージ率 * 7 - 魔法ダメージ率 * 8 - 床ダメージ率 * 9 - 経験値獲得率 * [上昇量] - 能力値の上昇量。(数字) * * -------- * ・一定の条件下において、特定の追加能力値をアップ(XParameter Boost Ex) * * [能力値番号] - passiveSPBST参照 * [上昇量] - passiveSPBST参照 * [参照する条件] - passivePBSTEX参照 * [判定する値] - passivePBSTEX参照 * * 例) TPが50%以上の時に狙われやすくするスキルを作成する場合 * * * -------- * ※更新に伴い非推奨 (passivePBSTEXを使用してください) * ・一定のHP以下の場合のみ特定の通常能力値をアップ(Indomitable) * * [能力値番号] - passivePBST参照 * [HP残量率] - 効果が発揮されるHPの残量率を%で設定する。(数字) * [上昇量(%)] - 能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * 装備なし状態の能力値に対しての倍率がかかる。 * * -------- * ※更新に伴い非推奨 (passiveXPBSTEXを使用してください) * ・一定のHP以下の場合のみ特定の追加能力値をアップ(XIndomitable) * * [能力値番号] - passiveXPBST参照 * [HP残量率] - 効果が発揮されるHPの残量率を%で設定する。(数字) * [上昇量] - 能力値の上昇量。(数字) * * -------- * ※更新に伴い非推奨 (passiveSPBSTEXを使用してください) * ・一定のHP以下の場合のみ特定の特殊能力値をアップ(SIndomitable) * * [能力値番号] - passiveSPBST参照 * [HP残量率] - 効果が発揮されるHPの残量率を%で設定する。(数字) * [上昇量] - 能力値の上昇量。(数字) * * -------- * ・属性有効度を設定(Element Rate) * * [属性番号] - 有効度を設定する属性の番号を2桁の数値で設定する。(数字) * [有効度] - 有効度を表すパーセンテージ。(数字) * 職業等で設定されている属性有効度に乗算されます。 * * -------- * ・属性有効度を設定の加算バージョン(Element Rate Add Ver) * * [属性番号] - 有効度を設定する属性の番号を2桁の数値で設定する。(数字) * [有効度] - 有効度を表すパーセンテージ。(数字) * 職業等で設定されている属性有効度に加算されます。 * * -------- * ・ステート有効度を設定(State Rate) * * [ステート番号] - 耐性を上昇させるステートの番号を4桁の数値で設定する。(数字) * [有効度] - 有効度を表すパーセンテージ。(数字) * 職業等で設定されているステート有効度に乗算されます。 * * -------- * ・ステート有効度を設定の加算バージョン(State Rate Add Ver) * * [ステート番号] - 耐性を上昇させるステートの番号を4桁の数値で設定する。(数字) * [有効度] - 有効度を表すパーセンテージ。(数字) * 職業等で設定されているステート有効度に加算されます。 * * -------- * ・無効化できるステートを追加(State Regist) * * [ステート番号] - 無効化できるステートの番号を4桁の数値で設定する。(数字) * * -------- * ・攻撃時ステートを設定(Attack State) * * [ステート番号] - 攻撃時に付与するステートの番号を4桁の数値で設定する。(数字) * [付与率] - 付与率を表すパーセンテージ。(数字) * 職業等で設定されているステート付与率に加算されます。 * * -------- * ・スキルタイプ追加(Add Skill Type) * * [スキルタイプ番号] - スキルタイプの番号を2桁の数値で設定する。(数字) * * -------- * ・武器装備時の通常能力値の上昇量をアップ(Weapon Mastery) * * [武器タイプ] - 武器タイプの番号を2桁の数値で設定する。(数字) * [上昇量(%)] - 装備時の能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * * -------- * ・武器装備時の追加能力値の上昇量をアップ(Weapon MasteryX) * * [武器タイプ] - 武器タイプの番号を2桁の数値で設定する。(数字) * [上昇量(%)] - 装備時の能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * * -------- * ・武器装備時の特殊能力値の上昇量をアップ(Weapon MasteryS) * * [武器タイプ] - 武器タイプの番号を2桁の数値で設定する。(数字) * [上昇量(%)] - 装備時の能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * (倍率は100%を基準として計算されます) * * -------- * ・武器装備時に特定の通常能力値をアップ(Weapon Parameter Boost) * * [武器タイプ] - 武器タイプの番号を2桁の数値で設定する。(数字) * [能力値番号] - 上昇させる通常能力値の番号を1桁の数値で設定する。(数字) * 0 - HP * 1 - MP * 2 - 攻撃力 * 3 - 防御力 * 4 - 魔法力 * 5 - 魔法防御 * 6 - 敏捷性 * 7 - 運 * [上昇量] - 装備時の能力値の上昇量。(数字) * * -------- * ・武器装備時に特定の追加能力値をアップ(Weapon XParameter Boost) * * [武器タイプ] - 武器タイプの番号を2桁の数値で設定する。(数字) * [能力値番号] - 上昇させる追加能力値の番号を1桁の数値で設定する。(数字) * 0 - 命中率 * 1 - 回避率 * 2 - 会心率 * 3 - 会心回避率 * 4 - 魔法回避率 * 5 - 魔法反射率 * 6 - 反撃率 * 7 - HP再生率 * 8 - MP再生率 * 9 - TP再生率 * [上昇量] - 装備時の能力値の上昇量。(数字) * * -------- * ・武器装備時に特定の特殊能力値をアップ(Weapon SParameter Boost) * * [武器タイプ] - 武器タイプの番号を2桁の数値で設定する。(数字) * [能力値番号] - 上昇させる特殊能力値の番号を1桁の数値で設定する。(数字) * 0 - 狙われ率 * 1 - 防御効果率 * 2 - 回復効果率 * 3 - 薬の知識率 * 4 - MP消費率 * 5 - TPチャージ率 * 6 - 物理ダメージ率 * 7 - 魔法ダメージ率 * 8 - 床ダメージ率 * 9 - 経験値獲得率 * [上昇量] - 装備時の能力値の上昇量。(数字) * * -------- * ・防具装備時の通常能力値をアップ(Armor Mastery) * * [防具タイプ] - 防具タイプの番号を2桁の数値で設定する。(数字) * [上昇量(%)] - 装備時の能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * * -------- * ・防具装備時の追加能力値の上昇量をアップ(Armor MasteryX) * * [防具タイプ] - 防具タイプの番号を2桁の数値で設定する。(数字) * [上昇量(%)] - 装備時の能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * * -------- * ・防具装備時の特殊能力値の上昇量をアップ(Armor MasteryS) * * [防具タイプ] - 防具タイプの番号を2桁の数値で設定する。(数字) * [上昇量(%)] - 装備時の能力値の上昇量。 * %ありなら倍率、なしなら直値となる。(数字) * (倍率は100%を基準として計算されます) * * -------- * ・防具装備時に特定の通常能力値をアップ(Armor Parameter Boost) * * [防具タイプ] - 防具タイプの番号を2桁の数値で設定する。(数字) * [能力値番号] - 上昇させる通常能力値の番号を1桁の数値で設定する。(数字) * 0 - HP * 1 - MP * 2 - 攻撃力 * 3 - 防御力 * 4 - 魔法力 * 5 - 魔法防御 * 6 - 敏捷性 * 7 - 運 * [上昇量] - 装備時の能力値の上昇量。(数字) * * -------- * ・防具装備時に特定の追加能力値をアップ(Armor XParameter Boost) * * [防具タイプ] - 防具タイプの番号を2桁の数値で設定する。(数字) * [能力値番号] - 上昇させる追加能力値の番号を1桁の数値で設定する。(数字) * 0 - 命中率 * 1 - 回避率 * 2 - 会心率 * 3 - 会心回避率 * 4 - 魔法回避率 * 5 - 魔法反射率 * 6 - 反撃率 * 7 - HP再生率 * 8 - MP再生率 * 9 - TP再生率 * [上昇量] - 装備時の能力値の上昇量。(数字) * * -------- * ・防具装備時に特定の特殊能力値をアップ(Armor SParameter Boost) * * [防具タイプ] - 防具タイプの番号を2桁の数値で設定する。(数字) * [能力値番号] - 上昇させる特殊能力値の番号を1桁の数値で設定する。(数字) * 0 - 狙われ率 * 1 - 防御効果率 * 2 - 回復効果率 * 3 - 薬の知識率 * 4 - MP消費率 * 5 - TPチャージ率 * 6 - 物理ダメージ率 * 7 - 魔法ダメージ率 * 8 - 床ダメージ率 * 9 - 経験値獲得率 * [上昇量] - 装備時の能力値の上昇量。(数字) * * -------- * ・攻撃追加回数を追加する(Attack Times Add) * * [追加量] - 攻撃回数を設定する。(数字) * * -------- * ・先制攻撃率をアップ(Preemptive) * * [上昇量] - 先制攻撃率のアップ率を%で設定する。(数字) * * -------- * ・不意打ち率をダウン(Anti Surprise) * * [下降量] - 不意打ち率のダウン率を%で設定する。(数字) * * -------- * ・二刀流を有効にする(Dual Wield) * * * -------- * ・行動回数を追加する(Action Plus) * * [追加確率(%)] - 行動を追加する確率を表すパーセンテージ。(数字) * * -------- * ・自動戦闘を有効にする(Auto Battle) * * * -------- * ・防御を有効にする(Guard) * * * -------- * ・身代わり状態にする(Substitute) * * * -------- * ・TP持ち越しを有効にする(Preserve Tp) * * */ var Imported = Imported || {}; Imported.dsPassiveSkill = true; (function (exports) { 'use strict'; exports.Param = (function() { var ret = {}; var parameters = PluginManager.parameters('dsPassiveSkill'); ret.ShowBattle = Boolean(parameters['Show Battle'] === 'true' || false); ret.ShowBattleSwitchId = Number(parameters['Show Battle Switch ID']); return ret; })(); //-------------------------------------------------------------------------- /** Utility */ function Utility() {} Utility.calcParamBoost = function(baseParam, metaData) { var ret = 0; var re = /([-]?\d+)(%?)/i; var match = re.exec(metaData); if ( match ) { if ( match[2] === '%' ) { var rate = Number(match[1]) * 0.01; ret = Math.floor(baseParam * rate); } else { ret = Number(match[1]); } } return ret; }; Utility.calcXParamBoost = function(metaData) { var ret = 0; var re = /([-]?\d+)/i; var match = re.exec(metaData); if ( match ) { ret = Number(match[1]) * 0.01; } return ret; }; Utility.calcSParamBoost = function(metaData) { var ret = 0; var re = /([-]?\d+)/i; var match = re.exec(metaData); if ( match ) { ret = Number(match[1]) * 0.01; } return ret; }; Utility.calcMastery = function(baseParam, metaData) { var ret = 0; var re = /([-]?\d+)(%?)/i; var match = re.exec(metaData); if ( match ) { if ( match[2] === '%' ) { var rate = Number(match[1]) * 0.01; ret = Math.floor(baseParam * rate); } else { ret = Number(match[1]); } } return ret; }; Utility.calcMasteryX = function(baseParam, metaData) { var ret = 0; var re = /([-]?\d+)(%?)/i; var match = re.exec(metaData); if ( match ) { if ( match[2] === '%' ) { var rate = Number(match[1]) * 0.01; ret = baseParam * rate; } else { ret = Number(match[1]); } } return ret; }; Utility.calcMasteryS = function(baseParam, metaData) { var ret = 0; var re = /([-]?\d+)(%?)/i; var match = re.exec(metaData); if ( match ) { if ( match[2] === '%' ) { var rate = Number(match[1]) * 0.01; ret = (baseParam-1.0) * rate; } else { ret = Number(match[1]); } } return ret; }; //-------------------------------------------------------------------------- /** Game_Actor */ var _Game_Actor_initMembers = Game_Actor.prototype.initMembers; Game_Actor.prototype.refreshSkillTypes = function() { _Game_Actor_initMembers.call(this); this._psSkillTypes = []; }; Game_Actor.prototype.refreshSkillTypes = function() { this._psSkillTypes = []; var skillTypesMax = $dataSystem.skillTypes.length; for ( var ii = 1; ii < skillTypesMax; ii++ ) { var tag = 'passiveAST' + ('00'+ii).slice(-2); var find = false; this.iteratePassiveSkill(tag, function(metaData) { find = true; }); if ( find ) { this._psSkillTypes.push(ii); } } }; var _Game_Actor_refresh = Game_Actor.prototype.refresh; Game_Actor.prototype.refresh = function() { _Game_Actor_refresh.call(this); this.refreshSkillTypes(); }; var _Game_Actor_learnSkill = Game_Actor.prototype.learnSkill; Game_Actor.prototype.learnSkill = function(skillId) { var lastDualWield = this.isDualWield(); _Game_Actor_learnSkill.call(this, skillId); if ( lastDualWield !== this.isDualWield() ) { this.refresh(); } this.refreshSkillTypes(); }; Game_Actor.prototype.iteratePassiveSkill = function(metaName, callback) { this.skills().forEach(function(skill) { if ( skill.meta[metaName] ) { callback(skill.meta[metaName]); } }); }; Game_Actor.prototype.evaluateCondition = function(condition, value) { var ret = false; switch ( condition ) { case 'HPUP': ret = (this.hpRate() >= value * 0.01) ? true : false; break; case 'HPLW': ret = (this.hpRate() <= value * 0.01) ? true : false; break; case 'MPUP': ret = (this.mpRate() >= value * 0.01) ? true : false; break; case 'MPLW': ret = (this.mpRate() <= value * 0.01) ? true : false; break; case 'TPUP': ret = (this.tpRate() >= value * 0.01) ? true : false; break; case 'TPLW': ret = (this.tpRate() <= value * 0.01) ? true : false; break; case 'STAT': ret = this.isStateAffected(value); break; } return ret; }; Game_Actor.prototype.itemTraitsWithId = function(item, code, dataId) { return item.traits.filter(function(trait) { return trait.code === code && trait.dataId === dataId; }); }; Game_Actor.prototype.itemTraitsSum = function(item, code, id) { return this.itemTraitsWithId(item, code, id).reduce(function(r, trait) { return r + trait.value; }, 0); }; var _Game_Actor_paramBase = Game_Actor.prototype.paramBase; Game_Actor.prototype.paramBaseDirect = function(paramId) { return _Game_Actor_paramBase.call(this, paramId); }; Game_Actor.prototype.paramBaseBoost = function(paramId) { var baseParam = this.paramBaseDirect(paramId); var ret = 0; var tagPBST = 'passivePBST' + ('0'+paramId).slice(-1); this.iteratePassiveSkill(tagPBST, function(metaData) { ret += Utility.calcParamBoost(baseParam, metaData); }); var tagPBSTEX = 'passivePBSTEX' + ('0'+paramId).slice(-1); this.iteratePassiveSkill(tagPBSTEX, function(metaData) { var splitData = metaData.split(','); if ( this.evaluateCondition(splitData[1], Number(splitData[2])) ) { ret += Utility.calcParamBoost(baseParam, splitData[0]); } }.bind(this)); var tagINDM = 'passiveINDM' + ('0'+paramId).slice(-1); this.iteratePassiveSkill(tagINDM, function(metaData) { var re = /(\d+)\,([-]?\d+)(%?)/i; var match = re.exec(metaData); if ( match ) { if ( this.hpRate() <= Number(match[1]) * 0.01 ) { if ( match[3] === '%' ) { var rate = Number(match[2]) * 0.01; ret += Math.floor(baseParam * rate); } else { ret += Number(match[2]); } } } }.bind(this)); return ret; }; Game_Actor.prototype.paramBase = function(paramId) { var ret = this.paramBaseDirect(paramId); ret += this.paramBaseBoost(paramId); return ret; }; var _Game_Actor_paramPlus = Game_Actor.prototype.paramPlus; Game_Actor.prototype.paramPlusDirect = function(paramId) { return _Game_Actor_paramPlus.call(this, paramId); }; Game_Actor.prototype.paramPlusBoost = function(paramId) { var ret = 0; this.equips().forEach(function(item) { if ( item ) { if ( DataManager.isWeapon(item) ) { if ( item.params[paramId] > 0 ) { var tagWPNM = 'passiveWPNM' + ('00'+item.wtypeId).slice(-2); this.iteratePassiveSkill(tagWPNM, function(metaData) { ret += Utility.calcMastery(item.params[paramId], metaData); }); } var tagWPBST = 'passiveWPBST' + ('00'+item.wtypeId).slice(-2) + '_' + paramId; this.iteratePassiveSkill(tagWPBST, function(metaData) { ret += Number(metaData); }); } else if ( DataManager.isArmor(item) ) { if ( item.params[paramId] > 0 ) { var tagARMM = 'passiveARMM' + ('00'+item.atypeId).slice(-2); this.iteratePassiveSkill(tagARMM, function(metaData) { ret += Utility.calcMastery(item.params[paramId], metaData); }); } var tagAPBST = 'passiveAPBST' + ('00'+item.atypeId).slice(-2) + '_' + paramId; this.iteratePassiveSkill(tagAPBST, function(metaData) { ret += Number(metaData); }); } } }, this); return ret; }; Game_Actor.prototype.paramPlus = function(paramId) { var ret = this.paramPlusDirect(paramId); ret += this.paramPlusBoost(paramId); return ret; }; var _Game_Actor_xparam = Game_Actor.prototype.xparam; Game_Actor.prototype.xparamDirect = function(xparamId) { return _Game_Actor_xparam.call(this, xparamId); }; Game_Actor.prototype.xparam = function(xparamId) { var ret = this.xparamDirect(xparamId); var tagPBST = 'passiveXPBST' + ('0'+xparamId).slice(-1); this.iteratePassiveSkill(tagPBST, function(metaData) { ret += Utility.calcXParamBoost(metaData); }); var tagPBSTEX = 'passiveXPBSTEX' + ('0'+xparamId).slice(-1); this.iteratePassiveSkill(tagPBSTEX, function(metaData) { var splitData = metaData.split(','); if ( this.evaluateCondition(splitData[1], Number(splitData[2])) ) { ret += Utility.calcXParamBoost(splitData[0]); } }.bind(this)); var tagINDM = 'passiveXINDM' + ('0'+xparamId).slice(-1); this.iteratePassiveSkill(tagINDM, function(metaData) { var re = /(\d+)\,([-]?\d+)/i; var match = re.exec(metaData); if ( match ) { if ( this.hpRate() <= Number(match[1]) * 0.01 ) { ret += Number(match[2]) * 0.01; } } }.bind(this)); this.equips().forEach(function(item) { if ( item ) { var value = this.itemTraitsSum(item, Game_BattlerBase.TRAIT_XPARAM, xparamId); if ( DataManager.isWeapon(item) ) { if ( value > 0 ) { var tagWPNMX = 'passiveWPNMX' + ('00'+item.wtypeId).slice(-2); this.iteratePassiveSkill(tagWPNMX, function(metaData) { ret += Utility.calcMasteryX(value, metaData); }); } var tagWPBST = 'passiveWXPBST' + ('00'+item.wtypeId).slice(-2) + '_' + xparamId; this.iteratePassiveSkill(tagWPBST, function(metaData) { ret += Number(metaData) * 0.01; }); } else if ( DataManager.isArmor(item) ) { if ( value > 0 ) { var tagARMMX = 'passiveARMMX' + ('00'+item.atypeId).slice(-2); this.iteratePassiveSkill(tagARMMX, function(metaData) { ret += Utility.calcMasteryX(value, metaData); }); } var tagAPBST = 'passiveAXPBST' + ('00'+item.atypeId).slice(-2) + '_' + xparamId; this.iteratePassiveSkill(tagAPBST, function(metaData) { ret += Number(metaData) * 0.01; }); } } }, this); return ret; }; var _Game_Actor_sparam = Game_Actor.prototype.sparam; Game_Actor.prototype.sparamDirect = function(sparamId) { return _Game_Actor_sparam.call(this, sparamId); }; Game_Actor.prototype.sparam = function(sparamId) { var ret = this.sparamDirect(sparamId); var tagPBST = 'passiveSPBST' + ('0'+sparamId).slice(-1); this.iteratePassiveSkill(tagPBST, function(metaData) { ret += Utility.calcSParamBoost(metaData); }); var tagPBSTEX = 'passiveSPBSTEX' + ('0'+sparamId).slice(-1); this.iteratePassiveSkill(tagPBSTEX, function(metaData) { var splitData = metaData.split(','); if ( this.evaluateCondition(splitData[1], Number(splitData[2])) ) { ret += Utility.calcSParamBoost(splitData[0]); } }.bind(this)); var tagINDM = 'passiveSINDM' + ('0'+sparamId).slice(-1); this.iteratePassiveSkill(tagINDM, function(metaData) { var re = /(\d+)\,([-]?\d+)/i; var match = re.exec(metaData); if ( match ) { if ( this.hpRate() <= Number(match[1]) * 0.01 ) { ret += Number(match[2]) * 0.01; } } }.bind(this)); this.equips().forEach(function(item) { if ( item ) { var value = this.itemTraitsSum(item, Game_BattlerBase.TRAIT_SPARAM, sparamId); if ( DataManager.isWeapon(item) ) { if ( value > 0 ) { var tagWPNMS = 'passiveWPNMS' + ('00'+item.wtypeId).slice(-2); this.iteratePassiveSkill(tagWPNMS, function(metaData) { ret += Utility.calcMasteryS(value, metaData); }); } var tagWPBST = 'passiveWSPBST' + ('00'+item.wtypeId).slice(-2) + '_' + sparamId; this.iteratePassiveSkill(tagWPBST, function(metaData) { ret += Number(metaData) * 0.01; }); } else if ( DataManager.isArmor(item) ) { if ( value > 0 ) { var tagARMMS = 'passiveARMMS' + ('00'+item.atypeId).slice(-2); this.iteratePassiveSkill(tagARMMS, function(metaData) { ret += Utility.calcMasteryS(value, metaData); }); } var tagAPBST = 'passiveASPBST' + ('00'+item.atypeId).slice(-2) + '_' + sparamId; this.iteratePassiveSkill(tagAPBST, function(metaData) { ret += Number(metaData) * 0.01; }); } } }, this); return ret; }; var _Game_Actor_elementRate = Game_Actor.prototype.elementRate; Game_Actor.prototype.elementRate = function(elementId) { var ret = _Game_Actor_elementRate.call(this, elementId); var tag = 'passiveELEM' + ('00'+elementId).slice(-2); this.iteratePassiveSkill(tag, function(metaData) { ret *= Number(metaData) * 0.01; }); ret += this.addElementRate(elementId); return Math.max(ret, 0); }; Game_Actor.prototype.addElementRate = function(elementId) { var ret = 0; var tag = 'passiveELEM_ADD' + ('00'+elementId).slice(-2); this.iteratePassiveSkill(tag, function(metaData) { ret += Number(metaData) * 0.01; }); return ret; }; var _Game_Actor_stateRate = Game_Actor.prototype.stateRate; Game_Actor.prototype.stateRate = function(stateId) { var ret = _Game_Actor_stateRate.call(this, stateId); var tag = 'passiveSTAT' + ('0000'+stateId).slice(-4); this.iteratePassiveSkill(tag, function(metaData) { ret *= Number(metaData) * 0.01; }); ret += this.addStateRate(stateId); return Math.max(ret, 0); }; Game_Actor.prototype.addStateRate = function(stateId) { var ret = 0; var tag = 'passiveSTAT_ADD' + ('0000'+stateId).slice(-4); this.iteratePassiveSkill(tag, function(metaData) { ret += Number(metaData) * 0.01; }); return ret; }; var _Game_Actor_stateResistSet = Game_Actor.prototype.stateResistSet; Game_Actor.prototype.stateResistSet = function() { var ret = _Game_Actor_stateResistSet.call(this); var num = $dataStates.length; for ( var ii = 1; ii < num; ii++ ) { var tag = 'passiveSTREG' + ('0000'+ii).slice(-4); this.iteratePassiveSkill(tag, function(metaData) { if ( !ret.contains(ii) ) { ret.push(ii); } }); } return ret; }; var _Game_Actor_attackStates = Game_Actor.prototype.attackStates; Game_Actor.prototype.attackStates = function() { var ret = _Game_Actor_attackStates.call(this); var num = $dataStates.length; for ( var ii = 1; ii < num; ii++ ) { var tag = 'passiveATKST' + ('0000'+ii).slice(-4); this.iteratePassiveSkill(tag, function(metaData) { if ( !ret.contains(ii) ) { ret.push(ii); } }); } return ret; }; var _Game_Actor_attackStatesRate = Game_Actor.prototype.attackStatesRate; Game_Actor.prototype.attackStatesRate = function(stateId) { var ret = _Game_Actor_attackStatesRate.call(this, stateId); var tag = 'passiveATKST' + ('0000'+stateId).slice(-4); this.iteratePassiveSkill(tag, function(metaData) { var re = /([-]?\d+)/i; var match = re.exec(metaData); if ( match ) { ret += Number(match[1]) * 0.01; } }); return ret; }; var _Game_Actor_attackTimesAdd = Game_Actor.prototype.attackTimesAdd; Game_Actor.prototype.attackTimesAdd = function() { var ret = _Game_Actor_attackTimesAdd.call(this); var tag = 'passiveATADD'; this.iteratePassiveSkill(tag, function(metaData) { ret += Number(metaData); }); return ret; }; var _Game_Actor_addedSkillTypes = Game_Actor.prototype.addedSkillTypes; Game_Actor.prototype.addedSkillTypes = function() { var ret = _Game_Actor_addedSkillTypes.call(this); if ( this._psSkillTypes ) { this._psSkillTypes.forEach(function(stype) { if ( ret.indexOf(stype) < 0 ) { ret.push(stype); } }); } return ret; }; var _Game_Actor_isEquipWtypeOk = Game_Actor.prototype.isEquipWtypeOk; Game_Actor.prototype.isEquipWtypeOk = function(wtypeId) { var ret = _Game_Actor_isEquipWtypeOk.call(this, wtypeId); var tag = 'passiveEWPN' + ('00'+wtypeId).slice(-2); this.iteratePassiveSkill(tag, function(metaData) { ret = true; }); return ret; }; var _Game_Actor_isEquipAtypeOk = Game_Actor.prototype.isEquipAtypeOk; Game_Actor.prototype.isEquipAtypeOk = function(atypeId) { var ret = _Game_Actor_isEquipAtypeOk.call(this, atypeId); var tag = 'passiveEARM' + ('00'+atypeId).slice(-2); this.iteratePassiveSkill(tag , function(metaData) { ret = true; }); return ret; }; var _Game_Actor_isDualWield = Game_Actor.prototype.isDualWield; Game_BattlerBase.prototype.isDualWield = function() { var ret = _Game_Actor_isDualWield.call(this); var tag = 'passiveDUAL'; this.iteratePassiveSkill(tag, function(metaData) { ret = true; }); return ret; }; var _Game_Actor_actionPlusSet = Game_Actor.prototype.actionPlusSet; Game_Actor.prototype.actionPlusSet = function() { var ret = _Game_Actor_actionPlusSet.call(this); var tag = 'passiveAPLUS'; this.iteratePassiveSkill(tag, function(metaData) { var re = /(\d+)/i; var match = re.exec(metaData); if ( match ) { ret.push(Number(match[1]) * 0.01); } }); return ret; }; var _Game_Actor_isAutoBattle = Game_Actor.prototype.isAutoBattle; Game_Actor.prototype.isAutoBattle = function() { var ret = _Game_Actor_isAutoBattle.call(this); var tag = 'passiveAUTO'; this.iteratePassiveSkill(tag, function(metaData) { ret = true; }); return ret; }; var _Game_Actor_isGuard = Game_Actor.prototype.isGuard; Game_Actor.prototype.isGuard = function() { var ret = _Game_Actor_isGuard.call(this); if ( this.canMove() ) { var tag = 'passiveGUARD'; this.iteratePassiveSkill(tag, function(metaData) { ret = true; }); } return ret; }; var _Game_Actor_isSubstitute = Game_Actor.prototype.isSubstitute; Game_Actor.prototype.isSubstitute = function() { var ret = _Game_Actor_isSubstitute.call(this); if ( this.canMove() ) { var tag = 'passiveSUBS'; this.iteratePassiveSkill(tag, function(metaData) { ret = true; }); } return ret; }; var _Game_Actor_isPreserveTp = Game_Actor.prototype.isPreserveTp; Game_Actor.prototype.isPreserveTp = function(flagId) { var ret = _Game_Actor_isPreserveTp.call(this); var tag = 'passivePRETP'; this.iteratePassiveSkill(tag, function(metaData) { ret = true; }); return ret; }; //-------------------------------------------------------------------------- /** Game_Party */ var _Game_Party_ratePreemptive = Game_Party.prototype.ratePreemptive; Game_Party.prototype.ratePreemptive = function(troopAgi) { var rate = _Game_Party_ratePreemptive.call(this, troopAgi); this.battleMembers().some(function(actor) { actor.iteratePassiveSkill('passivePREE', function(metaData) { rate += Number(metaData) * 0.01; }); }); return rate.clamp(0.0, 1.0); }; var _Game_Party_rateSurprise = Game_Party.prototype.rateSurprise; Game_Party.prototype.rateSurprise = function(troopAgi) { var rate = _Game_Party_rateSurprise.call(this, troopAgi); this.battleMembers().some(function(actor) { actor.iteratePassiveSkill('passiveASUP', function(metaData) { rate -= Number(metaData) * 0.01 * rate; }); }); return rate.clamp(0.0, 1.0); }; //-------------------------------------------------------------------------- /** Window_BattleSkill */ var _Window_BattleSkill_includes = Window_BattleSkill.prototype.includes; Window_BattleSkill.prototype.includes = function(item) { if ( !this.showPassiveSkill() ) { if ( item ) { var re = / 0 ) { return $gameSwitches.value(exports.Param.ShowBattleSwitchId); } else { return exports.Param.ShowBattle; } }; }((this.dsPassiveSkill = this.dsPassiveSkill || {})));