You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

63 lines
1.6 KiB

  1. let questTemplate = require('./templates/questTemplate');
  2. let globalQuests = require('../questsBase');
  3. module.exports = {
  4. instance: null,
  5. init: function (instance) {
  6. this.instance = instance;
  7. },
  8. obtain: function (obj, template) {
  9. let zoneName = template ? template.zoneName : obj.zoneName;
  10. let oQuests = obj.quests;
  11. if (oQuests.quests.filter(q => q.zoneName === zoneName).length > 0)
  12. return;
  13. let zoneTemplate = null;
  14. try {
  15. zoneTemplate = require('../../config/maps/' + zoneName + '/quests.js');
  16. } catch (e) {
  17. zoneTemplate = globalQuests;
  18. }
  19. if (!zoneTemplate)
  20. zoneTemplate = globalQuests;
  21. let config = extend(true, {}, zoneTemplate);
  22. this.instance.eventEmitter.emit('onBeforeGetQuests', config);
  23. if (config.infini.length === 0)
  24. return;
  25. let pickQuest = null;
  26. if ((template) && (template.type))
  27. pickQuest = config.infini.find(c => c.type === template.type);
  28. if (!pickQuest)
  29. pickQuest = config.infini[~~(Math.random() * config.infini.length)];
  30. let pickType = pickQuest.type[0].toUpperCase() + pickQuest.type.substr(1);
  31. let questClass = require('../../config/quests/templates/quest' + pickType);
  32. let quest = extend(true, {}, pickQuest, questTemplate, questClass, template);
  33. if (template)
  34. quest.xp = template.xp;
  35. //Calculate next id
  36. let id = 0;
  37. let currentQuests = oQuests.quests;
  38. let cLen = currentQuests.length;
  39. for (let i = 0; i < cLen; i++) {
  40. let q = currentQuests[i];
  41. if (q.id >= id)
  42. id = q.id + 1;
  43. }
  44. quest.id = id;
  45. quest.obj = obj;
  46. quest.zoneName = zoneName;
  47. if (!oQuests.obtain(quest, !!template))
  48. this.obtain(obj, template);
  49. }
  50. };