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.
 
 
 

90 line
1.6 KiB

  1. module.exports = {
  2. type: 'quests',
  3. quests: [],
  4. init: function (blueprint) {
  5. let quests = blueprint.quests || [];
  6. let qLen = quests.length;
  7. for (let i = 0; i < qLen; i++) {
  8. let q = quests[i];
  9. this.obj.instance.questBuilder.obtain(this.obj, q);
  10. }
  11. delete blueprint.quests;
  12. this.blueprint = blueprint;
  13. },
  14. transfer: function () {
  15. let blueprint = {
  16. quests: this.quests
  17. };
  18. this.quests = [];
  19. this.init(blueprint);
  20. },
  21. obtain: function (quest, hideMessage) {
  22. quest.active = (this.obj.zoneName === quest.zoneName);
  23. this.quests.push(quest);
  24. if (!quest.init(hideMessage)) {
  25. this.quests.spliceWhere(q => (q === quest));
  26. return false;
  27. }
  28. return true;
  29. },
  30. complete: function ({ questId }) {
  31. let quest = this.quests.find(q => q.id === questId);
  32. if ((!quest) || (!quest.isReady))
  33. return;
  34. this.obj.auth.track('quest', 'complete', quest.name);
  35. quest.complete();
  36. this.quests.spliceWhere(q => q === quest);
  37. this.obj.instance.questBuilder.obtain(this.obj);
  38. },
  39. fireEvent: function (event, args) {
  40. let quests = this.quests;
  41. let qLen = quests.length;
  42. for (let i = 0; i < qLen; i++) {
  43. let q = quests[i];
  44. if (!q) {
  45. qLen--;
  46. continue;
  47. } else if (q.completed)
  48. continue;
  49. let events = q.events;
  50. if (!events)
  51. continue;
  52. let callback = events[event];
  53. if (!callback)
  54. continue;
  55. callback.apply(q, args);
  56. }
  57. },
  58. simplify: function (self) {
  59. if (!self)
  60. return;
  61. let result = {
  62. type: 'quests'
  63. };
  64. result.quests = this.quests.map(q => {
  65. return q.simplify ? q.simplify(true) : q;
  66. });
  67. return result;
  68. }
  69. };