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.
 
 
 

88 righe
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. } return true;
  28. },
  29. complete: function (id) {
  30. let quest = this.quests.find(q => q.id === id);
  31. if ((!quest) || (!quest.isReady))
  32. return;
  33. this.obj.auth.track('quest', 'complete', quest.name);
  34. quest.complete();
  35. this.quests.spliceWhere(q => q === quest);
  36. this.obj.instance.questBuilder.obtain(this.obj);
  37. },
  38. fireEvent: function (event, args) {
  39. let quests = this.quests;
  40. let qLen = quests.length;
  41. for (let i = 0; i < qLen; i++) {
  42. let q = quests[i];
  43. if (!q) {
  44. qLen--;
  45. continue;
  46. } else if (q.completed)
  47. continue;
  48. let events = q.events;
  49. if (!events)
  50. continue;
  51. let callback = events[event];
  52. if (!callback)
  53. continue;
  54. callback.apply(q, args);
  55. }
  56. },
  57. simplify: function (self) {
  58. if (!self)
  59. return;
  60. let result = {
  61. type: 'quests'
  62. };
  63. result.quests = this.quests.map(q => {
  64. return q.simplify ? q.simplify(true) : q;
  65. });
  66. return result;
  67. }
  68. };