Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

88 рядки
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 (blueprint) {
  13. let rerender = false;
  14. if (blueprint.destroyItems) {
  15. rerender = true;
  16. events.emit('onDestroyItems', blueprint.destroyItems, this.items);
  17. }
  18. if (blueprint.getItems) {
  19. let items = this.items;
  20. let newItems = blueprint.getItems || [];
  21. let nLen = newItems.length;
  22. for (let i = 0; i < nLen; i++) {
  23. let nItem = newItems[i];
  24. let nId = nItem.id;
  25. let findItem = items.find(function (item) {
  26. return (item.id === nId);
  27. });
  28. if (findItem) {
  29. if (!rerender) {
  30. rerender = (
  31. (findItem.pos !== nItem.pos) ||
  32. (findItem.eq !== nItem.eq) ||
  33. (findItem.quantity !== nItem.quantity)
  34. );
  35. }
  36. for (let p in findItem)
  37. delete findItem[p];
  38. $.extend(true, findItem, nItem);
  39. newItems.splice(i, 1);
  40. i--;
  41. nLen--;
  42. } else {
  43. rerender = true;
  44. nItem.isNew = true;
  45. }
  46. }
  47. this.items.push.apply(this.items, blueprint.getItems || []);
  48. events.emit('onGetItems', this.items, rerender);
  49. }
  50. },
  51. equipItemErrors: function (item) {
  52. let errors = [];
  53. let stats = this.obj.stats.values;
  54. if (item.level > stats.level)
  55. errors.push('level');
  56. if ((item.requires) && (stats[item.requires[0].stat] < item.requires[0].value))
  57. errors.push('stats');
  58. if (item.factions) {
  59. if (item.factions.some(function (f) {
  60. return f.noEquip;
  61. }))
  62. errors.push('faction');
  63. }
  64. return errors;
  65. },
  66. canEquipItem: function (item) {
  67. return (this.equipItemErrors(item).length === 0);
  68. }
  69. };
  70. });