Advertisement
Guest User

Untitled

a guest
Nov 18th, 2014
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. package l2next.gameserver.network.serverpackets;
  2.  
  3. import l2next.gameserver.Config;
  4. import l2next.gameserver.data.xml.holder.MultiSellHolder.MultiSellListContainer;
  5. import l2next.gameserver.model.base.MultiSellEntry;
  6. import l2next.gameserver.model.base.MultiSellIngredient;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.List;
  10.  
  11. public class MultiSellList extends L2GameServerPacket
  12. {
  13. private final int _page;
  14. private final int _finished;
  15. private final int _listId;
  16. private boolean _isnew;
  17. private boolean _isNewProduction;
  18. private final List<MultiSellEntry> _list;
  19.  
  20. public MultiSellList(MultiSellListContainer list, int page, int finished, boolean isNew, boolean isNewProduction)
  21. {
  22. _list = list.getEntries();
  23. _listId = list.getListId();
  24. _page = page;
  25. _finished = finished;
  26. _isnew = isNew;
  27. _isNewProduction = isNewProduction;
  28. }
  29.  
  30. @Override
  31. protected final void writeImpl()
  32. {
  33. writeD(_listId); // list id
  34. writeD(_page); // page
  35. writeD(_finished); // finished
  36. writeD(Config.MULTISELL_SIZE); // size of pages
  37. writeD(_list.size()); // list length
  38. writeC(_isnew ? 0x01 : 0x00); // L2WT GOD при 1 открывается новый тип мультисела, с обменником
  39. List<MultiSellIngredient> ingredients;
  40. List<MultiSellIngredient> production;
  41. for(MultiSellEntry ent : _list)
  42. {
  43. ingredients = fixIngredients(ent.getIngredients());
  44. production = ent.getProduction();
  45.  
  46. writeD(ent.getEntryId());
  47.  
  48. final MultiSellIngredient firstEntry = ent.getProduction().get(0);
  49. if(firstEntry == null)
  50. {
  51. writeC(0x00);
  52. writeH(0x00);
  53. writeD(0x00);
  54. writeD(0x00);
  55. writeItemElements();
  56. }
  57. else
  58. {
  59. writeC(firstEntry.isStackable() ? 1 : 0);
  60. writeH(firstEntry.getItemEnchant());
  61. writeAugmentationInfo(firstEntry);
  62. writeItemElements(firstEntry);
  63. }
  64.  
  65. writeH(_isnew ? production.size() + 1 : production.size());
  66. writeH(ingredients.size());
  67.  
  68. if(_isnew && _isNewProduction)
  69. {
  70. writeInfo(firstEntry, true);
  71. }
  72. else if(_isnew && !_isNewProduction)
  73. {
  74. writeInfo(ingredients.get(0), true);
  75. }
  76.  
  77. for(final MultiSellIngredient prod : ent.getProduction())
  78. {
  79. writeInfo(prod, true);
  80. }
  81.  
  82. for(final MultiSellIngredient i : ingredients)
  83. {
  84. writeInfo(i, false);
  85. }
  86. }
  87. }
  88.  
  89. // FIXME временная затычка, пока NCSoft не починят в клиенте отображение
  90. // мультиселов где кол-во больше Integer.MAX_VALUE
  91. private static List<MultiSellIngredient> fixIngredients(List<MultiSellIngredient> ingredients)
  92. {
  93. int needFix = 0;
  94. for(MultiSellIngredient ingredient : ingredients)
  95. {
  96. if(ingredient.getItemCount() > Integer.MAX_VALUE)
  97. {
  98. needFix++;
  99. }
  100. }
  101.  
  102. if(needFix == 0)
  103. {
  104. return ingredients;
  105. }
  106.  
  107. MultiSellIngredient temp;
  108. List<MultiSellIngredient> result = new ArrayList<MultiSellIngredient>(ingredients.size() + needFix);
  109. for(MultiSellIngredient ingredient : ingredients)
  110. {
  111. ingredient = ingredient.clone();
  112. while(ingredient.getItemCount() > Integer.MAX_VALUE)
  113. {
  114. temp = ingredient.clone();
  115. temp.setItemCount(2000000000);
  116. result.add(temp);
  117. ingredient.setItemCount(ingredient.getItemCount() - 2000000000);
  118. }
  119. if(ingredient.getItemCount() > 0)
  120. {
  121. result.add(ingredient);
  122. }
  123. }
  124.  
  125. return result;
  126. }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement