//Imports const questTemplate = require('./templates/questTemplate'); const globalQuests = require('../questsBase'); const { mapList } = require('../../world/mapManager'); //Exports module.exports = { instance: null, init: function (instance) { this.instance = instance; }, obtain: function (obj, template) { let zoneName = template?.zoneName ?? obj.zoneName; let zone = mapList.find(m => m.name === zoneName); //Zone doesn't exist any more. Probably been renamed if (!zone) return; let oQuests = obj.quests; if (oQuests.quests.filter(q => q.zoneName === zoneName).length > 0) return; let zoneTemplate = null; try { zoneTemplate = require(`../../${zone.path}/${zoneName}/quests.js`); } catch (e) { zoneTemplate = globalQuests; } if (!zoneTemplate) zoneTemplate = globalQuests; let config = extend({}, zoneTemplate); this.instance.eventEmitter.emit('onBeforeGetQuests', { obj, config, zoneName, template }); if (config.infini.length === 0) return; //Only check min level of quests when physically in the zone they belong to if (obj.zoneName === zoneName) { const minPlayerLevel = ~~(obj.instance.zoneConfig.level[0] * 0.75); if (obj.stats.values.level < minPlayerLevel) return; } let pickQuest = null; if ((template) && (template.type)) pickQuest = config.infini.find(c => c.type === template.type); if (!pickQuest) pickQuest = config.infini[~~(Math.random() * config.infini.length)]; let pickType = pickQuest.type[0].toUpperCase() + pickQuest.type.substr(1); let questClass = require(`../../config/quests/templates/quest${pickType}`); let quest = extend({}, pickQuest, questTemplate, questClass, template); if (template) quest.xp = template.xp; //Calculate next id let id = 0; let currentQuests = oQuests.quests; let cLen = currentQuests.length; for (let i = 0; i < cLen; i++) { let q = currentQuests[i]; if (q.id >= id) id = q.id + 1; } quest.id = id; quest.obj = obj; quest.zoneName = zoneName; if (!oQuests.obtain(quest, !!template)) this.obtain(obj, template); } };