//============================================================================= // PartyAbilityRate.js // ---------------------------------------------------------------------------- // (C)2016 Triacontane // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Version // 1.1.0 2023/04/23 タグの値に0を設定できるよう修正 // 1.0.1 2019/06/21 獲得EXPとゴールドに端数が生じた場合切り捨てるよう修正 // 1.0.0 2016/05/09 初版 // ---------------------------------------------------------------------------- // [Blog] : https://triacontane.blogspot.jp/ // [Twitter]: https://twitter.com/triacontane/ // [GitHub] : https://github.com/triacontane/ //============================================================================= /*: * @plugindesc Party ability rate * @author triacontane * * @help enable customize party ability rate * * note * -> Encounter rate 1/4 * -> Raise preemptive 8 times * -> Gold triple * -> Drop item triple * * This plugin is released under the MIT License. */ /*:ja * @plugindesc パーティ能力レート設定プラグイン * @author トリアコンタン * * @help パーティ能力にレートを設定できます。 * パーティ特徴を定義したデータベースのメモ欄に以下の通り設定してください。 * タグとは別にパーティ能力の特徴も別途指定してください。 * * // エンカウント率が通常の1/4になります。 * // 先制攻撃の確率が8倍になります。 * // 獲得金額が0.5倍になります。 *  (タグ名は設定する値にかかわらず「PAR獲得金額2倍」と記述してください) * // アイテム入手確率が4倍になります。(同上) * * 複数のレートが重複した場合はもっとも数字の大きいものが優先されます。 * * このプラグインにはプラグインコマンドはありません。 * * 利用規約: * 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等) * についても制限はありません。 * このプラグインはもうあなたのものです。 */ (function () { 'use strict'; var metaTagPrefix = 'PAR'; var getArgNumber = function (arg, min, max) { if (arguments.length < 2) min = -Infinity; if (arguments.length < 3) max = Infinity; return (parseFloat(convertEscapeCharactersAndEval(arg, true)) || 0).clamp(min, max); }; var getMetaValue = function(object, name) { var metaTagName = metaTagPrefix + (name ? name : ''); return object.meta.hasOwnProperty(metaTagName) ? object.meta[metaTagName] : undefined; }; var getMetaValues = function(object, names) { if (!Array.isArray(names)) return getMetaValue(object, names); for (var i = 0, n = names.length; i < n; i++) { var value = getMetaValue(object, names[i]); if (value !== undefined) return value; } return undefined; }; var convertEscapeCharactersAndEval = function(text, evalFlg) { if (text === null || text === undefined) { text = evalFlg ? '0' : ''; } var window = SceneManager._scene._windowLayer.children[0]; if (window) { var result = window.convertEscapeCharacters(text); return evalFlg ? eval(result) : result; } else { return text; } }; Game_BattlerBase.prototype.partyAbilityRate = function(abilityNames, defaultValue) { var result = defaultValue; this.traitObjects().forEach(function (traitObject) { var metaValue = getMetaValues(traitObject, abilityNames); if (metaValue) result = getArgNumber(metaValue, result); }.bind(this)); return result; }; Game_Party.prototype.partyAbilityRate = function(abilityNames, defaultValue) { var result = null; this.battleMembers().forEach(function(actor) { result = actor.partyAbilityRate(abilityNames, result); }); return result === null ? defaultValue : result; }; Game_Party.prototype.getEncounterHalfRate = function() { return this.partyAbilityRate(['エンカウント半減', 'EncounterHalf'], 2); }; Game_Party.prototype.getRaisePreemptiveRate = function() { return this.partyAbilityRate(['先制攻撃率アップ', 'RaisePreemptive'], 4); }; Game_Party.prototype.getGoldDoubleRate = function() { return this.partyAbilityRate(['獲得金額2倍', 'GoldDouble'], 2); }; Game_Party.prototype.getDropItemDoubleRate = function() { return this.partyAbilityRate(['アイテム入手率2倍', 'DropItemDouble'], 2); }; var _Game_Party_ratePreemptive = Game_Party.prototype.ratePreemptive; Game_Party.prototype.ratePreemptive = function(troopAgi) { var rate = _Game_Party_ratePreemptive.apply(this, arguments); if (this.hasRaisePreemptive()) { rate /= 4; rate *= this.getRaisePreemptiveRate(); } return rate; }; var _Game_Player_encounterProgressValue = Game_Player.prototype.encounterProgressValue; Game_Player.prototype.encounterProgressValue = function() { var value = _Game_Player_encounterProgressValue.apply(this, arguments); if ($gameParty.hasEncounterHalf()) { value /= 0.5; value /= $gameParty.getEncounterHalfRate(); } return value; }; var _Game_Troop_goldRate = Game_Troop.prototype.goldRate; Game_Troop.prototype.goldRate = function() { var rate =_Game_Troop_goldRate.apply(this, arguments); if ($gameParty.hasGoldDouble()) { rate /= 2; rate *= $gameParty.getGoldDoubleRate(); } return rate; }; var _Game_Enemy_dropItemRate = Game_Enemy.prototype.dropItemRate; Game_Enemy.prototype.dropItemRate = function() { var rate = _Game_Enemy_dropItemRate.apply(this, arguments); if ($gameParty.hasDropItemDouble()) { rate /= 2; rate *= $gameParty.getDropItemDoubleRate(); } return rate; }; var _Game_Troop_expTotal = Game_Troop.prototype.expTotal; Game_Troop.prototype.expTotal = function() { return Math.floor(_Game_Troop_expTotal.apply(this, arguments)); }; var _Game_Troop_goldTotal = Game_Troop.prototype.goldTotal; Game_Troop.prototype.goldTotal = function() { return Math.floor(_Game_Troop_goldTotal.apply(this, arguments)); }; })();