From 40d5a876b8e6b05c95680f8c2d4765386753c5db Mon Sep 17 00:00:00 2001 From: youhavetrouble Date: Sun, 23 Apr 2023 15:22:40 +0200 Subject: [PATCH] add quest exp modifier upgrade --- src/App.vue | 8 +++-- src/classes/Guild.ts | 10 +++++-- src/classes/Quest.ts | 5 ++-- .../AdventurerCapacityUpgrade.ts | 2 +- src/classes/guildUpgrades/QuestExpUpgrade.ts | 24 +++++++++++++++ src/components/UpgradesList.vue | 29 +++++++++++++++++-- 6 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 src/classes/guildUpgrades/QuestExpUpgrade.ts diff --git a/src/App.vue b/src/App.vue index d4151e8..9f59197 100644 --- a/src/App.vue +++ b/src/App.vue @@ -36,8 +36,9 @@ import { saveGame } from "@/GameData"; import type {GuildUpgrade} from "@/classes/GuildUpgrade"; -import {AdventurerCapacityUpgrade} from "@/classes/guildUpgrades/AdventurerCapacityUpgrade"; +import AdventurerCapacityUpgrade from "@/classes/guildUpgrades/AdventurerCapacityUpgrade"; import {getNewAdventurerForHire} from "@/classes/Recruitment"; +import QuestExpUpgrade from "@/classes/guildUpgrades/QuestExpUpgrade"; export default defineComponent({ name: "GuildView", @@ -132,7 +133,7 @@ export default defineComponent({ const questsForRank = this.quests[rank] as { [key: string]: Quest }; const randomId = keys.length * Math.random() << 0; const randomIdString = keys[randomId] as string; - return getQuestWithRewards(questsForRank[randomIdString]); + return getQuestWithRewards(questsForRank[randomIdString], this.guild.expModifier.getModifier()); }, createMissive(questToAdd: Quest, rank: QuestRank) { const quest = JSON.parse(JSON.stringify(questToAdd)); @@ -150,6 +151,9 @@ export default defineComponent({ if (saveData.guild.adventurerCapacity) { guildUpgrades.adventurerCapacity = new AdventurerCapacityUpgrade(saveData.guild.adventurerCapacity.level); } + if (saveData.guild.expModifier) { + guildUpgrades.expModifier = new QuestExpUpgrade(saveData.guild.expModifier.level); + } this.guild = new Guild(saveData.guild.level, saveData.guild.gold, guildUpgrades); diff --git a/src/classes/Guild.ts b/src/classes/Guild.ts index 8d5b189..0799750 100644 --- a/src/classes/Guild.ts +++ b/src/classes/Guild.ts @@ -1,6 +1,7 @@ import type {GuildUpgrade} from "@/classes/GuildUpgrade"; -import {AdventurerCapacityUpgrade} from "@/classes/guildUpgrades/AdventurerCapacityUpgrade"; +import AdventurerCapacityUpgrade from "@/classes/guildUpgrades/AdventurerCapacityUpgrade"; import {formatGold} from "@/classes/NumberMagic"; +import QuestExpUpgrade from "@/classes/guildUpgrades/QuestExpUpgrade"; export class Guild { @@ -9,6 +10,7 @@ export class Guild { displayUpgradeCost: number|string; upgradeCost: number|null = null; adventurerCapacity: AdventurerCapacityUpgrade; + expModifier: QuestExpUpgrade; constructor(level: number, gold: number, upgrades: {[index:string]: GuildUpgrade} = {}) { this.gold = gold; @@ -18,6 +20,7 @@ export class Guild { this.upgradeCost = this.getUpgradeCost(); this.adventurerCapacity = upgrades.adventurerCapacity as AdventurerCapacityUpgrade ?? new AdventurerCapacityUpgrade(); + this.expModifier = upgrades.expModifier as QuestExpUpgrade ?? new QuestExpUpgrade(); } @@ -43,7 +46,7 @@ export class Guild { } isMaxLevel(): boolean { - return this.level >= 7; + return this.level >= 8; } } @@ -53,5 +56,6 @@ const upgradeCosts = { "3": 5000, "4": 10000, "5": 25000, - "6": 50000, + "6": 100000, + "7": 750000, } as {[index:string]: number} diff --git a/src/classes/Quest.ts b/src/classes/Quest.ts index 5d7efcc..e9b4174 100644 --- a/src/classes/Quest.ts +++ b/src/classes/Quest.ts @@ -33,8 +33,9 @@ export class Quest { /** * Generate rewards for a quest and return it * @param quest + * @param expModifier - multiplification modifier for the exp reward */ -export function getQuestWithRewards(quest: Quest) { +export function getQuestWithRewards(quest: Quest, expModifier: number = 1) { let maxProgress = 1; @@ -70,7 +71,7 @@ export function getQuestWithRewards(quest: Quest) { } let goldReward = Math.floor(maxProgress/6); - let expReward = Math.floor(Math.floor(maxProgress/120) - maxProgress/1000); + let expReward = Math.floor((Math.floor(maxProgress/120) - maxProgress/1000) * expModifier); // add some randomness to the rewards goldReward = Math.floor(randomNumberBetween(goldReward * 0.95, goldReward * 1.1)); diff --git a/src/classes/guildUpgrades/AdventurerCapacityUpgrade.ts b/src/classes/guildUpgrades/AdventurerCapacityUpgrade.ts index 4a344fb..889f81a 100644 --- a/src/classes/guildUpgrades/AdventurerCapacityUpgrade.ts +++ b/src/classes/guildUpgrades/AdventurerCapacityUpgrade.ts @@ -1,6 +1,6 @@ import {GuildUpgrade} from "@/classes/GuildUpgrade"; -export class AdventurerCapacityUpgrade extends GuildUpgrade { +export default class AdventurerCapacityUpgrade extends GuildUpgrade { constructor(level: number = 1) { super(); this.level = level; diff --git a/src/classes/guildUpgrades/QuestExpUpgrade.ts b/src/classes/guildUpgrades/QuestExpUpgrade.ts new file mode 100644 index 0000000..6226630 --- /dev/null +++ b/src/classes/guildUpgrades/QuestExpUpgrade.ts @@ -0,0 +1,24 @@ +import {GuildUpgrade} from "@/classes/GuildUpgrade"; + +export default class QuestExpUpgrade extends GuildUpgrade { + constructor(level: number = 1) { + super(); + this.level = level; + this.nextLevelCost = this.getCostForLevel(this.level); + this.guildLevelRequirement = 8; + } + + upgrade(): void { + this.level += 1; + this.nextLevelCost = this.getCostForLevel(this.level); + } + + getCostForLevel(level: number): number { + const scalingFactor = Math.pow(1.15, level - 1); + return Math.floor(4000000 * scalingFactor * Math.pow(level, 1.1)); + } + + getModifier(): number { + return 1 + (this.level * 0.1); + } +} \ No newline at end of file diff --git a/src/components/UpgradesList.vue b/src/components/UpgradesList.vue index dc03c94..3ec5f01 100644 --- a/src/components/UpgradesList.vue +++ b/src/components/UpgradesList.vue @@ -3,6 +3,7 @@

Upgrades

Adventurer capacity (level {{ guild.adventurerCapacity.level }}) + Increases the maximum amount of recruited adventurers
+
+ Quest exp modifier (level {{ guild.expModifier.level }}) + Increases exp from newly offered quests by 10% per level + +
@@ -39,7 +52,14 @@ export default defineComponent({ if (this.guild.gold < this.guild.adventurerCapacity.nextLevelCost) return; this.guild.gold -= this.guild.adventurerCapacity.nextLevelCost; this.guild.adventurerCapacity.upgrade(); - } + }, + upgradeQuestExpModifier(): void { + if (!this.guild.expModifier) return; + if (!this.guild.expModifier.nextLevelCost) return; + if (this.guild.gold < this.guild.expModifier.nextLevelCost) return; + this.guild.gold -= this.guild.expModifier.nextLevelCost; + this.guild.expModifier.upgrade(); + }, } }); @@ -63,12 +83,15 @@ export default defineComponent({ font-size: 1.25rem; font-weight: bold; display: flex; - flex-direction: row; - flex-wrap: wrap; + flex-direction: column; width: min(25rem, 100%); justify-content: center; align-items: center; gap: 0.2rem; + small { + font-weight: normal; + line-height: 1; + } } } \ No newline at end of file