Skip to content

Commit fc20fc8

Browse files
committed
Add backwards compatibility to 11.9x protocol
1 parent 82d1a2f commit fc20fc8

File tree

11 files changed

+106
-13
lines changed

11 files changed

+106
-13
lines changed

TibiaAPI/Appearances/AppearanceInstance.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class AppearanceInstance
88

99
public uint Id { get; }
1010

11+
public byte Mark { get; set; }
1112
public byte Phase { get; set; }
1213

1314
public AppearanceInstance(uint id, Appearance type)

TibiaAPI/Constants/Enums.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,7 @@ public enum ServerPacketType
441441
CreatureParty = 0x91,
442442
CreatureUnpass = 0x92,
443443
CreatureMarks = 0x93,
444+
CreaturePvpHelpers = 0x94,
444445
CreatureType = 0x95,
445446
EditText = 0x96,
446447
EditList = 0x97,

TibiaAPI/Creatures/Creature.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class Creature
2121
public uint RemoveCreatureId { get; set; }
2222
public uint SummonerCreatureId { get; set; }
2323

24+
public ushort PvpHelpers { get; set; }
2425
public ushort Speed { get; set; }
2526

2627
public byte Brightness { get; set; }

TibiaAPI/Network/ClientPackets/RequestShopOffers.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
3636
}
3737

3838
// TODO: Figure out this unknown.
39-
Unknown = message.ReadUInt32();
39+
Unknown = (Client.VersionNumber >= 11900000) ? message.ReadUInt32() : message.ReadUInt16();
4040
return true;
4141
}
4242

@@ -52,7 +52,14 @@ public override void AppendToNetworkMessage(NetworkMessage message)
5252
{
5353
message.Write(Category);
5454
}
55-
message.Write(Unknown);
55+
if (Client.VersionNumber >= 11900000)
56+
{
57+
message.Write(Unknown);
58+
}
59+
else
60+
{
61+
message.Write((ushort)Unknown);
62+
}
5663
}
5764
}
5865
}

TibiaAPI/Network/Communication.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ public class Communication
188188
public event ReceivedPacketEventHandler OnReceivedServerCreaturePartyPacket;
189189
public event ReceivedPacketEventHandler OnReceivedServerCreatureUnpassPacket;
190190
public event ReceivedPacketEventHandler OnReceivedServerCreatureMarksPacket;
191+
public event ReceivedPacketEventHandler OnReceivedServerCreaturePvpHelpersPacket;
191192
public event ReceivedPacketEventHandler OnReceivedServerCreatureTypePacket;
192193
public event ReceivedPacketEventHandler OnReceivedServerEditTextPacket;
193194
public event ReceivedPacketEventHandler OnReceivedServerEditListPacket;
@@ -2652,6 +2653,19 @@ public void ParseServerMessage(Client client, NetworkMessage inMessage, NetworkM
26522653
}
26532654
}
26542655
break;
2656+
case ServerPacketType.CreaturePvpHelpers:
2657+
{
2658+
var packet = new ServerPackets.CreaturePvpHelpers(client);
2659+
if (packet.ParseFromNetworkMessage(inMessage))
2660+
{
2661+
packet.Forward = OnReceivedServerCreaturePvpHelpersPacket?.Invoke(packet) ?? true;
2662+
if (packet.Forward)
2663+
{
2664+
packet.AppendToNetworkMessage(outMessage);
2665+
}
2666+
}
2667+
}
2668+
break;
26552669
case ServerPacketType.CreatureType:
26562670
{
26572671
var packet = new ServerPackets.CreatureType(client);

TibiaAPI/Network/NetworkMessage.cs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,9 +331,9 @@ public ObjectInstance ReadObjectInstance(ushort id = 0)
331331
return objectInstance;
332332
}
333333

334-
if (_client.VersionNumber < 19000000)
334+
if (_client.VersionNumber < 11900000)
335335
{
336-
ReadByte(); // mark
336+
objectInstance.Mark = ReadByte();
337337
}
338338

339339
if (objectType.Flags.Liquidcontainer || objectType.Flags.Liquidpool || objectType.Flags.Cumulative)
@@ -414,6 +414,10 @@ public Creature ReadCreatureInstance(int id = -1, Position position = null)
414414
creature.SpeechCategory = ReadByte();
415415
creature.Mark = ReadByte();
416416
creature.InspectionState = ReadByte();
417+
if (_client.VersionNumber < 11900000)
418+
{
419+
creature.PvpHelpers = ReadUInt16();
420+
}
417421
creature.IsUnpassable = ReadBool();
418422
}
419423
break;
@@ -443,6 +447,10 @@ public Creature ReadCreatureInstance(int id = -1, Position position = null)
443447
creature.SpeechCategory = ReadByte();
444448
creature.Mark = ReadByte();
445449
creature.InspectionState = ReadByte();
450+
if (_client.VersionNumber < 11900000)
451+
{
452+
creature.PvpHelpers = ReadUInt16();
453+
}
446454
creature.IsUnpassable = ReadBool();
447455
}
448456
break;
@@ -580,6 +588,7 @@ public void ReadDailyReward()
580588

581589
public int ReadField(int x, int y, int z, List<(Field, Position)> fields)
582590
{
591+
var hasSetEnvironmentalEffect = false;
583592
var thingsCount = 0;
584593
var numberOfTilesToSkip = 0;
585594
var mapPosition = new Position(x, y, z);
@@ -594,6 +603,15 @@ public int ReadField(int x, int y, int z, List<(Field, Position)> fields)
594603
break;
595604
}
596605

606+
if (!hasSetEnvironmentalEffect)
607+
{
608+
hasSetEnvironmentalEffect = true;
609+
if (_client.VersionNumber < 11900000)
610+
{
611+
continue;
612+
}
613+
}
614+
597615
if (thingId == (int)CreatureInstanceType.UnknownCreature ||
598616
thingId == (int)CreatureInstanceType.OutdatedCreature ||
599617
thingId == (int)CreatureInstanceType.Creature)
@@ -897,6 +915,11 @@ public void Write(ObjectInstance value)
897915
return;
898916
}
899917

918+
if (_client.VersionNumber < 11900000)
919+
{
920+
Write(value.Mark);
921+
}
922+
900923
if (value.Type.Flags.Liquidcontainer || value.Type.Flags.Liquidpool || value.Type.Flags.Cumulative)
901924
{
902925
Write((byte)value.Data);
@@ -961,6 +984,10 @@ public void Write(Creature value, CreatureInstanceType type)
961984
Write(value.SpeechCategory);
962985
Write(value.Mark);
963986
Write(value.InspectionState);
987+
if (_client.VersionNumber < 11900000)
988+
{
989+
Write(value.PvpHelpers);
990+
}
964991
Write(value.IsUnpassable);
965992
}
966993
break;
@@ -995,6 +1022,10 @@ public void Write(Creature value, CreatureInstanceType type)
9951022
Write(value.SpeechCategory);
9961023
Write(value.Mark);
9971024
Write(value.InspectionState);
1025+
if (_client.VersionNumber < 11900000)
1026+
{
1027+
Write(value.PvpHelpers);
1028+
}
9981029
Write(value.IsUnpassable);
9991030
}
10001031
break;

TibiaAPI/Network/ServerPackets/MonsterCyclopediaNewDetails.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ namespace OXGaming.TibiaAPI.Network.ServerPackets
44
{
55
public class MonsterCyclopediaNewDetails : ServerPacket
66
{
7+
private byte[] _unknown = new byte[3];
8+
79
public ushort RaceId { get; set; }
810

911
public MonsterCyclopediaNewDetails(Client client)
@@ -20,13 +22,22 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
2022
}
2123

2224
RaceId = message.ReadUInt16();
25+
26+
if (Client.VersionNumber < 11900000)
27+
{
28+
_unknown = message.ReadBytes(3);
29+
}
2330
return true;
2431
}
2532

2633
public override void AppendToNetworkMessage(NetworkMessage message)
2734
{
2835
message.Write((byte)ServerPacketType.MonsterCyclopediaNewDetails);
2936
message.Write(RaceId);
37+
if (Client.VersionNumber < 11900000)
38+
{
39+
message.Write(_unknown);
40+
}
3041
}
3142
}
3243
}

TibiaAPI/Network/ServerPackets/PlayerDataCurrent.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class PlayerDataCurrent : ServerPacket
2222
public ushort Speed { get; set; }
2323
public ushort Stamina { get; set; }
2424
public ushort StoreBoostAddend { get; set; }
25+
public ushort VoucherAddend { get; set; }
2526

2627
public byte LevelPercent { get; set; }
2728
public byte MagicLevel { get; set; }
@@ -50,6 +51,10 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
5051
Level = message.ReadUInt16();
5152
LevelPercent = message.ReadByte();
5253
BaseXpGain = message.ReadUInt16();
54+
if (Client.VersionNumber < 11900000)
55+
{
56+
VoucherAddend = message.ReadUInt16();
57+
}
5358
GrindingAddend = message.ReadUInt16();
5459
StoreBoostAddend = message.ReadUInt16();
5560
HuntingBoostFactor = message.ReadUInt16();
@@ -81,6 +86,10 @@ public override void AppendToNetworkMessage(NetworkMessage message)
8186
message.Write(Level);
8287
message.Write(LevelPercent);
8388
message.Write(BaseXpGain);
89+
if (Client.VersionNumber < 11900000)
90+
{
91+
message.Write(VoucherAddend);
92+
}
8493
message.Write(GrindingAddend);
8594
message.Write(StoreBoostAddend);
8695
message.Write(HuntingBoostFactor);

TibiaAPI/Network/ServerPackets/PreyPrices.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,23 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
2323
}
2424

2525
ListRerollPrice = message.ReadUInt32();
26-
AutomaticBonusReroll = message.ReadByte();
27-
LockPrey = message.ReadByte();
26+
if (Client.VersionNumber >= 11900000)
27+
{
28+
AutomaticBonusReroll = message.ReadByte();
29+
LockPrey = message.ReadByte();
30+
}
2831
return true;
2932
}
3033

3134
public override void AppendToNetworkMessage(NetworkMessage message)
3235
{
3336
message.Write((byte)ServerPacketType.PreyPrices);
3437
message.Write(ListRerollPrice);
35-
message.Write(AutomaticBonusReroll);
36-
message.Write(LockPrey);
38+
if (Client.VersionNumber >= 11900000)
39+
{
40+
message.Write(AutomaticBonusReroll);
41+
message.Write(LockPrey);
42+
}
3743
}
3844
}
3945
}

TibiaAPI/Network/ServerPackets/SetStoreDeepLink.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,22 @@ public override bool ParseFromNetworkMessage(NetworkMessage message)
2121
return false;
2222
}
2323

24-
// TODO: Figure out this unknown.
25-
Unknown = message.ReadUInt16();
24+
if (Client.VersionNumber >= 11900000)
25+
{
26+
// TODO: Figure out this unknown.
27+
Unknown = message.ReadUInt16();
28+
}
2629
StoreServiceType = (StoreServiceType)message.ReadByte();
2730
return true;
2831
}
2932

3033
public override void AppendToNetworkMessage(NetworkMessage message)
3134
{
3235
message.Write((byte)ServerPacketType.SetStoreDeepLink);
33-
message.Write(Unknown);
36+
if (Client.VersionNumber >= 11900000)
37+
{
38+
message.Write(Unknown);
39+
}
3440
message.Write((byte)StoreServiceType);
3541
}
3642
}

0 commit comments

Comments
 (0)