/* * Copyright (C) 2004-2015 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 static com.l2jserver.gameserver.data.xml.impl.MultisellData.PAGE_SIZE; import com.l2jserver.gameserver.model.multisell.Entry; import com.l2jserver.gameserver.model.multisell.Ingredient; import com.l2jserver.gameserver.model.multisell.ListContainer; public final class MultiSellList extends L2GameServerPacket { private int _size, _index; private final ListContainer _list; private final boolean _finished; public MultiSellList(ListContainer list, int index) { _list = list; _index = index; _size = list.getEntries().size() - index; if (_size > PAGE_SIZE) { _finished = false; _size = PAGE_SIZE; } else { _finished = true; } } @Override protected void writeImpl() { writeC(0xD0); writeD(_list.getListId()); // list id writeC(0x00); // GOD Unknown writeD(1 + (_index / PAGE_SIZE)); // page started from 1 writeD(_finished ? 0x01 : 0x00); // finished writeD(PAGE_SIZE); // size of pages writeD(_size); // list length writeC(_list.isNewMultisell() ? 0x01 : 0x00); // new multisell window Entry ent; while (_size-- > 0) { ent = _list.getEntries().get(_index++); writeD(ent.getEntryId()); writeC(ent.isStackable() ? 1 : 0); writeH(0x00); writeD(0x00); writeD(0x00); writeH(0x00); writeH(0x00); writeH(0x00); writeH(0x00); writeH(0x00); writeH(0x00); writeH(0x00); writeH(0x00); writeH(ent.getProducts().size()); writeH(ent.getIngredients().size()); for (Ingredient ing : ent.getProducts()) { writeD(ing.getItemId()); if (ing.getTemplate() != null) { writeQ(ing.getTemplate().getBodyPart()); writeH(ing.getTemplate().getType2()); } else { writeQ(0); writeH(65535); } writeQ(ing.getItemCount()); if (ing.getItemInfo() != null) { writeH(ing.getItemInfo().getEnchantLevel()); // enchant level writeD(_list.isNewMultisell() ? ing.getChance() : ing.getItemInfo().getAugmentId()); // augment id writeD(0x00); // mana writeD(0x00); // time ? writeH(ing.getItemInfo().getElementId()); // attack element writeH(ing.getItemInfo().getElementPower()); // element power writeH(ing.getItemInfo().getElementals()[0]); // fire writeH(ing.getItemInfo().getElementals()[1]); // water writeH(ing.getItemInfo().getElementals()[2]); // wind writeH(ing.getItemInfo().getElementals()[3]); // earth writeH(ing.getItemInfo().getElementals()[4]); // holy writeH(ing.getItemInfo().getElementals()[5]); // dark } else { writeH(ing.getEnchantLevel()); // enchant level writeD(ing.getChance()); // augment id writeD(0x00); // mana writeD(0x00); // time ? writeH(0x00); // attack element writeH(0x00); // element power writeH(0x00); // fire writeH(0x00); // water writeH(0x00); // wind writeH(0x00); // earth writeH(0x00); // holy writeH(0x00); // dark } } for (Ingredient ing : ent.getIngredients()) { writeD(ing.getItemId()); writeH(ing.getTemplate() != null ? ing.getTemplate().getType2() : 65535); writeQ(ing.getItemCount()); if (ing.getItemInfo() != null) { writeH(ing.getItemInfo().getEnchantLevel()); // enchant level writeD(_list.isNewMultisell() ? ing.getChance() : ing.getItemInfo().getAugmentId()); // augment id writeD(0x00); // mana writeH(ing.getItemInfo().getElementId()); // attack element writeH(ing.getItemInfo().getElementPower()); // element power writeH(ing.getItemInfo().getElementals()[0]); // fire writeH(ing.getItemInfo().getElementals()[1]); // water writeH(ing.getItemInfo().getElementals()[2]); // wind writeH(ing.getItemInfo().getElementals()[3]); // earth writeH(ing.getItemInfo().getElementals()[4]); // holy writeH(ing.getItemInfo().getElementals()[5]); // dark } else { writeH(ing.getEnchantLevel()); // enchant level writeD(ing.getChance()); // augment id writeD(0x00); // mana writeH(0x00); // attack element writeH(0x00); // element power writeH(0x00); // fire writeH(0x00); // water writeH(0x00); // wind writeH(0x00); // earth writeH(0x00); // holy writeH(0x00); // dark } } } } }