klemberg, для лучшего отображения расшифровки пакета можно в packetsT0.ini заменить на это
Код:
53=PledgeShowMemberListAll:d(mainOrSubpledge)d(clanID)d(pledgeType)s(clanName)s(LeaderName)d(clanCrestId)d(clanLvl)d(hasCastle)d(hasHideOut)d(Rank)d(reputation)d(d)d(d)d(AllyID)s(AllyName)d(AllyCrestId)d(isAtWar)d(memberCount:For.0007)s(memberName)d(memLvl)d(memClassId:Get.ClassID)d(d)d(memObjId)d(isOnLine)d(d)
54=PledgeShowMemberListUpdate:s(playerName)d(Lvl)d(ClassId:Get.ClassID)d(d)d(objectID)d(isOnLine)d(pledgeType)d(hasSponsor)
55=PledgeShowMemberListAdd:s(Name)d(Lvl)d(ClassId:Get.ClassID)d(d)d(d)d(isOnLine)d(pledgeType)
Код:
[Начало повторяющегося блока 1/21]
0100 s memberName: pendurka
0118 d memLvl: 66
0122 d memClassId: Bounty Hunter ID:55 (0x0037)
0126 d d: 0
0130 d memObjId: 272074089
0134 d isOnLine: 0
0138 d d: 0
[Конец повторяющегося блока 1/21]
[Начало повторяющегося блока 2/21]
0142 s memberName: shandaris
0162 d memLvl: 76
0166 d memClassId: Maestro ID:118 (0x0076)
0170 d d: 0
0174 d memObjId: 268629906
0178 d isOnLine: 1
0182 d d: 0
[Конец повторяющегося блока 2/21]
Вот скрипт (без проверки на работоспособность) по сбору данных MemberList
delphi Код:
const
max=50;
var
BaseMemberName: array[1..max] of string;
BaseMemberList: array[1..max, 1..2] of integer;
{
1-memLvl
2-memClassId
}
procedure Init; //Вызывается при включении скрипта
begin
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure MemberList;
{Создаем базу
Tип: 0x53 (PledgeShowMemberListAll)
Pазмер: 981+2
Время прихода: 13:22:34:140
0002 d mainOrSubpledge: 0 (0x00000000)
0006 d clanID: 271334376 (0x102C3BE8)
0010 d pledgeType: 0 (0x00000000)
0014 s clanName: UMIX
0024 s LeaderName: oopsarin
0042 d clanCrestId: 272491961 (0x103DE5B9)
0046 d clanLvl: 6 (0x00000006)
0050 d hasCastle: 0 (0x00000000)
0054 d hasHideOut: 61 (0x0000003D)
0058 d Rank: 0 (0x00000000)
0062 d reputation: 6180 (0x00001824)
0066 d d: 0 (0x00000000)
0070 d d: 0 (0x00000000)
0074 d AllyID: 271334376 (0x102C3BE8)
0078 s AllyName: UMIX
0088 d AllyCrestId: 272490996 (0x103DE1F4)
0092 d isAtWar: 0 (0x00000000)
0096 d memberCount: 21 (0x00000015)
[Начало повторяющегося блока 1/21]
0100 s memberName: pendurka
0118 d memLvl: 66
0122 d memClassId: Bounty Hunter ID:55 (0x0037)
0126 d d: 0
0130 d memObjId: 272074089
0134 d isOnLine: 0
0138 d d: 0
[Конец повторяющегося блока 1/21]
[Начало повторяющегося блока 2/21]
0142 s memberName: shandaris
0162 d memLvl: 76
0166 d memClassId: Maestro ID:118 (0x0076)
0170 d d: 0
0174 d memObjId: 268629906
0178 d isOnLine: 1
0182 d d: 0
[Конец повторяющегося блока 2/21]
[Начало повторяющегося блока 3/21]
0186 s memberName: evacuator
0206 d memLvl: 80
0210 d memClassId: Doomcryer ID:116 (0x0074)
0214 d d: 0
0218 d memObjId: 269309061
0222 d isOnLine: 1
0226 d d: 0
[Конец повторяющегося блока 3/21]
}
var
i, j, k: integer;
memberCount: integer;
begin
j:=96; //смещение для memberCount
memberCount:=ReadD(j); //количество итемов не должно превышать max!
for i:=1 to max do
begin
if (i<=memberCount) then begin
BaseMemberName[i]:=ReadS(j); //memberName
BaseMemberList[i,1]:=ReadD(j); //memLvl
BaseMemberList[i,2]:=ReadD(j); //memClassId
inc(j,16);
end else begin
for k:=1 to 2 do BaseMemberList[i,k]:=0; // забиваем нулями
BaseMemberName[i]:=''; //стираем
end;
end;
end;
//******************************************************************************
{
основная часть скрипта, вызывается при приходе каждого пакета, если скрипт включен
}
//******************************************************************************
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
if FromServer then
begin
case pck[1] of
//************************************************************************
#$53: MemberList; //пакет 0x53 (PledgeShowMemberListAll)
end;
end;
end.