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.
 
 
 

150 lines
3.4 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. var uiInventory = $('.uiInventory').data('ui');
  23. var container = this.el.find('.grid')
  24. .empty();
  25. var buyItems = itemList.items;
  26. buyItems.forEach(function(item) {
  27. var prefix = -1;
  28. ['quest', 'material', 'ability'].forEach(function(p, i) {
  29. if (item[p])
  30. prefix += 1 + i;
  31. });
  32. if (prefix == -1)
  33. prefix = 3 + item.slot + item.type;
  34. item.sortName = prefix + item.name + item.level + item.id;
  35. if ((item == this.hoverItem))
  36. this.onHover(null, item);
  37. }, this);
  38. buyItems.sort(function(a, b) {
  39. if (a.sortName < b.sortName)
  40. return -1;
  41. else if (a.sortName > b.sortName)
  42. return 1;
  43. else
  44. return 0;
  45. });
  46. var iLen = buyItems.length;
  47. for (var i = 0; i < iLen; i++) {
  48. var item = $.extend(true, {}, buyItems[i]);
  49. item.worth = ~~(itemList.markup * item.worth);
  50. var size = 64;
  51. var offset = 0;
  52. var spritesheet = item.spritesheet || 'items';
  53. if (item.material)
  54. spritesheet = 'materials';
  55. else if (item.quest)
  56. spritesheet = 'questItems';
  57. else if (item.type == 'skin') {
  58. offset = 13.5;
  59. size = 32;
  60. spritesheet = 'charas';
  61. }
  62. var imgX = (-item.sprite[0] * size) + offset;
  63. var imgY = (-item.sprite[1] * size) + offset + 4;
  64. var itemEl = $(tplItem)
  65. .appendTo(container);
  66. itemEl
  67. .data('item', item)
  68. .on('click', this.onClick.bind(this, itemEl, item, action))
  69. .on('mousemove', this.onHover.bind(this, itemEl, item, action))
  70. .on('mouseleave', uiInventory.hideTooltip.bind(uiInventory, itemEl, item))
  71. .find('.icon')
  72. .css('background', 'url(../../../images/' + spritesheet + '.png) ' + imgX + 'px ' + imgY + 'px');
  73. if (item.quantity)
  74. itemEl.find('.quantity').html(item.quantity);
  75. else if (item.eq)
  76. itemEl.find('.quantity').html('EQ');
  77. if (action == 'buy') {
  78. if (item.worth > window.player.trade.gold)
  79. $('<div class="no-afford"></div>').appendTo(itemEl);
  80. }
  81. if (item.eq)
  82. itemEl.addClass('eq');
  83. else if (item.isNew) {
  84. itemEl.addClass('new');
  85. itemEl.find('.quantity').html('NEW');
  86. }
  87. }
  88. this.center();
  89. this.show();
  90. events.emit('onShowOverlay', this.el);
  91. },
  92. onClick: function(el, item, action, e) {
  93. el.addClass('disabled');
  94. client.request({
  95. cpn: 'player',
  96. method: 'performAction',
  97. data: {
  98. cpn: 'trade',
  99. method: 'buySell',
  100. data: {
  101. itemId: item.id,
  102. action: action
  103. }
  104. },
  105. callback: this.onServerRespond.bind(this, el)
  106. });
  107. var uiInventory = $('.uiInventory').data('ui');
  108. uiInventory.hideTooltip(el, item, e);
  109. },
  110. onHover: function(el, item, action, e) {
  111. var uiInventory = $('.uiInventory').data('ui');
  112. uiInventory.onHover(el, item, e);
  113. var canAfford = true;
  114. if (action == 'buy')
  115. canAfford = item.worth <= window.player.trade.gold;
  116. var uiTooltipItem = $('.uiTooltipItem').data('ui');
  117. uiTooltipItem.showWorth(canAfford);
  118. },
  119. onServerRespond: function(el) {
  120. el.removeClass('disabled');
  121. }
  122. };
  123. });