Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package net.sf.l2j.gameserver.network.clientpackets;
- import net.sf.l2j.Config;
- //import net.sf.l2j.gameserver.GameTimeController;
- import net.sf.l2j.gameserver.ThreadPoolManager;
- import net.sf.l2j.gameserver.event.EventManager;
- import net.sf.l2j.gameserver.handler.IItemHandler;
- import net.sf.l2j.gameserver.handler.ItemHandler;
- import net.sf.l2j.gameserver.model.L2Skill;
- import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
- import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
- import net.sf.l2j.gameserver.model.holder.SkillHolder;
- import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- import net.sf.l2j.gameserver.model.item.kind.Item;
- import net.sf.l2j.gameserver.model.item.kind.Weapon;
- import net.sf.l2j.gameserver.model.item.type.ActionType;
- import net.sf.l2j.gameserver.model.item.type.EtcItemType;
- import net.sf.l2j.gameserver.model.item.type.WeaponType;
- import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
- import net.sf.l2j.gameserver.model.quest.Quest;
- import net.sf.l2j.gameserver.model.quest.QuestState;
- //import net.sf.l2j.gameserver.model.zone.ZoneId;
- //import net.sf.l2j.gameserver.model.zone.type.L2MultiFunctionZone;
- import net.sf.l2j.gameserver.network.SystemMessageId;
- import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
- import net.sf.l2j.gameserver.network.serverpackets.ItemList;
- import net.sf.l2j.gameserver.network.serverpackets.PetItemList;
- import net.sf.l2j.gameserver.templates.skills.L2SkillType;
- public final class UseItem extends L2GameClientPacket
- {
- private int _objectId;
- private boolean _ctrlPressed;
- @Override
- protected void readImpl()
- {
- _objectId = readD();
- _ctrlPressed = readD() != 0;
- }
- @Override
- protected void runImpl()
- {
- final L2PcInstance activeChar = getClient().getActiveChar();
- if (activeChar == null)
- return;
- if (activeChar.isInStoreMode())
- {
- activeChar.sendPacket(SystemMessageId.ITEMS_UNAVAILABLE_FOR_STORE_MANUFACTURE);
- return;
- }
- if (activeChar.getActiveTradeList() != null)
- {
- activeChar.sendPacket(SystemMessageId.CANNOT_PICKUP_OR_USE_ITEM_WHILE_TRADING);
- return;
- }
- final ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId);
- if (item == null)
- return;
- //if (getClient().getActiveChar().isInsideZone(ZoneId.MULTI_FUNCTION) && !L2MultiFunctionZone.checkItem(item)) fabiano tirei da checagem zonemulti
- //{
- // getClient().getActiveChar().sendMessage("You cannot use " +item.getName()+ " inside this zone.");
- // return;
- //}
- if (item.getItem().getType2() == Item.TYPE2_QUEST)
- {
- activeChar.sendPacket(SystemMessageId.CANNOT_USE_QUEST_ITEMS);
- return;
- }
- if (activeChar.isAlikeDead() || activeChar.isStunned() || activeChar.isSleeping() || activeChar.isParalyzed() || activeChar.isAfraid())
- return;
- if (!Config.KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
- {
- final SkillHolder[] sHolders = item.getItem().getSkills();
- if (sHolders != null)
- {
- for (SkillHolder sHolder : sHolders)
- {
- final L2Skill skill = sHolder.getSkill();
- if (skill != null && (skill.getSkillType() == L2SkillType.TELEPORT || skill.getSkillType() == L2SkillType.RECALL))
- return;
- }
- }
- }
- if (EventManager.getInstance().isRunning() && EventManager.getInstance().isRegistered(activeChar))
- {
- if (!EventManager.getInstance().getCurrentEvent().onUseItem(activeChar,item))
- return;
- }
- if (activeChar.isFishing() && item.getItem().getDefaultAction() != ActionType.fishingshot)
- {
- activeChar.sendPacket(SystemMessageId.CANNOT_DO_WHILE_FISHING_3);
- return;
- }
- /*
- * The player can't use pet items if no pet is currently summoned. If a pet is summoned and player uses the item directly, it will be used by the pet.
- */
- if (item.isPetItem())
- {
- // If no pet, cancels the use
- if (!activeChar.hasPet())
- {
- activeChar.sendPacket(SystemMessageId.CANNOT_EQUIP_PET_ITEM);
- return;
- }
- final L2PetInstance pet = ((L2PetInstance) activeChar.getPet());
- if (!pet.canWear(item.getItem()))
- {
- activeChar.sendPacket(SystemMessageId.PET_CANNOT_USE_ITEM);
- return;
- }
- if (pet.isDead())
- {
- activeChar.sendPacket(SystemMessageId.CANNOT_GIVE_ITEMS_TO_DEAD_PET);
- return;
- }
- if (!pet.getInventory().validateCapacity(item))
- {
- activeChar.sendPacket(SystemMessageId.YOUR_PET_CANNOT_CARRY_ANY_MORE_ITEMS);
- return;
- }
- if (!pet.getInventory().validateWeight(item, 1))
- {
- activeChar.sendPacket(SystemMessageId.UNABLE_TO_PLACE_ITEM_YOUR_PET_IS_TOO_ENCUMBERED);
- return;
- }
- activeChar.transferItem("Transfer", _objectId, 1, pet.getInventory(), pet);
- // Equip it, removing first the previous item.
- if (item.isEquipped())
- pet.getInventory().unEquipItemInSlot(item.getLocationSlot());
- else
- pet.getInventory().equipPetItem(item);
- activeChar.sendPacket(new PetItemList(pet));
- pet.updateAndBroadcastStatus(1);
- return;
- }
- if (!activeChar.getInventory().canManipulateWithItemId(item.getItemId()))
- return;
- if (Config.DEBUG)
- _log.finest(activeChar.getName() + ": use item " + _objectId);
- if (!item.isEquipped())
- {
- if (!item.getItem().checkCondition(activeChar, activeChar, true))
- return;
- }
- if (Config.ALLOW_OLY_GRADE_RESTR)
- {
- if ( (activeChar.getActingPlayer().isInOlympiadMode())) //fabiano restricao enchant olym
- {
- if (item.getEnchantLevel() > Config.MAX_ENCHANT_RESTR)
- {
- activeChar.sendMessage("Your weapon or armor enchant level is not the appropriate, YOU MUST USE enchant MAX+6 items");
- return;
- }
- }
- }
- if (item.isEquipable())
- {
- if (activeChar.isCastingNow() || activeChar.isCastingSimultaneouslyNow())
- {
- activeChar.sendPacket(SystemMessageId.CANNOT_USE_ITEM_WHILE_USING_MAGIC);
- return;
- }
- switch (item.getItem().getBodyPart())
- {
- case Item.SLOT_LR_HAND:
- case Item.SLOT_L_HAND:
- case Item.SLOT_R_HAND:
- {
- if (activeChar.isMounted())
- {
- activeChar.sendPacket(SystemMessageId.CANNOT_EQUIP_ITEM_DUE_TO_BAD_CONDITION);
- return;
- }
- WeaponType tip = null;
- if (Config.Enable_Check_Weapons)
- {
- if (item.getItem() instanceof Weapon)
- {
- switch(Config.Weapon_Type)
- {
- case 1:
- tip = WeaponType.BIGBLUNT;
- break;
- case 2:
- tip = WeaponType.BIGSWORD;
- break;
- case 3:
- tip = WeaponType.BLUNT;
- break;
- case 4:
- tip = WeaponType.BOW;
- break;
- case 5:
- tip = WeaponType.DAGGER;
- break;
- case 6:
- tip = WeaponType.DUAL;
- break;
- case 7:
- tip = WeaponType.DUALFIST;
- break;
- case 8:
- tip = WeaponType.ETC;
- break;
- case 9:
- tip = WeaponType.FISHINGROD;
- break;
- case 10:
- tip = WeaponType.FIST;
- break;
- case 11:
- tip = WeaponType.NONE;
- break;
- case 12:
- tip = WeaponType.PET;
- break;
- case 13:
- tip = WeaponType.POLE;
- break;
- case 14:
- tip = WeaponType.SWORD;
- break;
- }
- if ( ((Weapon)item.getItem()).getItemType() == tip)
- {
- if (Config.Disable_Classes.contains(activeChar.getClassId().getId()))
- {
- activeChar.sendMessage("This item can not be equipped by your class");
- activeChar.sendPacket(ActionFailed.STATIC_PACKET);
- return;
- }
- }
- }
- }
- // Don't allow weapon/shield equipment if a cursed weapon is equipped
- if (activeChar.isCursedWeaponEquipped())
- return;
- break;
- }
- }
- if (activeChar.isCursedWeaponEquipped() && item.getItemId() == 6408) // Don't allow to put formal wear
- return;
- // Equip or unEquip
- if (activeChar.isAttackingNow())
- ThreadPoolManager.getInstance().scheduleGeneral(() -> {
- final ItemInstance itemToTest = activeChar.getInventory().getItemByObjectId(_objectId);
- if(itemToTest == null)
- return;
- activeChar.useEquippableItem(itemToTest, false);
- }, activeChar.getAttackEndTime() - System.currentTimeMillis());
- else
- activeChar.useEquippableItem(item, true);
- }
- else
- {
- if (activeChar.isCastingNow() && !(item.isPotion() || item.isElixir()))
- return;
- if (activeChar.getAttackType() == WeaponType.FISHINGROD && item.getItem().getItemType() == EtcItemType.LURE)
- {
- activeChar.getInventory().setPaperdollItem(Inventory.PAPERDOLL_LHAND, item);
- activeChar.broadcastUserInfo();
- sendPacket(new ItemList(activeChar, false));
- return;
- }
- final IItemHandler handler = ItemHandler.getInstance().getItemHandler(item.getEtcItem());
- if (handler != null)
- handler.useItem(activeChar, item, _ctrlPressed);
- for (Quest quest : item.getQuestEvents())
- {
- QuestState state = activeChar.getQuestState(quest.getName());
- if (state == null || !state.isStarted())
- continue;
- quest.notifyItemUse(item, activeChar, activeChar.getTarget());
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement