Skip to content

Commit 8c6a719

Browse files
committed
Fix unknowns related to Bestiary/Charms Cyclopedia packets
1 parent 1cfb5a2 commit 8c6a719

7 files changed

Lines changed: 120 additions & 28 deletions

File tree

Apps/Extract/Program.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using OXGaming.TibiaAPI.Network;
1010
using OXGaming.TibiaAPI.Network.ServerPackets;
1111
using OXGaming.TibiaAPI.Utilities;
12-
using OXGaming.TibiaAPI.WorldMap;
1312

1413
namespace Extract
1514
{

TibiaAPI/Network/ClientPackets/MonsterBonusEffectAction.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ namespace OXGaming.TibiaAPI.Network.ClientPackets
44
{
55
public class MonsterBonusEffectAction : ClientPacket
66
{
7+
public ushort RaceId { get; set; }
8+
9+
public byte Type { get; set; }
10+
public byte CharmId { get; set; }
11+
712
public MonsterBonusEffectAction(Client client)
813
{
914
Client = client;
@@ -17,12 +22,24 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
1722
return false;
1823
}
1924

25+
CharmId = message.ReadByte();
26+
Type = message.ReadByte();
27+
if (Type == 1) // Assign (2 = Unassign)
28+
{
29+
RaceId = message.ReadUInt16();
30+
}
2031
return true;
2132
}
2233

2334
public override void AppendToNetworkMessage(NetworkMessage message)
2435
{
2536
message.Write((byte)ClientPacketType.MonsterBonusEffectAction);
37+
message.Write(CharmId);
38+
message.Write(Type);
39+
if (Type == 1)
40+
{
41+
message.Write(RaceId);
42+
}
2643
}
2744
}
2845
}

TibiaAPI/Network/ServerPackets/MonsterCyclopedia.cs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ public class MonsterCyclopedia : ServerPacket
99
{
1010
public List<(byte Id, string Name, string Description, byte Type, ushort CharmPoints, bool IsPurchased, bool IsAssigned, ushort RaceId, uint RemovalCost)> Charms { get; } =
1111
new List<(byte Id, string Name, string Description, byte Type, ushort CharmPoints, bool IsPurchased, bool IsAssigned, ushort RaceId, uint RemovalCost)>();
12-
public List<ushort> CompletedMonsterIds { get; } = new List<ushort>();
13-
public List<(string Name, ushort Total, ushort Known)> MonsterRaces { get; } =
12+
public List<ushort> CharmAssignableRaceIds { get; } = new List<ushort>();
13+
public List<(string Name, ushort Total, ushort Known)> RaceCollections { get; } =
1414
new List<(string Name, ushort Total, ushort Known)>();
1515

1616
public uint CharmPoints { get; set; }
1717

18+
public byte UnassignedCharms { get; set; }
1819
public byte Unknown { get; set; }
1920

2021
public MonsterCyclopedia(Client client)
@@ -30,13 +31,13 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
3031
return false;
3132
}
3233

33-
MonsterRaces.Capacity = message.ReadUInt16();
34-
for (var i = 0; i < MonsterRaces.Capacity; ++i)
34+
RaceCollections.Capacity = message.ReadUInt16();
35+
for (var i = 0; i < RaceCollections.Capacity; ++i)
3536
{
3637
var name = message.ReadString();
3738
var total = message.ReadUInt16();
3839
var known = message.ReadUInt16();
39-
MonsterRaces.Add((name, total, known));
40+
RaceCollections.Add((name, total, known));
4041
}
4142

4243
// Todo: Figure out this unknown.
@@ -63,10 +64,12 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
6364
Charms.Add((id, name, description, type, charmPoints, isPurchased, isAssigned, raceId, removalCost));
6465
}
6566

66-
CompletedMonsterIds.Capacity = message.ReadUInt16();
67-
for (var i = 0; i < CompletedMonsterIds.Capacity; ++i)
67+
UnassignedCharms = message.ReadByte();
68+
69+
CharmAssignableRaceIds.Capacity = message.ReadUInt16();
70+
for (var i = 0; i < CharmAssignableRaceIds.Capacity; ++i)
6871
{
69-
CompletedMonsterIds.Add(message.ReadUInt16());
72+
CharmAssignableRaceIds.Add(message.ReadUInt16());
7073
}
7174
return true;
7275
}
@@ -75,11 +78,11 @@ public override void AppendToNetworkMessage(NetworkMessage message)
7578
{
7679
message.Write((byte)ServerPacketType.MonsterCyclopedia);
7780

78-
var count = Math.Min(MonsterRaces.Count, ushort.MaxValue);
81+
var count = Math.Min(RaceCollections.Count, ushort.MaxValue);
7982
message.Write((ushort)count);
8083
for (var i = 0; i < count; ++i)
8184
{
82-
var (Name, Total, Known) = MonsterRaces[i];
85+
var (Name, Total, Known) = RaceCollections[i];
8386
message.Write(Name);
8487
message.Write(Total);
8588
message.Write(Known);
@@ -107,11 +110,13 @@ public override void AppendToNetworkMessage(NetworkMessage message)
107110
}
108111
}
109112

110-
count = (ushort)Math.Min(CompletedMonsterIds.Count, ushort.MaxValue);
111-
message.Write(count);
113+
message.Write(UnassignedCharms);
114+
115+
count = Math.Min(CharmAssignableRaceIds.Count, ushort.MaxValue);
116+
message.Write((ushort)count);
112117
for (var i = 0; i < count; ++i)
113118
{
114-
message.Write(CompletedMonsterIds[i]);
119+
message.Write(CharmAssignableRaceIds[i]);
115120
}
116121
}
117122
}

TibiaAPI/Network/ServerPackets/MonsterCyclopediaBonusEffects.cs

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
1-
using OXGaming.TibiaAPI.Constants;
1+
using System;
2+
using System.Collections.Generic;
3+
4+
using OXGaming.TibiaAPI.Constants;
25

36
namespace OXGaming.TibiaAPI.Network.ServerPackets
47
{
58
public class MonsterCyclopediaBonusEffects : ServerPacket
69
{
10+
public List<(byte Id, string Name, string Description, byte Type, ushort CharmPoints, bool IsPurchased, bool IsAssigned, ushort RaceId, uint RemovalCost)> Charms { get; } =
11+
new List<(byte Id, string Name, string Description, byte Type, ushort CharmPoints, bool IsPurchased, bool IsAssigned, ushort RaceId, uint RemovalCost)>();
12+
public List<ushort> AssignableRaceIds { get; } = new List<ushort>();
13+
14+
public uint CharmPoints { get; set; }
15+
16+
public byte UnassignedCharms { get; set; }
17+
718
public MonsterCyclopediaBonusEffects(Client client)
819
{
920
Client = client;
@@ -17,12 +28,70 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
1728
return false;
1829
}
1930

31+
CharmPoints = message.ReadUInt32();
32+
33+
Charms.Capacity = message.ReadByte();
34+
for (var i = 0; i < Charms.Capacity; ++i)
35+
{
36+
var id = message.ReadByte();
37+
var name = message.ReadString();
38+
var description = message.ReadString();
39+
var type = message.ReadByte();
40+
var charmPoints = message.ReadUInt16();
41+
var isPurchased = message.ReadBool();
42+
var isAssigned = message.ReadBool();
43+
var raceId = ushort.MinValue;
44+
var removalCost = uint.MinValue;
45+
if (isAssigned)
46+
{
47+
raceId = message.ReadUInt16();
48+
removalCost = message.ReadUInt32();
49+
}
50+
Charms.Add((id, name, description, type, charmPoints, isPurchased, isAssigned, raceId, removalCost));
51+
}
52+
53+
UnassignedCharms = message.ReadByte();
54+
55+
AssignableRaceIds.Capacity = message.ReadUInt16();
56+
for (var i = 0; i < AssignableRaceIds.Capacity; ++i)
57+
{
58+
AssignableRaceIds.Add(message.ReadUInt16());
59+
}
2060
return true;
2161
}
2262

2363
public override void AppendToNetworkMessage(NetworkMessage message)
2464
{
2565
message.Write((byte)ServerPacketType.MonsterCyclopediaBonusEffects);
66+
message.Write(CharmPoints);
67+
68+
var count = Math.Min(Charms.Count, byte.MaxValue);
69+
message.Write((byte)count);
70+
for (var i = 0; i < count; ++i)
71+
{
72+
var charm = Charms[i];
73+
message.Write(charm.Id);
74+
message.Write(charm.Name);
75+
message.Write(charm.Description);
76+
message.Write(charm.Type);
77+
message.Write(charm.CharmPoints);
78+
message.Write(charm.IsPurchased);
79+
message.Write(charm.IsAssigned);
80+
if (charm.IsAssigned)
81+
{
82+
message.Write(charm.RaceId);
83+
message.Write(charm.RemovalCost);
84+
}
85+
}
86+
87+
message.Write(UnassignedCharms);
88+
89+
count = Math.Min(AssignableRaceIds.Count, ushort.MaxValue);
90+
message.Write((ushort)count);
91+
for (var i = 0; i < count; ++i)
92+
{
93+
message.Write(AssignableRaceIds[i]);
94+
}
2695
}
2796
}
2897
}

TibiaAPI/Network/ServerPackets/StoreOffers.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class StoreOffers : ServerPacket
1010
{
1111
public List<Banner> Banners { get; } = new List<Banner>();
1212
public List<Offer> Offers { get; } = new List<Offer>();
13-
public List<string> SubCategories { get; } = new List<string>();
13+
public List<string> Collections { get; } = new List<string>();
1414

1515
public string CategoryName { get; set; }
1616
public string DisplaySubCategory { get; set; }
@@ -39,10 +39,10 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
3939
DisplayOfferId = message.ReadUInt32();
4040
WindowType = message.ReadByte();
4141

42-
SubCategories.Capacity = message.ReadByte();
43-
for (var i = 0; i < SubCategories.Capacity; ++i)
42+
Collections.Capacity = message.ReadByte();
43+
for (var i = 0; i < Collections.Capacity; ++i)
4444
{
45-
SubCategories.Add(message.ReadString());
45+
Collections.Add(message.ReadString());
4646
}
4747

4848
if (Client.VersionNumber >= 11900000)
@@ -55,7 +55,8 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
5555
{
5656
var offer = new Offer
5757
{
58-
Name = message.ReadString()
58+
Name = message.ReadString(),
59+
IsFeatured = WindowType == 3
5960
};
6061

6162
offer.Details.Capacity = message.ReadByte();
@@ -129,7 +130,7 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
129130
}
130131

131132
offer.TryType = message.ReadByte(); // 0 = disabled, 1 = mounts/outfits, 2 = hireling dresses
132-
offer.ParentCategory = message.ReadString();
133+
offer.Collection = message.ReadString();
133134
offer.PopularityScore = message.ReadUInt16();
134135
offer.NewUntilTimestamp = message.ReadUInt32();
135136
offer.NeedsUserConfigurationBeforeBuying = message.ReadBool();
@@ -197,7 +198,7 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
197198
if (banner.Type == 2)
198199
{
199200
banner.Category = message.ReadString();
200-
banner.SubCategory = message.ReadString();
201+
banner.Collection = message.ReadString();
201202
}
202203
else if (banner.Type == 4)
203204
{
@@ -219,11 +220,11 @@ public override void AppendToNetworkMessage(NetworkMessage message)
219220
message.Write(DisplayOfferId);
220221
message.Write(WindowType);
221222

222-
var count = Math.Min(SubCategories.Count, byte.MaxValue);
223+
var count = Math.Min(Collections.Count, byte.MaxValue);
223224
message.Write((byte)count);
224225
for (var i = 0; i < count; ++i)
225226
{
226-
message.Write(SubCategories[i]);
227+
message.Write(Collections[i]);
227228
}
228229

229230
if (Client.VersionNumber >= 11900000)
@@ -297,7 +298,7 @@ public override void AppendToNetworkMessage(NetworkMessage message)
297298
}
298299

299300
message.Write(offer.TryType);
300-
message.Write(offer.ParentCategory);
301+
message.Write(offer.Collection);
301302
message.Write(offer.PopularityScore);
302303
message.Write(offer.NewUntilTimestamp);
303304
message.Write(offer.NeedsUserConfigurationBeforeBuying);
@@ -360,7 +361,7 @@ public override void AppendToNetworkMessage(NetworkMessage message)
360361
if (banner.Type == 2)
361362
{
362363
message.Write(banner.Category);
363-
message.Write(banner.SubCategory);
364+
message.Write(banner.Collection);
364365
}
365366
else if (banner.Type == 4)
366367
{

TibiaAPI/Store/Banner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
public class Banner
44
{
55
public string Category { get; set; }
6+
public string Collection { get; set; }
67
public string Image { get; set; }
7-
public string SubCategory { get; set; }
88

99
public uint OfferId { get; set; }
1010

TibiaAPI/Store/Offer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ public class Offer
77
public List<OfferDetails> Details { get; } = new List<OfferDetails>();
88
public List<Offer> Products { get; } = new List<Offer>();
99

10+
public string Collection { get; set; }
1011
public string DisplayImage { get; set; }
1112
public string Name { get; set; }
12-
public string ParentCategory { get; set; }
1313

1414
public uint NewUntilTimestamp { get; set; }
1515

@@ -29,5 +29,6 @@ public class Offer
2929
public byte TryType { get; set; }
3030

3131
public bool NeedsUserConfigurationBeforeBuying { get; set; }
32+
public bool IsFeatured { get; set; }
3233
}
3334
}

0 commit comments

Comments
 (0)