Ребята, помогите, некак не могу разобраться. Скрипт относится к дешифрации пакетов. Нужно увеличить число длинной 4 байта, находящееся в массиве байтов, на определенную величину. В Delphi все просто:
delphi Код:
Inc(PLongWord(@Key[0])^,size);
А как это сделать в fastscript? Вот сам скрипт, проблема в процедуре DecryptPacket.
delphi Код:
var
frm:Tform;
memo:Tmemo;
initmode: boolean;
packet, stroka:string;
key: array [0..7] of byte;
KeyConst: array [0..7] of byte;
procedure Init; //Вызывается при включении скрипта
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.align:=alBottom;
frm.Width:=700;
frm.Height:=200;
frm.FormStyle:=FsStayOnTop;
frm.Show;
memo :=TMemo.create(nil);
memo.parent:=frm;
memo.align:=alClient;
memo.WordWrap:=false;
memo.ScrollBars:=ssBoth;
initmode:= true;
packet:='';
stroka:='';
KeyConst[0]:= $84;
KeyConst[1]:= $73;
KeyConst[2]:= $66;
KeyConst[3]:= $E4;
KeyConst[4]:= $64;
KeyConst[5]:= $63;
KeyConst[6]:= $60;
KeyConst[7]:= $60;
end;
procedure Free; //Вызывается при выключении скрипта
begin
memo.free;
frm.Free;
end;
function inttostrhex (number: byte) : string;
const
hexdigit = '0123456789ABCDEF';
var
i, d1, d2: integer;
begin
d1:=number shr 4;
d2:=number - (d1 shl 4);
result:= hexdigit[(d1 and $F)+1];
result:= result + hexdigit[(d2 and $F)+1];
end;
function PackettoStr : string;
var
i, size: integer;
strochka: string;
begin
strochka:='';
size:=length(packet);
if size > 50 then size := 50;
for i:=1 to size do
begin
strochka:= strochka + inttostrhex(ord(packet[i])) + ' ';
end;
result:= strochka;
end;
procedure KeyPacket;
var
i,n: byte;
begin
for i:=0 to 7 do
begin
key[i]:= ReadC(i+3) xor KeyConst[i];
end;
end;
procedure DecryptPacket;
var
i, size: integer;
begin
size:=length(packet);
for i:=size downto 2 do
packet[i]:=chr(ord(packet[i]) xor Key[(i-1) and 7] xor ord(packet[i-1]));
if size<>0 then packet[1]:= chr(ord(packet[1]) xor Key[0]);
//ВОТ ТУТ ПРОБЛЕМА КАК ЭТО СДЕЛАТЬ?
//Inc(PLongWord(@Key[0])^,size);
// или
//IncasInteger(key, 0, size);
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck = '' then exit;
if InitMode and FromServer then
begin
if pck[1] = #$2E then
begin
KeyPacket;
InitMode:= false;
end;
exit;
end;
if not InitMode and FromServer then
begin
packet:=pck;
DecryptPacket;
stroka:= PackettoStr;
memo.lines.add(stroka);
end;
end.
Добавлено через 17 часов 6 минут
Тему АП!