diff --git a/src/App.vue b/src/App.vue index acd5759..b06451b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -40,6 +40,7 @@ import AdventurerCapacityUpgrade from "@/classes/guildUpgrades/AdventurerCapacit import {getNewAdventurerForHire} from "@/classes/Recruitment"; import QuestExpUpgrade from "@/classes/guildUpgrades/QuestExpUpgrade"; import QuestGoldUpgrade from "@/classes/guildUpgrades/QuestGoldUpgrade"; +import AutoFinishQuestsUpgrade from "@/classes/guildUpgrades/AutoFinishQuestsUpgrade"; export default defineComponent({ name: "GuildView", @@ -81,7 +82,13 @@ export default defineComponent({ missive.progressPoints = 0; continue; } - if (missive.progressPoints >= missive.maxProgress) continue; + if (missive.progressPoints >= missive.maxProgress) { + if (this.guild.autoFinishQuestsUpgrade.getRanksToAutoFinishQuestsIn().includes(rank)) { + this.finalizeQuest(missive); + continue; + } + continue; + } for (const adventurerId in missive.adventurers) { const adventurer = missive.adventurers[adventurerId]; const attack = adventurer.getAttack(); @@ -160,6 +167,9 @@ export default defineComponent({ if (saveData.guild.goldModifier) { guildUpgrades.goldModifier = new QuestGoldUpgrade(saveData.guild.goldModifier.level); } + if (saveData.guild.autoFinishQuestsUpgrade) { + guildUpgrades.autoFinishQuestsUpgrade = new AutoFinishQuestsUpgrade(saveData.guild.autoFinishQuestsUpgrade.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 f4024db..e929129 100644 --- a/src/classes/Guild.ts +++ b/src/classes/Guild.ts @@ -3,6 +3,7 @@ import AdventurerCapacityUpgrade from "@/classes/guildUpgrades/AdventurerCapacit import {formatGold} from "@/classes/NumberMagic"; import QuestExpUpgrade from "@/classes/guildUpgrades/QuestExpUpgrade"; import QuestGoldUpgrade from "@/classes/guildUpgrades/QuestGoldUpgrade"; +import AutoFinishQuestsUpgrade from "@/classes/guildUpgrades/AutoFinishQuestsUpgrade"; const MAX_LEVEL: number = 8; @@ -14,6 +15,7 @@ export class Guild { adventurerCapacity: AdventurerCapacityUpgrade; expModifier: QuestExpUpgrade; goldModifier: QuestGoldUpgrade; + autoFinishQuestsUpgrade: AutoFinishQuestsUpgrade; constructor(level: number, gold: number, upgrades: {[index:string]: GuildUpgrade} = {}) { this.gold = gold; @@ -25,6 +27,7 @@ export class Guild { this.adventurerCapacity = upgrades.adventurerCapacity as AdventurerCapacityUpgrade ?? new AdventurerCapacityUpgrade(); this.expModifier = upgrades.expModifier as QuestExpUpgrade ?? new QuestExpUpgrade(); this.goldModifier = upgrades.goldModifier as QuestGoldUpgrade ?? new QuestGoldUpgrade(); + this.autoFinishQuestsUpgrade = upgrades.autoFinishQuestsUpgrade as AutoFinishQuestsUpgrade ?? new AutoFinishQuestsUpgrade(); } diff --git a/src/classes/MaxLevellable.ts b/src/classes/MaxLevellable.ts new file mode 100644 index 0000000..5a410f0 --- /dev/null +++ b/src/classes/MaxLevellable.ts @@ -0,0 +1,7 @@ +export default interface MaxLevellable { + + maxLevel: number; + + isMaxLevel(): boolean; + +} \ No newline at end of file diff --git a/src/classes/guildUpgrades/AutoFinishQuestsUpgrade.ts b/src/classes/guildUpgrades/AutoFinishQuestsUpgrade.ts new file mode 100644 index 0000000..a709487 --- /dev/null +++ b/src/classes/guildUpgrades/AutoFinishQuestsUpgrade.ts @@ -0,0 +1,52 @@ +import {GuildUpgrade} from "@/classes/GuildUpgrade"; +import type MaxLevellable from "@/classes/MaxLevellable"; +import {QuestRank} from "@/classes/QuestRank"; + +export default class AutoFinishQuestsUpgrade extends GuildUpgrade implements MaxLevellable { + + maxLevel: number; + + constructor(level: number = 1) { + super(); + this.level = level; + this.nextLevelCost = this.getCostForLevel(this.level); + this.guildLevelRequirement = 7; + this.maxLevel = 8; + } + + upgrade(): void { + this.level += 1; + this.nextLevelCost = this.getCostForLevel(this.level); + } + + getCostForLevel(level: number): number { + const scalingFactor = Math.pow(4.2, level - 1); + return Math.floor(25000 * scalingFactor * Math.pow(level, 1.05)); + } + + isMaxLevel(): boolean { + return this.level >= this.maxLevel; + } + + getRanksToAutoFinishQuestsIn(): Array { + switch (this.level) { + case 1: + default: + return []; + case 2: + return [QuestRank.F]; + case 3: + return [QuestRank.F, QuestRank.E]; + case 4: + return [QuestRank.F, QuestRank.E, QuestRank.D]; + case 5: + return [QuestRank.F, QuestRank.E, QuestRank.D, QuestRank.C]; + case 6: + return [QuestRank.F, QuestRank.E, QuestRank.D, QuestRank.C, QuestRank.B]; + case 7: + return [QuestRank.F, QuestRank.E, QuestRank.D, QuestRank.C, QuestRank.B, QuestRank.A]; + case 8: + return [QuestRank.F, QuestRank.E, QuestRank.D, QuestRank.C, QuestRank.B, QuestRank.A, QuestRank.S]; + } + } +} diff --git a/src/components/UpgradesList.vue b/src/components/UpgradesList.vue index dc98706..36cb72a 100644 --- a/src/components/UpgradesList.vue +++ b/src/components/UpgradesList.vue @@ -13,6 +13,18 @@ Upgrade ({{ formatGold(guild.adventurerCapacity.nextLevelCost) }} gold) +
+ Auto-finish quests (level {{ guild.autoFinishQuestsUpgrade.level - 1 }}) + Automatically finish quests when they are completed. + +
Quest exp modifier (level {{ guild.expModifier.level }}) Increases exp from newly offered quests by 10% per level @@ -65,6 +77,14 @@ export default defineComponent({ this.guild.gold -= this.guild.adventurerCapacity.nextLevelCost; this.guild.adventurerCapacity.upgrade(); }, + upgradeAutoFinishQuests(): void { + if (!this.guild.autoFinishQuestsUpgrade) return; + if (this.guild.autoFinishQuestsUpgrade.isMaxLevel()) return; + if (!this.guild.autoFinishQuestsUpgrade.nextLevelCost) return; + if (this.guild.gold < this.guild.autoFinishQuestsUpgrade.nextLevelCost) return; + this.guild.gold -= this.guild.autoFinishQuestsUpgrade.nextLevelCost; + this.guild.autoFinishQuestsUpgrade.upgrade(); + }, upgradeQuestExpModifier(): void { if (!this.guild.expModifier) return; if (!this.guild.expModifier.nextLevelCost) return;