Показать сообщение отдельно
Непрочитано 08.02.2014, 16:37   #1
Аватар для Hint
Герой

Автор темы (Топик Стартер) Примерочная

Первые шаги изучения протокола AA привели к созданию примерочной.

С помощью программы вы сможете узнать, как выглядит на персонажах тот или иной игровой предмет (одежда и оружие). Амуниция отображается непосредственно в игре (в окне выбора персонажа), поэтому для работы программы требуется наличие официального клиента ArcheAge. Программа работает автономно, игровой аккаунт не нужен, официальные серверы могут быть отключены.

Ссылка: http://aaplay.ru/static/files/wardrobe.zip



Добавлено через 24 минуты
Чтобы добавить полезности, вот так отсылаю список персонажей:
procedure TGame.SendPlayerList(Stream: TGameStream; Char: TCharacter);
var
  P: TGamePacket;
  S: RawByteString;
  I: Integer;
 
  procedure WriteItem(ItemId: Integer);
  var
    I: Integer;
  begin
    P.WriteD(ItemId);
    if ItemId > 0 then
      begin
        P.WriteD(1); // ObjectId
        for I := 1 to 6 do P.WriteC(0);
        P.WriteC(1);
        for I := 1 to 3 do P.WriteC(0);
        P.WriteC(1);
        for I := 1 to 4 do P.WriteC(0);
        P.WriteC(1);
        for I := 1 to 62 do P.WriteC(0);
        P.WriteC(3);
        for I := 1 to 16 do P.WriteC(0);
      end;
  end;
begin
  P := TGamePacket.Create;
  try
    P.Id := $003901DD;
    P.WriteC(1);
    P.WriteC(1);
    P.WriteD(Char.Id);
    P.WriteS(Char.Name);
 
    P.WriteC(Char.Model.race);
    P.WriteC(Char.Model.gender);
    P.WriteC(Char.Level);
    P.WriteC($64);
    P.WriteC(1);
    P.WriteC(0);
    P.WriteC(0);
    P.WriteD($178);
    P.WriteD(180); // zone_id?
    P.WriteC(101); // faction_id?
    for I := 1 to 21 do P.WriteC(0);
 
    WriteItem(Char.Chest);
    WriteItem(Char.Head);
    WriteItem(Char.Legs);
    WriteItem(Char.Gloves);
    WriteItem(Char.Feet);
 
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(0);
 
    WriteItem(Char.Weapon);
    WriteItem(Char.WeaponExtra);
    WriteItem(Char.WeaponRanged);
    WriteItem(Char.Instrument);
 
    P.WriteD(Char.Model.face);
    P.WriteD(Char.Model.hair_id);
 
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(0);
 
    P.WriteD(Char.Model.body);
 
    S := RawByteString(#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$01 +
    #$0B#$0B#$00#$00#$00#$00#$28#$5F#$CD#$03#$00#$00#$00#$00#$40#$2F +
    #$C1#$03#$AC#$7D#$FC#$42#$03);
    P.WriteB(@S[1], Length(S));
 
    P.WriteD(Char.Model.hair_color_id);
    P.WriteD(Char.Model.skin_color_id);
    P.WriteD(0);
    P.WriteD(0);
    P.WriteSingle(1);
    P.WriteSingle(1);
    P.WriteD(0);
    P.WriteD(0);
    P.WriteD(Char.Model.face_fixed_decal_asset_0_id);
    P.WriteSingle(Char.Model.face_fixed_decal_asset_0_weight);
    P.WriteD(Char.Model.face_fixed_decal_asset_1_id);
    P.WriteSingle(Char.Model.face_fixed_decal_asset_1_weight);
    P.WriteD(Char.Model.face_fixed_decal_asset_2_id);
    P.WriteSingle(Char.Model.face_fixed_decal_asset_2_weight);
    P.WriteD(Char.Model.face_fixed_decal_asset_3_id);
    P.WriteSingle(Char.Model.face_fixed_decal_asset_3_weight);
    P.WriteD(0);
    P.WriteD(Char.Model.face_normal_map_id);
    P.WriteD(0);
    P.WriteSingle(1);
    P.WriteD(0);
    P.WriteD(Char.Model.left_pupil_color);
    P.WriteD(Char.Model.right_pupil_color);
    P.WriteD(Char.Model.eyebrow_color);
    P.WriteD(Char.Model.deco_color);
 
    S := HexToStr(Char.Model.modifier);
    P.WriteH(Length(S));
    if S <> '' then
      begin
        P.WriteB(@S[1], Length(S));
      end;
 
    P.WriteD(500); // очки работы
 
    S := RawByteString(#$BF +
    #$F5#$F0#$52#$00#$00#$00#$00#$00#$00#$6B#$52#$EF#$52#$00#$00#$00 +
    #$00#$00#$00#$00#$00#$6B#$52#$EF#$52#$00#$00#$00#$00#$00#$00#$00 +
    #$00#$7A#$F5#$F0#$52#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00 +
    #$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00 +
    #$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00 +
    #$00#$00#$00#$00#$00#$00#$00#$00#$00#$03#$00#$00#$00#$00#$00#$00 +
    #$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00 +
    #$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00 +
    #$00#$00#$5E#$D5#$F0#$52#$00#$00#$00#$00);
    P.WriteB(@S[1], Length(S));
 
    Stream.Send(P);
  finally
    FreeAndNil(P);
  end;
end;
Code: Pascal
__________________
hLaPEx, Evermore, hAuthD, L2on, ...

Последний раз редактировалось Hint; 08.02.2014 в 17:01. Причина: Добавлено сообщение
Hint вне форума Ответить с цитированием
Сказали спасибо: