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.
 
 
 

78 lines
1.5 KiB

  1. define([
  2. 'js/system/events'
  3. ], function (
  4. events
  5. ) {
  6. return {
  7. type: 'inventory',
  8. items: [],
  9. init: function (blueprint) {
  10. events.emit('onGetItems', this.items);
  11. },
  12. extend: function ({ destroyItems, getItems }) {
  13. const { items } = this;
  14. let rerenderNeeded = false;
  15. if (destroyItems) {
  16. rerenderNeeded = true;
  17. events.emit('onDestroyItems', destroyItems, this.items);
  18. }
  19. if (getItems) {
  20. getItems.forEach(g => {
  21. const findItem = items.find(i => i.id === g.id);
  22. if (!findItem) {
  23. rerenderNeeded = true;
  24. g.isNew = true;
  25. items.push(g);
  26. return;
  27. }
  28. if (!rerenderNeeded) {
  29. rerenderNeeded = (
  30. findItem.pos !== g.pos ||
  31. findItem.eq !== g.eq ||
  32. findItem.active !== g.active ||
  33. findItem.quickSlot !== g.quickSlot ||
  34. findItem.quantity !== g.quantity
  35. );
  36. }
  37. Object.assign(findItem, g);
  38. });
  39. events.emit('onGetItems', this.items, rerenderNeeded, getItems);
  40. }
  41. },
  42. equipItemErrors: function (item) {
  43. let errors = [];
  44. let stats = this.obj.stats.values;
  45. if (item.level > stats.level)
  46. errors.push('level');
  47. if (item.requires && item.requires[0] && stats[item.requires[0].stat] < item.requires[0].value)
  48. errors.push('stats');
  49. if (item.factions) {
  50. if (item.factions.some(f => f.noEquip))
  51. errors.push('faction');
  52. }
  53. return errors;
  54. },
  55. canEquipItem: function (item) {
  56. return (this.equipItemErrors(item).length === 0);
  57. }
  58. };
  59. });