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.
 
 
 

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