Skip to content

Cmd_UserInfoAck

GigaToni edited this page May 4, 2017 · 2 revisions

Server -> Client = Cmd_UserInfoAck (61)

TODO

This is the answer packet to Cmd_UserInfo (60)

Raw packet data sent by server

000000: 3D 00 00 00 00 00 02 00 00 00 61 00 64 00 6D 00  = · · · · · · · · · a · d · m · 
000016: 69 00 6E 00 00 00 00 00 00 00 00 00 00 00 00 00  i · n · · · · · · · · · · · · · 
000032: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  · · · · · · · · · · · · · · · · 
000048: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  · · · · · · · · · · · · · · · · 
000064: 00 00 00 00 00 00 00 00 00 00 41 00 64 00 6D 00  · · · · · · · · · · A · d · m · 
000080: 69 00 6E 00 69 00 73 00 74 00 72 00 61 00 74 00  i · n · i · s · t · r · a · t · 
000096: 6F 00 72 00 00 00 00 00 00 00 00 00 00 00 00 00  o · r · · · · · · · · · · · · · 
000112: 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00  · · · · · · · · · · · · · · · · 
000128: 83 00 00 00 01 00 00 00 07 00 00 00 00 00 00 00  · · · · · · · · · · · · · · · · 
000144: CB 28 40 58 00 00 00 00 00 00 00 00 00 00 00 00  · ( @ X · · · · · · · · · · · · 
000160: 00 00 00 00 53 00 74 00 61 00 66 00 66 00 00 00  · · · · S · t · a · f · f · · · 
000176: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  · · · · · · · · · · · · · · · · 
000192: 00 00 47 00 69 00 67 00 61 00 74 00 6F 00 6E 00  · · G · i · g · a · t · o · n · 
000208: 69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  i · · · · · · · · · · · · · · · 
000224: 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00  · · · · · · · · · · · · · · · · 
000240: 00 00 00 00 02 00 00 00 01 00 00 00 04 00 00 00  · · · · · · · · · · · · · · · · 
000256: 5F 00 00 00 00 00 00 00 CB 28 40 58 00 00 00 00  _ · · · · · · · · ( @ X · · · · 
000272: 00 00 00 00 00 00 00 00 00 00 00 00 53 00 74 00  · · · · · · · · · · · · S · t · 
000288: 61 00 66 00 66 00 00 00 00 00 00 00 00 00 00 00  a · f · f · · · · · · · · · · · 
000304: 00 00 00 00 00 00 00 00 00 00  · · · · · · · · · · 

Pseudo struct

typedef struct
{
    int Permissions;
    int CharacterCount;
    char Username[18];
    long unknown1;
    long unknown2;
    long unknown3;
    int unknown4;

    typedef struct
    {
        char CharacterName[21];
        unsigned long CharacterId;
        int Avatar;
        int Level;
        int CurrentCarId;
        uint CarType;
        uint BaseColor;
        int CreationDate;

        long TeamId;
        long TeamMarkId;
        char TeamName[13];
        unsigned int unknown1; // May be GuildType
    } Character;
    Character characters[CharacterCount];
};

Pseudo C# Class

public class UserInfoAckPacket
{
    public int Permissions;
    public int CharacterCount;
    public string Username;
    public Character[] Characters;
    
    public UserInfoAckPacket()
    {
        Permissions = 0;
        CharacterCount = 0;
        Username = "";
        Characters = new Character[0];
    }
    
    public void Send(ushort packetId, Client client)
    {
        Packet packet = new Packet(packetId);

        packet.Writer.Write(Permissions);
        packet.Writer.Write(CharacterCount);
        packet.Writer.WriteUnicodeStatic(Username, 18);
        packet.Writer.Write((long)0);
        packet.Writer.Write((long)0);
        packet.Writer.Write((long)0);
        packet.Writer.Write(0);

        foreach (Character character in Characters)
        {
            packet.Writer.WriteUnicodeStatic(character.Name, 21);
            packet.Writer.Write(character.Cid);
            packet.Writer.Write((int)character.Avatar);
            packet.Writer.Write((int)character.Level);
            packet.Writer.Write(character.CurrentCarId);
            packet.Writer.Write(character.ActiveCar.CarType);
            packet.Writer.Write(character.ActiveCar.BaseColor);
            packet.Writer.Write(character.CreationDate);
            packet.Writer.Write(character.Tid);
            packet.Writer.Write(character.TeamMarkId);
            packet.Writer.WriteUnicodeStatic(character.TeamName, 13);
            packet.Writer.Write(0);
        }

        client.Send(packet);
    }
}
Clone this wiki locally