/
FriendSystemData.cs
159 lines (154 loc) · 6.28 KB
/
FriendSystemData.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using OXGaming.TibiaAPI.Constants;
namespace OXGaming.TibiaAPI.Network.ServerPackets
{
public class FriendSystemData : ServerPacket
{
public FriendSystemDataType DataType { get; set; }
public FriendSystemData(Client client)
{
Client = client;
PacketType = ServerPacketType.FriendSystemData;
}
public override void ParseFromNetworkMessage(NetworkMessage message)
{
// TODO: Figure out others DataTypes (if there are any).
// 0x09 and above seem to have no purpose.
DataType = (FriendSystemDataType)message.ReadByte();
if (DataType == FriendSystemDataType.SpecialEvent)
{
var eventType = message.ReadByte();
if (eventType == 0)
{
// Error: You need to set a main character to use this feature. [Cancel]
}
else if (eventType == 1)
{
// Error: text [Ok]
var text = message.ReadString();
}
else if (eventType == 2)
{
// Display "No results." in the search tab
}
else if (eventType >= 3)
{
// Clears the search tab and shows the default text if no results are displayed
// Enables the Invite & Blacklist button if results are displayed
}
}
else if (DataType == FriendSystemDataType.InvitationPending)
{
}
else if (DataType == FriendSystemDataType.Friends)
{
var count = message.ReadUInt16();
for (var i = 0; i < count; ++i)
{
var accountId = message.ReadUInt32();
var playerId = message.ReadUInt32();
var name = message.ReadString();
var title = message.ReadString();
var world = message.ReadString();
var vocation = message.ReadString();
var level = message.ReadUInt16();
var outfit = message.ReadCreatureOutfit();
var friendshipLevel = (FriendGroup)message.ReadByte();
var timestamp = message.ReadUInt32();
}
}
else if (DataType == FriendSystemDataType.Invitations)
{
var count = message.ReadUInt16();
for (var i = 0; i < count; ++i)
{
var isSentInvitation = message.ReadBool();
var accountId = message.ReadUInt32();
var invitedName = message.ReadString();
var invitedTitle = message.ReadString();
var inviteeName = message.ReadString();
var timestamp = message.ReadUInt32();
}
}
else if (DataType == FriendSystemDataType.Blacklist)
{
var count = message.ReadUInt16();
for (var i = 0; i < count; ++i)
{
var accountId = message.ReadUInt32();
var playerName = message.ReadString();
var timestamp = message.ReadUInt32();
}
}
else if (DataType == FriendSystemDataType.CharacterSearch)
{
var accountId = message.ReadUInt32();
var hasPendingInvitation = message.ReadBool();
var isBlacklisted = message.ReadBool();
var isFriend = message.ReadBool();
if (isFriend)
{
var isOnline = message.ReadBool();
var lastGameLogin = message.ReadUInt32();
var isPremium = message.ReadBool();
var loyalityTitle = message.ReadString();
var badges = message.ReadByte();
for (var i = 0; i < badges; ++i)
{
var badgeId = message.ReadUInt32();
var badgeName = message.ReadString();
}
}
var characters = message.ReadByte();
for (var i = 0; i < characters; ++i)
{
var playerId = message.ReadUInt32();
var name = message.ReadString();
var isMainCharacter = message.ReadBool();
var title = message.ReadString();
var world = message.ReadString();
var vocation = message.ReadString();
var level = message.ReadUInt16();
var isOnline = message.ReadBool();
var outfit = message.ReadCreatureOutfit();
}
}
else if (DataType == FriendSystemDataType.Badges)
{
var count = message.ReadByte();
for (var i = 0; i < count; ++i)
{
var id = message.ReadUInt32();
var name = message.ReadString();
var description = message.ReadString();
var isUnlocked = message.ReadBool();
var displayBadge = message.ReadBool();
}
}
else if (DataType == FriendSystemDataType.NewFriend)
{
}
else if (DataType == FriendSystemDataType.Config)
{
var count = message.ReadByte();
for (var i = 0; i < count; ++i)
{
var configId = (FriendGroup)message.ReadByte();
var showCharacterInfo = message.ReadBool();
var showAccountInfo = message.ReadBool();
var allowInspect = message.ReadBool();
}
}
else
{
throw new Exception($"Invalid Friend System Data: {DataType}");
}
}
public override void AppendToNetworkMessage(NetworkMessage message)
{
// TODO
// message.Write((byte)ServerPacketType.FriendSystemData);
// message.Write((byte)DataType);
}
}
}