// ==================================================
// Cae_MaxLevelAdjust.js
// ==================================================
/*:
* @plugindesc v1.0 - Adjust max actor level via notetags.
* @author Caethyril
*
* @help Plugin Commands:
* None.
*
* Class notetag:
* <Max Level: x>
* - sets max level to x
* - overrides actor's original max level
*
* State notetag:
* <Max Level Add: x>
* - adds x to base max level (x can be negative)
* - multiple notetags add their values
*/
var Imported = Imported || {}; // Import namespace
Imported.Cae_MaxLevelAdjust = 1.0; // Import declaration
var CAE = CAE || {}; // Author namespace
CAE.MaxLevelAdjust = CAE.MaxLevelAdjust || {}; // Plugin namespace
(function(_) {
'use strict';
const TAG_ML = 'Max Level';
const TAG_MLADD = 'Max Level Add';
// Notetag value getters
_.getTag = function(o, p) { let r = o.meta[p]; return isNaN(r) ? 0 : parseInt(r); };
_.getTagML = function(o) { return _.getTag(o, TAG_ML); };
_.getTagMLAdd = function(o) { return _.getTag(o, TAG_MLADD); };
// For base max level (class tag or default)
_.getMaxLevel = function(actor) {
return _.getTagML(actor.currentClass()) || _.Game_Actor_maxLevel.call(actor);
};
// Returns sum of contributions from relevant state notetags
_.getMaxLevelAdd = function(actor) {
let s = actor.states();
let v = 0;
s.forEach(function(o) { v += _.getTagMLAdd(o) });
return v;
};
// Refreshes input actor's level if appropriate
_.refresh = function(actor) {
let newML = actor.level.clamp(0, actor.maxLevel());
if (actor._level !== newML) {
actor._level = newML;
actor.refresh();
}
};
// Change of calculations! (The alias is called via getMaxLevel.)
_.Game_Actor_maxLevel = Game_Actor.prototype.maxLevel;
Game_Actor.prototype.maxLevel = function() {
return _.getMaxLevel(this) + _.getMaxLevelAdd(this);
};
// Check/impose max level when changing class
_.Game_Actor_changeClass = Game_Actor.prototype.changeClass;
Game_Actor.prototype.changeClass = function(classId, keepExp) {
_.Game_Actor_changeClass.call(this, classId, keepExp);
_.refresh(this);
};
// Check/impose max level when adding states
_.Game_Actor_addNewState = Game_Actor.prototype.addNewState;
Game_Actor.prototype.addNewState = function(stateId) {
_.Game_Actor_addNewState.call(this, stateId);
_.refresh(this);
};
})(CAE.MaxLevelAdjust);