Initial commit
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user