Skip to content

Commit 945f4ba

Browse files
authored
Winter Update 2019 (jo3bingham#28)
* Add new server and client packet opcodes * Address changes to PreyPrices server packet * Begin work on new client packets * Begin work on new server packets * Invoke received event for new packets * Additional packet changes * Fix unknowns in PreyPrices server packet Fix invalid client version check. * Add PartyHuntAnalyser packet * Add appending of PartyHuntAnalyser packet to a NetworkMessage * Confirmed unknown credit balance as tournament coins * Add new MessageModes * Additional packet changes * Increase CreatureStorage capacity
1 parent b4a30f7 commit 945f4ba

21 files changed

Lines changed: 683 additions & 18 deletions

TibiaAPI/Client.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public class Client : IDisposable
2020

2121
public Utilities.Logger Logger { get; } = new Utilities.Logger();
2222

23+
public Creatures.Creature Player { get; } = new Creatures.Creature(0);
24+
2325
public string Version { get; private set; }
2426

2527
public uint VersionNumber { get; private set; } = 0;

TibiaAPI/Constants/Enums.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,10 @@ public enum MessageModeType
305305
Market = 42,
306306
Mana = 43,
307307
BeyondLast = 44,
308+
Attention = 48,
308309
BoostedCreature = 49,
309310
OfflineTraining = 50,
311+
Transaction = 51,
310312
Potion = 52
311313
}
312314

@@ -323,6 +325,8 @@ public enum ClientPacketType
323325
PerformanceMetrics = 0x1F,
324326
StashAction = 0x28,
325327
DepotSearchRetrieve = 0x29,
328+
TrackBestiaryRace = 0x2A,
329+
PartyHuntAnalyser = 0x2B,
326330
ClientCheck = 0x63,
327331
GoPath = 0x64,
328332
GoNorth = 0x65,
@@ -390,6 +394,8 @@ public enum ClientPacketType
390394
OpenChannel = 0xAA,
391395
InviteToChannel = 0xAB,
392396
ExcludeFromChannel = 0xAC,
397+
CyclopediaHouseAction = 0xAD,
398+
PreyHuntingTaskAction = 0xBA,
393399
Cancel = 0xBE,
394400
TournamentInformation = 0xC4,
395401
SubscribeToUpdates = 0xC6,
@@ -469,6 +475,7 @@ public enum ServerPacketType
469475
Dead = 0x28,
470476
Stash = 0x29,
471477
DepotTileState = 0x2A,
478+
PartyHuntAnalyser = 0x2B,
472479
SpecialContainersAvailable = 0x2C,
473480
ClientCheck = 0x63,
474481
FullMap = 0x64,
@@ -547,12 +554,18 @@ public enum ServerPacketType
547554
Wait = 0xB6,
548555
UnjustifiedPoints = 0xB7,
549556
PvpSituations = 0xB8,
557+
BestiaryTracker = 0xB9,
558+
PreyHuntingTaskBaseData = 0xBA,
559+
PreyHuntingTaskData = 0xBB,
550560
TopFloor = 0xBE,
551561
BottomFloor = 0xBF,
552562
UpdateLootContainers = 0xC0,
553563
PlayerDataTournament = 0xC1,
564+
CyclopediaHouseActionResult = 0xC3,
554565
TournamentInformation = 0xC4,
555566
TournamentLeaderboard = 0xC5,
567+
CyclopediaStaticHouseData = 0xC6,
568+
CyclopediaCurrentHouseData = 0xC7,
556569
Outfit = 0xC8,
557570
ExivaSuppressed = 0xC9,
558571
UpdateExivaOptions = 0xCA,

TibiaAPI/Creatures/CreatureStorage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ namespace OXGaming.TibiaAPI.Creatures
66
{
77
public class CreatureStorage
88
{
9-
private const int MaxCreaturesCount = 1300;
9+
private const int MaxCreaturesCount = 2600;
1010

11-
private readonly List<Creature> _creatures = new List<Creature>();
11+
private readonly List<Creature> _creatures = new List<Creature>(MaxCreaturesCount);
1212

1313
public void Reset()
1414
{

TibiaAPI/Network/ClientPacket.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public static ClientPacket CreateInstance(Client client, ClientPacketType type)
3434
return new ClientPackets.StashAction(client);
3535
case ClientPacketType.DepotSearchRetrieve:
3636
return new ClientPackets.DepotSearchRetrieve(client);
37+
case ClientPacketType.TrackBestiaryRace:
38+
return new ClientPackets.TrackBestiaryRace(client);
3739
case ClientPacketType.ClientCheck:
3840
return new ClientPackets.ClientCheck(client);
3941
case ClientPacketType.GoPath:
@@ -168,6 +170,8 @@ public static ClientPacket CreateInstance(Client client, ClientPacketType type)
168170
return new ClientPackets.InviteToChannel(client);
169171
case ClientPacketType.ExcludeFromChannel:
170172
return new ClientPackets.ExcludeFromChannel(client);
173+
case ClientPacketType.CyclopediaHouseAction:
174+
return new ClientPackets.CyclopediaHouseAction(client);
171175
case ClientPacketType.Cancel:
172176
return new ClientPackets.Cancel(client);
173177
case ClientPacketType.TournamentInformation:
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using OXGaming.TibiaAPI.Constants;
2+
3+
namespace OXGaming.TibiaAPI.Network.ClientPackets
4+
{
5+
public class CyclopediaHouseAction : ClientPacket
6+
{
7+
public string Town { get; set; }
8+
9+
public byte Unknown { get; set; }
10+
11+
public CyclopediaHouseAction(Client client)
12+
{
13+
Client = client;
14+
PacketType = ClientPacketType.CyclopediaHouseAction;
15+
}
16+
17+
public override void ParseFromNetworkMessage(NetworkMessage message)
18+
{
19+
Unknown = message.ReadByte(); //always 0x00?
20+
Town = message.ReadString();
21+
}
22+
23+
public override void AppendToNetworkMessage(NetworkMessage message)
24+
{
25+
message.Write((byte)ClientPacketType.CyclopediaHouseAction);
26+
message.Write(Unknown);
27+
message.Write(Town);
28+
}
29+
}
30+
}

TibiaAPI/Network/ClientPackets/StashAction.cs

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
using OXGaming.TibiaAPI.Constants;
2+
using OXGaming.TibiaAPI.Network.ServerPackets;
3+
using OXGaming.TibiaAPI.Utilities;
24

35
namespace OXGaming.TibiaAPI.Network.ClientPackets
46
{
57
public class StashAction : ClientPacket
68
{
9+
public Position Position { get; set; }
10+
711
public uint ItemCount { get; set; }
812

913
public ushort ItemId { get; set; }
1014

1115
public byte StashType { get; set; }
12-
public byte Unknown { get; set; }
16+
public byte Unknown1 { get; set; }
17+
public byte Unknown2 { get; set; }
1318

1419
public StashAction(Client client)
1520
{
@@ -21,13 +26,25 @@ public override void ParseFromNetworkMessage(NetworkMessage message)
2126
{
2227
StashType = message.ReadByte();
2328
// TODO: Are there more stash types? 3 = retrieve?
24-
if (StashType == 3)
29+
if (StashType == 0 || StashType == 1 || StashType == 2)
30+
{
31+
// This hasn't been validated as 100% accurate.
32+
// Based on the following data: 01 FF FF 40 00 0A 3D 17 0A
33+
Position = message.ReadPosition();
34+
ItemId = message.ReadUInt16();
35+
Unknown1 = message.ReadByte();
36+
if (StashType == 0)
37+
{
38+
Unknown2 = message.ReadByte();
39+
}
40+
}
41+
else if (StashType == 3)
2542
{
2643
ItemId = message.ReadUInt16();
2744
ItemCount = message.ReadUInt32();
2845
if (Client.VersionNumber >= 12200000)
2946
{
30-
Unknown = message.ReadByte();
47+
Unknown1 = message.ReadByte();
3148
}
3249
}
3350
}
@@ -36,13 +53,23 @@ public override void AppendToNetworkMessage(NetworkMessage message)
3653
{
3754
message.Write((byte)ClientPacketType.StashAction);
3855
message.Write(StashType);
39-
if (StashType == 3)
56+
if (StashType == 0 || StashType == 1 || StashType == 2)
57+
{
58+
message.Write(Position);
59+
message.Write(ItemId);
60+
message.Write(Unknown1);
61+
if (StashType == 0)
62+
{
63+
message.Write(Unknown2);
64+
}
65+
}
66+
else if (StashType == 3)
4067
{
4168
message.Write(ItemId);
4269
message.Write(ItemCount);
4370
if (Client.VersionNumber >= 12200000)
4471
{
45-
message.Write(Unknown);
72+
message.Write(Unknown1);
4673
}
4774
}
4875
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using OXGaming.TibiaAPI.Constants;
2+
3+
namespace OXGaming.TibiaAPI.Network.ClientPackets
4+
{
5+
public class TrackBestiaryRace : ClientPacket
6+
{
7+
public ushort RaceId { get; set; }
8+
9+
public byte Unknown { get; set; }
10+
11+
public TrackBestiaryRace(Client client)
12+
{
13+
Client = client;
14+
PacketType = ClientPacketType.TrackBestiaryRace;
15+
}
16+
17+
public override void ParseFromNetworkMessage(NetworkMessage message)
18+
{
19+
RaceId = message.ReadUInt16();
20+
Unknown = message.ReadByte();
21+
}
22+
23+
public override void AppendToNetworkMessage(NetworkMessage message)
24+
{
25+
message.Write((byte)ClientPacketType.TrackBestiaryRace);
26+
message.Write(RaceId);
27+
message.Write(Unknown);
28+
}
29+
}
30+
}

TibiaAPI/Network/Communication.cs

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public class Communication
2121
public event ReceivedPacketEventHandler OnReceivedClientPerformanceMetricsPacket;
2222
public event ReceivedPacketEventHandler OnReceivedClientStashActionPacket;
2323
public event ReceivedPacketEventHandler OnReceivedClientDepotSearchRetrievePacket;
24+
public event ReceivedPacketEventHandler OnReceivedClientTrackBestiaryRacePacket;
25+
public event ReceivedPacketEventHandler OnReceivedClientPartyHuntAnalyserPacket;
2426
public event ReceivedPacketEventHandler OnReceivedClientClientCheckPacket;
2527
public event ReceivedPacketEventHandler OnReceivedClientGoPathPacket;
2628
public event ReceivedPacketEventHandler OnReceivedClientGoNorthPacket;
@@ -88,6 +90,8 @@ public class Communication
8890
public event ReceivedPacketEventHandler OnReceivedClientOpenChannelPacket;
8991
public event ReceivedPacketEventHandler OnReceivedClientInviteToChannelPacket;
9092
public event ReceivedPacketEventHandler OnReceivedClientExcludeFromChannelPacket;
93+
public event ReceivedPacketEventHandler OnReceivedClientCyclopediaHouseActionPacket;
94+
public event ReceivedPacketEventHandler OnReceivedClientPreyHuntingTaskActionPacket;
9195
public event ReceivedPacketEventHandler OnReceivedClientCancelPacket;
9296
public event ReceivedPacketEventHandler OnReceivedClientTournamentInformationPacket;
9397
public event ReceivedPacketEventHandler OnReceivedClientSubscribeToUpdatesPacket;
@@ -163,6 +167,7 @@ public class Communication
163167
public event ReceivedPacketEventHandler OnReceivedServerDeadPacket;
164168
public event ReceivedPacketEventHandler OnReceivedServerStashPacket;
165169
public event ReceivedPacketEventHandler OnReceivedServerDepotTileStatePacket;
170+
public event ReceivedPacketEventHandler OnReceivedServerPartyHuntAnalyserPacket;
166171
public event ReceivedPacketEventHandler OnReceivedServerSpecialContainersAvailablePacket;
167172
public event ReceivedPacketEventHandler OnReceivedServerClientCheckPacket;
168173
public event ReceivedPacketEventHandler OnReceivedServerFullMapPacket;
@@ -241,12 +246,18 @@ public class Communication
241246
public event ReceivedPacketEventHandler OnReceivedServerWaitPacket;
242247
public event ReceivedPacketEventHandler OnReceivedServerUnjustifiedPointsPacket;
243248
public event ReceivedPacketEventHandler OnReceivedServerPvpSituationsPacket;
249+
public event ReceivedPacketEventHandler OnReceivedServerBestiaryTrackerPacket;
250+
public event ReceivedPacketEventHandler OnReceivedServerPreyHuntingTaskBaseDataPacket;
251+
public event ReceivedPacketEventHandler OnReceivedServerPreyHuntingTaskDataPacket;
244252
public event ReceivedPacketEventHandler OnReceivedServerTopFloorPacket;
245253
public event ReceivedPacketEventHandler OnReceivedServerBottomFloorPacket;
246254
public event ReceivedPacketEventHandler OnReceivedServerUpdateLootContainersPacket;
247255
public event ReceivedPacketEventHandler OnReceivedServerPlayerDataTournamentPacket;
248-
public event ReceivedPacketEventHandler OnReceivedServerTournamentLeaderboardPacket;
256+
public event ReceivedPacketEventHandler OnReceivedServerCyclopediaHouseActionResultPacket;
249257
public event ReceivedPacketEventHandler OnReceivedServerTournamentInformationPacket;
258+
public event ReceivedPacketEventHandler OnReceivedServerTournamentLeaderboardPacket;
259+
public event ReceivedPacketEventHandler OnReceivedServerCyclopediaStaticHouseDataPacket;
260+
public event ReceivedPacketEventHandler OnReceivedServerCyclopediaCurrentHouseDataPacket;
250261
public event ReceivedPacketEventHandler OnReceivedServerOutfitPacket;
251262
public event ReceivedPacketEventHandler OnReceivedServerExivaSuppressedPacket;
252263
public event ReceivedPacketEventHandler OnReceivedServerUpdateExivaOptionsPacket;
@@ -377,6 +388,12 @@ public void ParseClientMessage(Client client, NetworkMessage inMessage, NetworkM
377388
case ClientPacketType.DepotSearchRetrieve:
378389
packet.Forward = OnReceivedClientDepotSearchRetrievePacket?.Invoke(packet) ?? true;
379390
break;
391+
case ClientPacketType.TrackBestiaryRace:
392+
packet.Forward = OnReceivedClientTrackBestiaryRacePacket?.Invoke(packet) ?? true;
393+
break;
394+
case ClientPacketType.PartyHuntAnalyser:
395+
packet.Forward = OnReceivedClientPartyHuntAnalyserPacket?.Invoke(packet) ?? true;
396+
break;
380397
case ClientPacketType.ClientCheck:
381398
packet.Forward = OnReceivedClientClientCheckPacket?.Invoke(packet) ?? true;
382399
break;
@@ -578,6 +595,12 @@ public void ParseClientMessage(Client client, NetworkMessage inMessage, NetworkM
578595
case ClientPacketType.ExcludeFromChannel:
579596
packet.Forward = OnReceivedClientExcludeFromChannelPacket?.Invoke(packet) ?? true;
580597
break;
598+
case ClientPacketType.CyclopediaHouseAction:
599+
packet.Forward = OnReceivedClientCyclopediaHouseActionPacket?.Invoke(packet) ?? true;
600+
break;
601+
case ClientPacketType.PreyHuntingTaskAction:
602+
packet.Forward = OnReceivedClientPreyHuntingTaskActionPacket?.Invoke(packet) ?? true;
603+
break;
581604
case ClientPacketType.Cancel:
582605
packet.Forward = OnReceivedClientCancelPacket?.Invoke(packet) ?? true;
583606
break;
@@ -858,7 +881,17 @@ public void ParseServerMessage(Client client, NetworkMessage inMessage, NetworkM
858881
packet.Forward = OnReceivedServerStashPacket?.Invoke(packet) ?? true;
859882
break;
860883
case ServerPacketType.DepotTileState:
861-
packet.Forward = OnReceivedServerDepotTileStatePacket?.Invoke(packet) ?? true;
884+
if (client.VersionNumber >= 1230000)
885+
{
886+
packet.Forward = OnReceivedServerSpecialContainersAvailablePacket?.Invoke(packet) ?? true;
887+
}
888+
else
889+
{
890+
packet.Forward = OnReceivedServerDepotTileStatePacket?.Invoke(packet) ?? true;
891+
}
892+
break;
893+
case ServerPacketType.PartyHuntAnalyser:
894+
packet.Forward = OnReceivedServerPartyHuntAnalyserPacket?.Invoke(packet) ?? true;
862895
break;
863896
case ServerPacketType.SpecialContainersAvailable:
864897
packet.Forward = OnReceivedServerSpecialContainersAvailablePacket?.Invoke(packet) ?? true;
@@ -1098,6 +1131,15 @@ public void ParseServerMessage(Client client, NetworkMessage inMessage, NetworkM
10981131
case ServerPacketType.PvpSituations:
10991132
packet.Forward = OnReceivedServerPvpSituationsPacket?.Invoke(packet) ?? true;
11001133
break;
1134+
case ServerPacketType.BestiaryTracker:
1135+
packet.Forward = OnReceivedServerBestiaryTrackerPacket?.Invoke(packet) ?? true;
1136+
break;
1137+
case ServerPacketType.PreyHuntingTaskBaseData:
1138+
packet.Forward = OnReceivedServerPreyHuntingTaskBaseDataPacket?.Invoke(packet) ?? true;
1139+
break;
1140+
case ServerPacketType.PreyHuntingTaskData:
1141+
packet.Forward = OnReceivedServerPreyHuntingTaskDataPacket?.Invoke(packet) ?? true;
1142+
break;
11011143
case ServerPacketType.TopFloor:
11021144
packet.Forward = OnReceivedServerTopFloorPacket?.Invoke(packet) ?? true;
11031145
break;
@@ -1110,12 +1152,21 @@ public void ParseServerMessage(Client client, NetworkMessage inMessage, NetworkM
11101152
case ServerPacketType.PlayerDataTournament:
11111153
packet.Forward = OnReceivedServerPlayerDataTournamentPacket?.Invoke(packet) ?? true;
11121154
break;
1113-
case ServerPacketType.TournamentLeaderboard:
1114-
packet.Forward = OnReceivedServerTournamentLeaderboardPacket?.Invoke(packet) ?? true;
1155+
case ServerPacketType.CyclopediaHouseActionResult:
1156+
packet.Forward = OnReceivedServerCyclopediaHouseActionResultPacket?.Invoke(packet) ?? true;
11151157
break;
11161158
case ServerPacketType.TournamentInformation:
11171159
packet.Forward = OnReceivedServerTournamentInformationPacket?.Invoke(packet) ?? true;
11181160
break;
1161+
case ServerPacketType.TournamentLeaderboard:
1162+
packet.Forward = OnReceivedServerTournamentLeaderboardPacket?.Invoke(packet) ?? true;
1163+
break;
1164+
case ServerPacketType.CyclopediaStaticHouseData:
1165+
packet.Forward = OnReceivedServerCyclopediaStaticHouseDataPacket?.Invoke(packet) ?? true;
1166+
break;
1167+
case ServerPacketType.CyclopediaCurrentHouseData:
1168+
packet.Forward = OnReceivedServerCyclopediaCurrentHouseDataPacket?.Invoke(packet) ?? true;
1169+
break;
11191170
case ServerPacketType.Outfit:
11201171
packet.Forward = OnReceivedServerOutfitPacket?.Invoke(packet) ?? true;
11211172
break;

0 commit comments

Comments
 (0)