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.
 
 
 

84 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. 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. let errors = [];
  48. let stats = this.obj.stats.values;
  49. if (item.level > stats.level)
  50. errors.push('level');
  51. if (item.requires && item.requires[0] && stats[item.requires[0].stat] < item.requires[0].value)
  52. errors.push('stats');
  53. if (item.factions) {
  54. if (item.factions.some(f => f.noEquip))
  55. errors.push('faction');
  56. }
  57. return errors;
  58. },
  59. canEquipItem: function (item) {
  60. return (this.equipItemErrors(item).length === 0);
  61. }
  62. };
  63. });