Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package studio.lineage2.gameserver.utils;
- import java.util.List;
- import studio.lineage2.commons.util.Rnd;
- import studio.lineage2.gameserver.data.xml.holder.VariationDataHolder;
- import studio.lineage2.gameserver.model.Player;
- import studio.lineage2.gameserver.model.actor.instances.player.ShortCut;
- import studio.lineage2.gameserver.model.items.ItemInstance;
- import studio.lineage2.gameserver.model.items.PcInventory;
- import studio.lineage2.gameserver.templates.item.ItemTemplate;
- import studio.lineage2.gameserver.templates.item.support.variation.VariationCategory;
- import studio.lineage2.gameserver.templates.item.support.variation.VariationGroup;
- import studio.lineage2.gameserver.templates.item.support.variation.VariationInfo;
- import studio.lineage2.gameserver.templates.item.support.variation.VariationOption;
- import studio.lineage2.gameserver.templates.item.support.variation.VariationStone;
- public final class VariationUtils
- {
- public VariationUtils() {}
- public static long getRemovePrice(ItemInstance item)
- {
- if (item == null)
- {
- return -1L;
- }
- VariationGroup group = VariationDataHolder.getInstance().getGroup(item.getTemplate().getVariationGroupId());
- if (group == null)
- {
- return -1L;
- }
- studio.lineage2.gameserver.templates.item.support.variation.VariationFee fee = group.getFee(item.getVariationStoneId());
- if (fee == null)
- {
- return -1L;
- }
- return fee.getCancelFee();
- }
- public static studio.lineage2.gameserver.templates.item.support.variation.VariationFee getVariationFee(ItemInstance item, ItemInstance stone)
- {
- if (item == null)
- {
- return null;
- }
- if (stone == null)
- {
- return null;
- }
- VariationGroup group = VariationDataHolder.getInstance().getGroup(item.getTemplate().getVariationGroupId());
- if (group == null)
- {
- return null;
- }
- return group.getFee(stone.getItemId());
- }
- public static boolean tryAugmentItem(Player player, ItemInstance targetItem, ItemInstance refinerItem, ItemInstance feeItem, long feeItemCount)
- {
- if (!targetItem.canBeAugmented(player))
- {
- return false;
- }
- if (refinerItem.getTemplate().isBlocked(player, refinerItem))
- {
- return false;
- }
- int stoneId = refinerItem.getItemId();
- VariationStone stone = VariationDataHolder.getInstance().getStone(targetItem.getTemplate().getWeaponFightType(), stoneId);
- if (stone == null)
- {
- return false;
- }
- int variation1Id = getRandomOptionId(stone.getVariation(1));
- int variation2Id = getRandomOptionId(stone.getVariation(2));
- if ((variation1Id == 0) && (variation2Id == 0))
- {
- return false;
- }
- if (player.getInventory().getCountOf(refinerItem.getItemId()) < 1L)
- {
- return false;
- }
- if (player.getInventory().getCountOf(feeItem.getItemId()) < feeItemCount)
- {
- return false;
- }
- if (!player.getInventory().destroyItem(refinerItem, 1L))
- {
- return false;
- }
- if (!player.getInventory().destroyItem(feeItem, feeItemCount))
- {
- return false;
- }
- boolean equipped = false;
- if ((equipped = targetItem.isEquipped()))
- {
- player.getInventory().unEquipItem(targetItem);
- }
- targetItem.setVariationStoneId(stoneId);
- targetItem.setVariation1Id(variation1Id);
- targetItem.setVariation2Id(variation2Id);
- targetItem.setJdbcState(studio.lineage2.commons.dao.JdbcEntityState.UPDATED);
- targetItem.update();
- if (equipped)
- {
- player.getInventory().equipItem(targetItem);
- }
- player.sendPacket(new studio.lineage2.gameserver.network.l2.s2c.InventoryUpdatePacket().addModifiedItem(player, targetItem));
- for (ShortCut sc : player.getAllShortCuts())
- {
- if ((sc.getId() == targetItem.getObjectId()) && (sc.getType() == 1))
- {
- player.sendPacket(new studio.lineage2.gameserver.network.l2.s2c.ShortCutRegisterPacket(player, sc));
- }
- }
- player.sendChanges();
- return true;
- }
- private static int getRandomOptionId(VariationInfo variation)
- {
- if (variation == null)
- {
- return 0;
- }
- double probalityAmount = 0.0D;
- VariationCategory[] categories = variation.getCategories();
- for (VariationCategory category : categories)
- {
- probalityAmount += category.getProbability();
- }
- if (Rnd.chance(probalityAmount))
- {
- double probalityMod = (100.0D - probalityAmount) / categories.length;
- Object successCategories = new java.util.ArrayList();
- int tryCount = 0;
- while (((List)successCategories).isEmpty())
- {
- tryCount++;
- for (VariationCategory category : categories)
- {
- if (tryCount % 10 == 0)
- {
- probalityMod += 1.0D;
- }
- if (Rnd.chance(category.getProbability() + probalityMod))
- {
- ((List)successCategories).add(category);
- }
- }
- }
- VariationCategory[] categoriesArray = (VariationCategory[])((List)successCategories).toArray(new VariationCategory[((List)successCategories).size()]);
- return getRandomOptionId(categoriesArray[Rnd.get(categoriesArray.length)]);
- }
- return 0;
- }
- private static int getRandomOptionId(VariationCategory category)
- {
- if (category == null)
- {
- return 0;
- }
- double chanceAmount = 0.0D;
- VariationOption[] options = category.getOptions();
- for (VariationOption option : options)
- {
- chanceAmount += option.getChance();
- }
- if (Rnd.chance(chanceAmount))
- {
- double chanceMod = (100.0D - chanceAmount) / options.length;
- Object successOptions = new java.util.ArrayList();
- int tryCount = 0;
- while (((List)successOptions).isEmpty())
- {
- tryCount++;
- for (VariationOption option : options)
- {
- if (tryCount % 10 == 0)
- {
- chanceMod += 1.0D;
- }
- if (Rnd.chance(option.getChance() + chanceMod))
- {
- ((List)successOptions).add(option);
- }
- }
- }
- VariationOption[] optionsArray = (VariationOption[])((List)successOptions).toArray(new VariationOption[((List)successOptions).size()]);
- return optionsArray[Rnd.get(optionsArray.length)].getId();
- }
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement