Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Работа над Goddess of Destruction (part 6) (https://forum.zone-game.info/showthread.php?t=31771)

Gaikotsu 21.12.2013 22:38

Re: Работа над Goddess of Destruction (part 6)
 
неужели никто не знает? или просто не хочется делиться такой инфой?

Добавлено через 49 минут
уже не надо - сам выяснил методом тыка

EventTrigger 20140700

darkevil 21.12.2013 23:29

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от Gaikotsu (Сообщение 340892)
неужели никто не знает? или просто не хочется делиться такой инфой?

Добавлено через 49 минут
уже не надо - сам выяснил методом тыка

EventTrigger 20140700

Не видел, так бы поделился естественно. :(

Hint 22.12.2013 15:35

Re: Работа над Goddess of Destruction (part 6)
 
В Epeisodion сместились body_part:
Код:

Array
(
    [0] => 0
    [1] => 1
    [3] => 3
    [4] => 4
    [6] => 6
    [7] => 7
    [8] => 8
    [9] => 9
    [10] => 10
    [12] => 12
    [19] => 19
    [20] => 27
    [21] => 28
    [22] => 29
    [23] => 30
    [24] => 31
    [25] => 32
    [26] => 33
    [27] => 34
    [28] => 35
)

Добавлены типы 20 (брошь) и 21 (камень).

Hint 25.12.2013 17:58

Re: Работа над Goddess of Destruction (part 6)
 
PartySmallWindowUpdate для Epeisodion (575):
procedure TGameStream.PartySmallWindowUpdatePacket(Packet: TGamePacket);
var
  C: TChar;
  Flags: array [0..15] of Boolean;
  I, H: Integer;
begin
  with Packet do
    begin
      C.ObjectId := ReadD;
 
      Party.Get(C.ObjectId, C);
 
      H := ReadH; // Flags
      for I := 0 to High(Flags) do Flags[I] := (H shr I) and 1 = 1;
 
      if Flags[0] then C.CP := ReadD;
      if Flags[1] then C.MaxCP := ReadD;
      if Flags[2] then C.HP := ReadD;
      if Flags[3] then C.MaxHP := ReadD;
      if Flags[4] then C.MP := ReadD;
      if Flags[5] then C.MaxMP := ReadD;
      if Flags[6] then
        begin
          C.Level := ReadC;
          IsValidLevel(C.Level);
        end;
      if Flags[7] then
        begin
          C.ClassId := ReadH;
          IsValidClassId(C.ClassId);
        end;
      if Flags[8] then ReadC;
      if Flags[9] then C.VitalityPoints := ReadD;
      EndOfPacket;
 
      Party.Add(C);
    end;
end;
Code: Pascal

Bacek 25.12.2013 19:00

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от Hint (Сообщение 341737)
PartySmallWindowUpdate для Epeisodion (575):
procedure TGameStream.PartySmallWindowUpdatePacket(Packet: TGamePacket);
var
  C: TChar;
  Flags: array [0..15] of Boolean;
  I, H: Integer;
begin
  with Packet do
    begin
      C.ObjectId := ReadD;
 
      Party.Get(C.ObjectId, C);
 
      H := ReadH; // Flags
      for I := 0 to High(Flags) do Flags[I] := (H shr I) and 1 = 1;
 
      if Flags[0] then C.CP := ReadD;
      if Flags[1] then C.MaxCP := ReadD;
      if Flags[2] then C.HP := ReadD;
      if Flags[3] then C.MaxHP := ReadD;
      if Flags[4] then C.MP := ReadD;
      if Flags[5] then C.MaxMP := ReadD;
      if Flags[6] then
        begin
          C.Level := ReadC;
          IsValidLevel(C.Level);
        end;
      if Flags[7] then
        begin
          C.ClassId := ReadC;
          IsValidClassId(C.ClassId);
        end;
      if Flags[8] then ReadH;
      if Flags[9] then C.VitalityPoints := ReadD;
      EndOfPacket;
 
      Party.Add(C);
    end;
end;
Code: Pascal

if Flags[7] then C.ClassId := ReadC; // не верно тут H
if Flags[8] then ReadH; // замена пати. не верно тут С

Hint 25.12.2013 19:44

Re: Работа над Goddess of Destruction (part 6)
 
Хм, спасибо, исправлю. А я почему-то поставил C вместо H (уже не помню причины).

BoneBreaker 26.12.2013 08:34

Re: Работа над Goddess of Destruction (part 6)
 
До кучи, мини апдейт бонуксовского ExNpcInfo.

Насчёт формата полей не уверен

Код:

writeD(_npcObjId);
                writeC(0x00);
                writeH(37);         
                writeB(new byte[]{(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF});
                writeC(7 + _title.length() * 2); // Динамический блок
                writeC(_isAttackable ? 1 : 0);
                writeD(0x00);//UNK
                writeCutS(_title);
                writeH(0x00);       
                writeH(143); // статичный блок
                writeD(_npcId + 1000000);
                writeD(_loc.x);
                writeD(_loc.y);
                writeD(_loc.z + Config.CLIENT_Z_SHIFT);
                writeD(_loc.h);
                writeD(0x00);
                writeD(_mAtkSpd);
                writeD(_pAtkSpd);
                writeF(_runSpdMul);
                writeF(_atkSpdMul);
                writeC(incombat);//Чек Анимации При нападении
                writeC(0x00);//UNK
                writeC(0x00);//UNK
                writeC(0x00);//UNK
                writeC(_isNameAbove ? 1 : 0);//Визуализирует нпц.
                writeC(0x00);//UNK
                writeC(0x00);//UNK
                writeC(_team.ordinal());// Team - red/blue/none
                writeD(0x00); //UNK
                writeD(0x00); //UNK
                writeD(_transformId); //Предположительно
                writeD(0x00); //UNK
                writeD(0x00); //UNK
                writeD(0x00);
                writeD(_HP);
                writeD(_MP);
                writeD(_maxHP);
                writeD(_maxMP);
                writeD(0x00); //UNK
                writeD(0x00); //UNK
                writeH(0x00); //UNK
                writeC(0x00); //UNK
                writeD(_nameNpcString.getId());
                writeD(_titleNpcString.getId());
                writeD(_titleColor);
                writeD(0x00); //меняет цвет ника оО
                writeD(0x00); //UNK
                writeD(0x00); //UNK
                writeD(0x00); //UNK
                writeD(0x00); //UNK
                writeC(0x00); //UNK
                writeC(12); //UNK
                writeC(0); //UNK
                writeC(0); //UNK

Если есть инфа по анкноун полям, буду рад выслушать.

Daan Raven 27.12.2013 23:32

Re: Работа над Goddess of Destruction (part 6)
 
Вот опкоды, кусок дампа с пакетами и целый стринг-дамп в тхт - http://yadi.sk/d/7MLNu-fxF5F3N . (Отдельное спасибо мефисто или мифесто, авейкингу за то, что научили делать стринг дамп, и килрою за то, что подсказал, как узнать опкоды, хоть я и догадывался).
off:
Свернуть ↑Развернуть ↓

BoneBreaker 28.12.2013 03:17

Re: Работа над Goddess of Destruction (part 6)
 
Цитата:

Сообщение от GooD (Сообщение 342095)
Вот опкоды, кусок дампа с пакетами и целый стринг-дамп в тхт - http://yadi.sk/d/7MLNu-fxF5F3N . (Отдельное спасибо мефисто, авейкингу за то, что научили делать стринг дамп, и килрою за то, что подсказал, как узнать опкоды, хоть я и догадывался).
off:
Свернуть ↑Развернуть ↓

Благодарствую.

Одного не пойму, что это за магические
Код:

"Setting 2_4_8_10"
цифры в подобных сеттингах.

Я так понимаю, это имеет какое-то отношение к тому, как отправляются новые пакеты?

VenomRaider 28.12.2013 09:33

Re: Работа над Goddess of Destruction (part 6)
 
полный пакет CharacterSelectionInfo:
CharacterSelectionInfo:
Свернуть ↑Развернуть ↓


Добавлено через 1 час 22 минуты
дайте плиз структуру пакета ItemList


Текущее время: 15:49. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot