Package lineage2.gameserver.network.serverpackets

Source Code of lineage2.gameserver.network.serverpackets.L2GameServerPacket

package lineage2.gameserver.network.serverpackets;

import lineage2.commons.net.nio.impl.SendablePacket;
import lineage2.gameserver.GameServer;
import lineage2.gameserver.data.xml.holder.ItemHolder;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.base.Element;
import lineage2.gameserver.model.base.MultiSellIngredient;
import lineage2.gameserver.model.items.ItemInfo;
import lineage2.gameserver.model.items.ItemInstance;
import lineage2.gameserver.network.GameClient;
import lineage2.gameserver.network.serverpackets.components.IStaticPacket;
import lineage2.gameserver.templates.item.ItemTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public abstract class L2GameServerPacket extends SendablePacket<GameClient> implements IStaticPacket
{
  private static final Logger _log = LoggerFactory.getLogger(L2GameServerPacket.class);

  @Override
  public final boolean write()
  {
    try
    {
      writeImpl();
      return true;
    }
    catch (Exception e)
    {
      _log.error("Client: " + getClient() + " - Failed writing: " + getType() + " - Server Version: " + GameServer.getInstance().getVersion().getRevisionNumber(), e);
    }
    return false;
  }

  protected abstract void writeImpl();

  protected void writeEx(int value)
  {
    writeC(0xFE);
    writeH(value);
  }

  protected void writeD(boolean b)
  {
    writeD(b ? 1 : 0);
  }

  protected void writeC(boolean b)
  {
    writeC(b ? 1 : 0);
  }

  /**
   */
  protected void writeDD(int[] values, boolean sendCount)
  {
    if (sendCount)
      getByteBuffer().putInt(values.length);
    for (int value : values)
      getByteBuffer().putInt(value);
  }

  protected void writeDD(int[] values)
  {
    writeDD(values, false);
  }

  protected void writeItemInfo(ItemInstance item)
  {
    writeItemInfo(item, item.getCount());
  }

  protected void writeItemInfo(ItemInstance item, long count)
  {
    // dddQhhhdhhhhddhhhhhhhhhhhhd
    writeD(item.getObjectId());
    writeD(item.getItemId());
    writeD(item.getEquipSlot());
    writeQ(count);
    writeH(item.getTemplate().getType2ForPackets());
    writeH(item.getCustomType1());
    writeH(item.isEquipped() ? 1 : 0);
    writeD(item.getBodyPart());
    writeH(item.getEnchantLevel());
    writeH(item.getCustomType2());
    writeD(item.getAugmentationId()); // L2WT TEST!!! D = [HH] [00 00] [00
                                      // 00]
    writeD(item.getShadowLifeTime());
    writeD(item.getTemporalLifeTime());
    writeH(0x01); // L2WT GOD
    writeH(item.getAttackElement().getId());
    writeH(item.getAttackElementValue());
    writeH(item.getDefenceFire());
    writeH(item.getDefenceWater());
    writeH(item.getDefenceWind());
    writeH(item.getDefenceEarth());
    writeH(item.getDefenceHoly());
    writeH(item.getDefenceUnholy());
    writeH(item.getEnchantOptions()[0]);
    writeH(item.getEnchantOptions()[1]);
    writeH(item.getEnchantOptions()[2]);
    writeD(item.getVisualId());
  }

  protected void writeItemInfo(ItemInfo item)
  {
    writeItemInfo(item, item.getCount());
  }

  protected void writeItemInfo(ItemInfo item, long count)
  {
    writeD(item.getObjectId());
    writeD(item.getItemId());
    writeD(item.getEquipSlot());
    writeQ(count);
    writeH(item.getItem().getType2ForPackets());
    writeH(item.getCustomType1());
    writeH(item.isEquipped() ? 1 : 0);
    writeD(item.getItem().getBodyPart());
    writeH(item.getEnchantLevel());
    writeH(item.getCustomType2());
    writeD(item.getAugmentationId()); // L2WT TEST!!! D = [HH] [00 00] [00
                                      // 00]
    // writeH(0x00); //??
    writeD(item.getShadowLifeTime());
    writeD(item.getTemporalLifeTime());
    writeH(0x01); // L2WT GOD
    writeH(item.getAttackElement());
    writeH(item.getAttackElementValue());
    writeH(item.getDefenceFire());
    writeH(item.getDefenceWater());
    writeH(item.getDefenceWind());
    writeH(item.getDefenceEarth());
    writeH(item.getDefenceHoly());
    writeH(item.getDefenceUnholy());
    writeH(item.getEnchantOptions()[0]);
    writeH(item.getEnchantOptions()[1]);
    writeH(item.getEnchantOptions()[2]);
    writeD(item.getVisualId());
  }

  protected void writeItemElements(MultiSellIngredient item)
  {
    if (item.getItemId() <= 0)
    {
      writeItemElements();
      return;
    }
    ItemTemplate i = ItemHolder.getInstance().getTemplate(item.getItemId());
    if (item.getItemAttributes().getValue() > 0)
    {
      if (i.isWeapon())
      {
        Element e = item.getItemAttributes().getElement();
        writeH(e.getId()); // attack element (-1 - none)
        writeH(item.getItemAttributes().getValue(e) + i.getBaseAttributeValue(e)); // attack element value
        writeH(0);
        writeH(0);
        writeH(0);
        writeH(0);
        writeH(0);
        writeH(0);
      }
      else if (i.isArmor())
      {
        writeH(-1); // attack element (-1 - none)
        writeH(0); // attack element value
        for (Element e : Element.VALUES)
          writeH(item.getItemAttributes().getValue(e) + i.getBaseAttributeValue(e));
      }
      else
        writeItemElements();
    }
    else
      writeItemElements();
  }

/*  protected void writeInfo(final MultiSellIngredient ingr, final boolean product)
  {
    final int itemId = ingr.getItemId();
    final ItemTemplate template = (itemId > 0) ? ItemHolder.getInstance().getTemplate(ingr.getItemId()) : null;

    writeD(itemId);

    if(product)
    {
      writeD((itemId > 0) ? template.getBodyPart() : 0);
    }

    writeH((itemId > 0) ? template.getType2ForPackets() : 0);
    writeQ(ingr.getItemCount());
    writeH(ingr.getItemEnchant());

    if(product)
    {
      writeD(ingr.getChance(true));
    }

    writeAugmentationInfo(ingr);
    writeItemElements(ingr);
  }

  protected void writeAugmentationInfo(final MultiSellIngredient ingr)
  {
    if(ingr.getAugmentationId() != 0)
    {
      final int augm = ingr.getAugmentationId();

      writeD(augm & 0x0000FFFF);
      writeD(augm >> 16);
    }
    else
    {
      writeD(0x00);
      writeD(0x00);
    }
  }
*/
  protected void writeItemElements()
  {
    writeH(-1); // attack element (-1 - none)
    writeH(0x00); // attack element value
    writeH(0x00);
    writeH(0x00);
    writeH(0x00);
    writeH(0x00);
    writeH(0x00);
    writeH(0x00);
  }

  public String getType()
  {
    return "[S] " + getClass().getSimpleName();
  }

  @Override
  public L2GameServerPacket packet(Player player)
  {
    return this;
  }

}
TOP

Related Classes of lineage2.gameserver.network.serverpackets.L2GameServerPacket

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.