@@ -266,6 +266,19 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool lowOu
266266 string [ ] currentPositions = SplitPositionString ( player ? . Position . ToString ( ) ) ;
267267 string [ ] lastAlivePositions = playerAlive ? null : SplitPositionString ( player ? . LastAlivePosition . ToString ( ) ) ;
268268
269+ var roundsEndedEvents = md . events . Where ( k => k . Key . Name . ToString ( ) == "RoundEndedEventArgs" ) . Select ( v => v . Value ) ;
270+ var freezetimesEndedEvents = md . events . Where ( k => k . Key . Name . ToString ( ) == "FreezetimeEndedEventArgs" ) . Select ( v => v . Value ) . ElementAt ( 0 ) ;
271+
272+ int numOfRoundsEnded = roundsEndedEvents . Count ( ) > 0 ? roundsEndedEvents . ElementAt ( 0 ) . Count ( ) : 0 ;
273+ int numOfFreezetimesEnded = freezetimesEndedEvents . Count ( ) ;
274+
275+ float timeInRound = 0 ; // Stays as '0' if sent during freezetime
276+ if ( numOfFreezetimesEnded > numOfRoundsEnded )
277+ {
278+ var freezetimeEnded = ( FreezetimeEndedEventArgs ) freezetimesEndedEvents . LastOrDefault ( ) ; // would it be better to use '.OrderByDescending(f => f.TimeEnd).FirstOrDefault()' ?
279+ timeInRound = dp . CurrentTime - freezetimeEnded . TimeEnd ;
280+ }
281+
269282 FeedbackMessage feedbackMessage = new FeedbackMessage ( )
270283 {
271284 Round = round ,
@@ -277,7 +290,8 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool lowOu
277290 XLastAlivePosition = ( lastAlivePositions != null ) ? ( double ? ) double . Parse ( lastAlivePositions [ 1 ] ) : null ,
278291 YLastAlivePosition = ( lastAlivePositions != null ) ? ( double ? ) double . Parse ( lastAlivePositions [ 2 ] ) : null ,
279292 ZLastAlivePosition = ( lastAlivePositions != null ) ? ( double ? ) double . Parse ( lastAlivePositions [ 3 ] ) : null ,
280- Message = text
293+ Message = text ,
294+ TimeInRound = timeInRound , // counts messages sent after the round_end event fires as the next round, set to '0' as if it was the next round's warmup (done this way instead of using round starts to avoid potential issues when restarting rounds)
281295 } ;
282296
283297 md . addEvent ( typeof ( FeedbackMessage ) , feedbackMessage ) ;
@@ -294,9 +308,24 @@ public static MatchData FromDemoFile(string file, bool parseChickens, bool lowOu
294308 // if round_freeze_end event did not get fired in this round due to error
295309 while ( numOfFreezetimesEnded <= numOfRoundsEnded )
296310 {
297- dp . RaiseFreezetimeEnded ( ) ;
311+ dp . RaiseFreezetimeEnded ( new FreezetimeEndedEventArgs ( )
312+ {
313+ TimeEnd = - 1 , // no idea when this actually ended without guessing
314+ } ) ;
298315 numOfFreezetimesEnded = freezetimesEndedEvents . ElementAt ( 0 ) . Count ( ) ;
299- }
316+
317+ // set the TimeInRound value to '-1' for any feedback messages sent this round, as it will be wrong
318+ if ( md . events . Any ( k => k . Key . Name . ToString ( ) == "FeedbackMessage" ) )
319+ {
320+ foreach ( FeedbackMessage message in md . events . Where ( k => k . Key . Name . ToString ( ) == "FeedbackMessage" ) . Select ( v => v . Value ) ? . ElementAt ( 0 ) )
321+ {
322+ if ( message . Round == numOfFreezetimesEnded )
323+ {
324+ message . TimeInRound = - 1 ;
325+ }
326+ }
327+ }
328+ }
300329
301330 md . addEvent ( typeof ( RoundEndedEventArgs ) , e ) ;
302331
@@ -635,7 +664,7 @@ public DataAndPlayerNames GetDataAndPlayerNames(ProcessedData processedData)
635664
636665 public versionNumber GetVersionNumber ( )
637666 {
638- return new versionNumber ( ) { Version = "1.1.12 " } ;
667+ return new versionNumber ( ) { Version = "1.1.13 " } ;
639668 }
640669
641670 public List < string > GetSupportedGamemodes ( )
0 commit comments