Advertisement
Guest User

Untitled

a guest
Jul 18th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.54 KB | None | 0 0
  1. package studio.lineage2.gameserver.utils;
  2.  
  3. import java.util.List;
  4. import studio.lineage2.commons.util.Rnd;
  5. import studio.lineage2.gameserver.data.xml.holder.VariationDataHolder;
  6. import studio.lineage2.gameserver.model.Player;
  7. import studio.lineage2.gameserver.model.actor.instances.player.ShortCut;
  8. import studio.lineage2.gameserver.model.items.ItemInstance;
  9. import studio.lineage2.gameserver.model.items.PcInventory;
  10. import studio.lineage2.gameserver.templates.item.ItemTemplate;
  11. import studio.lineage2.gameserver.templates.item.support.variation.VariationCategory;
  12. import studio.lineage2.gameserver.templates.item.support.variation.VariationGroup;
  13. import studio.lineage2.gameserver.templates.item.support.variation.VariationInfo;
  14. import studio.lineage2.gameserver.templates.item.support.variation.VariationOption;
  15. import studio.lineage2.gameserver.templates.item.support.variation.VariationStone;
  16.  
  17. public final class VariationUtils
  18. {
  19. public VariationUtils() {}
  20.  
  21. public static long getRemovePrice(ItemInstance item)
  22. {
  23. if (item == null)
  24. {
  25. return -1L;
  26. }
  27.  
  28. VariationGroup group = VariationDataHolder.getInstance().getGroup(item.getTemplate().getVariationGroupId());
  29. if (group == null)
  30. {
  31. return -1L;
  32. }
  33.  
  34. studio.lineage2.gameserver.templates.item.support.variation.VariationFee fee = group.getFee(item.getVariationStoneId());
  35. if (fee == null)
  36. {
  37. return -1L;
  38. }
  39.  
  40. return fee.getCancelFee();
  41. }
  42.  
  43. public static studio.lineage2.gameserver.templates.item.support.variation.VariationFee getVariationFee(ItemInstance item, ItemInstance stone)
  44. {
  45. if (item == null)
  46. {
  47. return null;
  48. }
  49.  
  50. if (stone == null)
  51. {
  52. return null;
  53. }
  54.  
  55. VariationGroup group = VariationDataHolder.getInstance().getGroup(item.getTemplate().getVariationGroupId());
  56. if (group == null)
  57. {
  58. return null;
  59. }
  60.  
  61. return group.getFee(stone.getItemId());
  62. }
  63.  
  64. public static boolean tryAugmentItem(Player player, ItemInstance targetItem, ItemInstance refinerItem, ItemInstance feeItem, long feeItemCount)
  65. {
  66. if (!targetItem.canBeAugmented(player))
  67. {
  68. return false;
  69. }
  70.  
  71. if (refinerItem.getTemplate().isBlocked(player, refinerItem))
  72. {
  73. return false;
  74. }
  75.  
  76. int stoneId = refinerItem.getItemId();
  77. VariationStone stone = VariationDataHolder.getInstance().getStone(targetItem.getTemplate().getWeaponFightType(), stoneId);
  78. if (stone == null)
  79. {
  80. return false;
  81. }
  82.  
  83. int variation1Id = getRandomOptionId(stone.getVariation(1));
  84. int variation2Id = getRandomOptionId(stone.getVariation(2));
  85. if ((variation1Id == 0) && (variation2Id == 0))
  86. {
  87. return false;
  88. }
  89.  
  90. if (player.getInventory().getCountOf(refinerItem.getItemId()) < 1L)
  91. {
  92. return false;
  93. }
  94.  
  95. if (player.getInventory().getCountOf(feeItem.getItemId()) < feeItemCount)
  96. {
  97. return false;
  98. }
  99.  
  100. if (!player.getInventory().destroyItem(refinerItem, 1L))
  101. {
  102. return false;
  103. }
  104.  
  105. if (!player.getInventory().destroyItem(feeItem, feeItemCount))
  106. {
  107. return false;
  108. }
  109.  
  110. boolean equipped = false;
  111. if ((equipped = targetItem.isEquipped()))
  112. {
  113. player.getInventory().unEquipItem(targetItem);
  114. }
  115.  
  116. targetItem.setVariationStoneId(stoneId);
  117. targetItem.setVariation1Id(variation1Id);
  118. targetItem.setVariation2Id(variation2Id);
  119.  
  120. targetItem.setJdbcState(studio.lineage2.commons.dao.JdbcEntityState.UPDATED);
  121. targetItem.update();
  122.  
  123. if (equipped)
  124. {
  125. player.getInventory().equipItem(targetItem);
  126. }
  127.  
  128. player.sendPacket(new studio.lineage2.gameserver.network.l2.s2c.InventoryUpdatePacket().addModifiedItem(player, targetItem));
  129.  
  130. for (ShortCut sc : player.getAllShortCuts())
  131. {
  132. if ((sc.getId() == targetItem.getObjectId()) && (sc.getType() == 1))
  133. {
  134. player.sendPacket(new studio.lineage2.gameserver.network.l2.s2c.ShortCutRegisterPacket(player, sc));
  135. }
  136. }
  137.  
  138. player.sendChanges();
  139. return true;
  140. }
  141.  
  142. private static int getRandomOptionId(VariationInfo variation)
  143. {
  144. if (variation == null)
  145. {
  146. return 0;
  147. }
  148.  
  149. double probalityAmount = 0.0D;
  150. VariationCategory[] categories = variation.getCategories();
  151. for (VariationCategory category : categories)
  152. {
  153. probalityAmount += category.getProbability();
  154. }
  155.  
  156. if (Rnd.chance(probalityAmount))
  157. {
  158. double probalityMod = (100.0D - probalityAmount) / categories.length;
  159. Object successCategories = new java.util.ArrayList();
  160. int tryCount = 0;
  161. while (((List)successCategories).isEmpty())
  162. {
  163. tryCount++;
  164. for (VariationCategory category : categories)
  165. {
  166. if (tryCount % 10 == 0)
  167. {
  168. probalityMod += 1.0D;
  169. }
  170. if (Rnd.chance(category.getProbability() + probalityMod))
  171. {
  172. ((List)successCategories).add(category);
  173. }
  174. }
  175. }
  176.  
  177. VariationCategory[] categoriesArray = (VariationCategory[])((List)successCategories).toArray(new VariationCategory[((List)successCategories).size()]);
  178.  
  179. return getRandomOptionId(categoriesArray[Rnd.get(categoriesArray.length)]);
  180. }
  181.  
  182.  
  183. return 0;
  184. }
  185.  
  186.  
  187. private static int getRandomOptionId(VariationCategory category)
  188. {
  189. if (category == null)
  190. {
  191. return 0;
  192. }
  193.  
  194. double chanceAmount = 0.0D;
  195. VariationOption[] options = category.getOptions();
  196. for (VariationOption option : options)
  197. {
  198. chanceAmount += option.getChance();
  199. }
  200.  
  201. if (Rnd.chance(chanceAmount))
  202. {
  203. double chanceMod = (100.0D - chanceAmount) / options.length;
  204. Object successOptions = new java.util.ArrayList();
  205. int tryCount = 0;
  206. while (((List)successOptions).isEmpty())
  207. {
  208. tryCount++;
  209. for (VariationOption option : options)
  210. {
  211. if (tryCount % 10 == 0)
  212. {
  213. chanceMod += 1.0D;
  214. }
  215. if (Rnd.chance(option.getChance() + chanceMod))
  216. {
  217. ((List)successOptions).add(option);
  218. }
  219. }
  220. }
  221.  
  222. VariationOption[] optionsArray = (VariationOption[])((List)successOptions).toArray(new VariationOption[((List)successOptions).size()]);
  223.  
  224. return optionsArray[Rnd.get(optionsArray.length)].getId();
  225. }
  226.  
  227.  
  228. return 0;
  229. }
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement