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.
 
 
 

68 lines
1.7 KiB

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