tiny-essentials
Version:
Collection of small, essential scripts designed to be used across various projects. These simple utilities are crafted for speed, ease of use, and versatility.
1 lines • 3.05 kB
JavaScript
(()=>{"use strict";var e={d:(r,t)=>{for(var a in t)e.o(t,a)&&!e.o(r,a)&&Object.defineProperty(r,a,{enumerable:!0,get:t[a]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r)},r={};e.d(r,{TinyLevelUp:()=>t});const t=class{constructor(e,r){if("number"!=typeof e||Number.isNaN(e))throw new Error("giveExp must be a valid number");if("number"!=typeof r||Number.isNaN(r))throw new Error("expLevel must be a valid number");this.giveExp=e,this.expLevel=r}createUser(){return{exp:0,level:1,totalExp:0}}validateUser(e){if("number"!=typeof e.exp||Number.isNaN(e.exp))throw new Error("exp must be a valid number");if("number"!=typeof e.level||Number.isNaN(e.level))throw new Error("level must be a valid number");if(e.level<1)throw new Error("level must be at least 1");if("number"!=typeof e.totalExp||Number.isNaN(e.totalExp))throw new Error("totalExp must be a valid number")}isValidUser(e){return!("number"!=typeof e.exp||Number.isNaN(e.exp)||"number"!=typeof e.level||Number.isNaN(e.level)||e.level<1||"number"!=typeof e.totalExp||Number.isNaN(e.totalExp))}getGiveExpBase(){if("number"!=typeof this.giveExp||Number.isNaN(this.giveExp))throw new Error("giveExp must be a valid number");return this.giveExp}getExpLevelBase(){if("number"!=typeof this.expLevel||Number.isNaN(this.expLevel))throw new Error("expLevel must be a valid number");return this.expLevel}expValidator(e){const r=this.getExpLevelBase();this.validateUser(e);let t=0;const a=r*e.level;return e.exp>=a&&(e.level++,t=e.exp-a,e.exp=0,t>0)?this.give(e,t,"extra"):e.exp<1&&e.level>1&&(e.level--,t=Math.abs(e.exp),e.exp=r*e.level,t>0)?this.remove(e,t,"extra"):e}getTotalExp(e){this.validateUser(e);let r=0;for(let t=1;t<=e.level;t++)r+=this.getExpLevelBase()*t;return r+=e.exp,r}expGenerator(e=1){if("number"!=typeof e||Number.isNaN(e))throw new Error("multi must be a valid number");return Math.floor(Math.random()*this.getGiveExpBase())*e}getMissingExp(e){return this.getProgress(e)-e.exp}progress(e){return this.getProgress(e)}getProgress(e){return this.validateUser(e),this.getExpLevelBase()*e.level}set(e,r){if("number"!=typeof r||Number.isNaN(r))throw new Error("value must be a valid number");return e.exp=r,this.expValidator(e),e.totalExp=this.getTotalExp(e),e}give(e,r=0,t="add",a=1){if("number"!=typeof a||Number.isNaN(a))throw new Error("multi must be a valid number");if("number"!=typeof r||Number.isNaN(r))throw new Error("extraExp must be a valid number");if("string"!=typeof t)throw new Error("type must be a valid string");return"add"===t?e.exp+=this.expGenerator(a)+r:"extra"===t&&(e.exp+=r),this.expValidator(e),e.totalExp=this.getTotalExp(e),e}remove(e,r=0,t="add",a=1){if("number"!=typeof a||Number.isNaN(a))throw new Error("multi must be a valid number");if("number"!=typeof r||Number.isNaN(r))throw new Error("extraExp must be a valid number");if("string"!=typeof t)throw new Error("type must be a valid string");return"add"===t?e.exp-=this.expGenerator(a)+r:"extra"===t&&(e.exp-=r),this.expValidator(e),e.totalExp=this.getTotalExp(e),e}};window.TinyLevelUp=r.TinyLevelUp})();