Initial commit

This commit is contained in:
2026-08-24 22:20:36 +02:00
commit 62f7b1278a
251 changed files with 16670 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
const Quest = require("./Quest");
const quests = require("../Data/quests");
class Quests {
constructor(quests, doneCallback) {
let currentQuest = quests[0];
this.completedQuests = [];
this.finishedQuests = {};
this.completedQuestsAmount = {};
this.doneCallback = doneCallback;
this.list = {};
this.list = quests.reduce((result, entry) => {
this.completedQuestsAmount[entry.questID] = entry.completedAmount;
if (entry.state === 1 || entry.state === 2) return result;
const quest = this.add(entry.questID);
if (!quest) return result;
if (currentQuest.id !== entry.questID) {
result[entry.questID] = quest;
currentQuest = quest;
};
if (!entry.amount) return result;
const { typeID, entityTypeID } = result[entry.questID].task[entry.taskType][entry.taskIndex];
currentQuest.adjustTask([{
taskCategoryID: entry.taskType,
typeID,
entityTypeID
}], entry.amount);
return result;
}, {});
};
add(id) {
const questScheme = quests[id - 1];
if (!questScheme) return;
const isAcceptable = !questScheme.maximumComplete || questScheme.maximumComplete && questScheme.maximumComplete > this.completedQuestsAmount[id] || !this.completedQuestsAmount[id] && questScheme.maximumComplete;
if (!isAcceptable) return;
const isQuestAlreadyAdded = this.list[id];
if (isQuestAlreadyAdded) return true;
const quest = new Quest(questScheme, completedQuestID => {
if (questScheme.maximumComplete !== -1) this.completedQuests.push(completedQuestID);
if (!this.completedQuestsAmount[completedQuestID]) this.completedQuestsAmount[completedQuestID] = 1;
else this.completedQuestsAmount[completedQuestID]++;
const completedQuest = this.list[completedQuestID];
this.doneCallback(completedQuest);
this.remove(completedQuestID);
});
delete this.finishedQuests[id];
this.list[id] = quest;
return quest;
}
remove(id) {
const questScheme = quests[id - 1];
if (!questScheme) return;
this.finishedQuests[id] = true;
delete this.list[id];
}
has(id) {
return this.list[id] ? true : false;
}
refresh(pirateLevel) {
for (const id in this.list) {
const questScheme = quests[+id - 1];
if (questScheme.maximumLevel < pirateLevel || questScheme.minimumLevel > pirateLevel) this.remove(+id);
};
}
};
module.exports = Quests;