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.
 
 
 

67 lines
1.4 KiB

  1. /*
  2. Example of a mount:
  3. {
  4. name: 'Brown Horse\'s Reins',
  5. type: 'mount',
  6. quality: 2,
  7. noDrop: true,
  8. noDestroy: true,
  9. noSalvage: true,
  10. cdMax: 10,
  11. sprite: [0, 9],
  12. spritesheet: 'images/questItems.png',
  13. useText: 'mount',
  14. description: 'Stout, dependable and at least faster than you',
  15. effects: [{
  16. type: 'mount',
  17. rolls: {
  18. speed: 150,
  19. cell: 5,
  20. sheetName: 'mobs'
  21. }
  22. }]
  23. }
  24. */
  25. module.exports = {
  26. name: 'Feature: Mounts',
  27. init: function () {
  28. this.events.on('onBeforeUseItem', this.onBeforeUseItem.bind(this));
  29. this.events.on('onBeforeGetEffect', this.onBeforeGetEffect.bind(this));
  30. },
  31. onBeforeUseItem: function (obj, item, result) {
  32. if (item.type !== 'mount')
  33. return;
  34. let syncer = obj.syncer;
  35. let currentEffect = obj.effects.removeEffectByName('mounted', true);
  36. if (currentEffect) {
  37. let currentItem = currentEffect.source;
  38. currentItem.useText = 'mount';
  39. currentItem.cdMax = 0;
  40. syncer.setArray(true, 'inventory', 'getItems', currentItem);
  41. if (currentItem === item)
  42. return;
  43. }
  44. let builtEffect = obj.effects.addEffect({
  45. type: 'mounted',
  46. ttl: -1
  47. });
  48. builtEffect.source = item;
  49. item.useText = 'unmount';
  50. syncer.setArray(true, 'inventory', 'getItems', item);
  51. },
  52. onBeforeGetEffect: function (result) {
  53. if (result.type.toLowerCase() === 'mounted')
  54. result.url = `${this.relativeFolderName}/effects/effectMounted.js`;
  55. }
  56. };