Server
Server copied to clipboard
Implement OP_MoveMultipleItems
This is available in all supported clients. RoF and RoF2 are the only clients that send this packet, the rest however will accept it (and use it internally w/o sending for Bandolier)
Here are some examples (older clients were edited to incorrectly send them while using bandolier :P)
Titanium
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 186]
--- 0: 05 00 00 00 00 00 00 00 - 16 00 00 00 01 00 00 00 | ................
--- 16: 00 00 00 00 00 00 00 00 - 00 00 00 00 0D 00 00 00 | ................
--- 32: FF FF FF FF 00 00 00 00 - 00 00 00 00 0B 00 00 00 | ................
--- 48: FF FF FF FF 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
--- 64: 0B 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 80: 15 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 00 00 00 00 15 00 00 00 - FF FF FF FF 00 00 00 00 | ................
--- 112: 00 00 00 00 0D 00 00 00 - FF FF FF FF 00 00 00 00 | ................
--- 128: 00 00 00 00 00 00 00 00 - 16 00 00 00 01 00 00 00 | ................
--- 144: 00 00 00 00 00 00 00 00 - 0E 00 00 00 FF FF FF FF | ................
--- 160: 00 00 00 00 00 00 00 00 - 00 00 00 00 1D 00 00 00 | ................
--- 176: FF FF FF FF 00 00 00 00 | ........
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 186]
--- 0: 05 00 00 00 00 00 00 00 - 16 00 00 00 01 00 00 00 | ................
--- 16: 00 00 00 00 00 00 00 00 - 00 00 00 00 0D 00 00 00 | ................
--- 32: FF FF FF FF 00 00 00 00 - 00 00 00 00 1D 00 00 00 | ................
--- 48: FF FF FF FF 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
--- 64: 0E 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 80: 0B 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 00 00 00 00 0B 00 00 00 - FF FF FF FF 00 00 00 00 | ................
--- 112: 00 00 00 00 15 00 00 00 - FF FF FF FF 00 00 00 00 | ................
--- 128: 00 00 00 00 00 00 00 00 - 15 00 00 00 FF FF FF FF | ................
--- 144: 00 00 00 00 00 00 00 00 - 0D 00 00 00 FF FF FF FF | ................
--- 160: 00 00 00 00 00 00 00 00 - 00 00 00 00 16 00 00 00 | ................
--- 176: 01 00 00 00 00 00 00 00 | ........
These are swapping a sword and board for a 2h then back. Each set is 36 bytes
Titanium with an ammo slot with a stack and one without
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 186]
--- 0: 05 00 00 00 00 00 00 00 - 0D 00 00 00 FF FF FF FF | ................
--- 16: 00 00 00 00 00 00 00 00 - 00 00 00 00 0D 00 00 00 | ................
--- 32: FF FF FF FF 00 00 00 00 - 00 00 00 00 0E 00 00 00 | ................
--- 48: FF FF FF FF 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
--- 64: 0E 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 80: 0B 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 00 00 00 00 0B 00 00 00 - FF FF FF FF 00 00 00 00 | ................
--- 112: 00 00 00 00 16 00 00 00 - 04 00 00 00 00 00 00 00 | ................
--- 128: 01 00 00 00 00 00 00 00 - 15 00 00 00 FF FF FF FF | ................
--- 144: 00 00 00 00 00 00 00 00 - 15 00 00 00 FF FF FF FF | ................
--- 160: 00 00 00 00 00 00 00 00 - 00 00 00 00 16 00 00 00 | ................
--- 176: 01 00 00 00 00 00 00 00 | ........
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 186]
--- 0: 05 00 00 00 00 00 00 00 - 0D 00 00 00 FF FF FF FF | ................
--- 16: 00 00 00 00 00 00 00 00 - 00 00 00 00 0D 00 00 00 | ................
--- 32: FF FF FF FF 00 00 00 00 - 00 00 00 00 0E 00 00 00 | ................
--- 48: FF FF FF FF 00 00 00 00 - 00 00 00 00 00 00 00 00 | ................
--- 64: 0E 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 80: 0B 00 00 00 FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 00 00 00 00 0B 00 00 00 - FF FF FF FF 00 00 00 00 | ................
--- 112: 00 00 00 00 16 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 128: 00 00 00 00 00 00 00 00 - 15 00 00 00 FF FF FF FF | ................
--- 144: 00 00 00 00 00 00 00 00 - 15 00 00 00 FF FF FF FF | ................
--- 160: 00 00 00 00 01 00 00 00 - 00 00 00 00 16 00 00 00 | ................
--- 176: 04 00 00 00 00 00 00 00 | ........
Titanium struct looks like:
struct MultiMoveItemSub_Struct
{
/*0000*/ uint32 from_type;
/*0004*/ uint32 from_slot;
/*0008*/ int32 from_sub_slot;
/*0012*/ uint32 unknown1;
/*0016*/ uint32 number_in_stack; // so the amount we are moving from the source
/*0020*/ uint32 to_type;
/*0024*/ uint32 to_slot;
/*0028*/ int32 to_sub_slot;
/*0032*/ uint32 unknown3;
};
struct MultiMoveItem_Struct
{
/*0000*/ uint32 count;
/*0004*/ MultiMoveItemSub_Struct moves[0];
};
SoF
First is 1h + shield to 2h, Second is back
Each one is 44 bytes
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 226]
--- 0: 05 00 00 00 00 00 00 00 - 1E 00 00 00 FF FF FF FF | ................
--- 16: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 32: 0D 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 48: 00 00 00 00 0B 00 00 00 - FF FF FF FF FF FF FF FF | ................
--- 64: 00 00 00 00 01 00 00 00 - 00 00 00 00 0B 00 00 00 | ................
--- 80: FF FF FF FF FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 16 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 112: 01 00 00 00 00 00 00 00 - 16 00 00 00 FF FF FF FF | ................
--- 128: FF FF FF FF 00 00 00 00 - 00 00 00 00 0D 00 00 00 | ................
--- 144: FF FF FF FF FF FF FF FF - 00 00 00 00 01 00 00 00 | ................
--- 160: 00 00 00 00 17 00 00 00 - 01 00 00 00 FF FF FF FF | ................
--- 176: 00 00 00 00 00 00 00 00 - 0E 00 00 00 FF FF FF FF | ................
--- 192: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 208: 1E 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 226]
--- 0: 05 00 00 00 00 00 00 00 - 17 00 00 00 01 00 00 00 | ................
--- 16: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 32: 0D 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 48: 00 00 00 00 1E 00 00 00 - FF FF FF FF FF FF FF FF | ................
--- 64: 00 00 00 00 01 00 00 00 - 00 00 00 00 0E 00 00 00 | ................
--- 80: FF FF FF FF FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 0B 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 112: 01 00 00 00 00 00 00 00 - 0B 00 00 00 FF FF FF FF | ................
--- 128: FF FF FF FF 00 00 00 00 - 00 00 00 00 16 00 00 00 | ................
--- 144: FF FF FF FF FF FF FF FF - 00 00 00 00 01 00 00 00 | ................
--- 160: 00 00 00 00 16 00 00 00 - FF FF FF FF FF FF FF FF | ................
--- 176: 00 00 00 00 00 00 00 00 - 0D 00 00 00 FF FF FF FF | ................
--- 192: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 208: 17 00 00 00 01 00 00 00 - FF FF FF FF 00 00 00 00 | ................
Now for ones with a stack involved, moving 1 from a bag to ammo slot then swapping back
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 226]
--- 0: 05 00 00 00 00 00 00 00 - 0D 00 00 00 FF FF FF FF | ................
--- 16: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 32: 0D 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 48: 00 00 00 00 0E 00 00 00 - FF FF FF FF FF FF FF FF | ................
--- 64: 00 00 00 00 01 00 00 00 - 00 00 00 00 0E 00 00 00 | ................
--- 80: FF FF FF FF FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 0B 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 112: 01 00 00 00 00 00 00 00 - 0B 00 00 00 FF FF FF FF | ................
--- 128: FF FF FF FF 00 00 00 00 - 00 00 00 00 17 00 00 00 | ................
--- 144: 04 00 00 00 FF FF FF FF - 00 00 00 00 01 00 00 00 | ................
--- 160: 00 00 00 00 16 00 00 00 - FF FF FF FF FF FF FF FF | ................
--- 176: 00 00 00 00 00 00 00 00 - 16 00 00 00 FF FF FF FF | ................
--- 192: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 208: 17 00 00 00 03 00 00 00 - FF FF FF FF 00 00 00 00 | ................
[Packet :: Client -> Server (Dump)] [OP_MoveMultipleItems - 0x0155] [Size: 226]
--- 0: 05 00 00 00 00 00 00 00 - 0D 00 00 00 FF FF FF FF | ................
--- 16: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 32: 0D 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 48: 00 00 00 00 0E 00 00 00 - FF FF FF FF FF FF FF FF | ................
--- 64: 00 00 00 00 01 00 00 00 - 00 00 00 00 0E 00 00 00 | ................
--- 80: FF FF FF FF FF FF FF FF - 00 00 00 00 00 00 00 00 | ................
--- 96: 0B 00 00 00 FF FF FF FF - FF FF FF FF 00 00 00 00 | ................
--- 112: 01 00 00 00 00 00 00 00 - 0B 00 00 00 FF FF FF FF | ................
--- 128: FF FF FF FF 00 00 00 00 - 00 00 00 00 17 00 00 00 | ................
--- 144: 03 00 00 00 FF FF FF FF - 00 00 00 00 01 00 00 00 | ................
--- 160: 00 00 00 00 16 00 00 00 - FF FF FF FF FF FF FF FF | ................
--- 176: 00 00 00 00 00 00 00 00 - 16 00 00 00 FF FF FF FF | ................
--- 192: FF FF FF FF 00 00 00 00 - 01 00 00 00 00 00 00 00 | ................
--- 208: 17 00 00 00 04 00 00 00 - FF FF FF FF 00 00 00 00 | ................
SoF (until UF?) struct looks like:
struct MultiMoveItemSub_Struct
{
/*0000*/ uint32 from_type;
/*0004*/ uint32 from_slot;
/*0008*/ int32 from_sub_slot;
/*0012*/ int32 from_aug_slot;
/*0016*/ uint32 unknown1;
/*0020*/ uint32 number_in_stack; // so the amount we are moving from the source
/*0024*/ uint32 to_type;
/*0028*/ uint32 to_slot;
/*0032*/ int32 to_sub_slot;
/*0036*/ int32 to_aug_slot;
/*0040*/ uint32 unknown3;
};
struct MultiMoveItem_Struct
{
/*0000*/ uint32 count;
/*0004*/ MultiMoveItemSub_Struct moves[0];
};
RoF2
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];
};
https://github.com/EQEmu/Server/commit/b80dd8007ea42934e9c69fd653b5d147562f83c9