Контрольная сумма считается для пакета начиная с кода типа пакета (исключаем первые два байта длины пакета) и заканчивая адресом предшествующим началу контрольной суммы.
Код:
procedure build_RequestServerList();
begin
{RequestServerList
Формат:
1A 00 // Длина
05 // Тип
XX XX XX XX // SessionKey1_FistPart из LoginOk
XX XX XX XX // SessionKey1_SecondPart из LoginOk
04 00 00 00 00 00 00
XX XX XX XX // чексумма 00 00 00 00}
InitPkt; //инициализируем пакет
WriteW($1a);//длина пакета 26
WriteID($05);
WriteD(SessionKey1_FistPart);
WriteD(SessionKey1_SecondPart);
WriteB($04);
//WriteW($0);
//WriteB($0);
pos:=18; WriteD(pkt_ckecksum(2,16)); // чексумма
//WriteD($0); //"\x00\x00\x00\x00";
//к.сумма считается для блока начиная со смещ. 2, длиной 16 байт
//add_ckecksum(2,16);
end;