Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Разработка
Войти через OpenID

Разработка Раздел для совместной разработки/доработки программы

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 02.07.2009, 22:01   #1
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Tип: 0x62 (SystemMessage)
Pазмер: 43+2
Время прихода: 22:28:29:140
0002 d MsgID: $c1 получает от цели $c2 $s3 урона. ID:2262 (0x08D6)
0006 d typesCount: 3 (0x00000003)
0008 d typePar: тип параметра, может принимать значения:

0 - значит это строка (подставляеться вместо $cx)
1 - просто числовое значение (integer 4 байта) (подставляеться вместо $sx)
2 - id NPC (integer 4 байта) (подставляеться вместо $cx)
3 - id предмета (integer 4 байта) (подставляеться вместо $sx)
4 - id скила (integer 4 байта + ещё 4 байта которые я игнорирую) (подставляеться вместо $sx)
7 - где то видел но не нашел этого пакета в логах (12 байт)

могут быть и другие значения типов параметров, но мне пока не попадались.

x - это порядковый номер параметра, все значения в пакете идут по порядку как в строке.

Ну а потом идет собственно само значение и так по кругу typesCount раз.

Теперь мой вариант как прочитать этот пакет:

delphi Код:
var   lastSystemMessage: record     msgID: integer;     msgUnformatedString: string;     msgText: string;   end; function TL2WorldData.GetL2SystemMessage(const pck: string): boolean; var   i, j: integer;   typesCount: integer;   parType: integer;   st: string;   objSt: string;   sPar: string;   iPar: integer; begin   Result:= false;   if pck[1] <> #$62 then exit;   i:= 2;   lastSystemMessage.msgID := ReadD(pck, i);   typesCount:= ReadD(pck, i);   lastSystemMessage.msgUnformatedString:= sysMsgIdList.Values[IntToStr(lastSystemMessage.msgID)];   st:= lastSystemMessage.msgUnformatedString;   for j:= 0 to typesCount - 1 do   begin     parType:= ReadD(pck, i);     case parType of       0: begin         sPar:= ReadS(pck, i);         st:= AnsiReplaceStr(st, '$c' + IntToStr(j + 1), sPar);       end;       1: begin         iPar:= ReadD(pck, i);         st:= AnsiReplaceStr(st, '$s' + IntToStr(j + 1), IntToStr(iPar));       end;       2: begin         iPar:= ReadD(pck, i);         objSt:= NpcIdList.Values[IntToStr(iPar - 1000000)];         st:= AnsiReplaceStr(st, '$c' + IntToStr(j + 1), objSt);       end;       3: begin         iPar:= ReadD(pck, i);         objSt:= ItemIdList.Values[IntToStr(iPar)];         st:= AnsiReplaceStr(st, '$s' + IntToStr(j + 1), objSt);       end;       4: begin         iPar:= ReadD(pck, i);         objSt:= SkillIDList.Values[IntToStr(iPar)];         st:= AnsiReplaceStr(st, '$s' + IntToStr(j + 1), objSt);         inc(i, 4);       end;       7: begin         inc(i, 12);       end;       else       begin         SendMSG('Неизвестный идентефикатор параметра в пакета SystemMesage (ID: '           + IntToStr(lastSystemMessage.msgID) + ') '  + IntToStr(parType));         Exit;// выходим дабы не наделать горя, так как неизвестно сколько байт считывать       end;     end;   end;   lastSystemMessage.msgText:= st;   Result:= true; end;

Последний раз редактировалось Yegor, 02.07.2009 в 22:07.
Yegor вне форума   Ответить с цитированием
За это сообщение Yegor нажился спасибкой от:
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Разработка



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 06:41.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!