guild upgrades, enum for quest ranks and quests now persist while clicking onto another tab

This commit is contained in:
2023-03-19 13:22:24 +01:00
parent 3ccab02cc8
commit ff5e5e2411
6 changed files with 202 additions and 153 deletions
+80 -7
View File
@@ -1,6 +1,5 @@
<script setup lang="ts">
import {RouterLink, RouterView} from 'vue-router'
</script>
import {RouterLink, RouterView} from 'vue-router'</script>
<template>
<header>
@@ -10,7 +9,12 @@ import {RouterLink, RouterView} from 'vue-router'
</nav>
</header>
<RouterView :guild="guild" :adventurers="adventurers" :quests="quests"/>
<RouterView
:guild="guild"
:adventurers="adventurers"
:quests="missives"
@finalizeQuest="finalizeQuest($event)"
/>
</template>
<script lang="ts">
@@ -18,6 +22,7 @@ import {defineComponent} from "vue";
import {Adventurer} from "@/classes/Adventurer";
import {Quest} from "@/classes/Quest";
import {Guild} from "@/classes/Guild";
import {getFromString, QuestRank} from "@/classes/QuestRank";
export default defineComponent({
name: "GuildView",
@@ -43,13 +48,81 @@ export default defineComponent({
} as { [key: string]: Adventurer },
quests: {
F: {
"1": new Quest("1", "Frog Frenzy", "Kill 10 demon frogs.", 30, 1),
"2": new Quest("2", "Rats!", "Get rid of the rats in someone's basement.", 21, 1),
"3": new Quest("3", "Herb gethering", "Colect medicinal herbs.", 25, 1),
"1": new Quest("1", QuestRank.F, "Frog Frenzy", "Kill 10 demon frogs.", 30, 1, 25),
"2": new Quest("2", QuestRank.F, "Rats!", "Get rid of the rats in someone's basement.", 21, 1, 15),
"3": new Quest("3", QuestRank.F, "Herb gethering", "Colect medicinal herbs.", 25, 1, 19),
} as { [key: string]: Quest },
} as { [key: string]: { [key: string]: Quest } },
missives: {
F: {} as { [key: string]: Quest },
E: {} as { [key: string]: Quest },
D: {} as { [key: string]: Quest },
C: {} as { [key: string]: Quest },
B: {} as { [key: string]: Quest },
A: {} as { [key: string]: Quest },
S: {} as { [key: string]: Quest },
},
}),
methods: {
async updateMissives() {
for (const missiveRank in this.missives) {
const rank = getFromString(missiveRank as QuestRank);
for (const missiveId in this.missives[rank.toString() as QuestRank]) {
const missive = this.missives.F[missiveId];
if (missive.adventurers.length <= 0) {
missive.progressPoints = 0;
continue;
}
for (const adventurerId in missive.adventurers) {
const adventurer = missive.adventurers[adventurerId];
const attack = adventurer.attackPerLevel * adventurer.level;
missive.progressPoints = Math.min(missive.progressPoints + attack, missive.maxProgress);
}
}
}
},
finalizeQuest(missive: Quest) {
missive.progressPoints = 0;
this.guild.gold += missive.goldReward;
for (const adventurerId in missive.adventurers) {
const adventurer = missive.adventurers[adventurerId];
adventurer.exp += (missive.expReward / missive.adventurers.length);
adventurer.busy = false;
}
missive.adventurers = [];
delete this.missives[missive.rank.toString() as QuestRank][missive.id];
},
getRandomQuest(rank: QuestRank): Quest | null {
const keys = Object.keys(this.quests[rank]);
if (keys.length <= 0) return null;
const questsForRank = this.quests[rank] as { [key: string]: Quest };
const randomId = keys.length * Math.random() << 0;
const randomIdString = keys[randomId] as string;
return questsForRank[randomIdString];
},
createMissive(questToAdd: Quest, rank: QuestRank) {
const quest = JSON.parse(JSON.stringify(questToAdd));
const newId = Math.random().toString(16).slice(2).toString();
quest.id = newId;
this.missives[rank][newId] = quest;
}
},
mounted() {
setInterval(() => {
this.updateMissives();
}, 1000);
setInterval(() => {
const keys = Object.keys(this.missives[QuestRank.F]);
if (keys.length >= 5) return;
const quest = this.getRandomQuest(QuestRank.F);
if (quest !== null) {
this.createMissive(quest, QuestRank.F);
}
}, 10000);
}
})
</script>