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.
 
 
 

164 lines
3.7 KiB

  1. define([
  2. 'js/system/events',
  3. 'js/system/client',
  4. 'html!ui/templates/trade/template',
  5. 'css!ui/templates/trade/styles',
  6. 'html!ui/templates/inventory/templateItem'
  7. ], function(
  8. events,
  9. client,
  10. template,
  11. styles,
  12. tplItem
  13. ) {
  14. return {
  15. tpl: template,
  16. centered: true,
  17. modal: true,
  18. postRender: function() {
  19. this.onEvent('onGetTradeList', this.onGetTradeList.bind(this));
  20. },
  21. onGetTradeList: function(itemList, action) {
  22. this.find('.heading-text').html(action);
  23. var uiInventory = $('.uiInventory').data('ui');
  24. var container = this.el.find('.grid')
  25. .empty();
  26. var buyItems = itemList.items;
  27. buyItems.forEach(function(item) {
  28. var prefix = -1;
  29. ['quest', 'material', 'ability'].forEach(function(p, i) {
  30. if (item[p])
  31. prefix += 1 + i;
  32. });
  33. if (prefix == -1)
  34. prefix = 3 + item.slot + item.type;
  35. item.sortName = prefix + item.name + item.level + item.id;
  36. if ((item == this.hoverItem))
  37. this.onHover(null, item);
  38. }, this);
  39. buyItems.sort(function(a, b) {
  40. if (a.sortName < b.sortName)
  41. return -1;
  42. else if (a.sortName > b.sortName)
  43. return 1;
  44. else
  45. return 0;
  46. });
  47. var iLen = Math.max(buyItems.length, 50);
  48. for (var i = 0; i < iLen; i++) {
  49. if (!buyItems[i]) {
  50. $(tplItem).appendTo(container);
  51. continue;
  52. }
  53. var item = $.extend(true, {}, buyItems[i]);
  54. item.worth = ~~(itemList.markup * item.worth);
  55. var size = 64;
  56. var offset = 0;
  57. var spritesheet = item.spritesheet || 'items';
  58. if (item.material)
  59. spritesheet = 'materials';
  60. else if (item.quest)
  61. spritesheet = 'questItems';
  62. else if (item.type == 'skin') {
  63. offset = 13.5;
  64. size = 32;
  65. spritesheet = 'charas';
  66. }
  67. var imgX = (-item.sprite[0] * size) + offset;
  68. var imgY = (-item.sprite[1] * size) + offset;
  69. var itemEl = $(tplItem)
  70. .appendTo(container);
  71. itemEl
  72. .data('item', item)
  73. .on('click', this.onClick.bind(this, itemEl, item, action))
  74. .on('mousemove', this.onHover.bind(this, itemEl, item, action))
  75. .on('mouseleave', uiInventory.hideTooltip.bind(uiInventory, itemEl, item))
  76. .find('.icon')
  77. .css('background', 'url(../../../images/' + spritesheet + '.png) ' + imgX + 'px ' + imgY + 'px');
  78. if (item.quantity)
  79. itemEl.find('.quantity').html(item.quantity);
  80. else if (item.eq)
  81. itemEl.find('.quantity').html('EQ');
  82. if (action == 'buy') {
  83. var noAfford = (item.worth > window.player.trade.gold);
  84. if ((!noAfford) && (item.factions)) {
  85. noAfford = item.factions.some(function(f) {
  86. return f.noEquip;
  87. });
  88. }
  89. if (noAfford)
  90. $('<div class="no-afford"></div>').appendTo(itemEl);
  91. }
  92. if (item.eq)
  93. itemEl.addClass('eq');
  94. else if (item.isNew) {
  95. itemEl.addClass('new');
  96. itemEl.find('.quantity').html('NEW');
  97. }
  98. }
  99. this.center();
  100. this.show();
  101. events.emit('onShowOverlay', this.el);
  102. },
  103. onClick: function(el, item, action, e) {
  104. el.addClass('disabled');
  105. client.request({
  106. cpn: 'player',
  107. method: 'performAction',
  108. data: {
  109. cpn: 'trade',
  110. method: 'buySell',
  111. data: {
  112. itemId: item.id,
  113. action: action
  114. }
  115. },
  116. callback: this.onServerRespond.bind(this, el)
  117. });
  118. var uiInventory = $('.uiInventory').data('ui');
  119. uiInventory.hideTooltip(el, item, e);
  120. },
  121. onHover: function(el, item, action, e) {
  122. var uiInventory = $('.uiInventory').data('ui');
  123. uiInventory.onHover(el, item, e);
  124. var canAfford = true;
  125. if (action == 'buy')
  126. canAfford = item.worth <= window.player.trade.gold;
  127. var uiTooltipItem = $('.uiTooltipItem').data('ui');
  128. uiTooltipItem.showWorth(canAfford);
  129. },
  130. onServerRespond: function(el) {
  131. el.removeClass('disabled');
  132. }
  133. };
  134. });