|
1 | 1 | using System; |
2 | 2 | using System.Collections.Generic; |
| 3 | +using System.IO; |
3 | 4 | using System.Linq; |
4 | 5 |
|
5 | 6 | using OXGaming.TibiaAPI.Constants; |
@@ -82,6 +83,7 @@ public class Communication |
82 | 83 | public event ReceivedPacketEventHandler OnReceivedClientInviteToChannelPacket; |
83 | 84 | public event ReceivedPacketEventHandler OnReceivedClientExcludeFromChannelPacket; |
84 | 85 | public event ReceivedPacketEventHandler OnReceivedClientCancelPacket; |
| 86 | + public event ReceivedPacketEventHandler OnReceivedClientGetTransactionDetailsPacket; |
85 | 87 | public event ReceivedPacketEventHandler OnReceivedClientUpdateExivaOptionsPacket; |
86 | 88 | public event ReceivedPacketEventHandler OnReceivedClientBrowseFieldPacket; |
87 | 89 | public event ReceivedPacketEventHandler OnReceivedClientSeekInContainerPacket; |
@@ -227,6 +229,7 @@ public class Communication |
227 | 229 | public event ReceivedPacketEventHandler OnReceivedServerOutfitPacket; |
228 | 230 | public event ReceivedPacketEventHandler OnReceivedServerExivaSuppressedPacket; |
229 | 231 | public event ReceivedPacketEventHandler OnReceivedServerUpdateExivaOptionsPacket; |
| 232 | + public event ReceivedPacketEventHandler OnReceivedServerTransactionDetailsPacket; |
230 | 233 | public event ReceivedPacketEventHandler OnReceivedServerImpactTrackingPacket; |
231 | 234 | public event ReceivedPacketEventHandler OnReceivedServerMarketStatisticsPacket; |
232 | 235 | public event ReceivedPacketEventHandler OnReceivedServerItemWastedPacket; |
@@ -299,6 +302,17 @@ public void ParseClientMessage(Client client, NetworkMessage inMessage, NetworkM |
299 | 302 |
|
300 | 303 | try |
301 | 304 | { |
| 305 | + // This may possibly be a Login packet. In that case, we have to move to the correct position |
| 306 | + // as the Login packet doesn't contain the 2 bytes for the payload size as other packets. |
| 307 | + if (inMessage.SequenceNumber == 0) |
| 308 | + { |
| 309 | + inMessage.Seek(6, SeekOrigin.Begin); |
| 310 | + if (inMessage.PeekByte() != (byte)ClientPacketType.Login) |
| 311 | + { |
| 312 | + inMessage.Seek(2, SeekOrigin.Current); |
| 313 | + } |
| 314 | + } |
| 315 | + |
302 | 316 | while (inMessage.Position < inMessage.Size) |
303 | 317 | { |
304 | 318 | packetPosition = inMessage.Position; |
@@ -1241,6 +1255,19 @@ public void ParseClientMessage(Client client, NetworkMessage inMessage, NetworkM |
1241 | 1255 | } |
1242 | 1256 | } |
1243 | 1257 | break; |
| 1258 | + case ClientPacketType.GetTransactionDetails: |
| 1259 | + { |
| 1260 | + var packet = new ClientPackets.GetTransactionDetails(client); |
| 1261 | + if (packet.ParseFromNetworkMessage(inMessage)) |
| 1262 | + { |
| 1263 | + packet.Forward = OnReceivedClientGetTransactionDetailsPacket?.Invoke(packet) ?? true; |
| 1264 | + if (packet.Forward) |
| 1265 | + { |
| 1266 | + packet.AppendToNetworkMessage(outMessage); |
| 1267 | + } |
| 1268 | + } |
| 1269 | + } |
| 1270 | + break; |
1244 | 1271 | case ClientPacketType.UpdateExivaOptions: |
1245 | 1272 | { |
1246 | 1273 | var packet = new ClientPackets.UpdateExivaOptions(client); |
@@ -3164,6 +3191,19 @@ public void ParseServerMessage(Client client, NetworkMessage inMessage, NetworkM |
3164 | 3191 | } |
3165 | 3192 | } |
3166 | 3193 | break; |
| 3194 | + case ServerPacketType.TransactionDetails: |
| 3195 | + { |
| 3196 | + var packet = new ServerPackets.TransactionDetails(client); |
| 3197 | + if (packet.ParseFromNetworkMessage(inMessage)) |
| 3198 | + { |
| 3199 | + packet.Forward = OnReceivedServerTransactionDetailsPacket?.Invoke(packet) ?? true; |
| 3200 | + if (packet.Forward) |
| 3201 | + { |
| 3202 | + packet.AppendToNetworkMessage(outMessage); |
| 3203 | + } |
| 3204 | + } |
| 3205 | + } |
| 3206 | + break; |
3167 | 3207 | case ServerPacketType.ImpactTracking: |
3168 | 3208 | { |
3169 | 3209 | var packet = new ServerPackets.ImpactTracking(client); |
|
0 commit comments