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.
 
 
 

82 lines
1.6 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.getOwnPropertyNames(findItem).forEach(p => {
  38. delete findItem[p];
  39. });
  40. Object.assign(findItem, g);
  41. });
  42. events.emit('onGetItems', this.items, rerenderNeeded, getItems);
  43. }
  44. },
  45. equipItemErrors: function (item) {
  46. let errors = [];
  47. let stats = this.obj.stats.values;
  48. if (item.level > stats.level)
  49. errors.push('level');
  50. if (item.requires && item.requires[0] && stats[item.requires[0].stat] < item.requires[0].value)
  51. errors.push('stats');
  52. if (item.factions) {
  53. if (item.factions.some(f => f.noEquip))
  54. errors.push('faction');
  55. }
  56. return errors;
  57. },
  58. canEquipItem: function (item) {
  59. return (this.equipItemErrors(item).length === 0);
  60. }
  61. };
  62. });