Skip to content

Commit dd40af0

Browse files
committed
Add missing protocol changes from Summer Update 2019
1 parent ffb5766 commit dd40af0

7 files changed

Lines changed: 177 additions & 20 deletions

File tree

TibiaAPI/Constants/Enums.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ public enum ServerPacketType
482482
RemoveGraphicalEffect = 0x84,
483483
MissileEffect = 0x85,
484484
Trappers = 0x87,
485+
CreatureUpdate = 0x8B,
485486
CreatureHealth = 0x8C,
486487
CreatureLight = 0x8D,
487488
CreatureOutfit = 0x8E,

TibiaAPI/Network/ClientPackets/SetOutfit.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class SetOutfit : ClientPacket
1212
public byte HeadColor { get; set; }
1313
public byte LegsColor { get; set; }
1414
public byte TorsoColor { get; set; }
15+
public byte Unknown { get; set; }
1516

1617
public SetOutfit(Client client)
1718
{
@@ -21,6 +22,10 @@ public SetOutfit(Client client)
2122

2223
public override void ParseFromNetworkMessage(NetworkMessage message)
2324
{
25+
if (Client.VersionNumber >= 12209066)
26+
{
27+
Unknown = message.ReadByte();
28+
}
2429
OutfitId = message.ReadUInt16();
2530
HeadColor = message.ReadByte();
2631
TorsoColor = message.ReadByte();
@@ -33,6 +38,10 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
3338
public override void AppendToNetworkMessage(NetworkMessage message)
3439
{
3540
message.Write((byte)ClientPacketType.SetOutfit);
41+
if (Client.VersionNumber >= 12209066)
42+
{
43+
message.Write(Unknown);
44+
}
3645
message.Write(OutfitId);
3746
message.Write(HeadColor);
3847
message.Write(TorsoColor);

TibiaAPI/Network/ClientPackets/StashAction.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class StashAction : ClientPacket
99
public ushort ItemId { get; set; }
1010

1111
public byte StashType { get; set; }
12+
public byte Unknown { get; set; }
1213

1314
public StashAction(Client client)
1415
{
@@ -24,6 +25,10 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
2425
{
2526
ItemId = message.ReadUInt16();
2627
ItemCount = message.ReadUInt32();
28+
if (Client.VersionNumber >= 12200000)
29+
{
30+
Unknown = message.ReadByte();
31+
}
2732
}
2833
}
2934

@@ -35,6 +40,10 @@ public override void AppendToNetworkMessage(NetworkMessage message)
3540
{
3641
message.Write(ItemId);
3742
message.Write(ItemCount);
43+
if (Client.VersionNumber >= 12200000)
44+
{
45+
message.Write(Unknown);
46+
}
3847
}
3948
}
4049
}

TibiaAPI/Network/Communication.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ public class Communication
197197
public event ReceivedPacketEventHandler OnReceivedServerRemoveGraphicalEffectPacket;
198198
public event ReceivedPacketEventHandler OnReceivedServerMissileEffectPacket;
199199
public event ReceivedPacketEventHandler OnReceivedServerTrappersPacket;
200+
public event ReceivedPacketEventHandler OnReceivedServerCreatureUpdatePacket;
200201
public event ReceivedPacketEventHandler OnReceivedServerCreatureHealthPacket;
201202
public event ReceivedPacketEventHandler OnReceivedServerCreatureLightPacket;
202203
public event ReceivedPacketEventHandler OnReceivedServerCreatureOutfitPacket;
@@ -961,6 +962,9 @@ public void ParseServerMessage(Client client, NetworkMessage inMessage, NetworkM
961962
case ServerPacketType.Trappers:
962963
packet.Forward = OnReceivedServerTrappersPacket?.Invoke(packet) ?? true;
963964
break;
965+
case ServerPacketType.CreatureUpdate:
966+
packet.Forward = OnReceivedServerCreatureUpdatePacket?.Invoke(packet) ?? true;
967+
break;
964968
case ServerPacketType.CreatureHealth:
965969
packet.Forward = OnReceivedServerCreatureHealthPacket?.Invoke(packet) ?? true;
966970
break;

TibiaAPI/Network/ServerPacket.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ public static ServerPacket CreateInstance(Client client, ServerPacketType type)
112112
return new ServerPackets.MissileEffect(client);
113113
case ServerPacketType.Trappers:
114114
return new ServerPackets.Trappers(client);
115+
case ServerPacketType.CreatureUpdate:
116+
return new ServerPackets.CreatureUpdate(client);
115117
case ServerPacketType.CreatureHealth:
116118
return new ServerPackets.CreatureHealth(client);
117119
case ServerPacketType.CreatureLight:
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
using System;
2+
using OXGaming.TibiaAPI.Appearances;
3+
using OXGaming.TibiaAPI.Constants;
4+
using OXGaming.TibiaAPI.Creatures;
5+
6+
namespace OXGaming.TibiaAPI.Network.ServerPackets
7+
{
8+
public class CreatureUpdate : ServerPacket
9+
{
10+
public Creature OutdatedCreature { get; set; }
11+
12+
public uint CreatureId { get; set; }
13+
14+
public byte ManaPercent { get; set; }
15+
public byte Type { get; set; }
16+
public byte Unknown { get; set; }
17+
18+
public CreatureUpdate(Client client)
19+
{
20+
Client = client;
21+
PacketType = ServerPacketType.CreatureUpdate;
22+
}
23+
24+
public override void ParseFromNetworkMessage(NetworkMessage message)
25+
{
26+
CreatureId = message.ReadUInt32();
27+
Type = message.ReadByte();
28+
if (Type == 0x00) // Outdated Creature
29+
{
30+
var id = message.ReadUInt16();
31+
if (id == (ushort)CreatureInstanceType.OutdatedCreature)
32+
{
33+
var creatureId = message.ReadUInt32();
34+
OutdatedCreature = Client.CreatureStorage.GetCreature(creatureId);
35+
if (OutdatedCreature == null)
36+
{
37+
throw new Exception("[CreatureUpdate.ParseFromNetworkMessage] Outdated creature not found.");
38+
}
39+
40+
OutdatedCreature.InstanceType = (CreatureInstanceType)id;
41+
OutdatedCreature.HealthPercent = message.ReadByte();
42+
OutdatedCreature.Direction = (Direction)message.ReadByte();
43+
OutdatedCreature.Outfit = message.ReadCreatureOutfit();
44+
OutdatedCreature.Mount = message.ReadMountOutfit();
45+
OutdatedCreature.Brightness = message.ReadByte();
46+
OutdatedCreature.LightColor = message.ReadByte();
47+
OutdatedCreature.Speed = message.ReadUInt16();
48+
OutdatedCreature.PkFlag = message.ReadByte();
49+
OutdatedCreature.PartyFlag = message.ReadByte();
50+
OutdatedCreature.GuildFlag = message.ReadByte();
51+
52+
OutdatedCreature.Type = (Constants.CreatureType)message.ReadByte();
53+
if (OutdatedCreature.Type == Constants.CreatureType.Player)
54+
{
55+
OutdatedCreature.Vocation = message.ReadByte();
56+
}
57+
else if (OutdatedCreature.IsSummon)
58+
{
59+
OutdatedCreature.SummonerCreatureId = message.ReadUInt32();
60+
}
61+
62+
OutdatedCreature.SpeechCategory = message.ReadByte();
63+
OutdatedCreature.Mark = message.ReadByte();
64+
OutdatedCreature.InspectionState = message.ReadByte();
65+
OutdatedCreature.IsUnpassable = message.ReadBool();
66+
}
67+
}
68+
else if (Type == 0x0B) // ManaPercent
69+
{
70+
ManaPercent = message.ReadByte();
71+
}
72+
else if (Type == 0x0C) // Unknown
73+
{
74+
Unknown = message.ReadByte();
75+
}
76+
}
77+
78+
public override void AppendToNetworkMessage(NetworkMessage message)
79+
{
80+
message.Write((byte)ServerPacketType.CreatureUpdate);
81+
message.Write(CreatureId);
82+
message.Write(Type);
83+
if (Type == 0x00 && OutdatedCreature != null) // Outdated Creature
84+
{
85+
message.Write((ushort)OutdatedCreature.InstanceType);
86+
if (OutdatedCreature.InstanceType == CreatureInstanceType.OutdatedCreature)
87+
{
88+
message.Write(OutdatedCreature.Id);
89+
message.Write(OutdatedCreature.HealthPercent);
90+
message.Write((byte)OutdatedCreature.Direction);
91+
if (OutdatedCreature.Outfit is OutfitInstance)
92+
{
93+
message.Write((OutfitInstance)OutdatedCreature.Outfit);
94+
}
95+
else
96+
{
97+
message.Write((ushort)0);
98+
message.Write((ushort)OutdatedCreature.Outfit.Id);
99+
}
100+
message.Write((ushort)OutdatedCreature.Mount.Id);
101+
message.Write(OutdatedCreature.Brightness);
102+
message.Write(OutdatedCreature.LightColor);
103+
message.Write(OutdatedCreature.Speed);
104+
message.Write(OutdatedCreature.PkFlag);
105+
message.Write(OutdatedCreature.PartyFlag);
106+
message.Write(OutdatedCreature.GuildFlag);
107+
message.Write((byte)OutdatedCreature.Type);
108+
if (OutdatedCreature.Type == Constants.CreatureType.Player)
109+
{
110+
message.Write(OutdatedCreature.Vocation);
111+
}
112+
else if (OutdatedCreature.IsSummon)
113+
{
114+
message.Write(OutdatedCreature.SummonerCreatureId);
115+
}
116+
message.Write(OutdatedCreature.SpeechCategory);
117+
message.Write(OutdatedCreature.Mark);
118+
message.Write(OutdatedCreature.InspectionState);
119+
message.Write(OutdatedCreature.IsUnpassable);
120+
}
121+
}
122+
else if (Type == 0x0B) // ManaPercent
123+
{
124+
message.Write(ManaPercent);
125+
}
126+
else if (Type == 0x0C) // Unknown
127+
{
128+
message.Write(Unknown);
129+
}
130+
}
131+
}
132+
}

TibiaAPI/Network/ServerPackets/Outfit.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ public class Outfit : ServerPacket
88
{
99
public List<(ushort FemaleLooktype, ushort MaleLooktype)> HirelingDresses { get; } =
1010
new List<(ushort FemaleLooktype, ushort MaleLooktype)>();
11-
public List<(ushort Id, string Name, byte Addons, bool EnableStoreLink, uint StoreOfferId)> Outfits { get; } =
12-
new List<(ushort Id, string Name, byte Addons, bool EnableStoreLink, uint StoreOfferId)>();
13-
public List<(ushort Id, string Name, bool EnableStoreLink, uint StoreOfferId)> Mounts { get; } =
14-
new List<(ushort Id, string Name, bool EnableStoreLink, uint StoreOfferId)>();
11+
public List<(ushort Id, string Name, byte Addons, byte ButtonType, uint StoreOfferId)> Outfits { get; } =
12+
new List<(ushort Id, string Name, byte Addons, byte ButtonType, uint StoreOfferId)>();
13+
public List<(ushort Id, string Name, byte ButtonType, uint StoreOfferId)> Mounts { get; } =
14+
new List<(ushort Id, string Name, byte ButtonType, uint StoreOfferId)>();
1515

1616
public ushort MountId { get; set; }
1717
public ushort OutfitId { get; set; }
@@ -45,27 +45,27 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
4545
var id = message.ReadUInt16();
4646
var name = message.ReadString();
4747
var addons = message.ReadByte();
48-
var enableStoreLink = Client.VersionNumber >= 11750000 ? message.ReadBool() : false;
48+
var buttonType = Client.VersionNumber >= 11750000 ? message.ReadByte() : byte.MinValue;
4949
uint storeOfferId = 0;
50-
if (enableStoreLink)
50+
if (buttonType == 0x01)
5151
{
5252
storeOfferId = message.ReadUInt32();
5353
}
54-
Outfits.Add((id, name, addons, enableStoreLink, storeOfferId));
54+
Outfits.Add((id, name, addons, buttonType, storeOfferId));
5555
}
5656

5757
Mounts.Capacity = Client.VersionNumber >= 11750000 ? message.ReadUInt16() : message.ReadByte();
5858
for (var i = 0; i < Mounts.Capacity; ++i)
5959
{
6060
var id = message.ReadUInt16();
6161
var name = message.ReadString();
62-
var enableStoreLink = Client.VersionNumber >= 11750000 ? message.ReadBool(): false;
62+
var buttonType = Client.VersionNumber >= 11750000 ? message.ReadByte() : byte.MinValue;
6363
uint storeOfferId = 0;
64-
if (enableStoreLink)
64+
if (buttonType == 0x01)
6565
{
6666
storeOfferId = message.ReadUInt32();
6767
}
68-
Mounts.Add((id, name, enableStoreLink, storeOfferId));
68+
Mounts.Add((id, name, buttonType, storeOfferId));
6969
}
7070

7171
Type = message.ReadUInt16();
@@ -106,16 +106,16 @@ public override void AppendToNetworkMessage(NetworkMessage message)
106106

107107
for (var i = 0; i < count; ++i)
108108
{
109-
var outfit = Outfits[i];
110-
message.Write(outfit.Id);
111-
message.Write(outfit.Name);
112-
message.Write(outfit.Addons);
109+
var (Id, Name, Addons, ButtonType, StoreOfferId) = Outfits[i];
110+
message.Write(Id);
111+
message.Write(Name);
112+
message.Write(Addons);
113113
if (Client.VersionNumber >= 11750000)
114114
{
115-
message.Write(outfit.EnableStoreLink);
116-
if (outfit.EnableStoreLink)
115+
message.Write(ButtonType);
116+
if (ButtonType == 0x01)
117117
{
118-
message.Write(outfit.StoreOfferId);
118+
message.Write(StoreOfferId);
119119
}
120120
}
121121
}
@@ -133,13 +133,13 @@ public override void AppendToNetworkMessage(NetworkMessage message)
133133

134134
for (var i = 0; i < count; ++i)
135135
{
136-
var (Id, Name, EnableStoreLink, StoreOfferId) = Mounts[i];
136+
var (Id, Name, ButtonType, StoreOfferId) = Mounts[i];
137137
message.Write(Id);
138138
message.Write(Name);
139139
if (Client.VersionNumber >= 11750000)
140140
{
141-
message.Write(EnableStoreLink);
142-
if (EnableStoreLink)
141+
message.Write(ButtonType);
142+
if (ButtonType == 0x01)
143143
{
144144
message.Write(StoreOfferId);
145145
}

0 commit comments

Comments
 (0)