PDA

Просмотр полной версии : PartySmallWindowAll ReadS


kpa9pt
01.02.2012, 19:45
Здравствуйте.
Пишу скрипт, на проверку бафов у сопартийцев.
Решил вывести их ники на экран в lineage.
Пакет PartySmallWindowAll , там есть имена персонажей в пати. Первое имя считываю ReadS(18) а вот последующие координаты имён зависят от длинны имени.
Есть ли способ определить конец ReadS? чтоли или незнаю даже как это сказать.

Пытался сделать на подобии этого:


if (pck[j]+pck[j+1]+pck[j+2]=#$00#$00#$00) then //три раза 00 потому что в английских именах всегда идёт на подобии XX 00 XX 00 а дальше 00 00
begin
k:=j+2+1+52;
end;
//тут я догадался что l2phx определяет конец ReadS когда идёт в пакете 00 00


Но почемуто не работает правильно, и не могу определить причину...

Если же нету вариантов других то , могу прислать скрипт полностью , чтобы определить что там не так в определении следущего начала S строчки.

P.S.: Вот сам пакет...
4E B7 94 60 4B 00 00 00 00 05 00 00 00 B7 94 60 4B 4B 00 79 00 50 00 75 00 4D 00 61 00 4A 00 49 00 6F 00 00 00 50 00 00 00 50 00 00 00 CA 00 00 00 CA 00 00 00 42 00 00 00 42 00 00 00 05 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 93 2B 81 4C 50 00 6F 00 72 00 73 00 68 00 45 00 00 00 2E 0C 00 00 2E 0C 00 00 46 13 00 00 46 13 00 00 C9 05 00 00 C9 05 00 00 4B 00 00 00 75 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7D 63 50 4B 50 00 6F 00 72 00 73 00 68 00 31 00 00 00 3C 0D 00 00 3C 0D 00 00 79 14 00 00 79 14 00 00 C1 06 00 00 C1 06 00 00 4F 00 00 00 37 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 B8 60 4C 4D 00 75 00 72 00 62 00 65 00 6C 00 6C 00 61 00 00 00 38 08 00 00 38 08 00 00 BD 17 00 00 BD 17 00 00 37 12 00 00 37 12 00 00 53 00 00 00 62 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2A 6B 71 4B 54 00 69 00 61 00 6C 00 69 00 65 00 00 00 B8 11 00 00 B8 11 00 00 83 16 00 00 83 16 00 00 A5 10 00 00 F1 14 00 00 55 00 00 00 69 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 24 73 A1 4C E3 80 0F 00 02 00 00 00 00 00 F6 11 00 00 F6 11 00 00 DE 08 00 00 DE 08 00 00 45 00 00 00

Имена сопартийцев по порядку:
4B 00 79 00 50 00 75 00 4D 00 61 00 4A 00 49 00 6F 00 00 00

50 00 6F 00 72 00 73 00 68 00 45 00 00 00

50 00 6F 00 72 00 73 00 68 00 31 00 00 00 3C 0D 00 00

и так далее (5 имён + пет там я не понял что надо придумать:D)

alexteam
01.02.2012, 20:08
readmask ?

kpa9pt
01.02.2012, 21:06
4E=PartySmallWindowAll:d(ObjectID)d(LootDistributi on)d(ListSize:Loop.01.0013)d(MemberObjId)s(MemberN ame)d(CurrentCP)d(MaxCP)d(CurrentHP)d(MaxHP)d(Curr entMP)d(MaxMP)d(Level)d(ClassID:Get.ClassID)d(0)d( Race)d(0)

Голову сломал но так и не понял как через ReadMask прочесть первый S

ReadMask('ddddsdddddddddd',5,X); вот на что хватило фантазии:) что не правильно?



Такс немного больше разобрался, за что отвечает параметр 5 в моём примере?

supernewbie
01.02.2012, 21:33
4E=PartySmallWindowAll:d(ObjectID)d(LootDistributi on)d(ListSize:Loop.01.0022)d(MemberObjId)s(MemberN ame)d(CurrentCP)d(MaxCP)d(CurrentHP)d(MaxHP)d(Curr entMP)d(MaxMP)d(Level)d(ClassID:Get.ClassID)d(0)d( Race)d(0)d(0)d(PetOid=0 - skip next 7 values)d(PetNpcId)s(PetName)d(PetHp)d(PetMaxHP)d(P etMP)d(PetMaxMP)d(PetLevel)

var
values:array [0..100] of variant;
i,j:integer;

begin
j:=2;
ReadMask('ddd',j,values); //читаем статичные данные, в values[2] будет кол-во пати мемберов
for i:=0 to values[2]-1 do //цикл по всем пати мемберам
begin
ReadMask('dsddddddddddddd',j,values); //читаем инфу о пати мембере без пета
//тут вся куйня, распределение инфы по классам, etc
if values[14]<>0 then ReadMask('ddsddddd',j,values); //если пет есть (петИд не 0) - читаем инфу о пете
end;
end.

PS делал особо не проверяя, так что проверь формат, индексы, синтаксис и тд тп

kpa9pt
01.02.2012, 21:49
Всем спасибо, разобрался почти доконца, дальше сам:)

думаю у меня не получалось потому что массив был другой, не знал о существовании array of Variant