86 lines
2.7 KiB
JavaScript
86 lines
2.7 KiB
JavaScript
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; |