Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

158 rader
3.6 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. if (item.worth > window.player.trade.gold)
  84. $('<div class="no-afford"></div>').appendTo(itemEl);
  85. }
  86. if (item.eq)
  87. itemEl.addClass('eq');
  88. else if (item.isNew) {
  89. itemEl.addClass('new');
  90. itemEl.find('.quantity').html('NEW');
  91. }
  92. }
  93. this.center();
  94. this.show();
  95. events.emit('onShowOverlay', this.el);
  96. },
  97. onClick: function(el, item, action, e) {
  98. el.addClass('disabled');
  99. client.request({
  100. cpn: 'player',
  101. method: 'performAction',
  102. data: {
  103. cpn: 'trade',
  104. method: 'buySell',
  105. data: {
  106. itemId: item.id,
  107. action: action
  108. }
  109. },
  110. callback: this.onServerRespond.bind(this, el)
  111. });
  112. var uiInventory = $('.uiInventory').data('ui');
  113. uiInventory.hideTooltip(el, item, e);
  114. },
  115. onHover: function(el, item, action, e) {
  116. var uiInventory = $('.uiInventory').data('ui');
  117. uiInventory.onHover(el, item, e);
  118. var canAfford = true;
  119. if (action == 'buy')
  120. canAfford = item.worth <= window.player.trade.gold;
  121. var uiTooltipItem = $('.uiTooltipItem').data('ui');
  122. uiTooltipItem.showWorth(canAfford);
  123. },
  124. onServerRespond: function(el) {
  125. el.removeClass('disabled');
  126. }
  127. };
  128. });