1717 lines
45 KiB
Java
1717 lines
45 KiB
Java
/*
|
|
* Copyright (C) 2004-2015 L2J Server
|
|
*
|
|
* This file is part of L2J Server.
|
|
*
|
|
* L2J Server is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* L2J Server is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package com.l2jserver.gameserver.network;
|
|
|
|
import java.nio.ByteBuffer;
|
|
import java.util.logging.Logger;
|
|
|
|
import com.l2jserver.Config;
|
|
import com.l2jserver.commons.mmocore.IClientFactory;
|
|
import com.l2jserver.commons.mmocore.IMMOExecutor;
|
|
import com.l2jserver.commons.mmocore.IPacketHandler;
|
|
import com.l2jserver.commons.mmocore.MMOConnection;
|
|
import com.l2jserver.commons.mmocore.ReceivablePacket;
|
|
import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
|
|
import com.l2jserver.gameserver.network.clientpackets.*;
|
|
import com.l2jserver.gameserver.network.clientpackets.adenadistribution.RequestDivideAdena;
|
|
import com.l2jserver.gameserver.network.clientpackets.adenadistribution.RequestDivideAdenaCancel;
|
|
import com.l2jserver.gameserver.network.clientpackets.adenadistribution.RequestDivideAdenaStart;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionBuyInfo;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionBuyItem;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionCancel;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionDelete;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionInfo;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionList;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionRegister;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionRegisteredItem;
|
|
import com.l2jserver.gameserver.network.clientpackets.auctionhouse.RequestCommissionRegistrableItemList;
|
|
import com.l2jserver.gameserver.network.clientpackets.crystalization.RequestCrystallizeEstimate;
|
|
import com.l2jserver.gameserver.network.clientpackets.crystalization.RequestCrystallizeItemCancel;
|
|
import com.l2jserver.gameserver.network.clientpackets.friend.RequestAnswerFriendInvite;
|
|
import com.l2jserver.gameserver.network.clientpackets.friend.RequestFriendDel;
|
|
import com.l2jserver.gameserver.network.clientpackets.friend.RequestFriendDetailInfo;
|
|
import com.l2jserver.gameserver.network.clientpackets.friend.RequestFriendList;
|
|
import com.l2jserver.gameserver.network.clientpackets.friend.RequestSendFriendMsg;
|
|
import com.l2jserver.gameserver.network.clientpackets.friend.RequestUpdateBlockMemo;
|
|
import com.l2jserver.gameserver.network.clientpackets.friend.RequestUpdateFriendMemo;
|
|
import com.l2jserver.gameserver.network.clientpackets.itemappearance.RequestExCancelShape_Shifting_Item;
|
|
import com.l2jserver.gameserver.network.clientpackets.itemappearance.RequestExTryToPut_Shape_Shifting_EnchantSupportItem;
|
|
import com.l2jserver.gameserver.network.clientpackets.itemappearance.RequestExTryToPut_Shape_Shifting_TargetItem;
|
|
import com.l2jserver.gameserver.network.clientpackets.itemappearance.RequestShape_Shifting_Item;
|
|
import com.l2jserver.gameserver.network.clientpackets.mentoring.ConfirmMenteeAdd;
|
|
import com.l2jserver.gameserver.network.clientpackets.mentoring.RequestMenteeAdd;
|
|
import com.l2jserver.gameserver.network.clientpackets.mentoring.RequestMenteeWaitingList;
|
|
import com.l2jserver.gameserver.network.clientpackets.mentoring.RequestMentorCancel;
|
|
import com.l2jserver.gameserver.network.clientpackets.mentoring.RequestMentorList;
|
|
import com.l2jserver.gameserver.network.clientpackets.primeshop.RequestBRBuyProduct;
|
|
import com.l2jserver.gameserver.network.clientpackets.primeshop.RequestBRGamePoint;
|
|
import com.l2jserver.gameserver.network.clientpackets.primeshop.RequestBRProductInfo;
|
|
import com.l2jserver.gameserver.network.clientpackets.primeshop.RequestBRProductList;
|
|
import com.l2jserver.gameserver.network.clientpackets.primeshop.RequestBRRecentProductList;
|
|
import com.l2jserver.gameserver.network.clientpackets.shuttle.CannotMoveAnymoreInShuttle;
|
|
import com.l2jserver.gameserver.network.clientpackets.shuttle.MoveToLocationInShuttle;
|
|
import com.l2jserver.gameserver.network.clientpackets.shuttle.RequestShuttleGetOff;
|
|
import com.l2jserver.gameserver.network.clientpackets.shuttle.RequestShuttleGetOn;
|
|
import com.l2jserver.util.Util;
|
|
|
|
/**
|
|
* Stateful Packet Handler<BR>
|
|
* The Stateful approach prevents the server from handling inconsistent packets, examples:<br>
|
|
* <ul>
|
|
* <li>Clients sends a MoveToLocation packet without having a character attached. (Potential errors handling the packet).</li>
|
|
* <li>Clients sends a RequestAuthLogin being already authed. (Potential exploit).</li>
|
|
* </ul>
|
|
* 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.
|
|
* @author KenM
|
|
*/
|
|
public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>, IClientFactory<L2GameClient>, IMMOExecutor<L2GameClient>
|
|
{
|
|
private static final Logger _log = Logger.getLogger(L2GamePacketHandler.class.getName());
|
|
|
|
// implementation
|
|
@Override
|
|
public ReceivablePacket<L2GameClient> handlePacket(ByteBuffer buf, L2GameClient client)
|
|
{
|
|
if (client.dropPacket())
|
|
{
|
|
return null;
|
|
}
|
|
int opcode = buf.get() & 0xFF;
|
|
|
|
ReceivablePacket<L2GameClient> msg = null;
|
|
GameClientState state = client.getState();
|
|
|
|
switch (state)
|
|
{
|
|
case CONNECTED:
|
|
switch (opcode)
|
|
{
|
|
case 0x0e:
|
|
msg = new ProtocolVersion();
|
|
break;
|
|
case 0x2b:
|
|
msg = new AuthLogin();
|
|
break;
|
|
default:
|
|
printDebug(opcode, buf, state, client);
|
|
break;
|
|
}
|
|
break;
|
|
case AUTHED:
|
|
switch (opcode)
|
|
{
|
|
case 0x00:
|
|
msg = new Logout();
|
|
break;
|
|
case 0x0c:
|
|
msg = new CharacterCreate();
|
|
break;
|
|
case 0x0d:
|
|
msg = new CharacterDelete();
|
|
break;
|
|
case 0x12:
|
|
msg = new CharacterSelect();
|
|
break;
|
|
case 0x13:
|
|
msg = new NewCharacter();
|
|
break;
|
|
case 0x7b:
|
|
msg = new CharacterRestore();
|
|
break;
|
|
case 0xd0:
|
|
int id2 = -1;
|
|
if (buf.remaining() >= 2)
|
|
{
|
|
id2 = buf.getShort() & 0xffff;
|
|
}
|
|
else
|
|
{
|
|
if (Config.PACKET_HANDLER_DEBUG)
|
|
{
|
|
_log.warning("Client: " + client.toString() + " sent a 0xd0 without the second opcode.");
|
|
}
|
|
break;
|
|
}
|
|
switch (id2)
|
|
{
|
|
case 0x33:
|
|
msg = new RequestGotoLobby();
|
|
break;
|
|
case 0xA6:
|
|
msg = new RequestEx2ndPasswordCheck();
|
|
break;
|
|
case 0xA7:
|
|
msg = new RequestEx2ndPasswordVerify();
|
|
break;
|
|
case 0xA8:
|
|
msg = new RequestEx2ndPasswordReq();
|
|
break;
|
|
case 0xA9:
|
|
msg = new RequestCharacterNameCreatable();
|
|
break;
|
|
default:
|
|
printDebugDoubleOpcode(opcode, id2, buf, state, client);
|
|
}
|
|
break;
|
|
default:
|
|
printDebug(opcode, buf, state, client);
|
|
break;
|
|
}
|
|
break;
|
|
case IN_GAME:
|
|
switch (opcode)
|
|
{
|
|
case 0x00:
|
|
msg = new Logout();
|
|
break;
|
|
case 0x01:
|
|
msg = new Attack();
|
|
break;
|
|
case 0x03:
|
|
msg = new RequestStartPledgeWar();
|
|
break;
|
|
case 0x04:
|
|
msg = new RequestReplyStartPledgeWar();
|
|
break;
|
|
case 0x05:
|
|
msg = new RequestStopPledgeWar();
|
|
break;
|
|
case 0x06: // RequestSCCheck
|
|
msg = new RequestReplyStopPledgeWar();
|
|
break;
|
|
case 0x07:
|
|
msg = new RequestSurrenderPledgeWar();
|
|
break;
|
|
case 0x08:
|
|
msg = new RequestReplySurrenderPledgeWar();
|
|
break;
|
|
case 0x09:
|
|
msg = new RequestSetPledgeCrest();
|
|
break;
|
|
case 0x0b:
|
|
msg = new RequestGiveNickName();
|
|
break;
|
|
case 0x0f:
|
|
msg = new MoveBackwardToLocation();
|
|
break;
|
|
case 0x10:
|
|
// Say
|
|
break;
|
|
case 0x11:
|
|
msg = new EnterWorld();
|
|
break;
|
|
case 0x12:
|
|
// CharacterSelect, in case of player spam clicks on loginscreen
|
|
break;
|
|
case 0x14:
|
|
msg = new RequestItemList();
|
|
break;
|
|
case 0x15:
|
|
// RequestEquipItem
|
|
client.handleCheat("Used obsolete RequestEquipItem packet!");
|
|
break;
|
|
case 0x16:
|
|
msg = new RequestUnEquipItem();
|
|
break;
|
|
case 0x17:
|
|
msg = new RequestDropItem();
|
|
break;
|
|
case 0x19:
|
|
msg = new UseItem();
|
|
break;
|
|
case 0x1a:
|
|
msg = new TradeRequest();
|
|
break;
|
|
case 0x1b:
|
|
msg = new AddTradeItem();
|
|
break;
|
|
case 0x1c:
|
|
msg = new TradeDone();
|
|
break;
|
|
case 0x1f:
|
|
msg = new Action();
|
|
break;
|
|
case 0x22:
|
|
msg = new RequestLinkHtml();
|
|
break;
|
|
case 0x23:
|
|
msg = new RequestBypassToServer();
|
|
break;
|
|
case 0x24:
|
|
msg = new RequestBBSwrite();
|
|
break;
|
|
case 0x25:
|
|
// RequestCreatePledge
|
|
break;
|
|
case 0x26:
|
|
msg = new RequestJoinPledge();
|
|
break;
|
|
case 0x27:
|
|
msg = new RequestAnswerJoinPledge();
|
|
break;
|
|
case 0x28:
|
|
msg = new RequestWithdrawalPledge();
|
|
break;
|
|
case 0x29:
|
|
msg = new RequestOustPledgeMember();
|
|
break;
|
|
case 0x2c:
|
|
msg = new RequestGetItemFromPet();
|
|
break;
|
|
case 0x2e:
|
|
msg = new RequestAllyInfo();
|
|
break;
|
|
case 0x2f:
|
|
msg = new RequestCrystallizeItem();
|
|
break;
|
|
case 0x30:
|
|
msg = new RequestPrivateStoreManageSell();
|
|
break;
|
|
case 0x31:
|
|
msg = new SetPrivateStoreListSell();
|
|
break;
|
|
case 0x32:
|
|
msg = new AttackRequest();
|
|
break;
|
|
case 0x33:
|
|
// RequestTeleportPacket
|
|
break;
|
|
case 0x34:
|
|
// msg = new RequestSocialAction();
|
|
client.handleCheat("Used obsolete RequestSocialAction packet");
|
|
break;
|
|
case 0x35:
|
|
// msg = new ChangeMoveType2();
|
|
client.handleCheat("Used obsolete ChangeMoveType packet");
|
|
break;
|
|
case 0x36:
|
|
// msg = new ChangeWaitType2();
|
|
client.handleCheat("Used obsolete ChangeWaitType packet");
|
|
break;
|
|
case 0x37:
|
|
msg = new RequestSellItem();
|
|
break;
|
|
case 0x38:
|
|
// RequestMagicSkillList
|
|
break;
|
|
case 0x39:
|
|
msg = new RequestMagicSkillUse();
|
|
break;
|
|
case 0x3a: // SendApperingPacket
|
|
msg = new Appearing();
|
|
break;
|
|
case 0x3b:
|
|
if (Config.ALLOW_WAREHOUSE)
|
|
{
|
|
msg = new SendWareHouseDepositList();
|
|
}
|
|
break;
|
|
case 0x3c:
|
|
msg = new SendWareHouseWithDrawList();
|
|
break;
|
|
case 0x3d:
|
|
msg = new RequestShortCutReg();
|
|
break;
|
|
case 0x3f:
|
|
msg = new RequestShortCutDel();
|
|
break;
|
|
case 0x40:
|
|
msg = new RequestBuyItem();
|
|
break;
|
|
case 0x41:
|
|
// RequestDismissPledge
|
|
break;
|
|
case 0x42:
|
|
msg = new RequestJoinParty();
|
|
break;
|
|
case 0x43:
|
|
msg = new RequestAnswerJoinParty();
|
|
break;
|
|
case 0x44:
|
|
msg = new RequestWithDrawalParty();
|
|
break;
|
|
case 0x45:
|
|
msg = new RequestOustPartyMember();
|
|
break;
|
|
case 0x46:
|
|
// RequestDismissParty
|
|
break;
|
|
case 0x47:
|
|
msg = new CannotMoveAnymore();
|
|
break;
|
|
case 0x48:
|
|
msg = new RequestTargetCanceld();
|
|
break;
|
|
case 0x49:
|
|
msg = new Say2();
|
|
break;
|
|
case 0x4a:
|
|
int id_2 = -1;
|
|
if (buf.remaining() >= 2)
|
|
{
|
|
id_2 = buf.getShort() & 0xffff;
|
|
}
|
|
else
|
|
{
|
|
if (Config.PACKET_HANDLER_DEBUG)
|
|
{
|
|
_log.warning("Client: " + client.toString() + " sent a 0x4a without the second opcode.");
|
|
}
|
|
break;
|
|
}
|
|
switch (id_2)
|
|
{
|
|
case 0x00:
|
|
// SuperCmdCharacterInfo
|
|
break;
|
|
case 0x01:
|
|
// SuperCmdSummonCmd
|
|
break;
|
|
case 0x02:
|
|
// SuperCmdServerStatus
|
|
break;
|
|
case 0x03:
|
|
// SendL2ParamSetting
|
|
break;
|
|
default:
|
|
printDebugDoubleOpcode(opcode, id_2, buf, state, client);
|
|
break;
|
|
}
|
|
break;
|
|
case 0x4d:
|
|
msg = new RequestPledgeMemberList();
|
|
break;
|
|
case 0x4f:
|
|
// RequestMagicList
|
|
break;
|
|
case 0x50:
|
|
msg = new RequestSkillList();
|
|
break;
|
|
case 0x52:
|
|
msg = new MoveWithDelta();
|
|
break;
|
|
case 0x53:
|
|
msg = new RequestGetOnVehicle();
|
|
break;
|
|
case 0x54:
|
|
msg = new RequestGetOffVehicle();
|
|
break;
|
|
case 0x55:
|
|
msg = new AnswerTradeRequest();
|
|
break;
|
|
case 0x56:
|
|
msg = new RequestActionUse();
|
|
break;
|
|
case 0x57:
|
|
msg = new RequestRestart();
|
|
break;
|
|
case 0x58:
|
|
msg = new RequestSiegeInfo();
|
|
break;
|
|
case 0x59:
|
|
msg = new ValidatePosition();
|
|
break;
|
|
case 0x5a:
|
|
// RequestSEKCustom
|
|
break;
|
|
case 0x5b:
|
|
msg = new StartRotating();
|
|
break;
|
|
case 0x5c:
|
|
msg = new FinishRotating();
|
|
break;
|
|
case 0x5e:
|
|
msg = new RequestShowBoard();
|
|
break;
|
|
case 0x5f:
|
|
msg = new RequestEnchantItem();
|
|
break;
|
|
case 0x60:
|
|
msg = new RequestDestroyItem();
|
|
break;
|
|
case 0x62:
|
|
msg = new RequestQuestList();
|
|
break;
|
|
case 0x63: // RequestDestroyQuest
|
|
msg = new RequestQuestAbort();
|
|
break;
|
|
case 0x65:
|
|
msg = new RequestPledgeInfo();
|
|
break;
|
|
case 0x66:
|
|
msg = new RequestPledgeExtendedInfo();
|
|
break;
|
|
case 0x67:
|
|
msg = new RequestPledgeCrest();
|
|
break;
|
|
case 0x6b: // RequestSendL2FriendSay
|
|
msg = new RequestSendFriendMsg();
|
|
break;
|
|
case 0x6c:
|
|
msg = new RequestShowMiniMap();
|
|
break;
|
|
case 0x6d:
|
|
// RequestSendMsnChatLog
|
|
break;
|
|
case 0x6e: // RequestReload
|
|
msg = new RequestRecordInfo();
|
|
break;
|
|
case 0x6f:
|
|
msg = new RequestHennaEquip();
|
|
break;
|
|
case 0x70:
|
|
msg = new RequestHennaRemoveList();
|
|
break;
|
|
case 0x71:
|
|
msg = new RequestHennaItemRemoveInfo();
|
|
break;
|
|
case 0x72:
|
|
msg = new RequestHennaRemove();
|
|
break;
|
|
case 0x73:
|
|
msg = new RequestAcquireSkillInfo();
|
|
break;
|
|
case 0x74:
|
|
msg = new SendBypassBuildCmd();
|
|
break;
|
|
case 0x75:
|
|
msg = new RequestMoveToLocationInVehicle();
|
|
break;
|
|
case 0x76:
|
|
msg = new CannotMoveAnymoreInVehicle();
|
|
break;
|
|
case 0x77:
|
|
msg = new RequestFriendInvite();
|
|
break;
|
|
case 0x78:
|
|
msg = new RequestAnswerFriendInvite();
|
|
break;
|
|
case 0x79:
|
|
msg = new RequestFriendList();
|
|
break;
|
|
case 0x7a:
|
|
msg = new RequestFriendDel();
|
|
break;
|
|
case 0x7c:
|
|
msg = new RequestAcquireSkill();
|
|
break;
|
|
case 0x7d:
|
|
msg = new RequestRestartPoint();
|
|
break;
|
|
case 0x7e:
|
|
msg = new RequestGMCommand();
|
|
break;
|
|
case 0x7f:
|
|
msg = new RequestPartyMatchConfig();
|
|
break;
|
|
case 0x80:
|
|
msg = new RequestPartyMatchList();
|
|
break;
|
|
case 0x81:
|
|
msg = new RequestPartyMatchDetail();
|
|
break;
|
|
case 0x83: // SendPrivateStoreBuyList
|
|
msg = new RequestPrivateStoreBuy();
|
|
break;
|
|
case 0x85:
|
|
msg = new RequestTutorialLinkHtml();
|
|
break;
|
|
case 0x86:
|
|
msg = new RequestTutorialPassCmdToServer();
|
|
break;
|
|
case 0x87:
|
|
msg = new RequestTutorialQuestionMark();
|
|
break;
|
|
case 0x88:
|
|
msg = new RequestTutorialClientEvent();
|
|
break;
|
|
case 0x89:
|
|
msg = new RequestPetition();
|
|
break;
|
|
case 0x8a:
|
|
msg = new RequestPetitionCancel();
|
|
break;
|
|
case 0x8b:
|
|
msg = new RequestGmList();
|
|
break;
|
|
case 0x8c:
|
|
msg = new RequestJoinAlly();
|
|
break;
|
|
case 0x8d:
|
|
msg = new RequestAnswerJoinAlly();
|
|
break;
|
|
case 0x8e: // RequestWithdrawAlly
|
|
msg = new AllyLeave();
|
|
break;
|
|
case 0x8f: // RequestOustAlly
|
|
msg = new AllyDismiss();
|
|
break;
|
|
case 0x90:
|
|
msg = new RequestDismissAlly();
|
|
break;
|
|
case 0x91:
|
|
msg = new RequestSetAllyCrest();
|
|
break;
|
|
case 0x92:
|
|
msg = new RequestAllyCrest();
|
|
break;
|
|
case 0x93:
|
|
msg = new RequestChangePetName();
|
|
break;
|
|
case 0x94:
|
|
msg = new RequestPetUseItem();
|
|
break;
|
|
case 0x95:
|
|
msg = new RequestGiveItemToPet();
|
|
break;
|
|
case 0x96:
|
|
msg = new RequestPrivateStoreQuitSell();
|
|
break;
|
|
case 0x97:
|
|
msg = new SetPrivateStoreMsgSell();
|
|
break;
|
|
case 0x98:
|
|
msg = new RequestPetGetItem();
|
|
break;
|
|
case 0x99:
|
|
msg = new RequestPrivateStoreManageBuy();
|
|
break;
|
|
case 0x9a: // SetPrivateStoreList
|
|
msg = new SetPrivateStoreListBuy();
|
|
break;
|
|
case 0x9c:
|
|
msg = new RequestPrivateStoreQuitBuy();
|
|
break;
|
|
case 0x9d:
|
|
msg = new SetPrivateStoreMsgBuy();
|
|
break;
|
|
case 0x9f: // SendPrivateStoreBuyList
|
|
msg = new RequestPrivateStoreSell();
|
|
break;
|
|
case 0xa0:
|
|
// SendTimeCheckPacket
|
|
break;
|
|
case 0xa6:
|
|
// msg = new RequestSkillCoolTime();
|
|
break;
|
|
case 0xa7:
|
|
msg = new RequestPackageSendableItemList();
|
|
break;
|
|
case 0xa8:
|
|
msg = new RequestPackageSend();
|
|
break;
|
|
case 0xa9:
|
|
msg = new RequestBlock();
|
|
break;
|
|
case 0xaa:
|
|
msg = new RequestSiegeInfo();
|
|
break;
|
|
case 0xab: // RequestCastleSiegeAttackerList
|
|
msg = new RequestSiegeAttackerList();
|
|
break;
|
|
case 0xac:
|
|
msg = new RequestSiegeDefenderList();
|
|
break;
|
|
case 0xad: // RequestJoinCastleSiege
|
|
msg = new RequestJoinSiege();
|
|
break;
|
|
case 0xae: // RequestConfirmCastleSiegeWaitingList
|
|
msg = new RequestConfirmSiegeWaitingList();
|
|
break;
|
|
case 0xAF:
|
|
msg = new RequestSetCastleSiegeTime();
|
|
break;
|
|
case 0xb0:
|
|
msg = new MultiSellChoose();
|
|
break;
|
|
case 0xb1:
|
|
// NetPing
|
|
break;
|
|
case 0xb2:
|
|
// RequestRemainTime
|
|
break;
|
|
case 0xb3:
|
|
msg = new BypassUserCmd();
|
|
break;
|
|
case 0xb4:
|
|
msg = new SnoopQuit();
|
|
break;
|
|
case 0xb5:
|
|
msg = new RequestRecipeBookOpen();
|
|
break;
|
|
case 0xb6: // RequestRecipeItemDelete
|
|
msg = new RequestRecipeBookDestroy();
|
|
break;
|
|
case 0xb7:
|
|
msg = new RequestRecipeItemMakeInfo();
|
|
break;
|
|
case 0xb8:
|
|
msg = new RequestRecipeItemMakeSelf();
|
|
break;
|
|
case 0xb9:
|
|
// RequestRecipeShopManageList
|
|
break;
|
|
case 0xba:
|
|
msg = new RequestRecipeShopMessageSet();
|
|
break;
|
|
case 0xbb:
|
|
msg = new RequestRecipeShopListSet();
|
|
break;
|
|
case 0xbc:
|
|
msg = new RequestRecipeShopManageQuit();
|
|
break;
|
|
case 0xbd:
|
|
// RequestRecipeShopManageCancel
|
|
break;
|
|
case 0xbe:
|
|
msg = new RequestRecipeShopMakeInfo();
|
|
break;
|
|
case 0xbf: // RequestRecipeShopMakeDo
|
|
msg = new RequestRecipeShopMakeItem();
|
|
break;
|
|
case 0xc0: // RequestRecipeShopSellList
|
|
msg = new RequestRecipeShopManagePrev();
|
|
break;
|
|
case 0xc1: // RequestObserverEndPacket
|
|
msg = new ObserverReturn();
|
|
break;
|
|
case 0xc2:
|
|
// Unused (RequestEvaluate/VoteSociality)
|
|
break;
|
|
case 0xc3:
|
|
msg = new RequestHennaItemList();
|
|
break;
|
|
case 0xc4:
|
|
msg = new RequestHennaItemInfo();
|
|
break;
|
|
case 0xc5:
|
|
msg = new RequestBuySeed();
|
|
break;
|
|
case 0xc6: // ConfirmDlg
|
|
msg = new DlgAnswer();
|
|
break;
|
|
case 0xc7:
|
|
msg = new RequestPreviewItem();
|
|
break;
|
|
case 0xc8:
|
|
// msg = new RequestSSQStatus();
|
|
break;
|
|
case 0xc9:
|
|
msg = new RequestPetitionFeedback();
|
|
break;
|
|
case 0xcb:
|
|
msg = new GameGuardReply();
|
|
break;
|
|
case 0xcc:
|
|
msg = new RequestPledgePower();
|
|
break;
|
|
case 0xcd:
|
|
msg = new RequestMakeMacro();
|
|
break;
|
|
case 0xce:
|
|
msg = new RequestDeleteMacro();
|
|
break;
|
|
case 0xcf: // RequestProcureCrop
|
|
// msg = new RequestBuyProcure();
|
|
break;
|
|
|
|
case 0xd0:
|
|
int id2 = -1;
|
|
if (buf.remaining() >= 2)
|
|
{
|
|
id2 = buf.getShort() & 0xffff;
|
|
}
|
|
else
|
|
{
|
|
if (Config.PACKET_HANDLER_DEBUG)
|
|
{
|
|
_log.warning("Client: " + client.toString() + " sent a 0xd0 without the second opcode.");
|
|
}
|
|
break;
|
|
}
|
|
switch (id2)
|
|
{
|
|
case 0x00:
|
|
break;
|
|
case 0x01:
|
|
msg = new RequestManorList();
|
|
break;
|
|
case 0x02:
|
|
msg = new RequestProcureCropList();
|
|
break;
|
|
case 0x03:
|
|
msg = new RequestSetSeed();
|
|
break;
|
|
case 0x04:
|
|
msg = new RequestSetCrop();
|
|
break;
|
|
case 0x05:
|
|
msg = new RequestWriteHeroWords();
|
|
break;
|
|
case 0x06:
|
|
msg = new RequestExAskJoinMPCC();
|
|
break;
|
|
case 0x07:
|
|
msg = new RequestExAcceptJoinMPCC();
|
|
break;
|
|
case 0x08:
|
|
msg = new RequestExOustFromMPCC();
|
|
break;
|
|
case 0x09:
|
|
msg = new RequestOustFromPartyRoom();
|
|
break;
|
|
case 0x0a:
|
|
msg = new RequestDismissPartyRoom();
|
|
break;
|
|
case 0x0b:
|
|
msg = new RequestWithdrawPartyRoom();
|
|
break;
|
|
case 0x0c:
|
|
msg = new RequestChangePartyLeader(); // RequestHandOverPartyMaster ?
|
|
break;
|
|
case 0x0d:
|
|
msg = new RequestAutoSoulShot();
|
|
break;
|
|
case 0x0e:
|
|
msg = new RequestExEnchantSkillInfo();
|
|
break;
|
|
case 0x0f:
|
|
msg = new RequestExEnchantSkill();
|
|
break;
|
|
case 0x10:
|
|
msg = new RequestExPledgeCrestLarge();
|
|
break;
|
|
case 0x11:
|
|
int id9 = buf.getInt();
|
|
switch (id9)
|
|
{
|
|
// @TODO: : RequestExSetPledgeCrestLarge is now chunked, each case is a different chunk
|
|
case 0x00:
|
|
{
|
|
msg = new RequestExSetPledgeCrestLarge();// 0
|
|
break;
|
|
}
|
|
case 0x01:
|
|
{
|
|
msg = new RequestExSetPledgeCrestLarge();// 1
|
|
break;
|
|
}
|
|
case 0x02:
|
|
{
|
|
msg = new RequestExSetPledgeCrestLarge();// 2
|
|
break;
|
|
}
|
|
case 0x03:
|
|
{
|
|
msg = new RequestExSetPledgeCrestLarge();// 3
|
|
break;
|
|
}
|
|
case 0x04:
|
|
{
|
|
msg = new RequestExSetPledgeCrestLarge();// 4
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
printDebugDoubleOpcode(opcode, id9, buf, state, client);
|
|
}
|
|
}
|
|
break;
|
|
case 0x12:
|
|
msg = new RequestPledgeSetAcademyMaster();
|
|
break;
|
|
case 0x13:
|
|
msg = new RequestPledgePowerGradeList();
|
|
break;
|
|
case 0x14:
|
|
msg = new RequestPledgeMemberPowerInfo();
|
|
break;
|
|
case 0x15:
|
|
msg = new RequestPledgeSetMemberPowerGrade();
|
|
break;
|
|
case 0x16:
|
|
msg = new RequestPledgeMemberInfo();
|
|
break;
|
|
case 0x17:
|
|
msg = new RequestPledgeWarList();
|
|
break;
|
|
case 0x18:
|
|
msg = new RequestExFishRanking();
|
|
break;
|
|
case 0x19:
|
|
msg = new RequestPCCafeCouponUse();
|
|
break;
|
|
case 0x1b:
|
|
msg = new RequestDuelStart();
|
|
break;
|
|
case 0x1c:
|
|
msg = new RequestDuelAnswerStart();
|
|
break;
|
|
case 0x1d:
|
|
// RequestExSetTutorial
|
|
break;
|
|
case 0x1e:
|
|
msg = new RequestExRqItemLink();
|
|
break;
|
|
case 0x1f:
|
|
// CanNotMoveAnymoreAirShip
|
|
break;
|
|
case 0x20:
|
|
msg = new MoveToLocationInAirShip();
|
|
break;
|
|
case 0x21:
|
|
msg = new RequestKeyMapping();
|
|
break;
|
|
case 0x22:
|
|
msg = new RequestSaveKeyMapping();
|
|
break;
|
|
case 0x23:
|
|
msg = new RequestExRemoveItemAttribute();
|
|
break;
|
|
case 0x24:
|
|
msg = new RequestSaveInventoryOrder();
|
|
break;
|
|
case 0x25:
|
|
msg = new RequestExitPartyMatchingWaitingRoom();
|
|
break;
|
|
case 0x26:
|
|
msg = new RequestConfirmTargetItem();
|
|
break;
|
|
case 0x27:
|
|
msg = new RequestConfirmRefinerItem();
|
|
break;
|
|
case 0x28:
|
|
msg = new RequestConfirmGemStone();
|
|
break;
|
|
case 0x29:
|
|
msg = new RequestOlympiadObserverEnd();
|
|
break;
|
|
case 0x2a:
|
|
msg = new RequestCursedWeaponList();
|
|
break;
|
|
case 0x2b:
|
|
msg = new RequestCursedWeaponLocation();
|
|
break;
|
|
case 0x2c:
|
|
msg = new RequestPledgeReorganizeMember();
|
|
break;
|
|
case 0x2d:
|
|
msg = new RequestExMPCCShowPartyMembersInfo();
|
|
break;
|
|
case 0x2e:
|
|
msg = new RequestOlympiadMatchList();
|
|
break;
|
|
case 0x2f:
|
|
msg = new RequestAskJoinPartyRoom();
|
|
break;
|
|
case 0x30:
|
|
msg = new AnswerJoinPartyRoom();
|
|
break;
|
|
case 0x31:
|
|
msg = new RequestListPartyMatchingWaitingRoom();
|
|
break;
|
|
case 0x32:
|
|
msg = new RequestExEnchantItemAttribute();
|
|
break;
|
|
case 0x33:
|
|
msg = new RequestGotoLobby();
|
|
break;
|
|
case 0x35:
|
|
msg = new MoveToLocationAirShip();
|
|
break;
|
|
case 0x36:
|
|
msg = new RequestBidItemAuction();
|
|
break;
|
|
case 0x37:
|
|
msg = new RequestInfoItemAuction();
|
|
break;
|
|
case 0x38:
|
|
msg = new RequestExChangeName();
|
|
break;
|
|
case 0x39:
|
|
msg = new RequestAllCastleInfo();
|
|
break;
|
|
case 0x3a:
|
|
msg = new RequestAllFortressInfo();
|
|
break;
|
|
case 0x3b:
|
|
msg = new RequestAllAgitInfo();
|
|
break;
|
|
case 0x3c:
|
|
msg = new RequestFortressSiegeInfo();
|
|
break;
|
|
case 0x3d:
|
|
msg = new RequestGetBossRecord();
|
|
break;
|
|
case 0x3e:
|
|
msg = new RequestRefine();
|
|
break;
|
|
case 0x3f:
|
|
msg = new RequestConfirmCancelItem();
|
|
break;
|
|
case 0x40:
|
|
msg = new RequestRefineCancel();
|
|
break;
|
|
case 0x41:
|
|
msg = new RequestExMagicSkillUseGround();
|
|
break;
|
|
case 0x42:
|
|
msg = new RequestDuelSurrender();
|
|
break;
|
|
case 0x43:
|
|
msg = new RequestExEnchantSkillInfoDetail();
|
|
break;
|
|
case 0x44:
|
|
msg = new RequestExMagicSkillUseGround();
|
|
break;
|
|
case 0x45:
|
|
msg = new RequestFortressMapInfo();
|
|
break;
|
|
case 0x46:
|
|
msg = new RequestPVPMatchRecord();
|
|
break;
|
|
case 0x47:
|
|
msg = new SetPrivateStoreWholeMsg();
|
|
break;
|
|
case 0x48:
|
|
msg = new RequestDispel();
|
|
break;
|
|
case 0x49:
|
|
msg = new RequestExTryToPutEnchantTargetItem();
|
|
break;
|
|
case 0x4a:
|
|
msg = new RequestExTryToPutEnchantSupportItem();
|
|
break;
|
|
case 0x4b:
|
|
msg = new RequestExCancelEnchantItem();
|
|
break;
|
|
case 0x4c:
|
|
msg = new RequestChangeNicknameColor();
|
|
break;
|
|
case 0x4d:
|
|
msg = new RequestResetNickname();
|
|
break;
|
|
case 0x4e:
|
|
int id4 = buf.getInt();
|
|
switch (id4)
|
|
{
|
|
case 0x00:
|
|
msg = new RequestBookMarkSlotInfo();
|
|
break;
|
|
case 0x01:
|
|
msg = new RequestSaveBookMarkSlot();
|
|
break;
|
|
case 0x02:
|
|
msg = new RequestModifyBookMarkSlot();
|
|
break;
|
|
case 0x03:
|
|
msg = new RequestDeleteBookMarkSlot();
|
|
break;
|
|
case 0x04:
|
|
msg = new RequestTeleportBookMark();
|
|
break;
|
|
case 0x05:
|
|
msg = new RequestChangeBookMarkSlot();
|
|
break;
|
|
}
|
|
break;
|
|
case 0x4f:
|
|
msg = new RequestWithDrawPremiumItem();
|
|
break;
|
|
case 0x50:
|
|
// @TODO: msg = new RequestExJump();
|
|
break;
|
|
case 0x51:
|
|
// @TODO: msg = new RequestExStartShowCrataeCubeRank();
|
|
break;
|
|
case 0x52:
|
|
// @TODO: msg = new RequestExStopShowCrataeCubeRank();
|
|
break;
|
|
case 0x53:
|
|
// @TODO: msg = new NotifyStartMiniGame();
|
|
break;
|
|
case 0x54:
|
|
// @TODO: msg = new RequestExJoinDominionWar();
|
|
break;
|
|
case 0x55:
|
|
// @TODO: msg = new RequestExDominionInfo();
|
|
break;
|
|
case 0x56:
|
|
// @TODO: msg = new RequestExCleftEnter();
|
|
break;
|
|
case 0x57:
|
|
msg = new RequestExCubeGameChangeTeam();
|
|
break;
|
|
case 0x58:
|
|
msg = new EndScenePlayer();
|
|
break;
|
|
case 0x59:
|
|
msg = new RequestExCubeGameReadyAnswer();
|
|
break;
|
|
case 0x5A:
|
|
// @TODO:msg = new RequestExListMpccWaiting();
|
|
break;
|
|
case 0x5B:
|
|
// @TODO:msg = new RequestExManageMpccRoom();
|
|
break;
|
|
case 0x5C:
|
|
// @TODO:msg = new RequestExJoinMpccRoom();
|
|
break;
|
|
case 0x5D:
|
|
// TODO:: RequestExOustFromMpccRoom chddd
|
|
break;
|
|
case 0x5E:
|
|
// TODO:: RequestExDismissMpccRoom chdddddS
|
|
break;
|
|
case 0x5F:
|
|
// TODO:: RequestExWithdrawMpccRoom chdd
|
|
break;
|
|
case 0x60:
|
|
msg = new RequestSeedPhase();
|
|
break;
|
|
case 0x61:
|
|
// TODO:: msg = new RequestExMpccPartymasterList();
|
|
break;
|
|
case 0x62:
|
|
msg = new RequestPostItemList();
|
|
break;
|
|
case 0x63:
|
|
msg = new RequestSendPost();
|
|
break;
|
|
case 0x64:
|
|
msg = new RequestReceivedPostList();
|
|
break;
|
|
case 0x65:
|
|
msg = new RequestDeleteReceivedPost();
|
|
break;
|
|
case 0x66:
|
|
msg = new RequestReceivedPost();
|
|
break;
|
|
case 0x67:
|
|
msg = new RequestPostAttachment();
|
|
break;
|
|
case 0x68:
|
|
msg = new RequestRejectPostAttachment();
|
|
break;
|
|
case 0x69:
|
|
msg = new RequestSentPostList();
|
|
break;
|
|
case 0x6a:
|
|
msg = new RequestDeleteSentPost();
|
|
break;
|
|
case 0x6b:
|
|
msg = new RequestSentPost();
|
|
break;
|
|
case 0x6c:
|
|
msg = new RequestCancelPostAttachment();
|
|
break;
|
|
case 0x6d:
|
|
// @TODO: RequestShowNewUserPetition
|
|
break;
|
|
case 0x6e:
|
|
// @TODO: RequestShowStepTwo
|
|
break;
|
|
case 0x6f:
|
|
// @TODO: RequestShowStepThree
|
|
break;
|
|
case 0x70:
|
|
// msg = new ExConnectToRaidServer(); (chddd)
|
|
break;
|
|
case 0x71:
|
|
// msg = new ExReturnFromRaidServer(); (chd)
|
|
break;
|
|
case 0x72:
|
|
msg = new RequestRefundItem();
|
|
break;
|
|
case 0x73:
|
|
msg = new RequestBuySellUIClose();
|
|
break;
|
|
case 0x75:
|
|
msg = new RequestPartyLootModification();
|
|
break;
|
|
case 0x76:
|
|
msg = new AnswerPartyLootModification();
|
|
break;
|
|
case 0x77:
|
|
msg = new AnswerCoupleAction();
|
|
break;
|
|
case 0x78:
|
|
msg = new BrEventRankerList();
|
|
break;
|
|
case 0x79:
|
|
// msg = new RequestAskMemberShip();
|
|
break;
|
|
case 0x7a:
|
|
// @TODO: RequestAddExpandQuestAlarm
|
|
break;
|
|
case 0x7b:
|
|
msg = new RequestVoteNew();
|
|
break;
|
|
case 0x7c:
|
|
msg = new RequestShuttleGetOn();
|
|
break;
|
|
case 0x7d:
|
|
msg = new RequestShuttleGetOff();
|
|
break;
|
|
case 0x7e:
|
|
msg = new MoveToLocationInShuttle();
|
|
break;
|
|
case 0x7F:
|
|
msg = new CannotMoveAnymoreInShuttle();
|
|
break;
|
|
case 0x80:
|
|
int id5 = buf.getInt();
|
|
switch (id5)
|
|
{
|
|
case 0x01:
|
|
{
|
|
// msg = new RequestExAgitInitialize chd 0x01
|
|
break;
|
|
}
|
|
case 0x02:
|
|
{
|
|
// msg = new RequestExAgitDetailInfo chdcd 0x02
|
|
break;
|
|
}
|
|
case 0x03:
|
|
{
|
|
// msg = new RequestExMyAgitState chd 0x03
|
|
break;
|
|
}
|
|
case 0x04:
|
|
{
|
|
// msg = new RequestExRegisterAgitForBidStep1 chd 0x04
|
|
break;
|
|
}
|
|
case 0x05:
|
|
{
|
|
// msg = new RequestExRegisterAgitForBidStep2 chddQd
|
|
}
|
|
case 0x06:
|
|
{
|
|
// msg = new RequestExRegisterAgitForBidStep3 // chddQd 0x05 -no error? 0x05
|
|
break;
|
|
}
|
|
case 0x07:
|
|
{
|
|
// msg = new RequestExConfirmCancelRegisteringAgit chd 0x07
|
|
break;
|
|
}
|
|
case 0x08:
|
|
{
|
|
// msg = new RequestExProceedCancelRegisteringAgit chd 0x08
|
|
break;
|
|
}
|
|
case 0x09:
|
|
{
|
|
// msg = new RequestExConfirmCancelAgitBid chdd 0x09
|
|
break;
|
|
}
|
|
case 0x10:
|
|
{
|
|
// msg = new RequestExReBid chdd 0x10
|
|
break;
|
|
}
|
|
case 0x11:
|
|
{
|
|
// msg = new RequestExAgitListForLot chd 0x11
|
|
break;
|
|
}
|
|
case 0x12:
|
|
{
|
|
// msg = new RequestExApplyForAgitLotStep1 chdc 0x12
|
|
break;
|
|
}
|
|
case 0x13:
|
|
{
|
|
// msg = new RequestExApplyForAgitLotStep2 chdc 0x13
|
|
break;
|
|
}
|
|
case 0x14:
|
|
{
|
|
// msg = new RequestExAgitListForBid chdd 0x14
|
|
break;
|
|
}
|
|
case 0x0D:
|
|
{
|
|
// msg = new RequestExApplyForBidStep1 chdd 0x0D
|
|
break;
|
|
}
|
|
case 0x0E:
|
|
{
|
|
// msg = new RequestExApplyForBidStep2 chddQ 0x0E
|
|
break;
|
|
}
|
|
case 0x0F:
|
|
{
|
|
// msg = new RequestExApplyForBidStep3 chddQ 0x0F
|
|
break;
|
|
}
|
|
case 0x0A:
|
|
{
|
|
// msg = new RequestExProceedCancelAgitLot chdc 0x0A
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
printDebugDoubleOpcode(opcode, id5, buf, state, client);
|
|
}
|
|
}
|
|
break;
|
|
case 0x81:
|
|
msg = new RequestExAddContactToContactList(); // RequestExAddPostFriendForPostBox
|
|
break;
|
|
case 0x82:
|
|
msg = new RequestExDeleteContactFromContactList(); // RequestExDeletePostFriendForPostBox
|
|
break;
|
|
case 0x83:
|
|
msg = new RequestExShowContactList(); // RequestExShowPostFriendListForPostBox
|
|
break;
|
|
case 0x84:
|
|
msg = new RequestExFriendListExtended(); // RequestExFriendListForPostBox
|
|
break;
|
|
case 0x85:
|
|
msg = new RequestExOlympiadMatchListRefresh(); // RequestOlympiadMatchList
|
|
break;
|
|
case 0x86:
|
|
msg = new RequestBRGamePoint();
|
|
break;
|
|
case 0x87:
|
|
msg = new RequestBRProductList();
|
|
break;
|
|
case 0x88:
|
|
msg = new RequestBRProductInfo();
|
|
break;
|
|
case 0x89:
|
|
msg = new RequestBRBuyProduct();
|
|
break;
|
|
case 0x8A:
|
|
msg = new RequestBRRecentProductList();
|
|
break;
|
|
case 0x8B:
|
|
// @ msg = new RequestBR_MiniGameLoadScores();
|
|
break;
|
|
case 0x8C:
|
|
// @ msg = new RequestBR_MiniGameInsertScore();
|
|
break;
|
|
case 0x8D:
|
|
// @ msg = new RequestExBR_LectureMark();
|
|
break;
|
|
case 0x8E:
|
|
msg = new RequestCrystallizeEstimate();
|
|
break;
|
|
case 0x8F:
|
|
msg = new RequestCrystallizeItemCancel();
|
|
break;
|
|
case 0x90:
|
|
// @ msg = new RequestExEscapeScene();
|
|
break;
|
|
case 0x91:
|
|
msg = new RequestFlyMove();
|
|
break;
|
|
case 0x92:
|
|
// msg = new RequestSurrenderPledgeWarEX(); (chS)
|
|
break;
|
|
case 0x93:
|
|
{
|
|
int id6 = buf.getInt();
|
|
switch (id6)
|
|
{
|
|
case 0x02:
|
|
// msg = new RequestDynamicQuestProgressInfo()
|
|
break;
|
|
case 0x03:
|
|
// msg = new RequestDynamicQuestScoreBoard();
|
|
break;
|
|
case 0x04:
|
|
// msg = new RequestDynamicQuestHTML();
|
|
break;
|
|
default:
|
|
printDebugDoubleOpcode(opcode, id6, buf, state, client);
|
|
break;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 0x94:
|
|
msg = new RequestFriendDetailInfo();
|
|
break;
|
|
case 0x95:
|
|
msg = new RequestUpdateFriendMemo();
|
|
break;
|
|
case 0x96:
|
|
msg = new RequestUpdateBlockMemo();
|
|
break;
|
|
case 0x97:
|
|
// msg = new RequestInzonePartyInfoHistory();
|
|
break;
|
|
case 0x98:
|
|
msg = new RequestCommissionRegistrableItemList();
|
|
break;
|
|
case 0x99:
|
|
msg = new RequestCommissionInfo();
|
|
break;
|
|
case 0x9A:
|
|
msg = new RequestCommissionRegister();
|
|
break;
|
|
case 0x9B:
|
|
msg = new RequestCommissionCancel();
|
|
break;
|
|
case 0x9C:
|
|
msg = new RequestCommissionDelete();
|
|
break;
|
|
case 0x9D:
|
|
msg = new RequestCommissionList();
|
|
break;
|
|
case 0x9E:
|
|
msg = new RequestCommissionBuyInfo();
|
|
break;
|
|
case 0x9F:
|
|
msg = new RequestCommissionBuyItem();
|
|
break;
|
|
case 0xA0:
|
|
msg = new RequestCommissionRegisteredItem();
|
|
break;
|
|
case 0xA1:
|
|
// msg = new RequestCallToChangeClass();
|
|
break;
|
|
case 0xA2:
|
|
msg = new RequestChangeToAwakenedClass();
|
|
break;
|
|
case 0xA3:
|
|
// msg = new RequestWorldStatistics();
|
|
break;
|
|
case 0xA4:
|
|
// msg = new RequestUserStatistics();
|
|
break;
|
|
case 0xA5:
|
|
// msg = new Request24HzSessionID();
|
|
break;
|
|
case 0xAA:
|
|
// msg = new RequestGoodsInventoryInfo();
|
|
break;
|
|
case 0xAB:
|
|
// msg = new RequestUseGoodsInventoryItem();
|
|
break;
|
|
case 0xAC:
|
|
// msg = new RequestFirstPlayStart();
|
|
break;
|
|
case 0xAD:
|
|
msg = new RequestFlyMoveStart();
|
|
break;
|
|
case 0xAE:
|
|
case 0xAF:
|
|
// msg = new RequestHardWareInfo(); (SddddddSddddddddddSS)
|
|
break;
|
|
case 0xB0:
|
|
msg = new SendChangeAttributeTargetItem();
|
|
break;
|
|
case 0xB1:
|
|
msg = new RequestChangeAttributeItem();
|
|
break;
|
|
case 0xB2:
|
|
msg = new RequestChangeAttributeCancel();
|
|
break;
|
|
case 0xB3:
|
|
// msg = new RequestBR_PresentBuyProduct();
|
|
break;
|
|
case 0xB4:
|
|
msg = new ConfirmMenteeAdd();
|
|
break;
|
|
case 0xB5:
|
|
msg = new RequestMentorCancel();
|
|
break;
|
|
case 0xB6:
|
|
msg = new RequestMentorList();
|
|
break;
|
|
case 0xB7:
|
|
msg = new RequestMenteeAdd();
|
|
break;
|
|
case 0xB8:
|
|
msg = new RequestMenteeWaitingList();
|
|
break;
|
|
case 0xB9:
|
|
// msg = new RequestClanAskJoinByName();
|
|
break;
|
|
case 0xBA:
|
|
msg = new RequestInzoneWaitingTime();
|
|
break;
|
|
case 0xBB:
|
|
// msg = new RequestJoinCuriousHouse();// (ch)
|
|
break;
|
|
case 0xBC:
|
|
// msg = new RequestCancelCuriousHouse();// (ch)
|
|
break;
|
|
case 0xBD:
|
|
// msg = new RequestLeaveCuriousHouse();// (ch)
|
|
break;
|
|
case 0xBE:
|
|
// msg = new RequestObservingListCuriousHouse();// (ch)
|
|
break;
|
|
case 0xBF:
|
|
// msg = new RequestObservingCuriousHouse();// (chd)
|
|
break;
|
|
case 0xC0:
|
|
// msg = new RequestLeaveObservingCuriousHouse();// (ch)
|
|
break;
|
|
case 0xC1:
|
|
// msg = new RequestCuriousHouseHtml();// (ch)
|
|
break;
|
|
case 0xC2:
|
|
// msg = new RequestCuriousHouseRecord();// (ch)
|
|
break;
|
|
case 0xC3:
|
|
// msg = new ExSysstring(); (chdS)
|
|
break;
|
|
case 0xC4:
|
|
msg = new RequestExTryToPut_Shape_Shifting_TargetItem();
|
|
break;
|
|
case 0xC5:
|
|
msg = new RequestExTryToPut_Shape_Shifting_EnchantSupportItem();
|
|
break;
|
|
case 0xC6:
|
|
msg = new RequestExCancelShape_Shifting_Item();
|
|
break;
|
|
case 0xC7:
|
|
msg = new RequestShape_Shifting_Item();
|
|
break;
|
|
case 0xC8:
|
|
// msg = new NCGuardSendDataToServer(); // (chdb)
|
|
break;
|
|
case 0xC9:
|
|
// msg = new RequestEventKalieToken(); // (d)
|
|
break;
|
|
case 0xCA:
|
|
msg = new RequestShowBeautyList();
|
|
break;
|
|
case 0xCB:
|
|
msg = new RequestRegistBeauty();
|
|
break;
|
|
case 0xCC:
|
|
break;
|
|
case 0xCD:
|
|
msg = new RequestShowResetShopList();
|
|
break;
|
|
case 0xCE:
|
|
// NetPing
|
|
break;
|
|
case 0xCF:
|
|
// RequestBR_AddBasketProductInfo
|
|
break;
|
|
case 0xD0:
|
|
// RequestBR_DeleteBasketProductInfo
|
|
break;
|
|
case 0xD1:
|
|
break;
|
|
case 0xD2:
|
|
// RequestExEvent_Campaign_Info
|
|
break;
|
|
case 0xD3:
|
|
msg = new RequestPledgeRecruitInfo();
|
|
break;
|
|
case 0xD4:
|
|
msg = new RequestPledgeRecruitBoardSearch();
|
|
break;
|
|
case 0xD5:
|
|
msg = new RequestPledgeRecruitBoardAccess();
|
|
break;
|
|
case 0xD6:
|
|
msg = new RequestPledgeRecruitBoardDetail();
|
|
break;
|
|
case 0xD7:
|
|
msg = new RequestPledgeWaitingApply();
|
|
break;
|
|
case 0xD8:
|
|
msg = new RequestPledgeWaitingApplied();
|
|
break;
|
|
case 0xD9:
|
|
msg = new RequestPledgeWaitingList();
|
|
break;
|
|
case 0xDA:
|
|
msg = new RequestPledgeWaitingUser();
|
|
break;
|
|
case 0xDB:
|
|
msg = new RequestPledgeWaitingUserAccept();
|
|
break;
|
|
case 0xDC:
|
|
msg = new RequestPledgeDraftListSearch();
|
|
break;
|
|
case 0xDD:
|
|
msg = new RequestPledgeDraftListApply();
|
|
break;
|
|
case 0xDE:
|
|
msg = new RequestPledgeRecruitApplyInfo();
|
|
break;
|
|
case 0xDF:
|
|
// msg = new RequestPledgeJoinSys();
|
|
break;
|
|
case 0xE0:
|
|
// ResponsePetitionAlarm
|
|
break;
|
|
case 0xE1:
|
|
msg = new NotifyExitBeautyShop();
|
|
break;
|
|
case 0xE2:
|
|
// RequestRegisterXMasWishCard
|
|
break;
|
|
case 0xE3:
|
|
msg = new RequestExAddEnchantScrollItem();
|
|
break;
|
|
case 0xE4:
|
|
msg = new RequestExRemoveEnchantSupportItem();
|
|
break;
|
|
case 0xE5:
|
|
// msg = new RequestCardReward();
|
|
break;
|
|
case 0xE6:
|
|
msg = new RequestDivideAdenaStart();
|
|
break;
|
|
case 0xE7:
|
|
msg = new RequestDivideAdenaCancel();
|
|
break;
|
|
case 0xE8:
|
|
msg = new RequestDivideAdena();
|
|
break;
|
|
case 0xE9:
|
|
msg = new RequestAcquireAbilityList();
|
|
break;
|
|
case 0xEA:
|
|
msg = new RequestAbilityList();
|
|
break;
|
|
case 0xEB:
|
|
msg = new RequestResetAbilityPoint();
|
|
break;
|
|
case 0xEC:
|
|
msg = new RequestChangeAbilityPoint();
|
|
break;
|
|
case 0xED:
|
|
// msg = new RequestStopMove();
|
|
break;
|
|
case 0xEE:
|
|
msg = new RequestAbilityWndOpen();
|
|
break;
|
|
case 0xEF:
|
|
msg = new RequestAbilityWndClose();
|
|
break;
|
|
case 0xF0:
|
|
msg = new ExPCCafeRequestOpenWindowWithoutNPC();
|
|
break;
|
|
case 0xF2:
|
|
// msg = new RequestLuckyGamePlay();
|
|
break;
|
|
case 0xF3:
|
|
// msg = new NotifyTrainingRoomEnd();
|
|
break;
|
|
case 0xF4:
|
|
msg = new RequestNewEnchantPushOne();
|
|
break;
|
|
case 0xF5:
|
|
msg = new RequestNewEnchantRemoveOne();
|
|
break;
|
|
case 0xF6:
|
|
msg = new RequestNewEnchantPushTwo();
|
|
break;
|
|
case 0xF7:
|
|
msg = new RequestNewEnchantRemoveTwo();
|
|
break;
|
|
case 0xF8:
|
|
msg = new RequestNewEnchantClose();
|
|
break;
|
|
case 0xF9:
|
|
msg = new RequestNewEnchantTry();
|
|
break;
|
|
case 0xFE:
|
|
// msg = new ExSendSelectedQuestZoneID();
|
|
break;
|
|
case 0xFF:
|
|
msg = new RequestAlchemySkillList();
|
|
break;
|
|
case 0x100:
|
|
// msg = new RequestAlchemyTryMixCube();
|
|
break;
|
|
case 0x101:
|
|
// msg = new RequestAlchemyConversion();
|
|
break;
|
|
case 0x102:
|
|
// msg = new SendExecutedUIEventsCount();
|
|
break;
|
|
case 0x103:
|
|
// msg = new ExSendClientINI();
|
|
break;
|
|
case 0x104:
|
|
// msg = new RequestExAutoFish();
|
|
break;
|
|
default:
|
|
printDebugDoubleOpcode(opcode, id2, buf, state, client);
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
printDebug(opcode, buf, state, client);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return msg;
|
|
}
|
|
|
|
private void printDebug(int opcode, ByteBuffer buf, GameClientState state, L2GameClient client)
|
|
{
|
|
client.onUnknownPacket();
|
|
if (!Config.PACKET_HANDLER_DEBUG)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int size = buf.remaining();
|
|
_log.warning("Unknown Packet: 0x" + Integer.toHexString(opcode) + " on State: " + state.name() + " Client: " + client.toString());
|
|
byte[] array = new byte[size];
|
|
buf.get(array);
|
|
_log.warning(Util.printData(array, size));
|
|
}
|
|
|
|
private void printDebugDoubleOpcode(int opcode, int id2, ByteBuffer buf, GameClientState state, L2GameClient client)
|
|
{
|
|
client.onUnknownPacket();
|
|
if (!Config.PACKET_HANDLER_DEBUG)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int size = buf.remaining();
|
|
_log.warning("Unknown Packet: 0x" + Integer.toHexString(opcode) + ":0x" + Integer.toHexString(id2) + " on State: " + state.name() + " Client: " + client.toString());
|
|
byte[] array = new byte[size];
|
|
buf.get(array);
|
|
_log.warning(Util.printData(array, size));
|
|
}
|
|
|
|
// impl
|
|
@Override
|
|
public L2GameClient create(MMOConnection<L2GameClient> con)
|
|
{
|
|
return new L2GameClient(con);
|
|
}
|
|
|
|
@Override
|
|
public void execute(ReceivablePacket<L2GameClient> rp)
|
|
{
|
|
rp.getClient().execute(rp);
|
|
}
|
|
}
|