Показать сообщение отдельно
Старый 09.04.2009, 18:27   #8
Местный
 
Аватар для PanAm
 
Регистрация: 18.01.2008
Сообщений: 286
Сказал Спасибо: 24
Имеет 133 спасибок в 80 сообщенях
PanAm
По умолчанию

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.

Последний раз редактировалось PanAm, 09.04.2009 в 18:33. Причина: Добавлено сообщение
PanAm вне форума   Ответить с цитированием