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.
 
 
 

84 lines
2.1 KiB

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