mirror of
https://github.com/YouHaveTrouble/GuildMaster.git
synced 2026-05-11 22:16:59 +00:00
93 lines
2.1 KiB
TypeScript
93 lines
2.1 KiB
TypeScript
export class Adventurer {
|
|
id: string;
|
|
name: string;
|
|
portrait: string;
|
|
level: number;
|
|
exp: number;
|
|
attackExponent: number;
|
|
prestige: number;
|
|
busy: boolean;
|
|
|
|
constructor(
|
|
id: string,
|
|
name: string,
|
|
portrait: string,
|
|
attackExponent: number,
|
|
level: number = 1,
|
|
exp: number = 0,
|
|
prestige: number = 0
|
|
) {
|
|
this.id = id;
|
|
this.name = name;
|
|
this.portrait = portrait;
|
|
this.attackExponent = attackExponent;
|
|
this.level = level;
|
|
this.exp = exp;
|
|
this.prestige = prestige;
|
|
this.busy = false;
|
|
}
|
|
|
|
levelUp(): void {
|
|
this.exp = 0;
|
|
this.level += 1;
|
|
}
|
|
|
|
prestigeUp(): void {
|
|
this.level = 1;
|
|
this.exp = 0;
|
|
this.prestige += 1;
|
|
}
|
|
|
|
canLevelUp(): boolean {
|
|
if (this.level >= this.getMaxLevel()) return false;
|
|
return this.exp >= this.getNextLevelExpRequirement();
|
|
}
|
|
|
|
canPrestigeUp(): boolean {
|
|
if (this.busy) return false;
|
|
if (this.level < getMaxLevelForPrestige(this.prestige)) return false;
|
|
return this.prestige < 5
|
|
}
|
|
|
|
getNextLevelExpRequirement(): number {
|
|
return Math.max(1, Math.floor((3 * Math.pow(1.2, this.level - 1)) * Math.pow(1.025, this.level - 1)));
|
|
}
|
|
|
|
/**
|
|
* Returns the percentage of exp to the next level
|
|
*/
|
|
getExpPercentage(): number {
|
|
return (this.exp / this.getNextLevelExpRequirement()) * 100;
|
|
}
|
|
|
|
addExp(exp: number): void {
|
|
if (this.isMaxLevel()) return;
|
|
this.exp += exp;
|
|
if (this.canLevelUp()) {
|
|
this.levelUp();
|
|
}
|
|
}
|
|
|
|
getAttack(): number {
|
|
const scalingFactor = Math.pow(1.05, this.level - 1);
|
|
return (2 * scalingFactor) * Math.pow(this.attackExponent, this.level - 1);
|
|
}
|
|
|
|
getDPS(): number {
|
|
return this.getAttack() * 4;
|
|
}
|
|
|
|
getMaxLevel(): number {
|
|
return getMaxLevelForPrestige(this.prestige);
|
|
}
|
|
|
|
isMaxLevel(): boolean {
|
|
return this.level >= this.getMaxLevel();
|
|
}
|
|
|
|
}
|
|
|
|
function getMaxLevelForPrestige(prestige: number): number {
|
|
return 25 + (prestige * 5);
|
|
}
|