Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

82 righe
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 ? 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', config, zoneName);
  28. if (config.infini.length === 0)
  29. return;
  30. const minPlayerLevel = ~~(obj.instance.map.zone.level[0] * 0.75);
  31. if (obj.stats.values.level < minPlayerLevel)
  32. return;
  33. let pickQuest = null;
  34. if ((template) && (template.type))
  35. pickQuest = config.infini.find(c => c.type === template.type);
  36. if (!pickQuest)
  37. pickQuest = config.infini[~~(Math.random() * config.infini.length)];
  38. let pickType = pickQuest.type[0].toUpperCase() + pickQuest.type.substr(1);
  39. const questMsg = {
  40. type: pickType,
  41. path: pickQuest.path || `../../config/quests/templates/quest${pickType}`
  42. };
  43. this.instance.eventEmitter.emit('onBeforeBuildQuest', questMsg);
  44. let questClass = require(questMsg.path);
  45. let quest = extend({}, pickQuest, questTemplate, questClass, template);
  46. if (template)
  47. quest.xp = template.xp;
  48. //Calculate next id
  49. let id = 0;
  50. let currentQuests = oQuests.quests;
  51. let cLen = currentQuests.length;
  52. for (let i = 0; i < cLen; i++) {
  53. let q = currentQuests[i];
  54. if (q.id >= id)
  55. id = q.id + 1;
  56. }
  57. quest.id = id;
  58. quest.obj = obj;
  59. quest.zoneName = zoneName;
  60. if (!oQuests.obtain(quest, !!template))
  61. this.obtain(obj, template);
  62. }
  63. };