@@ -18,18 +18,13 @@ class Program
1818
1919 static void ParseArgs ( string [ ] args )
2020 {
21- foreach ( var arg in args )
22- {
21+ foreach ( var arg in args ) {
2322 if ( ! arg . Contains ( '=' , StringComparison . CurrentCultureIgnoreCase ) )
24- {
2523 continue ;
26- }
2724
2825 var splitArg = arg . Split ( '=' ) ;
29- if ( splitArg . Length == 1 )
30- {
31- switch ( splitArg [ 0 ] )
32- {
26+ if ( splitArg . Length == 1 ) {
27+ switch ( splitArg [ 0 ] ) {
3328 case "--keepclient" :
3429 {
3530 _keepClientPackets = true ;
@@ -38,11 +33,8 @@ static void ParseArgs(string[] args)
3833 default :
3934 break ;
4035 }
41- }
42- else if ( splitArg . Length == 2 )
43- {
44- switch ( splitArg [ 0 ] )
45- {
36+ } else if ( splitArg . Length == 2 ) {
37+ switch ( splitArg [ 0 ] ) {
4638 case "-r" :
4739 case "--recording" :
4840 {
@@ -58,22 +50,19 @@ static void ParseArgs(string[] args)
5850
5951 static void Main ( string [ ] args )
6052 {
61- if ( args . Length <= 0 )
62- {
53+ if ( args . Length <= 0 ) {
6354 Console . WriteLine ( $ "Invalid number of arguments: { args . Length } ") ;
6455 return ;
6556 }
6657
6758 ParseArgs ( args ) ;
6859
69- if ( string . IsNullOrEmpty ( _recordingName ) || ! _recordingName . EndsWith ( ".oxr" , StringComparison . CurrentCultureIgnoreCase ) )
70- {
60+ if ( string . IsNullOrEmpty ( _recordingName ) || ! _recordingName . EndsWith ( ".oxr" , StringComparison . CurrentCultureIgnoreCase ) ) {
7161 Console . WriteLine ( $ "Invalid recording file: { _recordingName ?? "null" } ") ;
7262 return ;
7363 }
7464
75- if ( ! File . Exists ( _recordingName ) )
76- {
65+ if ( ! File . Exists ( _recordingName ) ) {
7766 Console . WriteLine ( $ "File does not exist: { _recordingName } ") ;
7867 return ;
7968 }
@@ -94,30 +83,22 @@ static void Redact()
9483 var tibiaDirectory = string . Empty ;
9584 var version = reader . ReadString ( ) ;
9685 Console . WriteLine ( $ "Client version: { version } ") ;
97- if ( int . TryParse ( version . Replace ( "." , "" ) , out var versionNumber ) )
98- {
86+ if ( int . TryParse ( version . Replace ( "." , "" ) , out var versionNumber ) ) {
9987 var clientDataDirectory = $ "ClientData/{ versionNumber } ";
10088 if ( ! Directory . Exists ( clientDataDirectory ) )
101- {
10289 Console . WriteLine ( $ "ClientData directory for version { version } doesn't exist. Falling back to default Tibia directory.") ;
103- }
10490 else
105- {
10691 tibiaDirectory = clientDataDirectory ;
107- }
108- }
109- else
110- {
92+ } else {
11193 Console . WriteLine ( $ "Invalid client version at beginning of recording: { version } ") ;
11294 }
11395
11496 var client = new Client ( tibiaDirectory ) ;
11597
11698 // We don't want to completely block these packets.
11799 if ( _keepClientPackets )
118- {
119100 client . Connection . OnReceivedClientTalkPacket += Connection_OnReceivedClientTalkPacket ;
120- }
101+
121102 client . Connection . OnReceivedServerFullMapPacket += Connection_OnReceivedServerMapPacket ;
122103 client . Connection . OnReceivedServerBottomFloorPacket += Connection_OnReceivedServerMapPacket ;
123104 client . Connection . OnReceivedServerBottomRowPacket += Connection_OnReceivedServerMapPacket ;
@@ -132,8 +113,7 @@ static void Redact()
132113 client . Connection . OnReceivedServerMessagePacket += Connection_OnReceivedServerMessagePacket ;
133114
134115 // These packets aren't necessary in a redacted recording.
135- if ( _keepClientPackets )
136- {
116+ if ( _keepClientPackets ) {
137117 client . Connection . OnReceivedClientAddBuddyPacket += Connection_OnReceivedUselessPacket ;
138118 client . Connection . OnReceivedClientBuddyGroupPacket += Connection_OnReceivedUselessPacket ;
139119 client . Connection . OnReceivedClientBugReportPacket += Connection_OnReceivedUselessPacket ;
@@ -172,18 +152,15 @@ static void Redact()
172152 var clientSequenceNumber = 0u ;
173153 var serverSequenceNumber = 0u ;
174154
175- while ( reader . BaseStream . Position < reader . BaseStream . Length )
176- {
155+ while ( reader . BaseStream . Position < reader . BaseStream . Length ) {
177156 var packetType = ( PacketType ) reader . ReadByte ( ) ;
178157 var timestamp = reader . ReadInt64 ( ) ;
179158 var size = reader . ReadUInt32 ( ) ;
180159
181160 // If the Record app wasn't properly shutdown, a recording could
182161 // possibly be missing data at the end.
183162 if ( reader . BaseStream . Length - reader . BaseStream . Position < size )
184- {
185163 break ;
186- }
187164
188165 _ = reader . ReadUInt16 ( ) ; // packet size
189166 _ = reader . ReadUInt32 ( ) ; // sequence number
@@ -197,19 +174,13 @@ static void Redact()
197174 Array . Copy ( reader . ReadBytes ( ( int ) message . Size ) , message . GetBuffer ( ) , message . Size ) ;
198175
199176 if ( packetType == PacketType . Server )
200- {
201177 client . Connection . ParseServerMessage ( client , message , outMessage ) ;
202- }
203178 else if ( _keepClientPackets )
204- {
205179 client . Connection . ParseClientMessage ( client , message , outMessage ) ;
206- }
207180
208181 // If the `outMessage` doesn't contain any data we don't want to write it to the file.
209182 if ( outMessage . Size <= 8 )
210- {
211183 continue ;
212- }
213184
214185 // Prepare the message without an XTEA key so that the proper
215186 // sizes are added to the packet data, but it stays unencrypted.
@@ -238,26 +209,20 @@ private static bool Connection_OnReceivedServerMessagePacket(Packet packet)
238209 {
239210 var p = ( OXGaming . TibiaAPI . Network . ServerPackets . Message ) packet ;
240211 if ( p . MessageMode == MessageModeType . Look )
241- {
242212 if ( _lookPlayerRx . IsMatch ( p . Text ) || p . Text . Contains ( "You see yourself." , StringComparison . OrdinalIgnoreCase ) )
243- {
244213 p . Text = "Redacted" ;
245- }
246- }
214+
247215 return true ;
248216 }
249217
250218 private static bool Connection_OnReceivedServerTalkPacket ( Packet packet )
251219 {
252220 var p = ( OXGaming . TibiaAPI . Network . ServerPackets . Talk ) packet ;
253221 var creature = p . Client . CreatureStorage . GetCreature ( p . SpeakerName ) ;
254- if ( creature is null || creature . Type == CreatureType . Player )
255- {
222+ if ( creature is null || creature . Type == CreatureType . Player ) {
256223 p . SpeakerLevel = 100 ;
257224 p . SpeakerName = "Redacted" ;
258- }
259- else if ( creature is object && creature . Type == CreatureType . Npc )
260- {
225+ } else if ( creature is object && creature . Type == CreatureType . Npc ) {
261226 // In case the NPC used the player's name in their message,
262227 // we need to check and replace it.
263228 p . Text = p . Text . Replace ( p . Client . Player . Name , "Redacted" , StringComparison . OrdinalIgnoreCase ) ;
@@ -269,39 +234,31 @@ private static bool Connection_OnReceivedServerCreatureUpdatePacket(Packet packe
269234 {
270235 var p = ( OXGaming . TibiaAPI . Network . ServerPackets . CreatureUpdate ) packet ;
271236 if ( p . Creature is object && p . Creature . Type == CreatureType . Player )
272- {
273237 p . Creature . Name = "Redacted" ;
274- }
238+
275239 return true ;
276240 }
277241
278242 private static bool Connection_OnReceivedServerCreateOnMapPacket ( Packet packet )
279243 {
280244 var p = ( OXGaming . TibiaAPI . Network . ServerPackets . CreateOnMap ) packet ;
281245 if ( p . Creature is object && p . Creature . Type == CreatureType . Player )
282- {
283246 p . Creature . Name = "Redacted" ;
284- }
247+
285248 return true ;
286249 }
287250
288251 private static bool Connection_OnReceivedServerMapPacket ( Packet packet )
289252 {
290253 var p = ( OXGaming . TibiaAPI . Network . ServerPackets . Map ) packet ;
291- foreach ( var field in p . Fields )
292- {
293- foreach ( var obj in field . Objects )
294- {
254+ foreach ( var field in p . Fields ) {
255+ foreach ( var obj in field . Objects ) {
295256 if ( obj is null || obj . Id >= 100 )
296- {
297257 continue ;
298- }
299258
300259 var creature = p . Client . CreatureStorage . GetCreature ( obj . Data ) ;
301260 if ( creature is null || creature . Type != CreatureType . Player )
302- {
303261 continue ;
304- }
305262
306263 creature . Name = "Redacted" ;
307264 }
0 commit comments