Grinch, смещения в пакетах тоже константы, также можно прописать и сложные смещения, например для чаринфо смещение до имени - 22, от конца имени до титула +152 (для примера).
http://coderx.ru/showpost.php?p=24466&postcount=4
можно переписать так
delphi Код:
//Константы для С4
Const
PCKID_CHARINFO = #$03;
CHARINFO_NAME_OFFSET =22;
CHARINFO_CLASSID_OFFSET = 8; //+8 от конца имени
CHARINFO_TITLE_OFFSET = 144; //+144 от класса
var
i,ClassID:integer;
Title:String;
ClassName: TStringList; //названия классов
procedure Init; //Вызывается при включении скрипта
begin
ClassName :=TStringList.Create;
ClassName.LoadFromFile('Scripts\ClassName.ini'); //загрузка из файла
end;
procedure Free; //Вызывается при выключении скрипта
begin
ClassName.free;
end;
begin
if FromServer and (pck[1]=PCKID_CHARINFO) then begin
i:=CHARINFO_NAME_OFFSET; //пропускаем
ReadS(i); //пропускаем ник
i:=i+CHARINFO_CLASSID_OFFSET; //пропускаем
ClassID:=ReadD(i); //получаем профу
Title:=ClassName.Strings[ClassID]; //в титл пишем профу
i:=i+CHARINFO_TITLE_OFFSET; //пропускаем
buf := copy(pck,1,i-1); //копируем пакет до титла в буфер
ReadS(i); //находим конец титла
WriteS(Title); //вставляем в буфер новый титл
buf := buf+copy(pck,i,length(pck)-1); //копируем в буфер остаток пакета
pck := buf; //меняем пакет
end;
end.