Package com.l2jfrozen.gameserver.network.serverpackets

Source Code of com.l2jfrozen.gameserver.network.serverpackets.CharInfo

/*
* 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 2, 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.network.serverpackets;

import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.datatables.sql.NpcTable;
import com.l2jfrozen.gameserver.managers.CursedWeaponsManager;
import com.l2jfrozen.gameserver.model.Inventory;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.actor.instance.L2CubicInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;

/**
* 0000: 03 32 15 00 00 44 fe 00 00 80 f1 ff ff 00 00 00 .2...D..........
* <p>
* 0010: 00 6b b4 c0 4a 45 00 6c 00 6c 00 61 00 6d 00 69 .k..JE.l.l.a.m.i
* <p>
* 0020: 00 00 00 01 00 00 00 01 00 00 00 12 00 00 00 00 ................
* <p>
* 0030: 00 00 00 2a 00 00 00 42 00 00 00 71 02 00 00 31 ...*...B...q...1
* <p>
* 0040: 00 00 00 18 00 00 00 1f 00 00 00 25 00 00 00 00 ...........%....
* <p>
* 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 ................
* <p>
* 0060: 00 00 00 b3 01 00 00 00 00 00 00 00 00 00 00 7d ...............}
* <p>
* 0070: 00 00 00 5a 00 00 00 32 00 00 00 32 00 00 00 00 ...Z...2...2....
* <p>
* 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 67 ...............g
* <p>
* 0090: 66 66 66 66 66 f2 3f 5f 63 97 a8 de 1a f9 3f 00 fffff.?_c.....?.
* <p>
* 00a0: 00 00 00 00 00 1e 40 00 00 00 00 00 00 37 40 01 .............7..
* <p>
* 00b0: 00 00 00 01 00 00 00 01 00 00 00 00 00 c1 0c 00 ................
* <p>
* 00c0: 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 ................
* <p>
* 00d0: 00 00
* <p>
* <p>
* dddddSdddddddddddddddddddddddddddffffdddSdddccccccc (h)
* <p>
* dddddSdddddddddddddddddddddddddddffffdddSdddddccccccch dddddSddddddddddddddddddddddddddddffffdddSdddddccccccch (h) c
* (dchd) ddc dcc c cddd d dddddSdddddddddddddddhhhhhhhhhhhhhhhhhhhhhhhhddddddddddddddffffdddSdddddccccccch [h] c (ddhd)
* ddc c ddc cddd d d dd d d d
*
* @version $Revision: 1.7.2.6.2.11 $ $Date: 2005/04/11 10:05:54 $
*/
public class CharInfo extends L2GameServerPacket
{
  private static final Logger _log = Logger.getLogger(CharInfo.class.getName());

  private static final String _S__03_CHARINFO = "[S] 03 CharInfo";
  private L2PcInstance _activeChar;
  private Inventory _inv;
  private int _x, _y, _z, _heading;
  private int _mAtkSpd, _pAtkSpd;
  private int _runSpd, _walkSpd, _swimRunSpd, _swimWalkSpd, _flRunSpd, _flWalkSpd, _flyRunSpd, _flyWalkSpd;
  private float _moveMultiplier, _attackSpeedMultiplier;
  private int _maxCp;

  /**
   * @param cha
   */
  public CharInfo(L2PcInstance cha)
  {
    _activeChar = cha;
    _inv = cha.getInventory();
    _x = _activeChar.getX();
    _y = _activeChar.getY();
    _z = _activeChar.getZ();
    _heading = _activeChar.getHeading();
    _mAtkSpd = _activeChar.getMAtkSpd();
    _pAtkSpd = _activeChar.getPAtkSpd();
    _moveMultiplier = _activeChar.getMovementSpeedMultiplier();
    _attackSpeedMultiplier = _activeChar.getAttackSpeedMultiplier();
    _runSpd = (int) (_activeChar.getRunSpeed() / _moveMultiplier);
    _walkSpd = (int) (_activeChar.getWalkSpeed() / _moveMultiplier);
    _swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd;
    _swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd;
    _maxCp = _activeChar.getMaxCp();
  }

  @Override
  protected final void writeImpl()
  {
    boolean receiver_is_gm = false;

    L2PcInstance tmp = getClient().getActiveChar();
    if(tmp != null && tmp.isGM())
    {
      receiver_is_gm = true;
    }
   
    if(!receiver_is_gm && _activeChar.getAppearance().getInvisible())
      return;
   
    if(_activeChar.getPoly().isMorphed())
    {
      L2NpcTemplate template = NpcTable.getInstance().getTemplate(_activeChar.getPoly().getPolyId());

      if(template != null)
      {
        writeC(0x16);
        writeD(_activeChar.getObjectId());
        writeD(_activeChar.getPoly().getPolyId() + 1000000); // npctype id
        writeD(_activeChar.getKarma() > 0 ? 1 : 0);
        writeD(_x);
        writeD(_y);
        writeD(_z);
        writeD(_heading);
        writeD(0x00);
        writeD(_mAtkSpd);
        writeD(_pAtkSpd);
        writeD(_runSpd);
        writeD(_walkSpd);
        writeD(_swimRunSpd/*0x32*/); // swimspeed
        writeD(_swimWalkSpd/*0x32*/); // swimspeed
        writeD(_flRunSpd);
        writeD(_flWalkSpd);
        writeD(_flyRunSpd);
        writeD(_flyWalkSpd);
        writeF(_moveMultiplier);
        writeF(_attackSpeedMultiplier);
        writeF(template.collisionRadius);
        writeF(template.collisionHeight);
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); // right hand weapon
        writeD(0);
        writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); // left hand weapon
        writeC(1); // name above char 1=true ... ??
        writeC(_activeChar.isRunning() ? 1 : 0);
        writeC(_activeChar.isInCombat() ? 1 : 0);
        writeC(_activeChar.isAlikeDead() ? 1 : 0);

        //if(gmSeeInvis)
        //{
        writeC(0); //if the charinfo is written means receiver can see the char
        //}
        //else
        //{
        //  writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible ?? 0=false  1=true   2=summoned (only works if model has a summon animation)
        //}

        writeS(_activeChar.getName());

        if(_activeChar.getAppearance().getInvisible())
        //if(gmSeeInvis)
        {
          writeS("Invisible");
        }
        else
        {
          writeS(_activeChar.getTitle());
        }

        writeD(0);
        writeD(0);
        writeD(0000); // hmm karma ??

        if(_activeChar.getAppearance().getInvisible())
        //if(gmSeeInvis)
        {
          writeD((_activeChar.getAbnormalEffect() | L2Character.ABNORMAL_EFFECT_STEALTH));
        }
        else
        {
          writeD(_activeChar.getAbnormalEffect()); // C2
        }

        writeD(0); // C2
        writeD(0); // C2
        writeD(0); // C2
        writeD(0); // C2
        writeC(0); // C2
      }
      else
      {
        _log.warning("Character " + _activeChar.getName() + " (" + _activeChar.getObjectId() + ") morphed in a Npc (" + _activeChar.getPoly().getPolyId() + ") w/o template.");
      }
    }
    else
    {
      writeC(0x03);
      writeD(_x);
      writeD(_y);
      writeD(_z);
      writeD(_heading);
      writeD(_activeChar.getObjectId());
      writeS(_activeChar.getName());
      writeD(_activeChar.getRace().ordinal());
      writeD(_activeChar.getAppearance().getSex() ? 1 : 0);

      if(_activeChar.getClassIndex() == 0)
      {
        writeD(_activeChar.getClassId().getId());
      }
      else
      {
        writeD(_activeChar.getBaseClass());
      }

      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
      writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FACE));

      // c6 new h's
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LRHAND));
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);
      writeH(0x00);

      writeD(_activeChar.getPvpFlag());
      writeD(_activeChar.getKarma());

      writeD(_mAtkSpd);
      writeD(_pAtkSpd);

      writeD(_activeChar.getPvpFlag());
      writeD(_activeChar.getKarma());

      writeD(_runSpd);
      writeD(_walkSpd);
      writeD(_swimRunSpd/*0x32*/); // swimspeed
      writeD(_swimWalkSpd/*0x32*/); // swimspeed
      writeD(_flRunSpd);
      writeD(_flWalkSpd);
      writeD(_flyRunSpd);
      writeD(_flyWalkSpd);
      writeF(_activeChar.getMovementSpeedMultiplier()); // _activeChar.getProperMultiplier()
      writeF(_activeChar.getAttackSpeedMultiplier()); // _activeChar.getAttackSpeedMultiplier()
      writeF(_activeChar.getBaseTemplate().collisionRadius);
      writeF(_activeChar.getBaseTemplate().collisionHeight);

      writeD(_activeChar.getAppearance().getHairStyle());
      writeD(_activeChar.getAppearance().getHairColor());
      writeD(_activeChar.getAppearance().getFace());

      if(_activeChar.getAppearance().getInvisible())
      //if(gmSeeInvis)
      {
        writeS("Invisible");
      }
      else
      {
        writeS(_activeChar.getTitle());
      }

      writeD(_activeChar.getClanId());
      writeD(_activeChar.getClanCrestId());
      writeD(_activeChar.getAllyId());
      writeD(_activeChar.getAllyCrestId());
      // In UserInfo leader rights and siege flags, but here found nothing??
      // Therefore RelationChanged packet with that info is required
      writeD(0);

      writeC(_activeChar.isSitting() ? 0 : 1); // standing = 1  sitting = 0
      writeC(_activeChar.isRunning() ? 1 : 0); // running = 1   walking = 0
      writeC(_activeChar.isInCombat() ? 1 : 0);
      writeC(_activeChar.isAlikeDead() ? 1 : 0);

      //if(gmSeeInvis)
      //{
      writeC(0); //if the charinfo is written means receiver can see the char
      //}
      //else
      //{
      //  writeC(_activeChar.getAppearance().getInvisible() ? 1 : 0); // invisible = 1  visible =0
      //}

      writeC(_activeChar.getMountType()); // 1 on strider   2 on wyvern   0 no mount
      writeC(_activeChar.getPrivateStoreType()); //  1 - sellshop

      final Map<Integer, L2CubicInstance> cubics = _activeChar.getCubics();
     
      Set<Integer> cubicsIds = cubics.keySet();
     
      writeH(cubicsIds.size());
      for (Integer id : cubicsIds)
      {
        if (id != null)
          writeH(id);
      }
     
      writeC(_activeChar.isInPartyMatchRoom() ? 1 : 0);
      //writeC(0x00); // find party members

      if(_activeChar.getAppearance().getInvisible())
      //if(gmSeeInvis)
      {
        writeD((_activeChar.getAbnormalEffect() | L2Character.ABNORMAL_EFFECT_STEALTH));
      }
      else
      {
        writeD(_activeChar.getAbnormalEffect());
      }

      writeC(_activeChar.getRecomLeft()); //Changed by Thorgrim
      writeH(_activeChar.getRecomHave()); //Blue value for name (0 = white, 255 = pure blue)
      writeD(_activeChar.getClassId().getId());

      writeD(_maxCp);
      writeD((int) _activeChar.getCurrentCp());
      writeC(_activeChar.isMounted() ? 0 : _activeChar.getEnchantEffect());

      if(_activeChar.getTeam() == 1)
      {
        writeC(0x01); //team circle around feet 1= Blue, 2 = red
      }
      else if(_activeChar.getTeam() == 2)
      {
        writeC(0x02); //team circle around feet 1= Blue, 2 = red
      }
      else
      {
        writeC(0x00); //team circle around feet 1= Blue, 2 = red
      }

      writeD(_activeChar.getClanCrestLargeId());
      writeC(_activeChar.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I
      writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) || _activeChar.getIsPVPHero()) ? 1 : 0); // Hero Aura

      writeC(_activeChar.isFishing() ? 1 : 0); //0x01: Fishing Mode (Cant be undone by setting back to 0)
      writeD(_activeChar.GetFishx());
      writeD(_activeChar.GetFishy());
      writeD(_activeChar.GetFishz());

      writeD(_activeChar.getAppearance().getNameColor());

      writeD(0x00); // isRunning() as in UserInfo?

      writeD(_activeChar.getPledgeClass());
      writeD(0x00); // ??

      writeD(_activeChar.getAppearance().getTitleColor());

      //writeD(0x00); // ??

      if(_activeChar.isCursedWeaponEquiped())
      {
        writeD(CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquipedId()));
      }
      else
      {
        writeD(0x00);
      }
    }
  }

  /* (non-Javadoc)
   * @see com.l2jfrozen.gameserver.serverpackets.ServerBasePacket#getType()
   */
  @Override
  public String getType()
  {
    return _S__03_CHARINFO;
  }
}
TOP

Related Classes of com.l2jfrozen.gameserver.network.serverpackets.CharInfo

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.