diff --git a/src/App.vue b/src/App.vue
index 393b93d..d638585 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -31,19 +31,6 @@ import {GameData, loadAvailableQuests, loadGame, saveGame} from "@/GameData";
export default defineComponent({
name: "GuildView",
- watch: {
- adventurers: {
- deep: true,
- handler(newAdventurers) {
- for (const adventurerId in newAdventurers) {
- const adventurer = newAdventurers[adventurerId] as Adventurer;
- if (adventurer.canLevelUp()) {
- adventurer.levelUp();
- }
- }
- }
- }
- },
data: () => ({
guild: new Guild(1, 500),
lastQuestGot: {
@@ -129,7 +116,7 @@ export default defineComponent({
this.guild.gold += missive.goldReward;
for (const adventurerId in missive.adventurers) {
const adventurer = missive.adventurers[adventurerId];
- adventurer.exp += (missive.expReward / missive.adventurers.length);
+ adventurer.addExp(missive.expReward / missive.adventurers.length);
adventurer.busy = false;
}
missive.adventurers = [];
diff --git a/src/classes/Adventurer.ts b/src/classes/Adventurer.ts
index aec026f..b57a6a1 100644
--- a/src/classes/Adventurer.ts
+++ b/src/classes/Adventurer.ts
@@ -5,6 +5,7 @@ export class Adventurer {
level: number;
exp: number;
attackExponent: number;
+ prestige: number;
busy: boolean;
constructor(
@@ -13,7 +14,8 @@ export class Adventurer {
portrait: string,
attackExponent: number,
level: number = 1,
- exp: number = 0
+ exp: number = 0,
+ prestige: number = 0
) {
this.id = id;
this.name = name;
@@ -21,6 +23,7 @@ export class Adventurer {
this.attackExponent = attackExponent;
this.level = level;
this.exp = exp;
+ this.prestige = prestige;
this.busy = false;
}
@@ -29,10 +32,22 @@ export class Adventurer {
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.level < getMaxLevelForPrestige(this.prestige)) return false;
+ return this.prestige < 5
+ }
+
getNextLevelExpRequirement(): number {
return this.level * 3;
}
@@ -44,12 +59,33 @@ export class Adventurer {
return (this.exp / this.getNextLevelExpRequirement()) * 100;
}
+ addExp(exp: number): void {
+ if (this.isMaxLevel()) return;
+ this.exp += exp;
+ if (this.canLevelUp()) {
+ this.levelUp();
+ }
+ }
+
getAttack(): number {
- return Math.floor(2 * this.level ^ this.attackExponent);
+ 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);
}
diff --git a/src/classes/Quest.ts b/src/classes/Quest.ts
index e37c2c4..5d7efcc 100644
--- a/src/classes/Quest.ts
+++ b/src/classes/Quest.ts
@@ -40,28 +40,28 @@ export function getQuestWithRewards(quest: Quest) {
switch (quest.rank) {
case QuestRank.S:
- // at level 30 adventurers have ~2353 dps, this will take 30 seconds on level 30
- maxProgress = 70590
+ // at level 30 adventurers have ~6513 dps, this will take 30 seconds on level 30
+ maxProgress = 195390;
break;
case QuestRank.A:
- // at level 25 adventurers have ~1122 dps, this will take 15 seconds on level 25
- maxProgress = 16800
+ // at level 25 adventurers have ~2051 dps, this will take 15 seconds on level 25
+ maxProgress = 30770;
break;
case QuestRank.B:
- // at level 20 adventurers have ~564 dps, this will take 15 seconds on level 20
- maxProgress = 8460;
+ // at level 20 adventurers have ~645 dps, this will take 15 seconds on level 20
+ maxProgress = 9690;
break;
case QuestRank.C:
- // at level 15 adventurers have ~256 dps, this will take 15 seconds on level 15
- maxProgress = 3840;
+ // at level 15 adventurers have ~203 dps, this will take 15 seconds on level 15
+ maxProgress = 3045;
break;
case QuestRank.D:
- // at level 10 adventurers have ~103 dps, this will take 15 seconds on level 10
- maxProgress = 1545;
+ // at level 10 adventurers have ~64 dps, this will take 15 seconds on level 10
+ maxProgress = 960;
break;
case QuestRank.E:
- // at level 5 adventurers have ~45 dps, this will take 15 seconds on level 5
- maxProgress = 675;
+ // at level 5 adventurers have ~20 dps, this will take 15 seconds on level 5
+ maxProgress = 300;
break;
case QuestRank.F:
// at level 1 adventurers have ~8 dps, this will take 15 seconds on level 1
@@ -74,7 +74,7 @@ export function getQuestWithRewards(quest: Quest) {
// add some randomness to the rewards
goldReward = Math.floor(randomNumberBetween(goldReward * 0.95, goldReward * 1.1));
- expReward = Math.max(1, Math.floor(randomNumberBetween(expReward * 0.95, expReward * 1.1)));
+ expReward = Math.max(1, Math.floor(randomNumberBetween(expReward * 0.95, expReward * 1.2)));
return new Quest(quest.id, quest.rank, quest.title, quest.text, maxProgress, expReward, goldReward);
}
diff --git a/src/components/AdventurerTile.vue b/src/components/AdventurerTile.vue
index cc97586..baf33c3 100644
--- a/src/components/AdventurerTile.vue
+++ b/src/components/AdventurerTile.vue
@@ -4,7 +4,7 @@
:title="adventurer.name + (adventurer.busy ? ' (busy)' : '')"
>
-