/* * 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 net.sf.l2j.gameserver.serverpackets; import net.sf.l2j.Config; import net.sf.l2j.gameserver.NpcTable; import net.sf.l2j.gameserver.model.Inventory; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; /** * 0000: 03 32 15 00 00 44 fe 00 00 80 f1 ff ff 00 00 00 .2...D..........
* 0010: 00 6b b4 c0 4a 45 00 6c 00 6c 00 61 00 6d 00 69 .k..JE.l.l.a.m.i
* 0020: 00 00 00 01 00 00 00 01 00 00 00 12 00 00 00 00 ................
* 0030: 00 00 00 2a 00 00 00 42 00 00 00 71 02 00 00 31 ...*...B...q...1
* 0040: 00 00 00 18 00 00 00 1f 00 00 00 25 00 00 00 00 ...........%....
* 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f9 ................
* 0060: 00 00 00 b3 01 00 00 00 00 00 00 00 00 00 00 7d ...............}
* 0070: 00 00 00 5a 00 00 00 32 00 00 00 32 00 00 00 00 ...Z...2...2....
* 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 67 ...............g
* 0090: 66 66 66 66 66 f2 3f 5f 63 97 a8 de 1a f9 3f 00 fffff.?_c.....?.
* 00a0: 00 00 00 00 00 1e 40 00 00 00 00 00 00 37 40 01 .............7..
* 00b0: 00 00 00 01 00 00 00 01 00 00 00 00 00 c1 0c 00 ................
* 00c0: 00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 00 ................
* 00d0: 00 00
*
* dddddSdddddddddddddddddddddddddddffffdddSdddccccccc (h)
* dddddSdddddddddddddddddddddddddddffffdddSdddddccccccch * dddddSddddddddddddddddddddddddddddffffdddSdddddccccccch (h) c (dchd) ddc dcc c cddd d * @version $Revision: 1.7.2.6.2.11 $ $Date: 2005/04/11 10:05:54 $ */ public class CharInfo extends ServerBasePacket { private static final String _S__03_CHARINFO = "[S] 03 CharInfo"; private L2PcInstance _cha; 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; /** * @param _characters */ public CharInfo(L2PcInstance cha) { _cha = cha; _inv = cha.getInventory(); _x = _cha.getX(); _y = _cha.getY(); _z = _cha.getZ(); _heading = _cha.getHeading(); _mAtkSpd = _cha.getMAtkSpd(); _pAtkSpd = _cha.getPAtkSpd(); //moveMultiplier = _cha.getMovementSpeedMultiplier(); //_runSpd = (int)(_cha.getRunSpeed()/moveMultiplier); //_walkSpd = (int)(_cha.getWalkSpeed()/moveMultiplier); //_swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd; //_swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd; } final void runImpl() { // no long-running tasks moveMultiplier = _cha.getMovementSpeedMultiplier(); _runSpd = (int)(_cha.getRunSpeed()/moveMultiplier); _walkSpd = (int)(_cha.getWalkSpeed()/moveMultiplier); _swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd; _swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd; } final void writeImpl() { if (_cha.getInvisible() == 1) return; if (_cha.getPoly().isMorphed()) { writeC(0x16); writeD(_cha.getObjectId()); writeD(_cha.getPoly().getPolyId()+1000000); // npctype id writeD(_cha.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(_cha.getMovementSpeedMultiplier()); writeF(_cha.getAttackSpeedMultiplier()); writeF(NpcTable.getInstance().getTemplate(_cha.getPoly().getPolyId()).collisionRadius); writeF(NpcTable.getInstance().getTemplate(_cha.getPoly().getPolyId()).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(_cha.isRunning() ? 1 : 0); writeC(_cha.isInCombat() ? 1 : 0); writeC(_cha.isAlikeDead() ? 1 : 0); writeC(_cha.getInvisible()); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation) writeS(_cha.getName()); writeS(_cha.getTitle()); writeD(0); writeD(0); writeD(0000); // hmm karma ?? writeH(_cha.getAbnormalEffect()); // C2 writeH(0x00); // C2 writeD(0); // C2 writeD(0); // C2 writeD(0); // C2 writeD(0); // C2 writeC(0); // C2 } else { writeC(0x03); writeD(_x); writeD(_y); writeD(_z); writeD(_heading); writeD(_cha.getObjectId()); L2PcInstance _cha2 = getClient().getActiveChar(); if (_cha2 != null && _cha.getClan() != null && _cha2.getClan() != null && _cha.getClan().isAtWarWith(_cha2.getClanId())) writeS("*"+_cha.getName()); else writeS(_cha.getName()); writeD(_cha.getRace().ordinal()); writeD(_cha.getSex()); if (_cha.getClassIndex() == 0) writeD(_cha.getClassId().getId()); else writeD(_cha.getBaseClass()); writeD(0); // unknown, maybe underwear? 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(_cha.getPvpFlag()); writeD(_cha.getKarma()); writeD(_mAtkSpd); writeD(_pAtkSpd); writeD(_cha.getPvpFlag()); writeD(_cha.getKarma()); writeD(_runSpd); writeD(_walkSpd); writeD(_swimRunSpd/*0x32*/); // swimspeed writeD(_swimWalkSpd/*0x32*/); // swimspeed writeD(_flRunSpd); writeD(_flWalkSpd); writeD(_flyRunSpd); writeD(_flyWalkSpd); writeF(_cha.getMovementSpeedMultiplier()); // _cha.getProperMultiplier() writeF(_cha.getAttackSpeedMultiplier()); // _cha.getAttackSpeedMultiplier() writeF(_cha.getBaseTemplate().collisionRadius); writeF(_cha.getBaseTemplate().collisionHeight); writeD(_cha.getHairStyle()); writeD(_cha.getHairColor()); writeD(_cha.getFace()); writeS(_cha.getTitle()); writeD(_cha.getClanId()); writeD(_cha.getClanCrestId()); writeD(_cha.getAllyId()); writeD(_cha.getAllyCrestId()); writeD(0); // new in rev 417 siege-flags writeC(_cha.isSitting() ? 0 : 1); // standing = 1 sitting = 0 writeC(_cha.isRunning() ? 1 : 0); // running = 1 walking = 0 writeC(_cha.isInCombat() ? 1 : 0); writeC(_cha.isAlikeDead() ? 1 : 0); writeC(_cha.getInvisible()); // invisible = 1 visible =0 writeC(_cha.getMountType()); // 1 on strider 2 on wyvern 0 no mount writeC(_cha.getPrivateStoreType()); // 1 - sellshop writeH(_cha.getCubics().size()); for (int id : _cha.getCubics().keySet()) writeH(id); writeC(0x00); // find party members writeD(_cha.getAbnormalEffect()); // Code that works for getEnchantEffect() writeC(0x00); //Changed by Thorgrim writeH(_cha.getRecomHave()); //Blue value for name (0 = white, 255 = pure blue) writeD(0x00); writeD(0x00); // unknown writeD(0x00); // unknown writeC(_cha.isMounted() ? 0 :_cha.getEnchantEffect()); writeC(0x00); //?? writeD(_cha.getClanCrestLargeId()); writeC((_cha.isHero() || (_cha.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Symbol on char menu ctrl+I writeC((_cha.isHero() || (_cha.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); // Hero Aura writeC(_cha.isFishing() ? 1 : 0); //0x01: Fishing Mode (Cant be undone by setting back to 0) writeD(_cha.GetFishx()); writeD(_cha.GetFishy()); writeD(_cha.GetFishz()); writeD(_cha.getNameColor()); } } /* (non-Javadoc) * @see net.sf.l2j.gameserver.serverpackets.ServerBasePacket#getType() */ public String getType() { return _S__03_CHARINFO; } }