/* * Copyright (C) 2004-2014 L2J Server * * This file is part of L2J Server. * * L2J Server 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. * * L2J Server 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 com.l2jserver.gameserver.network.serverpackets; import com.l2jserver.gameserver.model.ItemInfo; import com.l2jserver.gameserver.model.TradeItem; import com.l2jserver.gameserver.model.itemcontainer.PcInventory; import com.l2jserver.gameserver.model.items.instance.L2ItemInstance; /** * @author UnAfraid */ public abstract class AbstractItemPacket extends L2GameServerPacket { private int check_Augmentation; // 603 private int check_ElementType; // 603 private int check_EnchantOption; // 603 protected void writeItem(TradeItem item) { writeItem(new ItemInfo(item)); } protected void writeItem(L2ItemInstance item) { writeItem(new ItemInfo(item)); } protected void writeItem(ItemInfo item) { check_Augmentation = 0; check_ElementType = 0; check_EnchantOption = 0; if (item.getAugmentationBonus() > 0) { check_Augmentation = 1; } if (item.getAttackElementPower() > 0) { check_ElementType = 2; } else { for (byte i = 0; i < 6; i++) { if (item.getElementDefAttr(i) > 0) { check_ElementType = 2; } } } for (int op : item.getEnchantOptions()) { if (op > 0) { check_EnchantOption = 4; } } writeC(check_Augmentation + check_ElementType + check_EnchantOption + 0); // GS-comment-023 writeD(item.getObjectId()); // ObjectId writeD(item.getItem().getDisplayId()); // ItemId writeC(item.getLocation()); // 603 // T1 writeQ(item.getCount()); // Quantity writeC(item.getItem().getType2()); // 603 // Item Type 2 : 00-weapon, 01-shield/armor, 02-ring/earring/necklace, 03-questitem, 04-adena, 05-item writeC(item.getCustomType1()); // 603 // Filler (always 0) writeH(item.getEquipped()); // Equipped : 00-No, 01-yes writeQ(item.getItem().getBodyPart()); // 603 // Slot : 0006-lr.ear, 0008-neck, 0030-lr.finger, 0040-head, 0100-l.hand, 0200-gloves, 0400-chest, 0800-pants, 1000-feet, 4000-r.hand, 8000-r.hand writeC(item.getEnchant()); // 603 // Enchant level (pet level shown in control item) writeC(item.getCustomType2()); // 603 // Pet name exists or not shown in control item //603 writeD(item.getAugmentationBonus()); writeD(item.getMana()); writeD(item.getTime()); writeC(0x01); // 603 if (check_Augmentation > 0) // 603 { writeD(item.getAugmentationBonus()); } writeItemElementalAndEnchant(item); //603 writeD(0x00); // 603-Appearance } protected void writeItemElementalAndEnchant(ItemInfo item) { if (check_ElementType > 0) // 603 { writeH(item.getAttackElementType()); writeH(item.getAttackElementPower()); for (byte i = 0; i < 6; i++) { writeH(item.getElementDefAttr(i)); } } // Enchant Effects if (check_EnchantOption > 0) // 603 { for (int op : item.getEnchantOptions()) { writeH(op); } } } protected void writeInventoryBlock(PcInventory inventory) { if (inventory.hasInventoryBlock()) { writeH(inventory.getBlockItems().length); writeC(inventory.getBlockMode()); for (int i : inventory.getBlockItems()) { writeD(i); } } else { writeH(0x00); } } }