Eh no, they're just implementing more and more jam messages, since 1 year or so. It's not that hard to write a wrapper class for jam messages and reversing the structures, WoW does the rest for you.
Here's a little example, I will not post my main wrapper class, but maybe you get the idea.
Code:
unit Jam.Example;
interface
uses
WoWExt.JamMessage;
type
CJamExample = class(CJamMessage)
private type
// 5.2
TJamCliSomeExample = packed record
npc: UInt64;
blablaId: Integer;
unk: Integer;
end;
private
FJamStruct: TJamCliSomeExample;
public
constructor Create();
procedure Example(const npc: UInt64; blablaId: Integer);
end;
implementation
uses
WoWExt.Defines;
constructor CJamExample.Create();
begin
inherited Create(Pointer(off_Jam_Construct_Example), Pointer(off_Jam_Destruct_MultiplePackets));
end;
procedure CJamExample.Example(const npc: UInt64; blablaId: Integer);
begin
FJamStruct.npc := npc;
FJamStruct.blablaId:= blablaId;
FJamStruct.unk := 1;
SetStruct(FJamStruct, SizeOf(FJamStruct));
Send(); // call clientservices::send
end;
end.
A few techical details:
- Every jam message/packet has it own constructor, which I'm calling
- I'm providing a buffer of 10kb for the created class (which is more than enough)
- The packet data begins at 0x10 in your buffer
- I move my data into the right position. The structures can be easily reversed, I prefer the jam put functions. Just search for the opcode and you'll find them. Since 5.2 you have to jump back to the vtable to find the rest of the put function - easy step
- Call ClientServices::Send with a pointer to your buffer to let WoW do the dirty work (calling the put function, sending the packet)
No need to deal with the xor, bitpack crap.