Показать сообщение отдельно
Непрочитано 01.12.2013, 00:26   #73
Аватар для Hint
Герой

По умолчанию Re: Работа над Goddess of Destruction (part 6)

Цитата:
Сообщение от VenomRaider Посмотреть сообщение
ребят, поделитесь плиз пакетиками новыми типа ExUser ExNpc ExPet итд, просто хочу глянуть что в новых хрониках появилось, а с пакетиками этими у меня туго
procedure TGameStream.ExUserInfoPacket(Packet: TGamePacket);
var
  I: Integer;
  Flags: TGamePacketBitFlags;
  // ...
 
  function ReadBlockSize(Fixed: Integer = 0): Integer;
  begin
    Result := Packet.ReadH;
    if (Fixed > 0) and (Result <> Fixed) then raise EBadPacket.Create('Invalid block size!');
  end;
 
begin
  with Packet do
    begin
      Player.ObjectId := ReadD;
      ReadH; // Size
      ReadH;
 
      Flags := ReadBitFlags(23);
 
      if Flags[0] then
        begin
          ReadD;
        end;
 
      if Flags[1] then
        begin
          ReadBlockSize;
 
          Player.Name := ReadS2;
          ReadC;
          Player.Race := ReadC;
          Player.Sex := ReadC;
          Player.BaseClassId := ReadD;
          Player.ClassId := ReadD;
          Player.Level := ReadC;
        end;
 
      if Flags[2] then
        begin
          ReadBlockSize(14);
 
          Player.Str := ReadH;
          Player.Dex := ReadH;
          Player.Con := ReadH;
          Player.Int := ReadH;
          Player.Wit := ReadH;
          Player.Men := ReadH;
        end;
 
      if Flags[3] then
        begin
          ReadBlockSize(14);
 
          Player.MaxHP := ReadD;
          Player.MaxMP := ReadD;
          Player.MaxCP := ReadD;
        end;
 
      if Flags[4] then
        begin
          ReadBlockSize(38);
 
          Player.HP := ReadD;
          Player.MP := ReadD;
          Player.CP := ReadD;
          Player.SP := ReadQ;
          Player.Exp := ReadQ;
          Player.ExpProgress := ReadF;
        end;
 
      if Flags[5] then
        begin
          ReadBlockSize(3);
 
          ReadC;
        end;
 
      if Flags[6] then
        begin
          ReadBlockSize(15);
 
          Skip(13); // Hair Style, Hair Color, Face
        end;
 
      if Flags[7] then
        begin
          ReadBlockSize(5);
 
          ReadC;
          Player.PrivateStoreType := ReadC;
          ReadC;
        end;
 
      if Flags[8] then
        begin
          ReadBlockSize(56);
 
          ReadH;
          Player.PAtk := ReadD;
          Player.PAtkSpd := ReadD;
          Player.PDef := ReadD;
          Player.EvasionRate := ReadD;
          Player.Accuracy := ReadD;
          Player.CriticalHit := ReadD;
          Player.MAtk := ReadD;
          Player.MAtkSpd := ReadD;
          Player.PAtkSpd := ReadD;
          Player.MAccuracy := ReadD;
          Player.MDef := ReadD;
          Player.MEvasionRate := ReadD;
          Player.MCriticalHit := ReadD;
        end;
 
      if Flags[9] then
        begin
          ReadBlockSize(14);
 
          Player.Elements.Fire := ReadH;
          Player.Elements.Water := ReadH;
          Player.Elements.Wind := ReadH;
          Player.Elements.Earth := ReadH;
          Player.Elements.Holy := ReadH;
          Player.Elements.Dark := ReadH;
        end;
 
      if Flags[10] then
        begin
          ReadBlockSize(18);
 
          Player.Pos.X := ReadD;
          Player.Pos.Y := ReadD;
          Player.Pos.Z := ReadD;
          ReadD;
        end;
 
      if Flags[11] then
        begin
          ReadBlockSize(18);
 
          for I := 1 to 4 do
            begin
              ReadH; // Run Speed
              ReadH; // Walk Speed
            end;
        end;
 
      if Flags[12] then
        begin
          ReadBlockSize(18);
 
          ReadF;
          ReadF;
        end;
 
      if Flags[13] then
        begin
          ReadBlockSize(18);
 
          ReadF;
          ReadF;
        end;
 
      if Flags[14] then
        begin
          ReadBlockSize(5);
 
          Player.Elements.AttackType := ReadC;
          Player.Elements.AttackPower := ReadH;
        end;
 
      if Flags[15] then
        begin
          ReadBlockSize;
 
          Player.Title := ReadS2;
          ReadH; // Subdivision
          Player.Clan.Id := ReadD;
          ReadD;
          Player.Clan.CrestId := ReadD;
          ReadD;
          ReadC;
          Player.Clan.AllyId :=ReadD;
          Player.Clan.AllyCrestId := ReadD;
          ReadC; // PartyRoom
        end;
 
      if Flags[16] then
        begin
          ReadBlockSize(22);
 
          Skip(12); // PvP, Karma, Noble, Hero, Pledge Class, PK
          Player.PvP := ReadD;
          Player.Recomendations := ReadH;
          ReadH; // Recomendations Left
        end;
 
      if Flags[17] then
        begin
          ReadBlockSize(11);
 
          Skip(9);
        end;
 
      if Flags[18] then
        begin
          ReadBlockSize(9);
 
          Skip(7);
        end;
 
      if Flags[19] then
        begin
          ReadBlockSize(4);
 
          ReadC;
          Player.IsStanding := ReadBoolC;
        end;
 
      if Flags[20] then
        begin
          ReadBlockSize(10);
 
          Player.NameColor := ReadD;
          Player.TitleColor := ReadD;
        end;
 
      if Flags[21] then
        begin
          ReadBlockSize(9);
 
          Skip(7);
        end;
 
      if Flags[22] then
        begin
          ReadBlockSize(13);
 
          Skip(11);
        end;
 
      EndOfPacket;
    end;       
 
  // ...
end;
Code: Pascal
__________________
hLaPEx, Evermore, hAuthD, L2on, ...

Последний раз редактировалось Hint; 15.12.2013 в 13:28.
Hint вне форума
Сказали спасибо: