From e19b7bd3683bdccdac8f095d8bc8fc1c27e40230 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 25 Nov 2017 23:56:29 -0500 Subject: [PATCH] Start work on OP_MoveMultipleItems (RoF+) Currently it just kicks to prevent desyncs --- common/emu_oplist.h | 1 + common/patches/rof2_structs.h | 14 ++++++++++++++ utils/patches/patch_RoF.conf | 1 + utils/patches/patch_RoF2.conf | 1 + zone/client_packet.cpp | 6 ++++++ zone/client_packet.h | 1 + 6 files changed, 24 insertions(+) diff --git a/common/emu_oplist.h b/common/emu_oplist.h index 319517499..89e0126a8 100644 --- a/common/emu_oplist.h +++ b/common/emu_oplist.h @@ -340,6 +340,7 @@ N(OP_MOTD), N(OP_MoveCoin), N(OP_MoveDoor), N(OP_MoveItem), +N(OP_MoveMultipleItems), N(OP_MoveLogDisregard), N(OP_MoveLogRequest), N(OP_MultiLineMsg), diff --git a/common/patches/rof2_structs.h b/common/patches/rof2_structs.h index 28905dd4a..5aa11977f 100644 --- a/common/patches/rof2_structs.h +++ b/common/patches/rof2_structs.h @@ -1827,6 +1827,20 @@ struct MoveItem_Struct /*0028*/ }; +struct MultiMoveItemSub_Struct +{ +/*0000*/ InventorySlot_Struct from_slot; +/*0012*/ InventorySlot_Struct to_slot; +/*0024*/ uint32 number_in_stack; +/*0028*/ uint8 unknown[8]; +}; + +struct MultiMoveItem_Struct +{ +/*0000*/ uint32 count; +/*0004*/ MultiMoveItemSub_Struct moves[0]; +}; + // // from_slot/to_slot // -1 - destroy diff --git a/utils/patches/patch_RoF.conf b/utils/patches/patch_RoF.conf index f3d4249c0..074d5751d 100644 --- a/utils/patches/patch_RoF.conf +++ b/utils/patches/patch_RoF.conf @@ -248,6 +248,7 @@ OP_AutoAttack=0x0d14 OP_AutoAttack2=0x3912 OP_Consume=0x4692 OP_MoveItem=0x62a2 +OP_MoveMultipleItems=0x55ef OP_DeleteItem=0x3eb5 OP_DeleteCharge=0x2d5b OP_ItemPacket=0x5e0e diff --git a/utils/patches/patch_RoF2.conf b/utils/patches/patch_RoF2.conf index 420fcec70..dd58b3c11 100644 --- a/utils/patches/patch_RoF2.conf +++ b/utils/patches/patch_RoF2.conf @@ -247,6 +247,7 @@ OP_AutoAttack=0x109d OP_AutoAttack2=0x3526 OP_Consume=0x4b70 OP_MoveItem=0x32ee +OP_MoveMultipleItems=0x5623 OP_DeleteItem=0x18ad OP_DeleteCharge=0x01b8 OP_ItemPacket=0x368e diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 8efe55f2b..d336f7f0d 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -291,6 +291,7 @@ void MapOpcodes() ConnectedOpcodes[OP_MercenaryTimerRequest] = &Client::Handle_OP_MercenaryTimerRequest; ConnectedOpcodes[OP_MoveCoin] = &Client::Handle_OP_MoveCoin; ConnectedOpcodes[OP_MoveItem] = &Client::Handle_OP_MoveItem; + ConnectedOpcodes[OP_MoveMultipleItems] = &Client::Handle_OP_MoveMultipleItems; ConnectedOpcodes[OP_OpenContainer] = &Client::Handle_OP_OpenContainer; ConnectedOpcodes[OP_OpenGuildTributeMaster] = &Client::Handle_OP_OpenGuildTributeMaster; ConnectedOpcodes[OP_OpenInventory] = &Client::Handle_OP_OpenInventory; @@ -9855,6 +9856,11 @@ void Client::Handle_OP_MoveItem(const EQApplicationPacket *app) return; } +void Client::Handle_OP_MoveMultipleItems(const EQApplicationPacket *app) +{ + Kick(); // TODO: lets not desync though +} + void Client::Handle_OP_OpenContainer(const EQApplicationPacket *app) { // Does not exist in Ti client diff --git a/zone/client_packet.h b/zone/client_packet.h index c63a57825..1e7981ed9 100644 --- a/zone/client_packet.h +++ b/zone/client_packet.h @@ -204,6 +204,7 @@ void Handle_OP_MercenaryTimerRequest(const EQApplicationPacket *app); void Handle_OP_MoveCoin(const EQApplicationPacket *app); void Handle_OP_MoveItem(const EQApplicationPacket *app); + void Handle_OP_MoveMultipleItems(const EQApplicationPacket *app); void Handle_OP_OpenContainer(const EQApplicationPacket *app); void Handle_OP_OpenGuildTributeMaster(const EQApplicationPacket *app); void Handle_OP_OpenInventory(const EQApplicationPacket *app);