Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- AlchemyDataTemplate.java
- -----------------------------------------------------------------------------------------------------------------------
- package lineage2.gameserver.templates.item;
- import java.util.ArrayList;
- import java.util.List;
- public final class AlchemyDataTemplate
- {
- private final int _skillId;
- private final int _skillLevel;
- private final int _successRate;
- private final List<AlchemyItem> _ingridients = new ArrayList();
- private final List<AlchemyItem> _onSuccessProducts = new ArrayList();
- private final List<AlchemyItem> _onFailProducts = new ArrayList();
- public AlchemyDataTemplate(int skillId, int skillLevel, int successRate)
- {
- _skillId = skillId;
- _skillLevel = skillLevel;
- _successRate = successRate;
- }
- public int getSkillId()
- {
- return _skillId;
- }
- public int getSkillLevel()
- {
- return _skillLevel;
- }
- public int getSuccessRate()
- {
- return _successRate;
- }
- public void addIngridient(AlchemyItem ingridient)
- {
- _ingridients.add(ingridient);
- }
- public AlchemyItem[] getIngridients()
- {
- return (AlchemyItem[])_ingridients.toArray(new AlchemyItem[_ingridients.size()]);
- }
- public void addOnSuccessProduct(AlchemyItem product)
- {
- _onSuccessProducts.add(product);
- }
- public AlchemyItem[] getOnSuccessProducts()
- {
- return (AlchemyItem[])_onSuccessProducts.toArray(new AlchemyItem[_onSuccessProducts.size()]);
- }
- public void addOnFailProduct(AlchemyItem product)
- {
- _onFailProducts.add(product);
- }
- public AlchemyItem[] getOnFailProducts()
- {
- return (AlchemyItem[])_onFailProducts.toArray(new AlchemyItem[_onFailProducts.size()]);
- }
- public static class AlchemyItem
- {
- private final int _id;
- private final int _count;
- public AlchemyItem(int id, int count)
- {
- _id = id;
- _count = count;
- }
- public int getId()
- {
- return _id;
- }
- public long getCount()
- {
- return _count;
- }
- }
- }
- -----------------------------------------------------------------------------------------------------------------------
- RequestAlchemyConversion .java
- package lineage2.gameserver.network.l2.c2s;
- import gnu.trove.iterator.TIntLongIterator;
- import gnu.trove.map.TIntLongMap;
- import gnu.trove.map.hash.TIntLongHashMap;
- import lineage2.commons.util.Rnd;
- import lineage2.gameserver.data.xml.holder.AlchemyDataHolder;
- import lineage2.gameserver.tables.SkillTable;
- import lineage2.gameserver.model.Player;
- import lineage2.gameserver.model.Skill;
- import lineage2.gameserver.model.items.Inventory;
- import lineage2.gameserver.model.items.ItemInstance;
- import lineage2.gameserver.network.GameClient;
- import lineage2.gameserver.network.clientpackets.L2GameClientPacket;
- import lineage2.gameserver.network.serverpackets.components.SystemMsg;
- import lineage2.gameserver.network.serverpackets.ExAlchemyConversion;
- import lineage2.gameserver.network.serverpackets.SystemMessage;
- import lineage2.gameserver.templates.item.AlchemyDataTemplate;
- import lineage2.gameserver.templates.item.AlchemyDataTemplate.AlchemyItem;
- import lineage2.gameserver.utils.ItemFunctions;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class RequestAlchemyConversion extends L2GameClientPacket
- {
- private static final Logger _log = LoggerFactory.getLogger(RequestAlchemyConversion.class);
- private int _count;
- private int _skillId;
- private int _skillLevel;
- protected void readImpl()
- {
- _count = readD();
- readH();
- _skillId = readD();
- _skillLevel = readD();
- }
- protected void runImpl()
- {
- Player activeChar = ((GameClient)getClient()).getActiveChar();
- if (activeChar == null)
- {
- return;
- }
- if (_count <= 0)
- {
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- if (activeChar.isActionsDisabled())
- {
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- if (activeChar.isInCombat())
- {
- activeChar.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_DURING_BATTLE);
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- if ((activeChar.isInStoreMode()) || (activeChar.isInTrade()))
- {
- activeChar.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_WHILE_TRADING_OR_USING_A_PRIVATE_STORE_OR_SHOP);
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- if (activeChar.isDead())
- {
- activeChar.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_WHILE_DEAD);
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- if (activeChar.isMovementDisabled())
- {
- activeChar.sendPacket(SystemMsg.YOU_CANNOT_USE_ALCHEMY_WHILE_IMMOBILE);
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- Skill skill = SkillTable.getInstance().getSkill(_skillId, _skillLevel);
- if (skill == null)
- {
- _log.warn(getClass().getSimpleName() + ": Error while alchemy: Cannot find alchemy skill[" + _skillId + "-" + _skillLevel + "]!");
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- AlchemyDataTemplate data = AlchemyDataHolder.getInstance().getData(skill);
- if (data == null)
- {
- _log.warn(getClass().getSimpleName() + ": Error while alchemy: Cannot find alchemy data[" + _skillId + "-" + _skillLevel + "]!");
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- AlchemyDataTemplate.AlchemyItem[] ingridients = data.getIngridients();
- AlchemyDataTemplate.AlchemyItem[] onSuccessProducts = data.getOnSuccessProducts();
- AlchemyDataTemplate.AlchemyItem[] onFailProducts = data.getOnFailProducts();
- TIntLongMap deletedItems = new TIntLongHashMap();
- TIntLongMap addedItems = new TIntLongHashMap();
- int convensionCount = _count;
- Inventory inventory = activeChar.getInventory();
- inventory.writeLock();
- AlchemyDataTemplate.AlchemyItem ingridient;
- long count;
- try
- {
- for (AlchemyDataTemplate.AlchemyItem ingridient : ingridients)
- {
- ItemInstance item = inventory.getItemByItemId(ingridient.getId());
- if ((item == null) || (item.getCount() < ingridient.getCount()))
- {
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- return;
- }
- convensionCount = Math.min(convensionCount, (int)Math.floor(item.getCount() / ingridient.getCount()));
- }
- for (AlchemyDataTemplate.AlchemyItem ingridient: ingridients)
- {
- count = ingridient.getCount() * convensionCount;
- if (inventory.destroyItemByItemId(ingridient.getId(), count))
- {
- long deleted = deletedItems.get(ingridient.getId());
- deletedItems.put(ingridient.getId(), deleted + count);
- }
- }
- }
- finally
- {
- inventory.writeUnlock();
- }
- int successCount = 0;
- int failCount = 0;
- for (int i = 0; i < convensionCount; i++)
- {
- if (Rnd.chance(data.getSuccessRate()))
- successCount++;
- else
- failCount++;
- }
- AlchemyDataTemplate.AlchemyItem[] arrayOfAlchemyItem2;
- if (successCount > 0)
- {
- arrayOfAlchemyItem2 = onSuccessProducts; ingridient = arrayOfAlchemyItem2.length; for (count = 0; count < ingridient; count++)
- {
- AlchemyDataTemplate.AlchemyItem product = arrayOfAlchemyItem2[count];
- long count = product.getCount() * successCount;
- long deleted = deletedItems.get(product.getId());
- if (deleted > 0L)
- {
- deletedItems.put(product.getId(), Math.max(0L, deleted - count));
- long added = count - deleted;
- if (added > 0L)
- addedItems.put(product.getId(), addedItems.get(product.getId()) + added);
- }
- else
- {
- addedItems.put(product.getId(), addedItems.get(product.getId()) + count);
- }
- }
- }
- if (failCount > 0)
- {
- arrayOfAlchemyItem2 = onFailProducts; ingridient = arrayOfAlchemyItem2.length; for (count = 0; count < ingridient; count++)
- {
- AlchemyDataTemplate.AlchemyItem product = arrayOfAlchemyItem2[count];
- long count = product.getCount() * failCount;
- long deleted = deletedItems.get(product.getId());
- if (deleted > 0L)
- {
- deletedItems.put(product.getId(), Math.max(0L, deleted - count));
- long added = count - deleted;
- if (added > 0L)
- addedItems.put(product.getId(), addedItems.get(product.getId()) + added);
- }
- else
- {
- addedItems.put(product.getId(), addedItems.get(product.getId()) + count);
- }
- }
- }
- for (TIntLongIterator iterator = deletedItems.iterator(); iterator.hasNext(); )
- {
- iterator.advance();
- long count = iterator.value();
- if (count > 0L)
- {
- activeChar.sendPacket(SystemMessagePacket.removeItems(iterator.key(), count));
- }
- }
- for (TIntLongIterator iterator = addedItems.iterator(); iterator.hasNext(); )
- {
- iterator.advance();
- long count = iterator.value();
- if (count > 0L)
- {
- ItemFunctions.addItem(activeChar, iterator.key(), count, true);
- }
- }
- if ((successCount == 0) && (failCount == 0))
- activeChar.sendPacket(ExAlchemyConversion.FAIL);
- else
- activeChar.sendPacket(new ExAlchemyConversion(successCount, failCount));
- }
- }
- -----------------------------------------------------------------------------------------------------------------------
- ExAlchemySkillList .java
- package lineage2.gameserver.network.serverpackets;
- import java.util.ArrayList;
- import java.util.List;
- import lineage2.gameserver.model.Player;
- import lineage2.gameserver.model.Skill;
- public class ExAlchemySkillList extends L2GameServerPacket
- {
- private final List<Skill> _skills;
- public ExAlchemySkillList(Player player)
- {
- _skills = new ArrayList(player.getAllAlchemySkills());
- }
- protected void writeImpl()
- {
- writeD(this._skills.size());
- for (Skill skill : _skills)
- {
- writeD(skill.getId());
- writeD(skill.getLevel());
- writeQ(0x00); //Âñåãëà 0
- int visible = 0x01;
- if(skill.getId() == 17943)
- {
- visible = 0x00;
- }
- writeC(visible);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement