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.
 
 
 

86 lines
2.1 KiB

  1. //Imports
  2. const questTemplate = require('./templates/questTemplate');
  3. const globalQuests = require('../questsBase');
  4. const { mapList } = require('../../world/mapManager');
  5. //Exports
  6. module.exports = {
  7. instance: null,
  8. init: function (instance) {
  9. this.instance = instance;
  10. },
  11. obtain: function (obj, template) {
  12. let zoneName = template?.zoneName ?? obj.zoneName;
  13. let zone = mapList.find(m => m.name === zoneName);
  14. //Zone doesn't exist any more. Probably been renamed
  15. if (!zone)
  16. return;
  17. let oQuests = obj.quests;
  18. if (oQuests.quests.filter(q => q.zoneName === zoneName).length > 0)
  19. return;
  20. let zoneTemplate = null;
  21. try {
  22. zoneTemplate = require(`../../${zone.path}/${zoneName}/quests.js`);
  23. } catch (e) {
  24. zoneTemplate = globalQuests;
  25. }
  26. if (!zoneTemplate)
  27. zoneTemplate = globalQuests;
  28. let config = extend({}, zoneTemplate);
  29. this.instance.eventEmitter.emit('onBeforeGetQuests', {
  30. obj,
  31. config,
  32. zoneName,
  33. template
  34. });
  35. if (config.infini.length === 0)
  36. return;
  37. //Only check min level of quests when physically in the zone they belong to
  38. if (obj.zoneName === zoneName) {
  39. const minPlayerLevel = ~~(obj.instance.zoneConfig.level[0] * 0.75);
  40. if (obj.stats.values.level < minPlayerLevel)
  41. return;
  42. }
  43. let pickQuest = null;
  44. if ((template) && (template.type))
  45. pickQuest = config.infini.find(c => c.type === template.type);
  46. if (!pickQuest)
  47. pickQuest = config.infini[~~(Math.random() * config.infini.length)];
  48. let pickType = pickQuest.type[0].toUpperCase() + pickQuest.type.substr(1);
  49. let questClass = require(`../../config/quests/templates/quest${pickType}`);
  50. let quest = extend({}, pickQuest, questTemplate, questClass, template);
  51. if (template)
  52. quest.xp = template.xp;
  53. //Calculate next id
  54. let id = 0;
  55. let currentQuests = oQuests.quests;
  56. let cLen = currentQuests.length;
  57. for (let i = 0; i < cLen; i++) {
  58. let q = currentQuests[i];
  59. if (q.id >= id)
  60. id = q.id + 1;
  61. }
  62. quest.id = id;
  63. quest.obj = obj;
  64. quest.zoneName = zoneName;
  65. if (!oQuests.obtain(quest, !!template))
  66. this.obtain(obj, template);
  67. }
  68. };