namespace Supercell.Laser.Logic.Friends { using System; using System.Text.Json.Serialization; using Supercell.Laser.Logic.Avatar; using Supercell.Laser.Logic.Avatar.Structures; using Supercell.Laser.Logic.Listener; using Supercell.Laser.Titan.DataStream; public class Friend { [JsonInclude] public long AccountId; [JsonInclude] public int Trophies; [JsonInclude] public PlayerDisplayData DisplayData; [JsonInclude] public int FriendState; [JsonInclude] public int FriendReason; [JsonIgnore] public ClientAvatar Avatar => LogicServerListener.Instance.GetAvatar(AccountId); /* public void Encode(ChecksumEncoder encoder) // a2 { // WriteVInt (смещение 76) encoder.WriteVInt(Field1); // *a1 // WriteString (смещение 28) encoder.WriteString(Field2); // a1[1] encoder.WriteString(Field3); // a1[2] encoder.WriteString(Field4); // a1[3] encoder.WriteString(Field5); // a1[4] encoder.WriteString(Field6); // a1[5] encoder.WriteString(Field7); // a1[6] // WriteInt (смещение 36) encoder.WriteInt(Field8); // a1[7] encoder.WriteInt(Field9); // a1[8] encoder.WriteInt(Field10); // a1[9] encoder.WriteInt(Field11); // a1[10] encoder.WriteInt(Field12); // a1[11] // WriteBoolean (смещение 32) if (Field14 != 0) // a1[14] { encoder.WriteBoolean(true); encoder.WriteVInt(Field14); // a1[14] encoder.WriteInt(Field15); // a1[15] encoder.WriteString(Field16); // a1[16] encoder.WriteInt(Field17); // a1[17] encoder.WriteInt(Field18); // a1[18] } else { encoder.WriteBoolean(false); } encoder.WriteString(Field19); // a1[19] encoder.WriteInt(Field20); // a1[12] encoder.WriteInt(Field21); // a1[13] encoder.WriteBoolean(Field24 != 0); // a1[24] if (Field24 != 0) // result = a1[24] { playerDisplayData.Encode(encoder); // ZN17PlayerDisplayData6encodeEP10ByteStream } } */ public void Decode(ByteStream stream) { AccountId = stream.ReadLong(); // WriteLong stream.ReadString(); // WriteString(null) x6 stream.ReadString(); stream.ReadString(); stream.ReadString(); stream.ReadString(); stream.ReadString(); Trophies = stream.ReadInt(); // WriteInt(Trophies) FriendState = stream.ReadInt(); // WriteInt(FriendState) FriendReason = stream.ReadInt(); // WriteInt(FriendReason) stream.ReadInt(); // WriteInt(0) stream.ReadInt(); // WriteInt(0) stream.ReadBoolean(); // WriteBoolean(false) stream.ReadString(); // WriteString(null) stream.ReadInt(); // WriteInt(lastOnline) stream.ReadInt(); // WriteInt(rankedRank) bool hasDisplayData = stream.ReadBoolean(); // WriteBoolean(DisplayData != null) if (hasDisplayData) { DisplayData = new PlayerDisplayData(); DisplayData.Decode(stream); } } public void Encode(ByteStream stream) { ClientAvatar avatar = Avatar; stream.WriteLong(AccountId); stream.WriteString(null); stream.WriteString(null); stream.WriteString(null); stream.WriteString(null); stream.WriteString(null); stream.WriteString(null); stream.WriteInt(avatar != null ? avatar.Trophies : Trophies); stream.WriteInt(FriendState); stream.WriteInt(FriendReason); stream.WriteInt(0); stream.WriteInt(0); stream.WriteBoolean(false); stream.WriteString(null); stream.WriteInt(LogicServerListener.Instance.IsPlayerOnline(AccountId) ? 0 : (avatar != null ? (int)(DateTime.UtcNow - avatar.LastOnline).TotalSeconds : 999999)); stream.WriteInt(avatar != null ? avatar.RankedRank : 0); if (stream.WriteBoolean(DisplayData != null)) { DisplayData.Encode(stream); } } } }