Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 26.67 KB | None | 0 0
  1. public class CharInfo extends SendableGameClientPacket
  2. {
  3.     private static final Logger _log = Logger.getLogger(CharInfo.class.getName());
  4.    
  5.     private static final String _S__03_CHARINFO = "[S] 31 CharInfo";
  6.     private L2PcInstance _activeChar;
  7.     private Inventory _inv;
  8.     private int _x, _y, _z, _heading, _superBaseClass;
  9.     private int _mAtkSpd, _pAtkSpd;
  10.     private int _runSpd, _walkSpd, _swimRunSpd, _swimWalkSpd, _flRunSpd, _flWalkSpd, _flyRunSpd, _flyWalkSpd;
  11.     private float _moveMultiplier, _attackSpeedMultiplier;
  12.     private int _territoryId;
  13.     private boolean _isDisguised;
  14.     private boolean _isUnknown;
  15.     private boolean _isDreaming;
  16.    
  17.     /**
  18.      * @param _characters
  19.      */
  20.     public CharInfo(L2PcInstance cha)
  21.     {
  22.         _activeChar = cha;
  23.         _inv = cha.getInventory();
  24.         _x = _activeChar.getX();
  25.         _y = _activeChar.getY();
  26.         _z = _activeChar.getZ();
  27.         _heading = _activeChar.getHeading();
  28.         _mAtkSpd = _activeChar.getMAtkSpd();
  29.         _pAtkSpd = _activeChar.getPAtkSpd();
  30.        
  31.         if (_activeChar.getClassIndex() == 0)
  32.         {
  33.             _superBaseClass = _activeChar.getClassId().getSuperParent().getId();
  34.         }
  35.         else
  36.         {
  37.             try
  38.             {
  39.                 final ClassId classId = ClassId.getForId(_activeChar.getBaseClass());
  40.                 _superBaseClass = classId.getSuperParent().getId();
  41.             }
  42.             catch (final Exception e)
  43.             {
  44.                 _superBaseClass = _activeChar.getBaseClass();
  45.                 e.printStackTrace();
  46.             }
  47.         }
  48.        
  49.         _moveMultiplier = _activeChar.getMovementSpeedMultiplier();
  50.         _attackSpeedMultiplier = _activeChar.getAttackSpeedMultiplier();
  51.         _runSpd = (int) (_activeChar.getRunSpeed() / _moveMultiplier);
  52.         _walkSpd = (int) (_activeChar.getWalkSpeed() / _moveMultiplier);
  53.         _swimRunSpd = _flRunSpd = _flyRunSpd = _runSpd;
  54.         _swimWalkSpd = _flWalkSpd = _flyWalkSpd = _walkSpd;
  55.         _invisible = cha.getAppearance().getInvisible();
  56.         _territoryId = TerritoryWarManager.getInstance().getRegisteredTerritoryId(cha);
  57.         _isDisguised = TerritoryWarManager.getInstance().isDisguised(cha.getObjectId());
  58.         _isUnknown = cha.isUnknown();
  59.         _isDreaming = cha.isDreaming();
  60.     }
  61.    
  62.     @Override
  63.     protected final void writeImpl()
  64.     {
  65.         boolean isViewerGm = false;
  66.        
  67.         L2PcInstance tmp = getClient().getActiveChar();
  68.         if (tmp != null && tmp.isGM())
  69.             isViewerGm = true;
  70.        
  71.         if (_activeChar.getPoly().isMorphed())
  72.         {
  73.             L2NpcTemplate template = NpcTable.getInstance().getTemplate(_activeChar.getPoly().getPolyId());
  74.            
  75.             if (template != null)
  76.             {
  77.                 writeC(0x0c);
  78.                 writeD(_activeChar.getObjectId());
  79.                 writeD(_activeChar.getPoly().getPolyId() + 1000000); // npctype id
  80.                 writeD(_activeChar.getKarma() > 0 ? 1 : 0);
  81.                 writeD(_x);
  82.                 writeD(_y);
  83.                 writeD(_z);
  84.                 writeD(_heading);
  85.                 writeD(0x00);
  86.                 writeD(_mAtkSpd);
  87.                 writeD(_pAtkSpd);
  88.                 writeD(_runSpd); // TODO: the order of the speeds should be confirmed
  89.                 writeD(_walkSpd);
  90.                 writeD(_swimRunSpd); // swim speed
  91.                 writeD(_swimWalkSpd); // swim speed
  92.                 writeD(_flRunSpd);
  93.                 writeD(_flWalkSpd);
  94.                 writeD(_flyRunSpd);
  95.                 writeD(_flyWalkSpd);
  96.                 writeF(_moveMultiplier);
  97.                 writeF(_attackSpeedMultiplier);
  98.                 writeF(template.collisionRadius);
  99.                 writeF(template.collisionHeight);
  100.                 writeD(0);//_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND)); // right hand weapon
  101.                 writeD(0);
  102.                 writeD(0);//_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND)); // left hand weapon
  103.                 writeC(1); // name above char 1=true ... ??
  104.                 writeC(_activeChar.isRunning() ? 1 : 0);
  105.                 writeC(_activeChar.isInCombat() ? 1 : 0);
  106.                 writeC(_activeChar.isAlikeDead() ? 1 : 0);
  107.                
  108.                 writeC(isViewerGm && _invisible ? 0 : _invisible ? 1 : 0); // invisible ?? 0=false  1=true   2=summoned (only works if model has a summon animation)
  109.                
  110.                 writeS(_activeChar.getAppearance().getVisibleName());
  111.                
  112.                 writeS(isViewerGm && _invisible ? "Invisible" : _activeChar.isUnknown() ? "" : _activeChar.getAppearance().getVisibleTitle());
  113.                
  114.                 writeD(0);
  115.                 writeD(0);
  116.                 writeD(0000); // hmm karma ??
  117.                
  118.                 writeD(isViewerGm && _invisible ? (_activeChar.getAbnormalEffect() | AbnormalEffect.STEALTH.getMask()) : _activeChar.getAbnormalEffect());
  119.                
  120.                 writeD(_activeChar.getClanId()); //clan id
  121.                 writeD(_activeChar.getClanCrestId()); //crest id
  122.                 writeD(0); // C2
  123.                 writeD(0); // C2
  124.                 writeC(0); // C2
  125.                 writeC(0x00); // C3  team circle 1-blue, 2-red
  126.                 writeF(template.collisionRadius);
  127.                 writeF(template.collisionHeight);
  128.                 writeD(0x00); // C4
  129.                 writeD(0x00); // C6
  130.                 writeD(0x00);
  131.                 writeD(0x00);
  132.                 writeC(0x01);
  133.                 writeC(0x01);
  134.                 writeD(0x00);
  135.             }
  136.             else
  137.             {
  138.                 _log.log(Level.WARNING, "Character " + _activeChar.getName() + " (" + _activeChar.getObjectId() + ") morphed in a Npc (" + _activeChar.getPoly().getPolyId() + ") w/o template.");
  139.             }
  140.         }
  141.         else
  142.         {
  143.             writeC(0x31);
  144.             writeD(_x);
  145.             writeD(_y);
  146.             writeD(_z);
  147.             writeD(0x00);
  148.             writeD(_activeChar.getObjectId());
  149.             writeS(isViewerGm ? _activeChar.getName() : _activeChar.getAppearance().getVisibleName());
  150.             writeD(_activeChar.getRace().ordinal());
  151.             writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
  152.            
  153.             writeD(_superBaseClass); // No need to know the truth for client ;) writeD(_activeChar.getClassIndex() == 0 ? _activeChar.getClassId().getId() : _activeChar.getBaseClass());
  154.            
  155.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_UNDER));
  156.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  157.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  158.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  159.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  160.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  161.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  162.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  163.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  164.             writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  165.             writeD(_isUnknown ? 0x00 : _inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  166.             writeD(_isUnknown ? 0x00 : _inv.getPaperdollItemId(Inventory.PAPERDOLL_HAIR2));
  167.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_RBRACELET));
  168.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_LBRACELET));
  169.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO1));
  170.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO2));
  171.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO3));
  172.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO4));
  173.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO5));
  174.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DECO6));
  175.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_BELT));
  176.  
  177.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_UNDER));
  178.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HEAD));
  179.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
  180.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LHAND));
  181.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_GLOVES));
  182.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_CHEST));
  183.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LEGS));
  184.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_FEET));
  185.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_BACK));
  186.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LRHAND));
  187.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HAIR));
  188.             writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_HAIR2));
  189.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_RBRACELET));
  190.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_LBRACELET));
  191.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO1));
  192.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO2));
  193.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO3));
  194.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO4));
  195.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO5));
  196.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_DECO6));
  197.             writeD(0x00);// No need to know for client ;) writeD(_inv.getPaperdollAugmentationId(Inventory.PAPERDOLL_BELT));
  198.             writeD(0x00);
  199.             writeD(0x01);
  200.            
  201.             writeD(_activeChar.getPvpFlag());
  202.             writeD(_activeChar.getKarma());
  203.            
  204.             writeD(_mAtkSpd);
  205.             writeD(_pAtkSpd);
  206.            
  207.             writeD(0x00);
  208.  
  209.             writeD(_runSpd);
  210.             writeD(_walkSpd);
  211.             writeD(_runSpd);
  212.             writeD(_walkSpd);
  213.             writeD(_runSpd);
  214.             writeD(_walkSpd);
  215.             writeD(_runSpd);
  216.             writeD(_walkSpd);
  217.            
  218.             writeF(_activeChar.getMovementSpeedMultiplier()); // _activeChar.getProperMultiplier()
  219.             writeF(_activeChar.getAttackSpeedMultiplier()); // _activeChar.getAttackSpeedMultiplier()
  220.            
  221.             L2Transformation trans = null;
  222.            
  223.             if (_activeChar.getMountType() != 0)
  224.             {
  225.                 writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).collisionRadius);
  226.                 writeF(NpcTable.getInstance().getTemplate(_activeChar.getMountNpcId()).collisionHeight);
  227.             }
  228.             else if ((trans = _activeChar.getTransformation()) != null)
  229.             {
  230.                 writeF(trans.getCollisionRadius());
  231.                 writeF(trans.getCollisionHeight());
  232.             }
  233.             else
  234.             {
  235.                 writeF(_activeChar.getBaseTemplate().collisionRadius);
  236.                 writeF(_activeChar.getBaseTemplate().collisionHeight);
  237.             }
  238.            
  239.             writeD(_activeChar.getAppearance().getHairStyle());
  240.             writeD(_activeChar.getAppearance().getHairColor());
  241.             writeD(_activeChar.getAppearance().getFace());
  242.            
  243.             writeS(isViewerGm && _invisible ? "Invisible" : _activeChar.isUnknown() ? "Unknown" : _activeChar.getAppearance().getVisibleTitle());
  244.            
  245.             if (!_activeChar.isCursedWeaponEquipped() && !_isDreaming && !L2EventManager.hideCrests(_activeChar))
  246.             {
  247.                 writeD(_activeChar.getClanId());
  248.                 writeD(_activeChar.getClanCrestId());
  249.                 writeD(_activeChar.getAllyId());
  250.                 writeD(_activeChar.getAllyCrestId());
  251.             }
  252.             else
  253.             {
  254.                 writeD(0x00);
  255.                 writeD(0x00);
  256.                 writeD(0x00);
  257.                 writeD(0x00);
  258.             }
  259.            
  260.             writeC(_activeChar.isSitting() ? 0 : 1); // standing = 1  sitting = 0
  261.             writeC(_activeChar.isRunning() ? 1 : 0); // running = 1   walking = 0
  262.             writeC(_activeChar.isInCombat() ? 1 : 0);
  263.             if (_activeChar.isInOlympiadMode())
  264.                 writeC(0);
  265.             else
  266.                 writeC(_activeChar.isAlikeDead() ? 1 : 0);
  267.            
  268.             writeC(isViewerGm ? 0 : _invisible ? 1 : 0); // invisible = 1  visible =0
  269.            
  270.             writeC(_activeChar.getMountType()); // 1-on Strider, 2-on Wyvern, 3-on Great Wolf, 0-no mount
  271.             writeC(_activeChar.getPrivateStoreType()); //  1 - sellshop
  272.            
  273.             writeH(_activeChar.getCubics().size());
  274.             for (int id : _activeChar.getCubics().keySet())
  275.                 writeH(id);
  276.            
  277.             writeC(_activeChar.isInPartyMatchRoom() ? 1 : 0);
  278.            
  279.             int abnormal = _activeChar.getAbnormalEffect();
  280.             if (isViewerGm && _invisible)
  281.                 abnormal |= AbnormalEffect.STEALTH.getMask();
  282.             else
  283.                 abnormal = _activeChar.getAbnormalEffect();
  284.             if (Config.isExodus() && tmp != null && _activeChar.getProtectionBlessing(tmp) && (tmp.getLevel() - _activeChar.getLevel() >= Config.MOD_LOWLVLPROTECTIONLVLDIFF))
  285.                 abnormal |= AbnormalEffect.REDCIRCLE.getMask();
  286.            
  287.             writeD(abnormal);
  288.             writeC(_activeChar.isFlyingMounted() ? 2 : 0);
  289.            
  290.             writeH(_activeChar.getRecomHave()); //Blue value for name (0 = white, 255 = pure blue)
  291.             writeD(_activeChar.getMountNpcId() + 1000000);
  292.            
  293.             writeD(_activeChar.getClassId().getSuperParent().getId());
  294.             writeD(0x00); //?
  295.             writeC(_activeChar.isMounted() ? 0 : _activeChar.getEnchantEffect());
  296.            
  297.             writeC(_activeChar.getTeam() > 2 ? 0 : _activeChar.getTeam()); //team circle around feet 1= Blue, 2 = red
  298.                
  299.             writeD(_activeChar.getClanCrestLargeId());
  300.             writeC(0x00);// No need to know for client ;) writeC(_activeChar.isNoble() ? 1 : 0); // Symbol on char menu ctrl+I
  301.             writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) && !L2EventManager.hideCrests(_activeChar) && !_activeChar.isDreaming() ? 1 : 0); // Hero Aura
  302.             writeC(_activeChar.isFishing() ? 1 : 0); //0x01: Fishing Mode (Cant be undone by setting back to 0)
  303.             writeD(_activeChar.getFishx());
  304.             writeD(_activeChar.getFishy());
  305.             writeD(_activeChar.getFishz());
  306.             writeD(_activeChar.getAppearance().getNameColor());
  307.             writeD(_heading);
  308.             writeD(_activeChar.getPledgeClass());
  309.             writeD(_activeChar.getPledgeType());
  310.             writeD(Config.isExodus() && tmp != null ? _activeChar.isGM() ? _activeChar.getAppearance().getTitleColor() : IncUtil.getLevelDifferenceColor(tmp.getLevel() - _activeChar.getLevel()) : _activeChar.getAppearance().getTitleColor());
  311.             writeD(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0x00);
  312.             writeD(0x00);// No need to know for client ;) writeD(_activeChar.getClanId() > 0 ? (int) _activeChar.getClan().getReputationScore() : 0x00);
  313.             writeD(_activeChar.getTransformationGraphicalId());
  314.             writeD(_activeChar.getAgathionId());
  315.             writeD(0x01);
  316.             writeD(_activeChar.getSpecialEffect());
  317.             writeD(_territoryId); // territory Id
  318.             writeD((_isDisguised ? 0x01 : 0x00)); // is Disguised
  319.             writeD(_territoryId); // territory Id
  320.         }
  321.     }
  322.    
  323.     /**
  324.      *
  325.      * @see org.inc.gameserver.network.gameclientcon.SendableGameClientPacket#getType()
  326.      */
  327.     @Override
  328.     public String getType()
  329.     {
  330.         return _S__03_CHARINFO;
  331.     }
  332. }
  333.  
  334. public final class CharSelectionInfo extends SendableGameClientPacket
  335. {
  336.     private static final String _S__1F_CHARSELECTINFO = "[S] 09 CharSelectInfo";
  337.     private static Logger _log = Logger.getLogger(CharSelectionInfo.class.getName());
  338.    
  339.     private String _loginName;
  340.     private int _sessionId, _activeId;
  341.     private CharSelectInfoPackage[] _characterPackages;
  342.    
  343.     public CharSelectionInfo(String loginName, int sessionId)
  344.     {
  345.         _sessionId = sessionId;
  346.         _loginName = loginName;
  347.         _characterPackages = loadCharacterSelectInfo();
  348.         _activeId = -1;
  349.     }
  350.    
  351.     public CharSelectionInfo(String loginName, int sessionId, int activeId)
  352.     {
  353.         _sessionId = sessionId;
  354.         _loginName = loginName;
  355.         _characterPackages = loadCharacterSelectInfo();
  356.         _activeId = activeId;
  357.     }
  358.    
  359.     public CharSelectInfoPackage[] getCharInfo()
  360.     {
  361.         return _characterPackages;
  362.     }
  363.    
  364.     @Override
  365.     protected final void writeImpl()
  366.     {
  367.         writeC(0x09);
  368.         int size = (_characterPackages.length);
  369.         writeD(size);
  370.        
  371.         // Can prevent players from creating new characters (if 0); (if 1, the client will ask if chars may be created (0x13) Response: (0x0D) )
  372.         writeD(0x07);
  373.         writeC(0x00);
  374.        
  375.         long lastAccess = 0L;
  376.        
  377.         if (_activeId == -1)
  378.         {
  379.             for (int i = 0; i < size; i++)
  380.             {
  381.                 if (lastAccess < _characterPackages[i].getLastAccess())
  382.                 {
  383.                     lastAccess = _characterPackages[i].getLastAccess();
  384.                     _activeId = i;
  385.                 }
  386.             }
  387.         }
  388.        
  389.         for (int i = 0; i < size; i++)
  390.         {
  391.             CharSelectInfoPackage charInfoPackage = _characterPackages[i];
  392.            
  393.             writeS(charInfoPackage.getName());
  394.             writeD(charInfoPackage.getCharId());
  395.             writeS(_loginName);
  396.             writeD(_sessionId);
  397.             writeD(charInfoPackage.getClanId());
  398.             writeD(0x00); // ??
  399.            
  400.             writeD(charInfoPackage.getSex());
  401.             writeD(charInfoPackage.getRace());
  402.            
  403.             if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
  404.                 writeD(charInfoPackage.getClassId());
  405.             else
  406.                 writeD(charInfoPackage.getBaseClassId());
  407.            
  408.             if (charInfoPackage.isOfflineModeCharacter())
  409.                 writeD(0x00); // active ??
  410.             else
  411.                 writeD(0x01); // active ??
  412.            
  413.             writeD(charInfoPackage.getX()); // x
  414.             writeD(charInfoPackage.getY()); // y
  415.             writeD(charInfoPackage.getZ()); // z
  416.            
  417.             writeF(charInfoPackage.getCurrentHp()); // hp cur
  418.             writeF(charInfoPackage.getCurrentMp()); // mp cur
  419.            
  420.             writeD(charInfoPackage.getSp());
  421.             writeQ(charInfoPackage.getExp());
  422.             writeF((float)(charInfoPackage.getExp() - Experience.LEVEL[charInfoPackage.getLevel()]) / (Experience.LEVEL[charInfoPackage.getLevel() + 1] - Experience.LEVEL[charInfoPackage.getLevel()])); // H5 exp %
  423.             writeD(charInfoPackage.getLevel());
  424.            
  425.             writeD(charInfoPackage.getKarma()); // karma
  426.             writeD(charInfoPackage.getPkKills());
  427.            
  428.             writeD(charInfoPackage.getPvPKills());
  429.             writeD(0x00);
  430.             writeD(0x00);
  431.             writeD(0x00);
  432.             writeD(0x00);
  433.             writeD(0x00);
  434.             writeD(0x00);
  435.             writeD(0x00);
  436.            
  437.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIRALL));
  438.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_REAR));
  439.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
  440.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_NECK));
  441.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
  442.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
  443.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
  444.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
  445.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
  446.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
  447.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
  448.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
  449.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
  450.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
  451.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
  452.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
  453.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR2));
  454.            
  455.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RBRACELET));
  456.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LBRACELET));
  457.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO1));
  458.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO2));
  459.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO3));
  460.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO4));
  461.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO5));
  462.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO6));
  463.             writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BELT));
  464.             writeD(charInfoPackage.getHairStyle());
  465.             writeD(charInfoPackage.getHairColor());
  466.             writeD(charInfoPackage.getFace());
  467.            
  468.             writeF(charInfoPackage.getMaxHp()); // hp max
  469.             writeF(charInfoPackage.getMaxMp()); // mp max
  470.            
  471.             long deleteTime = charInfoPackage.getDeleteTimer();
  472.             int deletedays = 0;
  473.             if (deleteTime > 0)
  474.                 deletedays = (int) ((deleteTime - System.currentTimeMillis()) / 1000);
  475.             writeD(deletedays); // days left before
  476.             // delete .. if != 0
  477.             // then char is inactive
  478.             writeD(charInfoPackage.getClassId());
  479.             if (i == _activeId)
  480.                 writeD(0x01);
  481.             else
  482.                 writeD(0x00); //c3 auto-select char
  483.                
  484.             writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect());
  485.            
  486.             writeH(0);
  487.             writeH(0);
  488.             //writeD(charInfoPackage.getAugmentationId());
  489.            
  490.             //writeD(charInfoPackage.getTransformId()); // Used to display Transformations
  491.             writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
  492.             // Freya by Vistall:
  493.             writeD(0); // npdid - 16024    Tame Tiny Baby Kookaburra        A9E89C
  494.             writeD(0); // level
  495.             writeD(0); // ?
  496.             writeD(0); // food? - 1200
  497.             writeF(0); // max Hp
  498.             writeF(0); // cur Hp
  499.            
  500.             writeD(charInfoPackage.getVitalityPoints());    // H5 Vitality
  501.         }
  502.     }
  503.    
  504.     private CharSelectInfoPackage[] loadCharacterSelectInfo()
  505.     {
  506.         CharSelectInfoPackage charInfopackage;
  507.         List<CharSelectInfoPackage> characterList = new FastList<CharSelectInfoPackage>();
  508.        
  509.         java.sql.Connection con = null;
  510.        
  511.         try
  512.         {
  513.             con = L2DatabaseFactory.getInstance().getConnection();
  514.             PreparedStatement statement = con.prepareStatement("SELECT account_name, charId, char_name, level, maxHp, curHp, maxMp, curMp, face, hairStyle, hairColor, sex, heading, x, y, z, exp, sp, karma, pvpkills, pkkills, clanid, race, classid, deletetime, cancraft, title, accesslevel, online, char_slot, lastAccess, base_class, vitality_points FROM characters WHERE account_name=?");
  515.             statement.setString(1, _loginName);
  516.             ResultSet charList = statement.executeQuery();
  517.            
  518.             while (charList.next())// fills the package
  519.             {
  520.                 charInfopackage = restoreChar(charList);
  521.                 if (charInfopackage != null)
  522.                     characterList.add(charInfopackage);
  523.             }
  524.            
  525.             charList.close();
  526.             statement.close();
  527.            
  528.             return characterList.toArray(new CharSelectInfoPackage[characterList.size()]);
  529.         }
  530.         catch (Exception e)
  531.         {
  532.             _log.log(Level.WARNING, "Could not restore char info: ", e);
  533.         }
  534.         finally
  535.         {
  536.             try
  537.             {
  538.                 con.close();
  539.             }
  540.             catch (Exception e)
  541.             {
  542.             }
  543.         }
  544.        
  545.         return new CharSelectInfoPackage[0];
  546.     }
  547.    
  548.     private void loadCharacterSubclassInfo(CharSelectInfoPackage charInfopackage, int ObjectId, int activeClassId)
  549.     {
  550.         java.sql.Connection con = null;
  551.        
  552.         try
  553.         {
  554.             con = L2DatabaseFactory.getInstance().getConnection();
  555.             PreparedStatement statement = con.prepareStatement("SELECT exp, sp, level FROM character_subclasses WHERE charId=? && class_id=? ORDER BY charId");
  556.             statement.setInt(1, ObjectId);
  557.             statement.setInt(2, activeClassId);
  558.             ResultSet charList = statement.executeQuery();
  559.            
  560.             if (charList.next())
  561.             {
  562.                 charInfopackage.setExp(charList.getLong("exp"));
  563.                 charInfopackage.setSp(charList.getInt("sp"));
  564.                 charInfopackage.setLevel(charList.getInt("level"));
  565.             }
  566.            
  567.             charList.close();
  568.             statement.close();
  569.            
  570.         }
  571.         catch (Exception e)
  572.         {
  573.             _log.log(Level.WARNING, "Could not restore char subclass info: ", e);
  574.         }
  575.         finally
  576.         {
  577.             try
  578.             {
  579.                 con.close();
  580.             }
  581.             catch (Exception e)
  582.             {
  583.             }
  584.         }
  585.        
  586.     }
  587.    
  588.     private CharSelectInfoPackage restoreChar(ResultSet chardata) throws Exception
  589.     {
  590.         int objectId = chardata.getInt("charId");
  591.         String name = chardata.getString("char_name");
  592.        
  593.         // See if the char must be deleted
  594.         long deletetime = chardata.getLong("deletetime");
  595.         if (deletetime > 0)
  596.         {
  597.             if (System.currentTimeMillis() > deletetime)
  598.             {
  599.                 L2Clan clan = ClanTable.getInstance().getClan(chardata.getInt("clanid"));
  600.                 if (clan != null)
  601.                     clan.removeClanMember(objectId, 0);
  602.                
  603.                 GameClient.deleteCharByObjId(objectId);
  604.                 return null;
  605.             }
  606.         }
  607.        
  608.         CharSelectInfoPackage charInfopackage = new CharSelectInfoPackage(objectId, name);
  609.         charInfopackage.setLevel(chardata.getInt("level"));
  610.         charInfopackage.setMaxHp(chardata.getInt("maxhp"));
  611.         charInfopackage.setCurrentHp(chardata.getDouble("curhp"));
  612.         charInfopackage.setMaxMp(chardata.getInt("maxmp"));
  613.         charInfopackage.setCurrentMp(chardata.getDouble("curmp"));
  614.         charInfopackage.setKarma(chardata.getInt("karma"));
  615.         charInfopackage.setPkKills(chardata.getInt("pkkills"));
  616.         charInfopackage.setPvPKills(chardata.getInt("pvpkills"));
  617.         charInfopackage.setFace(chardata.getInt("face"));
  618.         charInfopackage.setHairStyle(chardata.getInt("hairstyle"));
  619.         charInfopackage.setHairColor(chardata.getInt("haircolor"));
  620.         charInfopackage.setSex(chardata.getInt("sex"));
  621.        
  622.         charInfopackage.setExp(chardata.getLong("exp"));
  623.         charInfopackage.setSp(chardata.getInt("sp"));
  624.         charInfopackage.setVitalityPoints(chardata.getInt("vitality_points"));
  625.         charInfopackage.setClanId(chardata.getInt("clanid"));
  626.        
  627.         charInfopackage.setRace(chardata.getInt("race"));
  628.        
  629.         final int baseClassId = chardata.getInt("base_class");
  630.         final int activeClassId = chardata.getInt("classid");
  631.        
  632.         charInfopackage.setX(chardata.getInt("x"));
  633.         charInfopackage.setY(chardata.getInt("y"));
  634.         charInfopackage.setZ(chardata.getInt("z"));
  635.        
  636.         // if is in subclass, load subclass exp, sp, lvl info
  637.         if (baseClassId != activeClassId)
  638.             loadCharacterSubclassInfo(charInfopackage, objectId, activeClassId);
  639.        
  640.         charInfopackage.setClassId(activeClassId);
  641.        
  642.         // Get the augmentation id for equipped weapon
  643.         int weaponObjId = charInfopackage.getPaperdollObjectId(Inventory.PAPERDOLL_LRHAND);
  644.         if (weaponObjId < 1)
  645.             weaponObjId = charInfopackage.getPaperdollObjectId(Inventory.PAPERDOLL_RHAND);
  646.        
  647.         // Check Transformation
  648.         int cursedWeaponId = CursedWeaponsManager.getInstance().checkOwnsWeaponId(objectId);
  649.         if (cursedWeaponId > 0)
  650.         {
  651.             // cursed weapon transformations
  652.             if (cursedWeaponId == 8190)
  653.                 charInfopackage.setTransformId(301);
  654.             else if (cursedWeaponId == 8689)
  655.                 charInfopackage.setTransformId(302);
  656.             else
  657.                 charInfopackage.setTransformId(0);
  658.         }
  659.         else
  660.             charInfopackage.setTransformId(0);
  661.        
  662.         if (weaponObjId > 0)
  663.         {
  664.             java.sql.Connection con = null;
  665.             try
  666.             {
  667.                 con = L2DatabaseFactory.getInstance().getConnection();
  668.                 PreparedStatement statement = con.prepareStatement("SELECT augAttributes FROM item_attributes WHERE itemId=?");
  669.                 statement.setInt(1, weaponObjId);
  670.                 ResultSet result = statement.executeQuery();
  671.                 if (result.next())
  672.                 {
  673.                     int augment = result.getInt("augAttributes");
  674.                     charInfopackage.setAugmentationId(augment == -1 ? 0 : augment);
  675.                 }
  676.                
  677.                 result.close();
  678.                 statement.close();
  679.             }
  680.             catch (Exception e)
  681.             {
  682.                 _log.log(Level.WARNING, "Could not restore augmentation info: ", e);
  683.             }
  684.             finally
  685.             {
  686.                 try
  687.                 {
  688.                     con.close();
  689.                 }
  690.                 catch (Exception e)
  691.                 {
  692.                 }
  693.             }
  694.         }
  695.        
  696.         /*
  697.          * Check if the base class is set to zero and alse doesn't match
  698.          * with the current active class, otherwise send the base class ID.
  699.          *
  700.          * This prevents chars created before base class was introduced
  701.          * from being displayed incorrectly.
  702.          */
  703.         if (baseClassId == 0 && activeClassId > 0)
  704.             charInfopackage.setBaseClassId(activeClassId);
  705.         else
  706.             charInfopackage.setBaseClassId(baseClassId);
  707.        
  708.         charInfopackage.setDeleteTimer(deletetime);
  709.         charInfopackage.setLastAccess(chardata.getLong("lastAccess"));
  710.         return charInfopackage;
  711.     }
  712.    
  713.     @Override
  714.     public final String getType()
  715.     {
  716.         return _S__1F_CHARSELECTINFO;
  717.     }
  718. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement