type
PPacket = ^TPacket;
TPacket = packed record
Len: cardinal;
Buf: array [0 .. 63] of byte;
end;
procedure SendCall(aPacket: PPacket); stdcall;
var
addr: Pointer;
size, Buf: DWORD;
begin
addr := Pointer(PW_SEND_PACK_CALL);
size := PDword(aPacket)^;
Buf := DWORD(aPacket) + 4;
asm
pushad
mov eax, dword ptr [PW_BASE_ADDRESS]
mov ecx, dword ptr [eax + $20]
push size
push buf
call addr
popad
end;
end;
function HexToInt(HexNum: string): LongInt;
begin
Result := StrToInt('$' + HexNum);
end;
procedure Deselect;
var
lPacket: TPacket;
pckHead: word;
begin
// Packet: 0800
// Length: 2
lPacket.Len := 2;
pckHead := $08;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure Logout(ToAcount: Integer = 1);
var
lPacket: TPacket;
pckHead: word;
AccHex: LongInt;
begin
// Packet: 0100 - and 0 or 1 in hex
// 0 - Logout full
// 1 - Logout to char select
// Size:= 6
if (ToAcount > 1) or (ToAcount < 0) then
ToAcount := 1;
lPacket.Len := 6;
pckHead := $01;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
AccHex := HexToInt(IntToHex(ToAcount, 8));
copymemory(@lPacket.Buf[2], @AccHex, sizeOf(cardinal));
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure StartMedit;
var
lPacket: TPacket;
pckHead: word;
begin
// Packet: 2E00
// Length: 2
lPacket.Len := 2;
pckHead := $2E;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure StopMedit;
var
lPacket: TPacket;
pckHead: word;
begin
// Packet: 2F00
// Length: 2
lPacket.Len := 2;
pckHead := $2F;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure UseAction(Action: Integer = 0);
var
lPacket: TPacket;
pckHead: word;
AcHex: LongInt;
begin
// Packet: 3000 - and 0 for 26 in hex
// Size:= 4
if (Action > 26) or (Action < 0) then
Action := 0;
lPacket.Len := 4;
pckHead := $30;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
AcHex := HexToInt(IntToHex(Action, 4));
copymemory(@lPacket.Buf[2], @AcHex, sizeOf(cardinal));
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure PartySetting(Recruit, JobId, lvl, Slogan: Integer);
var
lPacket: TPacket;
pckHead: word;
JobHex, RecHex, LvlHex, SlogHex: LongInt;
begin
{ ;//Changes party searching settings.
;//recruit=1 means recruiting party
;//recruit=0 means searching for party
;//jobId=0 & lvl=0 & no slogan -> slogan=0x0
;//jobId<>0 & lvl<>0 & no slogan -> slogan=0x40
;//jobId=0 & lvl=0 & slogan -> slogan=0x80
;//jobId<>0 & lvl<> 0 & slogan -> slogan=0xC0 }
// Size: 10;
// Obs: Works but not show

JobHex := HexToInt(IntToHex(JobId, 2));
RecHex := HexToInt(IntToHex(Recruit, 2));
LvlHex := HexToInt(IntToHex(lvl, 2));
SlogHex := HexToInt(IntToHex(Slogan, 2));
lPacket.Len := 10;
pckHead := $3F;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
copymemory(@lPacket.Buf[2], @JobHex, sizeOf(cardinal));
copymemory(@lPacket.Buf[3], @LvlHex, sizeOf(cardinal));
copymemory(@lPacket.Buf[4], @RecHex, sizeOf(cardinal));
copymemory(@lPacket.Buf[5], @SlogHex, sizeOf(cardinal));
lPacket.Buf[6] := $00;
lPacket.Buf[7] := $00;
lPacket.Buf[8] := $00;
lPacket.Buf[9] := $00;
lPacket.Buf[10] := $00;
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure DropGold(Quant: Integer = 0);
var
lPacket: TPacket;
pckHead: word;
QuantHex: LongInt;
begin
if Quant <= 0 then
exit;
{ $packet = '1400'
$packet &= _hex($amount)
$packetSize = 6 }
lPacket.Len := 6;
pckHead := $14;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
QuantHex := HexToInt(IntToHex(Quant, 8));
copymemory(@lPacket.Buf[2], @QuantHex, sizeOf(cardinal));
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure RegularAttack(AfterSkill: Integer = 1);
var
lPacket: TPacket;
pckHead: word;
AftHex: LongInt;
begin
{ $packet = '0300'
$packet &= _hex($afterSkill, 2)
$packetSize = 3 }
lPacket.Len := 3;
pckHead := $03;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
AftHex := HexToInt(IntToHex(AfterSkill, 2));
copymemory(@lPacket.Buf[2], @AftHex, sizeOf(cardinal));
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;
procedure Target(IDTarget: DWORD);
var
lPacket: TPacket;
pckHead: word;
TarHex: LongInt;
begin
{ $packet = '0200'
$packet &= _hex($targetId)
$packetSize = 6 }
lPacket.Len := 6;
pckHead := $02;
copymemory(@lPacket.Buf[0], @pckHead, sizeOf(pckHead));
lPacket.Buf[1] := $00;
TarHex := HexToInt(IntToHex(IDTarget, 8));
copymemory(@lPacket.Buf[2], @TarHex, sizeOf(cardinal));
InjectFunc(wh, @SendCall, @lPacket, sizeOf(lPacket));
end;