JAVA 219
Untitled Guest on 10th February 2020 09:36:57 PM
  1. /*
  2.  * Copyright © 2004-2019 L2J Server
  3.  *
  4.  * This file is part of L2J Server.
  5.  *
  6.  * L2J Server is free software: you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation, either version 3 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * L2J Server is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14.  * General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18.  */
  19. package com.l2jserver.gameserver.network;
  20.  
  21. import static com.l2jserver.gameserver.config.Configuration.general;
  22.  
  23. import java.nio.ByteBuffer;
  24. import java.util.logging.Logger;
  25.  
  26. import com.DAGuard.network.clientpackets.GameGuardReply;
  27. import com.l2jserver.commons.util.Util;
  28. import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
  29. import com.l2jserver.gameserver.network.clientpackets.*;
  30. import com.l2jserver.mmocore.IClientFactory;
  31. import com.l2jserver.mmocore.IMMOExecutor;
  32. import com.l2jserver.mmocore.IPacketHandler;
  33. import com.l2jserver.mmocore.MMOConnection;
  34. import com.l2jserver.mmocore.ReceivablePacket;
  35.  
  36. /**
  37.  * Stateful Packet Handler<BR>
  38.  * The Stateful approach prevents the server from handling inconsistent packets, examples:<br>
  39.  * <ul>
  40.  * <li>Clients sends a MoveToLocation packet without having a character attached. (Potential errors handling the packet).</li>
  41.  * <li>Clients sends a RequestAuthLogin being already authed. (Potential exploit).</li>
  42.  * </ul>
  43.  * Note: If for a given exception a packet needs to be handled on more then one state, then it should be added to all these states.
  44.  * @author KenM
  45.  */
  46. public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>, IClientFactory<L2GameClient>, IMMOExecutor<L2GameClient> {
  47.         private static final Logger _log = Logger.getLogger(L2GamePacketHandler.class.getName());
  48.        
  49.         // implementation
  50.         @Override
  51.         public ReceivablePacket<L2GameClient> handlePacket(ByteBuffer buf, L2GameClient client) {
  52.                 if (client.dropPacket()) {
  53.                         return null;
  54.                 }
  55.                
  56.                 int opcode = buf.get() & 0xFF;
  57.                 int id3;
  58.                
  59.                 ReceivablePacket<L2GameClient> msg = null;
  60.                 GameClientState state = client.getState();
  61.                
  62.                 switch (state) {
  63.                         case CONNECTED:
  64.                                 switch (opcode) {
  65.                                         case 0x0e:
  66.                                                 msg = new ProtocolVersion();
  67.                                                 break;
  68.                                         case 0x2b:
  69.                                                 msg = new AuthLogin();
  70.                                                 break;
  71.                                         default:
  72.                                                 printDebug(opcode, buf, state, client);
  73.                                                 break;
  74.                                 }
  75.                                 break;
  76.                         case AUTHED:
  77.                                 switch (opcode) {
  78.                                         case 0x00:
  79.                                                 msg = new Logout();
  80.                                                 break;
  81.                                         case 0x0c:
  82.                                                 msg = new CharacterCreate();
  83.                                                 break;
  84.                                         case 0x0d:
  85.                                                 msg = new CharacterDelete();
  86.                                                 break;
  87.                                         case 0x12:
  88.                                                 msg = new CharacterSelect();
  89.                                                 break;
  90.                                         case 0x13:
  91.                                                 msg = new NewCharacter();
  92.                                                 break;
  93.                                         case 0x7b:
  94.                                                 msg = new CharacterRestore();
  95.                                                 break;
  96.                                         case 0xd0:
  97.                                                 int id2 = -1;
  98.                                                 if (buf.remaining() >= 2) {
  99.                                                         id2 = buf.getShort() & 0xffff;
  100.                                                 } else {
  101.                                                         if (general().packetHandlerDebug()) {
  102.                                                                 _log.warning("Client: " + client.toString() + " sent a 0xd0 without the second opcode.");
  103.                                                         }
  104.                                                         break;
  105.                                                 }
  106.                                                
  107.                                                 switch (id2) {
  108.                                                         case 0x36:
  109.                                                                 msg = new RequestGotoLobby();
  110.                                                                 break;
  111.                                                         case 0x93:
  112.                                                                 msg = new RequestEx2ndPasswordCheck();
  113.                                                                 break;
  114.                                                         case 0x94:
  115.                                                                 msg = new RequestEx2ndPasswordVerify();
  116.                                                                 break;
  117.                                                         case 0x95:
  118.                                                                 msg = new RequestEx2ndPasswordReq();
  119.                                                                 break;
  120.                                                         default:
  121.                                                                 printDebugDoubleOpcode(opcode, id2, buf, state, client);
  122.                                                 }
  123.                                                 break;
  124.                                         default:
  125.                                                 printDebug(opcode, buf, state, client);
  126.                                                 break;
  127.                                 }
  128.                                 break;
  129.                         case JOINING: {
  130.                                 switch (opcode) {
  131.                                         case 0x11: {
  132.                                                 msg = new EnterWorld();
  133.                                                 break;
  134.                                         }
  135.                                         case 0xd0: {
  136.                                                 int id2 = -1;
  137.                                                 if (buf.remaining() >= 2) {
  138.                                                         id2 = buf.getShort() & 0xffff;
  139.                                                 } else {
  140.                                                         if (general().packetHandlerDebug()) {
  141.                                                                 _log.warning("Client: " + client.toString() + " sent a 0xd0 without the second opcode.");
  142.                                                         }
  143.                                                         break;
  144.                                                 }
  145.                                                
  146.                                                 switch (id2) {
  147.                                                         case 0x01: {
  148.                                                                 msg = new RequestManorList();
  149.                                                                 break;
  150.                                                         }
  151.                                                         default: {
  152.                                                                 printDebugDoubleOpcode(opcode, id2, buf, state, client);
  153.                                                                 break;
  154.                                                         }
  155.                                                 }
  156.                                                 break;
  157.                                         }
  158.                                         default: {
  159.                                                 printDebug(opcode, buf, state, client);
  160.                                                 break;
  161.                                         }
  162.                                 }
  163.                                 break;
  164.                         }
  165.                         case IN_GAME:
  166.                                 switch (opcode) {
  167.                                         case 0x00:
  168.                                                 msg = new Logout();
  169.                                                 break;
  170.                                         case 0x01:
  171.                                                 msg = new Attack();
  172.                                                 break;
  173.                                         case 0x03:
  174.                                                 msg = new RequestStartPledgeWar();
  175.                                                 break;
  176.                                         case 0x04:
  177.                                                 msg = new RequestReplyStartPledgeWar();
  178.                                                 break;
  179.                                         case 0x05:
  180.                                                 msg = new RequestStopPledgeWar();
  181.                                                 break;
  182.                                         case 0x06: // RequestSCCheck
  183.                                                 msg = new RequestReplyStopPledgeWar();
  184.                                                 break;
  185.                                         case 0x07:
  186.                                                 msg = new RequestSurrenderPledgeWar();
  187.                                                 break;
  188.                                         case 0x08:
  189.                                                 msg = new RequestReplySurrenderPledgeWar();
  190.                                                 break;
  191.                                         case 0x09:
  192.                                                 msg = new RequestSetPledgeCrest();
  193.                                                 break;
  194.                                         case 0x0b:
  195.                                                 msg = new RequestGiveNickName();
  196.                                                 break;
  197.                                         case 0x0f:
  198.                                                 msg = new MoveBackwardToLocation();
  199.                                                 break;
  200.                                         case 0x10:
  201.                                                 // Say
  202.                                                 break;
  203.                                         case 0x12:
  204.                                                 // CharacterSelect, in case of player spam clicks on loginscreen
  205.                                                 break;
  206.                                         case 0x14:
  207.                                                 msg = new RequestItemList();
  208.                                                 break;
  209.                                         case 0x15:
  210.                                                 // RequestEquipItem
  211.                                                 client.handleCheat("Used obsolete RequestEquipItem packet!");
  212.                                                 break;
  213.                                         case 0x16:
  214.                                                 msg = new RequestUnEquipItem();
  215.                                                 break;
  216.                                         case 0x17:
  217.                                                 msg = new RequestDropItem();
  218.                                                 break;
  219.                                         case 0x19:
  220.                                                 msg = new UseItem();
  221.                                                 break;
  222.                                         case 0x1a:
  223.                                                 msg = new TradeRequest();
  224.                                                 break;
  225.                                         case 0x1b:
  226.                                                 msg = new AddTradeItem();
  227.                                                 break;
  228.                                         case 0x1c:
  229.                                                 msg = new TradeDone();
  230.                                                 break;
  231.                                         case 0x1f:
  232.                                                 msg = new Action();
  233.                                                 break;
  234.                                         case 0x22:
  235.                                                 msg = new RequestLinkHtml();
  236.                                                 break;
  237.                                         case 0x23:
  238.                                                 msg = new RequestBypassToServer();
  239.                                                 break;
  240.                                         case 0x24:
  241.                                                 msg = new RequestBBSwrite();
  242.                                                 break;
  243.                                         case 0x25:
  244.                                                 // RequestCreatePledge
  245.                                                 break;
  246.                                         case 0x26:
  247.                                                 msg = new RequestJoinPledge();
  248.                                                 break;
  249.                                         case 0x27:
  250.                                                 msg = new RequestAnswerJoinPledge();
  251.                                                 break;
  252.                                         case 0x28:
  253.                                                 msg = new RequestWithdrawalPledge();
  254.                                                 break;
  255.                                         case 0x29:
  256.                                                 msg = new RequestOustPledgeMember();
  257.                                                 break;
  258.                                         case 0x2c:
  259.                                                 msg = new RequestGetItemFromPet();
  260.                                                 break;
  261.                                         case 0x2e:
  262.                                                 msg = new RequestAllyInfo();
  263.                                                 break;
  264.                                         case 0x2f:
  265.                                                 msg = new RequestCrystallizeItem();
  266.                                                 break;
  267.                                         case 0x30:
  268.                                                 msg = new RequestPrivateStoreManageSell();
  269.                                                 break;
  270.                                         case 0x31:
  271.                                                 msg = new SetPrivateStoreListSell();
  272.                                                 break;
  273.                                         case 0x32:
  274.                                                 msg = new AttackRequest();
  275.                                                 break;
  276.                                         case 0x33:
  277.                                                 // RequestTeleportPacket
  278.                                                 break;
  279.                                         case 0x34:
  280.                                                 // msg = new RequestSocialAction();
  281.                                                 client.handleCheat("Used obsolete RequestSocialAction packet");
  282.                                                 break;
  283.                                         case 0x35:
  284.                                                 // msg = new ChangeMoveType2();
  285.                                                 client.handleCheat("Used obsolete ChangeMoveType packet");
  286.                                                 break;
  287.                                         case 0x36:
  288.                                                 // msg = new ChangeWaitType2();
  289.                                                 client.handleCheat("Used obsolete ChangeWaitType packet");
  290.                                                 break;
  291.                                         case 0x37:
  292.                                                 msg = new RequestSellItem();
  293.                                                 break;
  294.                                         case 0x38:
  295.                                                 // RequestMagicSkillList
  296.                                                 break;
  297.                                         case 0x39:
  298.                                                 msg = new RequestMagicSkillUse();
  299.                                                 break;
  300.                                         case 0x3a: // SendApperingPacket
  301.                                                 msg = new Appearing();
  302.                                                 break;
  303.                                         case 0x3b:
  304.                                                 if (general().allowWarehouse()) {
  305.                                                         msg = new SendWareHouseDepositList();
  306.                                                 }
  307.                                                 break;
  308.                                         case 0x3c:
  309.                                                 msg = new SendWareHouseWithDrawList();
  310.                                                 break;
  311.                                         case 0x3d:
  312.                                                 msg = new RequestShortCutReg();
  313.                                                 break;
  314.                                         case 0x3f:
  315.                                                 msg = new RequestShortCutDel();
  316.                                                 break;
  317.                                         case 0x40:
  318.                                                 msg = new RequestBuyItem();
  319.                                                 break;
  320.                                         case 0x41:
  321.                                                 // RequestDismissPledge
  322.                                                 break;
  323.                                         case 0x42:
  324.                                                 msg = new RequestJoinParty();
  325.                                                 break;
  326.                                         case 0x43:
  327.                                                 msg = new RequestAnswerJoinParty();
  328.                                                 break;
  329.                                         case 0x44:
  330.                                                 msg = new RequestWithDrawalParty();
  331.                                                 break;
  332.                                         case 0x45:
  333.                                                 msg = new RequestOustPartyMember();
  334.                                                 break;
  335.                                         case 0x46:
  336.                                                 // RequestDismissParty
  337.                                                 break;
  338.                                         case 0x47:
  339.                                                 msg = new CannotMoveAnymore();
  340.                                                 break;
  341.                                         case 0x48:
  342.                                                 msg = new RequestTargetCanceld();
  343.                                                 break;
  344.                                         case 0x49:
  345.                                                 msg = new Say2();
  346.                                                 break;
  347.                                         case 0x4a:
  348.                                                 int id_2 = -1;
  349.                                                 if (buf.remaining() >= 2) {
  350.                                                         id_2 = buf.getShort() & 0xffff;
  351.                                                 } else {
  352.                                                         if (general().packetHandlerDebug()) {
  353.                                                                 _log.warning("Client: " + client.toString() + " sent a 0x4a without the second opcode.");
  354.                                                         }
  355.                                                         break;
  356.                                                 }
  357.                                                 switch (id_2) {
  358.                                                         case 0x00:
  359.                                                                 // SuperCmdCharacterInfo
  360.                                                                 break;
  361.                                                         case 0x01:
  362.                                                                 // SuperCmdSummonCmd
  363.                                                                 break;
  364.                                                         case 0x02:
  365.                                                                 // SuperCmdServerStatus
  366.                                                                 break;
  367.                                                         case 0x03:
  368.                                                                 // SendL2ParamSetting
  369.                                                                 break;
  370.                                                         default:
  371.                                                                 printDebugDoubleOpcode(opcode, id_2, buf, state, client);
  372.                                                                 break;
  373.                                                 }
  374.                                                 break;
  375.                                         case 0x4d:
  376.                                                 msg = new RequestPledgeMemberList();
  377.                                                 break;
  378.                                         case 0x4f:
  379.                                                 // RequestMagicList
  380.                                                 break;
  381.                                         case 0x50:
  382.                                                 msg = new RequestSkillList();
  383.                                                 break;
  384.                                         case 0x52:
  385.                                                 msg = new MoveWithDelta();
  386.                                                 break;
  387.                                         case 0x53:
  388.                                                 msg = new RequestGetOnVehicle();
  389.                                                 break;
  390.                                         case 0x54:
  391.                                                 msg = new RequestGetOffVehicle();
  392.                                                 break;
  393.                                         case 0x55:
  394.                                                 msg = new AnswerTradeRequest();
  395.                                                 break;
  396.                                         case 0x56:
  397.                                                 msg = new RequestActionUse();
  398.                                                 break;
  399.                                         case 0x57:
  400.                                                 msg = new RequestRestart();
  401.                                                 break;
  402.                                         case 0x58:
  403.                                                 msg = new RequestSiegeInfo();
  404.                                                 break;
  405.                                         case 0x59:
  406.                                                 msg = new ValidatePosition();
  407.                                                 break;
  408.                                         case 0x5a:
  409.                                                 // RequestSEKCustom
  410.                                                 break;
  411.                                         case 0x5b:
  412.                                                 msg = new StartRotating();
  413.                                                 break;
  414.                                         case 0x5c:
  415.                                                 msg = new FinishRotating();
  416.                                                 break;
  417.                                         case 0x5e:
  418.                                                 msg = new RequestShowBoard();
  419.                                                 break;
  420.                                         case 0x5f:
  421.                                                 msg = new RequestEnchantItem();
  422.                                                 break;
  423.                                         case 0x60:
  424.                                                 msg = new RequestDestroyItem();
  425.                                                 break;
  426.                                         case 0x62:
  427.                                                 msg = new RequestQuestList();
  428.                                                 break;
  429.                                         case 0x63: // RequestDestroyQuest
  430.                                                 msg = new RequestQuestAbort();
  431.                                                 break;
  432.                                         case 0x65:
  433.                                                 msg = new RequestPledgeInfo();
  434.                                                 break;
  435.                                         case 0x66:
  436.                                                 msg = new RequestPledgeExtendedInfo();
  437.                                                 break;
  438.                                         case 0x67:
  439.                                                 msg = new RequestPledgeCrest();
  440.                                                 break;
  441.                                         case 0x6b: // RequestSendL2FriendSay
  442.                                                 msg = new RequestSendFriendMsg();
  443.                                                 break;
  444.                                         case 0x6c:
  445.                                                 msg = new RequestShowMiniMap();
  446.                                                 break;
  447.                                         case 0x6d:
  448.                                                 // RequestSendMsnChatLog
  449.                                                 break;
  450.                                         case 0x6e: // RequestReload
  451.                                                 msg = new RequestRecordInfo();
  452.                                                 break;
  453.                                         case 0x6f:
  454.                                                 msg = new RequestHennaEquip();
  455.                                                 break;
  456.                                         case 0x70:
  457.                                                 msg = new RequestHennaRemoveList();
  458.                                                 break;
  459.                                         case 0x71:
  460.                                                 msg = new RequestHennaItemRemoveInfo();
  461.                                                 break;
  462.                                         case 0x72:
  463.                                                 msg = new RequestHennaRemove();
  464.                                                 break;
  465.                                         case 0x73:
  466.                                                 msg = new RequestAcquireSkillInfo();
  467.                                                 break;
  468.                                         case 0x74:
  469.                                                 msg = new SendBypassBuildCmd();
  470.                                                 break;
  471.                                         case 0x75:
  472.                                                 msg = new RequestMoveToLocationInVehicle();
  473.                                                 break;
  474.                                         case 0x76:
  475.                                                 msg = new CannotMoveAnymoreInVehicle();
  476.                                                 break;
  477.                                         case 0x77:
  478.                                                 msg = new RequestFriendInvite();
  479.                                                 break;
  480.                                         case 0x78: // RequestFriendAddReply
  481.                                                 msg = new RequestAnswerFriendInvite();
  482.                                                 break;
  483.                                         case 0x79:
  484.                                                 msg = new RequestFriendList();
  485.                                                 break;
  486.                                         case 0x7a:
  487.                                                 msg = new RequestFriendDel();
  488.                                                 break;
  489.                                         case 0x7c:
  490.                                                 msg = new RequestAcquireSkill();
  491.                                                 break;
  492.                                         case 0x7d:
  493.                                                 msg = new RequestRestartPoint();
  494.                                                 break;
  495.                                         case 0x7e:
  496.                                                 msg = new RequestGMCommand();
  497.                                                 break;
  498.                                         case 0x7f:
  499.                                                 msg = new RequestPartyMatchConfig();
  500.                                                 break;
  501.                                         case 0x80:
  502.                                                 msg = new RequestPartyMatchList();
  503.                                                 break;
  504.                                         case 0x81:
  505.                                                 msg = new RequestPartyMatchDetail();
  506.                                                 break;
  507.                                         case 0x83: // SendPrivateStoreBuyList
  508.                                                 msg = new RequestPrivateStoreBuy();
  509.                                                 break;
  510.                                         case 0x85:
  511.                                                 msg = new RequestTutorialLinkHtml();
  512.                                                 break;
  513.                                         case 0x86:
  514.                                                 msg = new RequestTutorialPassCmdToServer();
  515.                                                 break;
  516.                                         case 0x87:
  517.                                                 msg = new RequestTutorialQuestionMark();
  518.                                                 break;
  519.                                         case 0x88:
  520.                                                 msg = new RequestTutorialClientEvent();
  521.                                                 break;
  522.                                         case 0x89:
  523.                                                 msg = new RequestPetition();
  524.                                                 break;
  525.                                         case 0x8a:
  526.                                                 msg = new RequestPetitionCancel();
  527.                                                 break;
  528.                                         case 0x8b:
  529.                                                 msg = new RequestGmList();
  530.                                                 break;
  531.                                         case 0x8c:
  532.                                                 msg = new RequestJoinAlly();
  533.                                                 break;
  534.                                         case 0x8d:
  535.                                                 msg = new RequestAnswerJoinAlly();
  536.                                                 break;
  537.                                         case 0x8e: // RequestWithdrawAlly
  538.                                                 msg = new AllyLeave();
  539.                                                 break;
  540.                                         case 0x8f: // RequestOustAlly
  541.                                                 msg = new AllyDismiss();
  542.                                                 break;
  543.                                         case 0x90:
  544.                                                 msg = new RequestDismissAlly();
  545.                                                 break;
  546.                                         case 0x91:
  547.                                                 msg = new RequestSetAllyCrest();
  548.                                                 break;
  549.                                         case 0x92:
  550.                                                 msg = new RequestAllyCrest();
  551.                                                 break;
  552.                                         case 0x93:
  553.                                                 msg = new RequestChangePetName();
  554.                                                 break;
  555.                                         case 0x94:
  556.                                                 msg = new RequestPetUseItem();
  557.                                                 break;
  558.                                         case 0x95:
  559.                                                 msg = new RequestGiveItemToPet();
  560.                                                 break;
  561.                                         case 0x96:
  562.                                                 msg = new RequestPrivateStoreQuitSell();
  563.                                                 break;
  564.                                         case 0x97:
  565.                                                 msg = new SetPrivateStoreMsgSell();
  566.                                                 break;
  567.                                         case 0x98:
  568.                                                 msg = new RequestPetGetItem();
  569.                                                 break;
  570.                                         case 0x99:
  571.                                                 msg = new RequestPrivateStoreManageBuy();
  572.                                                 break;
  573.                                         case 0x9a: // SetPrivateStoreList
  574.                                                 msg = new SetPrivateStoreListBuy();
  575.                                                 break;
  576.                                         case 0x9c:
  577.                                                 msg = new RequestPrivateStoreQuitBuy();
  578.                                                 break;
  579.                                         case 0x9d:
  580.                                                 msg = new SetPrivateStoreMsgBuy();
  581.                                                 break;
  582.                                         case 0x9f: // SendPrivateStoreBuyList
  583.                                                 msg = new RequestPrivateStoreSell();
  584.                                                 break;
  585.                                         case 0xa0:
  586.                                                 // SendTimeCheckPacket
  587.                                                 break;
  588.                                         case 0xa6:
  589.                                                 // RequestSkillCoolTime
  590.                                                 break;
  591.                                         case 0xa7:
  592.                                                 msg = new RequestPackageSendableItemList();
  593.                                                 break;
  594.                                         case 0xa8:
  595.                                                 msg = new RequestPackageSend();
  596.                                                 break;
  597.                                         case 0xa9:
  598.                                                 msg = new RequestBlock();
  599.                                                 break;
  600.                                         case 0xaa:
  601.                                                 msg = new RequestSiegeInfo();
  602.                                                 break;
  603.                                         case 0xab: // RequestCastleSiegeAttackerList
  604.                                                 msg = new RequestSiegeAttackerList();
  605.                                                 break;
  606.                                         case 0xac:
  607.                                                 msg = new RequestSiegeDefenderList();
  608.                                                 break;
  609.                                         case 0xad: // RequestJoinCastleSiege
  610.                                                 msg = new RequestJoinSiege();
  611.                                                 break;
  612.                                         case 0xae: // RequestConfirmCastleSiegeWaitingList
  613.                                                 msg = new RequestConfirmSiegeWaitingList();
  614.                                                 break;
  615.                                         case 0xAF:
  616.                                                 msg = new RequestSetCastleSiegeTime();
  617.                                                 break;
  618.                                         case 0xb0:
  619.                                                 msg = new MultiSellChoose();
  620.                                                 break;
  621.                                         case 0xb1:
  622.                                                 // NetPing
  623.                                                 break;
  624.                                         case 0xb2:
  625.                                                 // RequestRemainTime
  626.                                                 break;
  627.                                         case 0xb3:
  628.                                                 msg = new BypassUserCmd();
  629.                                                 break;
  630.                                         case 0xb4:
  631.                                                 msg = new SnoopQuit();
  632.                                                 break;
  633.                                         case 0xb5:
  634.                                                 msg = new RequestRecipeBookOpen();
  635.                                                 break;
  636.                                         case 0xb6: // RequestRecipeItemDelete
  637.                                                 msg = new RequestRecipeBookDestroy();
  638.                                                 break;
  639.                                         case 0xb7:
  640.                                                 msg = new RequestRecipeItemMakeInfo();
  641.                                                 break;
  642.                                         case 0xb8:
  643.                                                 msg = new RequestRecipeItemMakeSelf();
  644.                                                 break;
  645.                                         case 0xb9:
  646.                                                 // RequestRecipeShopManageList
  647.                                                 break;
  648.                                         case 0xba:
  649.                                                 msg = new RequestRecipeShopMessageSet();
  650.                                                 break;
  651.                                         case 0xbb:
  652.                                                 msg = new RequestRecipeShopListSet();
  653.                                                 break;
  654.                                         case 0xbc:
  655.                                                 msg = new RequestRecipeShopManageQuit();
  656.                                                 break;
  657.                                         case 0xbd:
  658.                                                 // RequestRecipeShopManageCancel
  659.                                                 break;
  660.                                         case 0xbe:
  661.                                                 msg = new RequestRecipeShopMakeInfo();
  662.                                                 break;
  663.                                         case 0xbf: // RequestRecipeShopMakeDo
  664.                                                 msg = new RequestRecipeShopMakeItem();
  665.                                                 break;
  666.                                         case 0xc0: // RequestRecipeShopSellList
  667.                                                 msg = new RequestRecipeShopManagePrev();
  668.                                                 break;
  669.                                         case 0xc1: // RequestObserverEndPacket
  670.                                                 msg = new ObserverReturn();
  671.                                                 break;
  672.                                         case 0xc2:
  673.                                                 // Unused (RequestEvaluate/VoteSociality)
  674.                                                 break;
  675.                                         case 0xc3:
  676.                                                 msg = new RequestHennaItemList();
  677.                                                 break;
  678.                                         case 0xc4:
  679.                                                 msg = new RequestHennaItemInfo();
  680.                                                 break;
  681.                                         case 0xc5:
  682.                                                 msg = new RequestBuySeed();
  683.                                                 break;
  684.                                         case 0xc6: // ConfirmDlg
  685.                                                 msg = new DlgAnswer();
  686.                                                 break;
  687.                                         case 0xc7: // RequestPreviewItem
  688.                                                 msg = new RequestPreviewItem();
  689.                                                 break;
  690.                                         case 0xc8:
  691.                                                 msg = new RequestSSQStatus();
  692.                                                 break;
  693.                                         case 0xc9:
  694.                                                 msg = new RequestPetitionFeedback();
  695.                                                 break;
  696.                                         case 0xcb:
  697.                                                 msg = new GameGuardReply();
  698.                                                 break;
  699.                                         case 0xcc:
  700.                                                 msg = new RequestPledgePower();
  701.                                                 break;
  702.                                         case 0xcd:
  703.                                                 msg = new RequestMakeMacro();
  704.                                                 break;
  705.                                         case 0xce:
  706.                                                 msg = new RequestDeleteMacro();
  707.                                                 break;
  708.                                         case 0xcf: // RequestProcureCrop
  709.                                                 // msg = new RequestBuyProcure();
  710.                                                 break;
  711.                                         case 0xd0:
  712.                                                 int id2 = -1;
  713.                                                 if (buf.remaining() >= 2) {
  714.                                                         id2 = buf.getShort() & 0xffff;
  715.                                                 } else {
  716.                                                         if (general().packetHandlerDebug()) {
  717.                                                                 _log.warning("Client: " + client.toString() + " sent a 0xd0 without the second opcode.");
  718.                                                         }
  719.                                                         break;
  720.                                                 }
  721.                                                
  722.                                                 switch (id2) {
  723.                                                         case 0x01:
  724.                                                                 msg = new RequestManorList();
  725.                                                                 break;
  726.                                                         case 0x02:
  727.                                                                 msg = new RequestProcureCropList();
  728.                                                                 break;
  729.                                                         case 0x03:
  730.                                                                 msg = new RequestSetSeed();
  731.                                                                 break;
  732.                                                         case 0x04:
  733.                                                                 msg = new RequestSetCrop();
  734.                                                                 break;
  735.                                                         case 0x05:
  736.                                                                 msg = new RequestWriteHeroWords();
  737.                                                                 break;
  738.                                                         case 0x5F:
  739.                                                                 /**
  740.                                                                  * Server Packets: ExMpccRoomInfo FE:9B ExListMpccWaiting FE:9C ExDissmissMpccRoom FE:9D ExManageMpccRoomMember FE:9E ExMpccRoomMember FE:9F
  741.                                                                  */
  742.                                                                 // TODO: RequestJoinMpccRoom chdd
  743.                                                                 break;
  744.                                                         case 0x5D:
  745.                                                                 // TODO: RequestListMpccWaiting chddd
  746.                                                                 break;
  747.                                                         case 0x5E:
  748.                                                                 // TODO: RequestManageMpccRoom chdddddS
  749.                                                                 break;
  750.                                                         case 0x06:
  751.                                                                 msg = new RequestExAskJoinMPCC();
  752.                                                                 break;
  753.                                                         case 0x07:
  754.                                                                 msg = new RequestExAcceptJoinMPCC();
  755.                                                                 break;
  756.                                                         case 0x08:
  757.                                                                 msg = new RequestExOustFromMPCC();
  758.                                                                 break;
  759.                                                         case 0x09:
  760.                                                                 msg = new RequestOustFromPartyRoom();
  761.                                                                 break;
  762.                                                         case 0x0a:
  763.                                                                 msg = new RequestDismissPartyRoom();
  764.                                                                 break;
  765.                                                         case 0x0b:
  766.                                                                 msg = new RequestWithdrawPartyRoom();
  767.                                                                 break;
  768.                                                         case 0x0c:
  769.                                                                 msg = new RequestChangePartyLeader();
  770.                                                                 break;
  771.                                                         case 0x0d:
  772.                                                                 msg = new RequestAutoSoulShot();
  773.                                                                 break;
  774.                                                         case 0x0e:
  775.                                                                 msg = new RequestExEnchantSkillInfo();
  776.                                                                 break;
  777.                                                         case 0x0f:
  778.                                                                 msg = new RequestExEnchantSkill();
  779.                                                                 break;
  780.                                                         case 0x10:
  781.                                                                 msg = new RequestExPledgeCrestLarge();
  782.                                                                 break;
  783.                                                         case 0x11:
  784.                                                                 msg = new RequestExSetPledgeCrestLarge();
  785.                                                                 break;
  786.                                                         case 0x12:
  787.                                                                 msg = new RequestPledgeSetAcademyMaster();
  788.                                                                 break;
  789.                                                         case 0x13:
  790.                                                                 msg = new RequestPledgePowerGradeList();
  791.                                                                 break;
  792.                                                         case 0x14:
  793.                                                                 msg = new RequestPledgeMemberPowerInfo();
  794.                                                                 break;
  795.                                                         case 0x15:
  796.                                                                 msg = new RequestPledgeSetMemberPowerGrade();
  797.                                                                 break;
  798.                                                         case 0x16:
  799.                                                                 msg = new RequestPledgeMemberInfo();
  800.                                                                 break;
  801.                                                         case 0x17:
  802.                                                                 msg = new RequestPledgeWarList();
  803.                                                                 break;
  804.                                                         case 0x18:
  805.                                                                 msg = new RequestExFishRanking();
  806.                                                                 break;
  807.                                                         case 0x19:
  808.                                                                 msg = new RequestPCCafeCouponUse();
  809.                                                                 break;
  810.                                                         case 0x1b:
  811.                                                                 msg = new RequestDuelStart();
  812.                                                                 break;
  813.                                                         case 0x1c:
  814.                                                                 msg = new RequestDuelAnswerStart();
  815.                                                                 break;
  816.                                                         case 0x1d:
  817.                                                                 // RequestExSetTutorial
  818.                                                                 break;
  819.                                                         case 0x1e:
  820.                                                                 msg = new RequestExRqItemLink();
  821.                                                                 break;
  822.                                                         case 0x1f:
  823.                                                                 // CanNotMoveAnymoreAirShip
  824.                                                                 break;
  825.                                                         case 0x20:
  826.                                                                 msg = new MoveToLocationInAirShip();
  827.                                                                 break;
  828.                                                         case 0x21:
  829.                                                                 msg = new RequestKeyMapping();
  830.                                                                 break;
  831.                                                         case 0x22:
  832.                                                                 msg = new RequestSaveKeyMapping();
  833.                                                                 break;
  834.                                                         case 0x23:
  835.                                                                 msg = new RequestExRemoveItemAttribute();
  836.                                                                 break;
  837.                                                         case 0x24:
  838.                                                                 msg = new RequestSaveInventoryOrder();
  839.                                                                 break;
  840.                                                         case 0x25:
  841.                                                                 msg = new RequestExitPartyMatchingWaitingRoom();
  842.                                                                 break;
  843.                                                         case 0x26:
  844.                                                                 msg = new RequestConfirmTargetItem();
  845.                                                                 break;
  846.                                                         case 0x27:
  847.                                                                 msg = new RequestConfirmRefinerItem();
  848.                                                                 break;
  849.                                                         case 0x28:
  850.                                                                 msg = new RequestConfirmGemStone();
  851.                                                                 break;
  852.                                                         case 0x29:
  853.                                                                 msg = new RequestOlympiadObserverEnd();
  854.                                                                 break;
  855.                                                         case 0x2a:
  856.                                                                 msg = new RequestCursedWeaponList();
  857.                                                                 break;
  858.                                                         case 0x2b:
  859.                                                                 msg = new RequestCursedWeaponLocation();
  860.                                                                 break;
  861.                                                         case 0x2c:
  862.                                                                 msg = new RequestPledgeReorganizeMember();
  863.                                                                 break;
  864.                                                         case 0x2d:
  865.                                                                 msg = new RequestExMPCCShowPartyMembersInfo();
  866.                                                                 break;
  867.                                                         case 0x2e:
  868.                                                                 msg = new RequestOlympiadMatchList();
  869.                                                                 break;
  870.                                                         case 0x2f:
  871.                                                                 msg = new RequestAskJoinPartyRoom();
  872.                                                                 break;
  873.                                                         case 0x30:
  874.                                                                 msg = new AnswerJoinPartyRoom();
  875.                                                                 break;
  876.                                                         case 0x31:
  877.                                                                 msg = new RequestListPartyMatchingWaitingRoom();
  878.                                                                 break;
  879.                                                         case 0x32:
  880.                                                                 msg = new RequestExEnchantSkillSafe();
  881.                                                                 break;
  882.                                                         case 0x33:
  883.                                                                 msg = new RequestExEnchantSkillUntrain();
  884.                                                                 break;
  885.                                                         case 0x34:
  886.                                                                 msg = new RequestExEnchantSkillRouteChange();
  887.                                                                 break;
  888.                                                         case 0x35:
  889.                                                                 msg = new RequestExEnchantItemAttribute();
  890.                                                                 break;
  891.                                                         case 0x36:
  892.                                                                 msg = new ExGetOnAirShip();
  893.                                                                 break;
  894.                                                         case 0x38:
  895.                                                                 msg = new MoveToLocationAirShip();
  896.                                                                 break;
  897.                                                         case 0x39:
  898.                                                                 msg = new RequestBidItemAuction();
  899.                                                                 break;
  900.                                                         case 0x3a:
  901.                                                                 msg = new RequestInfoItemAuction();
  902.                                                                 break;
  903.                                                         case 0x3b:
  904.                                                                 msg = new RequestExChangeName();
  905.                                                                 break;
  906.                                                         case 0x3c:
  907.                                                                 msg = new RequestAllCastleInfo();
  908.                                                                 break;
  909.                                                         case 0x3d:
  910.                                                                 msg = new RequestAllFortressInfo();
  911.                                                                 break;
  912.                                                         case 0x3e:
  913.                                                                 msg = new RequestAllAgitInfo();
  914.                                                                 break;
  915.                                                         case 0x3f:
  916.                                                                 msg = new RequestFortressSiegeInfo();
  917.                                                                 break;
  918.                                                         case 0x40:
  919.                                                                 msg = new RequestGetBossRecord();
  920.                                                                 break;
  921.                                                         case 0x41:
  922.                                                                 msg = new RequestRefine();
  923.                                                                 break;
  924.                                                         case 0x42:
  925.                                                                 msg = new RequestConfirmCancelItem();
  926.                                                                 break;
  927.                                                         case 0x43:
  928.                                                                 msg = new RequestRefineCancel();
  929.                                                                 break;
  930.                                                         case 0x44:
  931.                                                                 msg = new RequestExMagicSkillUseGround();
  932.                                                                 break;
  933.                                                         case 0x45:
  934.                                                                 msg = new RequestDuelSurrender();
  935.                                                                 break;
  936.                                                         case 0x46:
  937.                                                                 msg = new RequestExEnchantSkillInfoDetail();
  938.                                                                 break;
  939.                                                         case 0x48:
  940.                                                                 msg = new RequestFortressMapInfo();
  941.                                                                 break;
  942.                                                         case 0x49:
  943.                                                                 // RequestPVPMatchRecord
  944.                                                                 break;
  945.                                                         case 0x4a:
  946.                                                                 msg = new SetPrivateStoreWholeMsg();
  947.                                                                 break;
  948.                                                         case 0x4b:
  949.                                                                 msg = new RequestDispel();
  950.                                                                 break;
  951.                                                         case 0x4c:
  952.                                                                 msg = new RequestExTryToPutEnchantTargetItem();
  953.                                                                 break;
  954.                                                         case 0x4d:
  955.                                                                 msg = new RequestExTryToPutEnchantSupportItem();
  956.                                                                 break;
  957.                                                         case 0x4e:
  958.                                                                 msg = new RequestExCancelEnchantItem();
  959.                                                                 break;
  960.                                                         case 0x4f:
  961.                                                                 msg = new RequestChangeNicknameColor();
  962.                                                                 break;
  963.                                                         case 0x50:
  964.                                                                 msg = new RequestResetNickname();
  965.                                                                 break;
  966.                                                         case 0x51:
  967.                                                                 id3 = 0;
  968.                                                                 if (buf.remaining() >= 4) {
  969.                                                                         id3 = buf.getInt();
  970.                                                                 } else {
  971.                                                                         _log.warning("Client: " + client.toString() + " sent a 0xd0:0x51 without the third opcode.");
  972.                                                                         break;
  973.                                                                 }
  974.                                                                 switch (id3) {
  975.                                                                         case 0x00:
  976.                                                                                 msg = new RequestBookMarkSlotInfo();
  977.                                                                                 break;
  978.                                                                         case 0x01:
  979.                                                                                 msg = new RequestSaveBookMarkSlot();
  980.                                                                                 break;
  981.                                                                         case 0x02:
  982.                                                                                 msg = new RequestModifyBookMarkSlot();
  983.                                                                                 break;
  984.                                                                         case 0x03:
  985.                                                                                 msg = new RequestDeleteBookMarkSlot();
  986.                                                                                 break;
  987.                                                                         case 0x04:
  988.                                                                                 msg = new RequestTeleportBookMark();
  989.                                                                                 break;
  990.                                                                         case 0x05:
  991.                                                                                 // RequestChangeBookMarkSlot
  992.                                                                                 break;
  993.                                                                         default:
  994.                                                                                 printDebugDoubleOpcode(opcode, id3, buf, state, client);
  995.                                                                                 break;
  996.                                                                 }
  997.                                                                 break;
  998.                                                         case 0x52:
  999.                                                                 msg = new RequestWithDrawPremiumItem();
  1000.                                                                 break;
  1001.                                                         case 0x53:
  1002.                                                                 // RequestJump
  1003.                                                                 break;
  1004.                                                         case 0x54:
  1005.                                                                 // RequestStartShowCrataeCubeRank
  1006.                                                                 break;
  1007.                                                         case 0x55:
  1008.                                                                 // RequestStopShowCrataeCubeRank
  1009.                                                                 break;
  1010.                                                         case 0x56:
  1011.                                                                 // NotifyStartMiniGame
  1012.                                                                 break;
  1013.                                                         case 0x57:
  1014.                                                                 msg = new RequestJoinDominionWar();
  1015.                                                                 break;
  1016.                                                         case 0x58:
  1017.                                                                 msg = new RequestDominionInfo();
  1018.                                                                 break;
  1019.                                                         case 0x59:
  1020.                                                                 // RequestExCleftEnter
  1021.                                                                 break;
  1022.                                                         case 0x5a:
  1023.                                                                 msg = new RequestExCubeGameChangeTeam();
  1024.                                                                 break;
  1025.                                                         case 0x5b:
  1026.                                                                 msg = new EndScenePlayer();
  1027.                                                                 break;
  1028.                                                         case 0x5c:
  1029.                                                                 msg = new RequestExCubeGameReadyAnswer();
  1030.                                                                 break;
  1031.                                                         case 0x63:
  1032.                                                                 msg = new RequestSeedPhase();
  1033.                                                                 break;
  1034.                                                         case 0x65:
  1035.                                                                 msg = new RequestPostItemList();
  1036.                                                                 break;
  1037.                                                         case 0x66:
  1038.                                                                 msg = new RequestSendPost();
  1039.                                                                 break;
  1040.                                                         case 0x67:
  1041.                                                                 msg = new RequestReceivedPostList();
  1042.                                                                 break;
  1043.                                                         case 0x68:
  1044.                                                                 msg = new RequestDeleteReceivedPost();
  1045.                                                                 break;
  1046.                                                         case 0x69:
  1047.                                                                 msg = new RequestReceivedPost();
  1048.                                                                 break;
  1049.                                                         case 0x6a:
  1050.                                                                 msg = new RequestPostAttachment();
  1051.                                                                 break;
  1052.                                                         case 0x6b:
  1053.                                                                 msg = new RequestRejectPostAttachment();
  1054.                                                                 break;
  1055.                                                         case 0x6c:
  1056.                                                                 msg = new RequestSentPostList();
  1057.                                                                 break;
  1058.                                                         case 0x6d:
  1059.                                                                 msg = new RequestDeleteSentPost();
  1060.                                                                 break;
  1061.                                                         case 0x6e:
  1062.                                                                 msg = new RequestSentPost();
  1063.                                                                 break;
  1064.                                                         case 0x6f:
  1065.                                                                 msg = new RequestCancelPostAttachment();
  1066.                                                                 break;
  1067.                                                         case 0x70:
  1068.                                                                 // RequestShowNewUserPetition
  1069.                                                                 break;
  1070.                                                         case 0x71:
  1071.                                                                 // RequestShowStepThree
  1072.                                                                 break;
  1073.                                                         case 0x72:
  1074.                                                                 // RequestShowStepTwo
  1075.                                                                 break;
  1076.                                                         case 0x73:
  1077.                                                                 // ExRaidReserveResult
  1078.                                                                 break;
  1079.                                                         case 0x75:
  1080.                                                                 msg = new RequestRefundItem();
  1081.                                                                 break;
  1082.                                                         case 0x76:
  1083.                                                                 msg = new RequestBuySellUIClose();
  1084.                                                                 break;
  1085.                                                         case 0x77:
  1086.                                                                 // RequestEventMatchObserverEnd
  1087.                                                                 break;
  1088.                                                         case 0x78:
  1089.                                                                 msg = new RequestPartyLootModification();
  1090.                                                                 break;
  1091.                                                         case 0x79:
  1092.                                                                 msg = new AnswerPartyLootModification();
  1093.                                                                 break;
  1094.                                                         case 0x7a:
  1095.                                                                 msg = new AnswerCoupleAction();
  1096.                                                                 break;
  1097.                                                         case 0x7b:
  1098.                                                                 msg = new BrEventRankerList();
  1099.                                                                 break;
  1100.                                                         case 0x7c:
  1101.                                                                 // AskMembership
  1102.                                                                 break;
  1103.                                                         case 0x7d:
  1104.                                                                 // RequestAddExpandQuestAlarm
  1105.                                                                 break;
  1106.                                                         case 0x7e:
  1107.                                                                 msg = new RequestVoteNew();
  1108.                                                                 break;
  1109.                                                         case 0x84:
  1110.                                                                 msg = new RequestExAddContactToContactList();
  1111.                                                                 break;
  1112.                                                         case 0x85:
  1113.                                                                 msg = new RequestExDeleteContactFromContactList();
  1114.                                                                 break;
  1115.                                                         case 0x86:
  1116.                                                                 msg = new RequestExShowContactList();
  1117.                                                                 break;
  1118.                                                         case 0x87:
  1119.                                                                 msg = new RequestExFriendListExtended();
  1120.                                                                 break;
  1121.                                                         case 0x88:
  1122.                                                                 msg = new RequestExOlympiadMatchListRefresh();
  1123.                                                                 break;
  1124.                                                         case 0x89:
  1125.                                                                 // RequestBRGamePoint
  1126.                                                                 break;
  1127.                                                         case 0x8A:
  1128.                                                                 // RequestBRProductList
  1129.                                                                 break;
  1130.                                                         case 0x8B:
  1131.                                                                 // RequestBRProductInfo
  1132.                                                                 break;
  1133.                                                         case 0x8C:
  1134.                                                                 // RequestBRBuyProduct
  1135.                                                                 break;
  1136.                                                         case 0x8D:
  1137.                                                                 // RequestBRRecentProductList
  1138.                                                                 break;
  1139.                                                         case 0x8E:
  1140.                                                                 // BrMinigameLoadScores
  1141.                                                                 break;
  1142.                                                         case 0x8F:
  1143.                                                                 // BrMinigameInsertScore
  1144.                                                                 break;
  1145.                                                         case 0x90:
  1146.                                                                 // BrLectureMark
  1147.                                                                 break;
  1148.                                                         case 0x91:
  1149.                                                                 // RequestGoodsInventoryInfo
  1150.                                                                 break;
  1151.                                                         case 0x92:
  1152.                                                                 // RequestUseGoodsInventoryItem
  1153.                                                                 break;
  1154.                                                         default:
  1155.                                                                 printDebugDoubleOpcode(opcode, id2, buf, state, client);
  1156.                                                                 break;
  1157.                                                 }
  1158.                                                 break;
  1159.                                         default:
  1160.                                                 printDebug(opcode, buf, state, client);
  1161.                                                 break;
  1162.                                 }
  1163.                                 break;
  1164.                 }
  1165.                 return msg;
  1166.         }
  1167.        
  1168.         private void printDebug(int opcode, ByteBuffer buf, GameClientState state, L2GameClient client) {
  1169.                 client.onUnknownPacket();
  1170.                 if (!general().packetHandlerDebug()) {
  1171.                         return;
  1172.                 }
  1173.                
  1174.                 int size = buf.remaining();
  1175.                 _log.warning("Unknown Packet: 0x" + Integer.toHexString(opcode) + " on State: " + state.name() + " Client: " + client.toString());
  1176.                 byte[] array = new byte[size];
  1177.                 buf.get(array);
  1178.                 _log.warning(Util.printData(array, size));
  1179.         }
  1180.        
  1181.         private void printDebugDoubleOpcode(int opcode, int id2, ByteBuffer buf, GameClientState state, L2GameClient client) {
  1182.                 client.onUnknownPacket();
  1183.                 if (!general().packetHandlerDebug()) {
  1184.                         return;
  1185.                 }
  1186.                
  1187.                 int size = buf.remaining();
  1188.                 _log.warning("Unknown Packet: 0x" + Integer.toHexString(opcode) + ":0x" + Integer.toHexString(id2) + " on State: " + state.name() + " Client: " + client.toString());
  1189.                 byte[] array = new byte[size];
  1190.                 buf.get(array);
  1191.                 _log.warning(Util.printData(array, size));
  1192.         }
  1193.        
  1194.         // impl
  1195.         @Override
  1196.         public L2GameClient create(MMOConnection<L2GameClient> con) {
  1197.                 return new L2GameClient(con);
  1198.         }
  1199.        
  1200.         @Override
  1201.         public void execute(ReceivablePacket<L2GameClient> rp) {
  1202.                 rp.getClient().execute(rp);
  1203.         }
  1204. }
Raw Paste

Login or Register to edit or fork this paste. It's free.