|
|
@ -26,7 +26,7 @@ public enum Protocol { |
|
|
|
ACTIVATECHARTER(0x296C0B22, UseCharterMsg.class, null),// Use Guild Charter
|
|
|
|
ACTIVATECHARTER(0x296C0B22, UseCharterMsg.class, null),// Use Guild Charter
|
|
|
|
ACTIVATENPC(0xC9AAE81E, ActivateNPCMessage.class, ActivateNPCMsgHandler.class), |
|
|
|
ACTIVATENPC(0xC9AAE81E, ActivateNPCMessage.class, ActivateNPCMsgHandler.class), |
|
|
|
ACTIVATEPLEDGE(0x5A694DC0, SwearInMsg.class, SwearInHandler.class), // Swear In
|
|
|
|
ACTIVATEPLEDGE(0x5A694DC0, SwearInMsg.class, SwearInHandler.class), // Swear In
|
|
|
|
ADDFRIEND(0xCFA1C787,AddFriendMessage.class,null), |
|
|
|
ADDFRIEND(0xCFA1C787, AddFriendMessage.class, null), |
|
|
|
ALLIANCECHANGE(0x0E7D0B57, AllianceChangeMsg.class, AllianceChangeMsgHandler.class), // Remove From Allies/Enemies List
|
|
|
|
ALLIANCECHANGE(0x0E7D0B57, AllianceChangeMsg.class, AllianceChangeMsgHandler.class), // Remove From Allies/Enemies List
|
|
|
|
ALLYENEMYLIST(0xAEA443FD, AllyEnemyListMsg.class, AllyEnemyListMsgHandler.class), |
|
|
|
ALLYENEMYLIST(0xAEA443FD, AllyEnemyListMsg.class, AllyEnemyListMsgHandler.class), |
|
|
|
ARCCOMBATMODEATTACKING(0xD8B10579, SetCombatModeMsg.class, null), // Attack From Outside Combat Mode
|
|
|
|
ARCCOMBATMODEATTACKING(0xD8B10579, SetCombatModeMsg.class, null), // Attack From Outside Combat Mode
|
|
|
@ -79,7 +79,7 @@ public enum Protocol { |
|
|
|
CLAIMASSET(0x948C62CC, ClaimAssetMsg.class, ClaimAssetMsgHandler.class), // ClaimAsset
|
|
|
|
CLAIMASSET(0x948C62CC, ClaimAssetMsg.class, ClaimAssetMsgHandler.class), // ClaimAsset
|
|
|
|
CLAIMGUILDTREE(0xFD1C6442, ClaimGuildTreeMsg.class, ClaimGuildTreeMsgHandler.class), |
|
|
|
CLAIMGUILDTREE(0xFD1C6442, ClaimGuildTreeMsg.class, ClaimGuildTreeMsgHandler.class), |
|
|
|
CLIENTADMINCOMMAND(0x624EAB5F, ClientAdminCommandMsg.class, null), //Admin Command
|
|
|
|
CLIENTADMINCOMMAND(0x624EAB5F, ClientAdminCommandMsg.class, null), //Admin Command
|
|
|
|
CLIENTUPDATEVAULT( 0x66EDBECD, UpdateVaultMsg.class, null), |
|
|
|
CLIENTUPDATEVAULT(0x66EDBECD, UpdateVaultMsg.class, null), |
|
|
|
COMBATMODE(0xFE4BF353, ToggleCombatMsg.class, null), //Toggle Combat mode
|
|
|
|
COMBATMODE(0xFE4BF353, ToggleCombatMsg.class, null), //Toggle Combat mode
|
|
|
|
CONFIRMPROMOTE(0x153BB5F9, ConfirmPromoteMsg.class, null), |
|
|
|
CONFIRMPROMOTE(0x153BB5F9, ConfirmPromoteMsg.class, null), |
|
|
|
COSTTOOPENBANK(0x135BE5E8, AckBankWindowOpenedMsg.class, null), // ACK Bank Window Opened
|
|
|
|
COSTTOOPENBANK(0x135BE5E8, AckBankWindowOpenedMsg.class, null), // ACK Bank Window Opened
|
|
|
@ -95,8 +95,8 @@ public enum Protocol { |
|
|
|
EQUIP(0x3CB1AF8C, TransferItemFromInventoryToEquipMsg.class, null), // Transfer Item from Inventory to Equip
|
|
|
|
EQUIP(0x3CB1AF8C, TransferItemFromInventoryToEquipMsg.class, null), // Transfer Item from Inventory to Equip
|
|
|
|
EXPERIENCE(0xC57802A7, GrantExperienceMsg.class, null), //TODO rename once identified
|
|
|
|
EXPERIENCE(0xC57802A7, GrantExperienceMsg.class, null), //TODO rename once identified
|
|
|
|
FORGETOBJECTS(0xE307A0E1, UnloadObjectsMsg.class, null), // Unload Objects
|
|
|
|
FORGETOBJECTS(0xE307A0E1, UnloadObjectsMsg.class, null), // Unload Objects
|
|
|
|
FRIENDACCEPT(0xCA297870,AcceptFriendMsg.class,FriendAcceptHandler.class), |
|
|
|
FRIENDACCEPT(0xCA297870, AcceptFriendMsg.class, FriendAcceptHandler.class), |
|
|
|
FRIENDDECLINE(0xF08FC279,DeclineFriendMsg.class,FriendDeclineHandler.class), |
|
|
|
FRIENDDECLINE(0xF08FC279, DeclineFriendMsg.class, FriendDeclineHandler.class), |
|
|
|
FURNITURE(0xCE7FA503, FurnitureMsg.class, FurnitureHandler.class), |
|
|
|
FURNITURE(0xCE7FA503, FurnitureMsg.class, FurnitureHandler.class), |
|
|
|
GAMESERVERIPRESPONSE(0x6C95CF87, GameServerIPResponseMsg.class, null), // Game Server IP Response
|
|
|
|
GAMESERVERIPRESPONSE(0x6C95CF87, GameServerIPResponseMsg.class, null), // Game Server IP Response
|
|
|
|
GLOBALCHANNELMESSAGE(0x2bf03fd2, null, null), |
|
|
|
GLOBALCHANNELMESSAGE(0x2bf03fd2, null, null), |
|
|
@ -109,7 +109,7 @@ public enum Protocol { |
|
|
|
GUILDMEMBERONLINE(0x7B79EB3A, GuildEnterWorldMsg.class, null), // Send Enter World Message to Guild
|
|
|
|
GUILDMEMBERONLINE(0x7B79EB3A, GuildEnterWorldMsg.class, null), // Send Enter World Message to Guild
|
|
|
|
GUILDRANKCHANGE(0x0DEFB21F, ChangeRankMsg.class, ChangeRankHandler.class), // Change Rank
|
|
|
|
GUILDRANKCHANGE(0x0DEFB21F, ChangeRankMsg.class, ChangeRankHandler.class), // Change Rank
|
|
|
|
GUILDTREESTATUS(0x4B95FB85, GuildTreeStatusMsg.class, null), |
|
|
|
GUILDTREESTATUS(0x4B95FB85, GuildTreeStatusMsg.class, null), |
|
|
|
HIRELINGSERVICE(0xD3D93322,HirelingServiceMsg.class,HirelingServiceMsgHandler.class), |
|
|
|
HIRELINGSERVICE(0xD3D93322, HirelingServiceMsg.class, HirelingServiceMsgHandler.class), |
|
|
|
IGNORE(0xBD8881EE, IgnoreMsg.class, null), //client sent /ignore command
|
|
|
|
IGNORE(0xBD8881EE, IgnoreMsg.class, null), //client sent /ignore command
|
|
|
|
INITIATETRADEHUDS(0x667D29D8, OpenTradeWindowMsg.class, null), // Open Trade Window
|
|
|
|
INITIATETRADEHUDS(0x667D29D8, OpenTradeWindowMsg.class, null), // Open Trade Window
|
|
|
|
INVITEGROUP(0x004A2012, GroupInviteMsg.class, GroupInviteHandler.class), // Send/Receive/Deny Group Invite
|
|
|
|
INVITEGROUP(0x004A2012, GroupInviteMsg.class, GroupInviteHandler.class), // Send/Receive/Deny Group Invite
|
|
|
@ -168,7 +168,7 @@ public enum Protocol { |
|
|
|
RECOMMENDNATION(0x6D4579E9, RecommendNationMsg.class, RecommendNationMsgHandler.class), // Recommend as Ally/Enemy, error
|
|
|
|
RECOMMENDNATION(0x6D4579E9, RecommendNationMsg.class, RecommendNationMsgHandler.class), // Recommend as Ally/Enemy, error
|
|
|
|
RECYCLEPOWER(0x24033B67, RecyclePowerMsg.class, null), //Unlock power for reUse
|
|
|
|
RECYCLEPOWER(0x24033B67, RecyclePowerMsg.class, null), //Unlock power for reUse
|
|
|
|
REMOVECHAR(0x5D3F9739, DeleteCharacterMsg.class, null), // Delete Character
|
|
|
|
REMOVECHAR(0x5D3F9739, DeleteCharacterMsg.class, null), // Delete Character
|
|
|
|
REMOVEFRIEND(0xE0D5DB42,RemoveFriendMessage.class,RemoveFriendHandler.class), |
|
|
|
REMOVEFRIEND(0xE0D5DB42, RemoveFriendMessage.class, RemoveFriendHandler.class), |
|
|
|
REPAIRBUILDING(0xAF8C2560, RepairBuildingMsg.class, RepairBuildingMsgHandler.class), |
|
|
|
REPAIRBUILDING(0xAF8C2560, RepairBuildingMsg.class, RepairBuildingMsgHandler.class), |
|
|
|
REPAIROBJECT(0x782219CE, RepairMsg.class, null), //Repair Window Req/Ack, RepairObject item Req/Ack
|
|
|
|
REPAIROBJECT(0x782219CE, RepairMsg.class, null), //Repair Window Req/Ack, RepairObject item Req/Ack
|
|
|
|
REQUESTCONTENTS(0xA786B0A2, LootWindowRequestMsg.class, null), // MoveObjectToContainer Window Request
|
|
|
|
REQUESTCONTENTS(0xA786B0A2, LootWindowRequestMsg.class, null), // MoveObjectToContainer Window Request
|
|
|
@ -179,7 +179,7 @@ public enum Protocol { |
|
|
|
REQUESTTOTRADE(0x4D84259B, TradeRequestMsg.class, null), // Trade Request
|
|
|
|
REQUESTTOTRADE(0x4D84259B, TradeRequestMsg.class, null), // Trade Request
|
|
|
|
REQUESTTRADECANCEL(0xCB0C5735, RejectTradeRequestMsg.class, null), // Reject RequestToTrade
|
|
|
|
REQUESTTRADECANCEL(0xCB0C5735, RejectTradeRequestMsg.class, null), // Reject RequestToTrade
|
|
|
|
REQUESTTRADEOK(0xFFD29841, AcceptTradeRequestMsg.class, null), // Accept Trade Request
|
|
|
|
REQUESTTRADEOK(0xFFD29841, AcceptTradeRequestMsg.class, null), // Accept Trade Request
|
|
|
|
RESETAFTERDEATH(0xFDCBB98F,RespawnMsg.class, null), //Respawn Request/Response
|
|
|
|
RESETAFTERDEATH(0xFDCBB98F, RespawnMsg.class, null), //Respawn Request/Response
|
|
|
|
ROTATEMSG(0x57F2088E, RotateObjectMsg.class, null), |
|
|
|
ROTATEMSG(0x57F2088E, RotateObjectMsg.class, null), |
|
|
|
SAFEMODE(0x9CF3922A, SafeModeMsg.class, null), //Tell client they're in safe mode
|
|
|
|
SAFEMODE(0x9CF3922A, SafeModeMsg.class, null), //Tell client they're in safe mode
|
|
|
|
SCALEOBJECT(0xE2B392D9, null, null), // Adjust scale of object
|
|
|
|
SCALEOBJECT(0xE2B392D9, null, null), // Adjust scale of object
|
|
|
@ -210,7 +210,7 @@ public enum Protocol { |
|
|
|
TAXCITY(0xCD41EAA6, TaxCityMsg.class, TaxCityMsgHandler.class), |
|
|
|
TAXCITY(0xCD41EAA6, TaxCityMsg.class, TaxCityMsgHandler.class), |
|
|
|
TAXRESOURCES(0x4AD458AF, TaxResourcesMsg.class, TaxResourcesMsgHandler.class), |
|
|
|
TAXRESOURCES(0x4AD458AF, TaxResourcesMsg.class, TaxResourcesMsgHandler.class), |
|
|
|
TELEPORT(0x23E726EA, TeleportToPointMsg.class, null), // Teleport to point
|
|
|
|
TELEPORT(0x23E726EA, TeleportToPointMsg.class, null), // Teleport to point
|
|
|
|
TERRITORYCHANGE(0x6B388C8C,TerritoryChangeMessage.class, null), //Hey rich, look what I found? :)
|
|
|
|
TERRITORYCHANGE(0x6B388C8C, TerritoryChangeMessage.class, null), //Hey rich, look what I found? :)
|
|
|
|
TOGGLESITSTAND(0x624F3C0F, ToggleSitStandMsg.class, null), //Toggle Sit/Stand
|
|
|
|
TOGGLESITSTAND(0x624F3C0F, ToggleSitStandMsg.class, null), //Toggle Sit/Stand
|
|
|
|
TRADEADDGOLD(0x654ACB45, AddGoldToTradeWindowMsg.class, null), // Add Gold to Trade Window
|
|
|
|
TRADEADDGOLD(0x654ACB45, AddGoldToTradeWindowMsg.class, null), // Add Gold to Trade Window
|
|
|
|
TRADEADDOBJECT(0x55D363E9, AddItemToTradeWindowMsg.class, null), // Add an Item to the Trade Window
|
|
|
|
TRADEADDOBJECT(0x55D363E9, AddItemToTradeWindowMsg.class, null), // Add an Item to the Trade Window
|
|
|
@ -227,7 +227,7 @@ public enum Protocol { |
|
|
|
TRANSFERITEMFROMVAULTTOINVENTORY(0x0119A64D, TransferItemFromVaultToInventoryMsg.class, null), // Transfer Item from Vault to Inventory
|
|
|
|
TRANSFERITEMFROMVAULTTOINVENTORY(0x0119A64D, TransferItemFromVaultToInventoryMsg.class, null), // Transfer Item from Vault to Inventory
|
|
|
|
TRANSFERITEMTOBANK(0xD48C46FA, TransferItemFromInventoryToBankMsg.class, null), // Transfer Item from Inventory to Bank
|
|
|
|
TRANSFERITEMTOBANK(0xD48C46FA, TransferItemFromInventoryToBankMsg.class, null), // Transfer Item from Inventory to Bank
|
|
|
|
UNEQUIP(0xC6BFB907, TransferItemFromEquipToInventoryMsg.class, null), // Transfer Item from Equip to Inventory
|
|
|
|
UNEQUIP(0xC6BFB907, TransferItemFromEquipToInventoryMsg.class, null), // Transfer Item from Equip to Inventory
|
|
|
|
UNKNOWN(0x238C9259, UnknownMsg.class,null), |
|
|
|
UNKNOWN(0x238C9259, UnknownMsg.class, null), |
|
|
|
UPDATECHARORMOB(0xB6D78961, null, null), |
|
|
|
UPDATECHARORMOB(0xB6D78961, null, null), |
|
|
|
UPDATECLIENTALLIANCES(0xF3FEB5D4, null, GuildUnknownHandler.class), //AlliancesMsg
|
|
|
|
UPDATECLIENTALLIANCES(0xF3FEB5D4, null, GuildUnknownHandler.class), //AlliancesMsg
|
|
|
|
UPDATECLIENTINVENTORIES(0xE66F533D, UpdateInventoryMsg.class, null), //Update player inventory
|
|
|
|
UPDATECLIENTINVENTORIES(0xE66F533D, UpdateInventoryMsg.class, null), //Update player inventory
|
|
|
@ -247,14 +247,14 @@ public enum Protocol { |
|
|
|
WEIGHTINVENTORY(0xF1B6A85C, LootWindowResponseMsg.class, null), // MoveObjectToContainer Window Response
|
|
|
|
WEIGHTINVENTORY(0xF1B6A85C, LootWindowResponseMsg.class, null), // MoveObjectToContainer Window Response
|
|
|
|
WHOREQUEST(0xF431CCE9, WhoRequestMsg.class, null), // Request /who
|
|
|
|
WHOREQUEST(0xF431CCE9, WhoRequestMsg.class, null), // Request /who
|
|
|
|
WHORESPONSE(0xD7C36568, WhoResponseMsg.class, null), // Response /who
|
|
|
|
WHORESPONSE(0xD7C36568, WhoResponseMsg.class, null), // Response /who
|
|
|
|
REQUESTBALLLIST(0xE366FF64,RequestBallListMessage.class,RequestBallListHandler.class), |
|
|
|
REQUESTBALLLIST(0xE366FF64, RequestBallListMessage.class, RequestBallListHandler.class), |
|
|
|
SENDBALLENTRY(0xAC2B5EDC,SendBallEntryMessage.class,SendBallEntryHandler.class), |
|
|
|
SENDBALLENTRY(0xAC2B5EDC, SendBallEntryMessage.class, SendBallEntryHandler.class), |
|
|
|
UNKNOWN1(-263523523, Unknown1Msg.class,null), |
|
|
|
UNKNOWN1(-263523523, Unknown1Msg.class, null), |
|
|
|
DROPGOLD(1461654160,DropGoldMsg.class,null); |
|
|
|
DROPGOLD(1461654160, DropGoldMsg.class, null); |
|
|
|
|
|
|
|
|
|
|
|
public int opcode; |
|
|
|
public int opcode; |
|
|
|
private Class message; |
|
|
|
private final Class message; |
|
|
|
private Class handlerClass; |
|
|
|
private final Class handlerClass; |
|
|
|
public Constructor constructor; |
|
|
|
public Constructor constructor; |
|
|
|
public AbstractClientMsgHandler handler; |
|
|
|
public AbstractClientMsgHandler handler; |
|
|
|
|
|
|
|
|
|
|
@ -286,7 +286,7 @@ public enum Protocol { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static HashMap<Integer, Protocol> _protocolMsgByOpcode = new HashMap<>(); |
|
|
|
private static final HashMap<Integer, Protocol> _protocolMsgByOpcode = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
|
|
public static Protocol getByOpcode(int opcode) { |
|
|
|
public static Protocol getByOpcode(int opcode) { |
|
|
|
|
|
|
|
|
|
|
@ -302,7 +302,7 @@ public enum Protocol { |
|
|
|
|
|
|
|
|
|
|
|
for (Protocol protocol : Protocol.values()) { |
|
|
|
for (Protocol protocol : Protocol.values()) { |
|
|
|
|
|
|
|
|
|
|
|
if (_protocolMsgByOpcode.containsKey(protocol.opcode)){ |
|
|
|
if (_protocolMsgByOpcode.containsKey(protocol.opcode)) { |
|
|
|
Logger.error("Duplicate opcodes for " + protocol.name() + " and " + _protocolMsgByOpcode.get(protocol.opcode).name()); |
|
|
|
Logger.error("Duplicate opcodes for " + protocol.name() + " and " + _protocolMsgByOpcode.get(protocol.opcode).name()); |
|
|
|
} |
|
|
|
} |
|
|
|
_protocolMsgByOpcode.put(protocol.opcode, protocol); |
|
|
|
_protocolMsgByOpcode.put(protocol.opcode, protocol); |
|
|
@ -310,21 +310,21 @@ public enum Protocol { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static int FindNextValidOpcode(ByteBufferReader reader){ |
|
|
|
public static int FindNextValidOpcode(ByteBufferReader reader) { |
|
|
|
int startPos = reader.position(); |
|
|
|
int startPos = reader.position(); |
|
|
|
int bytesLeft = reader.remaining(); |
|
|
|
int bytesLeft = reader.remaining(); |
|
|
|
|
|
|
|
|
|
|
|
if (bytesLeft < 4) |
|
|
|
if (bytesLeft < 4) |
|
|
|
return startPos; |
|
|
|
return startPos; |
|
|
|
int nextPos = startPos; |
|
|
|
int nextPos = startPos; |
|
|
|
for (int i = 1; i< bytesLeft; i++ ){ |
|
|
|
for (int i = 1; i < bytesLeft; i++) { |
|
|
|
reader.position(nextPos); |
|
|
|
reader.position(nextPos); |
|
|
|
if (reader.remaining() < 4) |
|
|
|
if (reader.remaining() < 4) |
|
|
|
return reader.position(); |
|
|
|
return reader.position(); |
|
|
|
int newOpcode = reader.getInt(); |
|
|
|
int newOpcode = reader.getInt(); |
|
|
|
|
|
|
|
|
|
|
|
Protocol foundProtocol = Protocol.getByOpcode(newOpcode); |
|
|
|
Protocol foundProtocol = Protocol.getByOpcode(newOpcode); |
|
|
|
if (foundProtocol.equals(Protocol.NONE)){ |
|
|
|
if (foundProtocol.equals(Protocol.NONE)) { |
|
|
|
nextPos += 1; |
|
|
|
nextPos += 1; |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
@ -334,5 +334,5 @@ public static int FindNextValidOpcode(ByteBufferReader reader){ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return startPos; |
|
|
|
return startPos; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|