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.
 
 
 

83 line
1.7 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. const clonedItem = $.extend({}, g);
  25. clonedItem.isNew = true;
  26. items.push(clonedItem);
  27. return;
  28. }
  29. if (!rerenderNeeded) {
  30. rerenderNeeded = (
  31. findItem.pos !== g.pos ||
  32. findItem.eq !== g.eq ||
  33. findItem.active !== g.active ||
  34. findItem.quickSlot !== g.quickSlot ||
  35. findItem.quantity !== g.quantity
  36. );
  37. }
  38. Object.getOwnPropertyNames(findItem).forEach(p => {
  39. delete findItem[p];
  40. });
  41. $.extend(findItem, g);
  42. });
  43. events.emit('onGetItems', this.items, rerenderNeeded, getItems);
  44. }
  45. },
  46. equipItemErrors: function (item) {
  47. const { obj: { reputation, stats: { values: statValues } } } = this;
  48. const errors = [];
  49. if (item.level > statValues.level)
  50. errors.push('level');
  51. if (item.requires && item.requires[0] && statValues[item.requires[0].stat] < item.requires[0].value)
  52. errors.push('stats');
  53. if (item.factions?.some(f => reputation.getTier(f.id) < f.tier))
  54. errors.push('faction');
  55. return errors;
  56. },
  57. canEquipItem: function (item) {
  58. return (this.equipItemErrors(item).length === 0);
  59. }
  60. };
  61. });