Use game time from log to ignore potential false disconnect lines - Fix for latent linking issues with multiple ips - Anticheat fix for T6 - retry kick on update if they're not allowed to connect

This commit is contained in:
RaidMax
2020-02-06 18:35:30 -06:00
parent 15e2170100
commit fe380ca331
8 changed files with 120 additions and 53 deletions

View File

@ -2,6 +2,8 @@
using SharedLibraryCore.Database.Models;
using SharedLibraryCore.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using static SharedLibraryCore.Server;
@ -78,7 +80,18 @@ namespace IW4MAdmin.Application.EventParsers
public virtual GameEvent GenerateGameEvent(string logLine)
{
logLine = Regex.Replace(logLine, @"([0-9]+:[0-9]+ |^[0-9]+ )", "").Trim();
var timeMatch = Regex.Match(logLine, @"^ *(([0-9]+):([0-9]+) |^[0-9]+ )");
int gameTime = 0;
if (timeMatch.Success)
{
gameTime = (timeMatch.Groups.Values as IEnumerable<object>)
.Skip(2)
.Select(_value => int.Parse(_value.ToString()))
.Sum();
logLine = logLine.Substring(timeMatch.Value.Length);
}
string[] lineSplit = logLine.Split(';');
string eventType = lineSplit[0];
@ -107,7 +120,8 @@ namespace IW4MAdmin.Application.EventParsers
Origin = new EFClient() { NetworkId = originId },
Message = message,
Extra = logLine,
RequiredEntity = GameEvent.EventRequiredEntity.Origin
RequiredEntity = GameEvent.EventRequiredEntity.Origin,
GameTime = gameTime
};
}
@ -118,7 +132,8 @@ namespace IW4MAdmin.Application.EventParsers
Origin = new EFClient() { NetworkId = originId },
Message = message,
Extra = logLine,
RequiredEntity = GameEvent.EventRequiredEntity.Origin
RequiredEntity = GameEvent.EventRequiredEntity.Origin,
GameTime = gameTime
};
}
}
@ -139,7 +154,8 @@ namespace IW4MAdmin.Application.EventParsers
Data = logLine,
Origin = new EFClient() { NetworkId = originId },
Target = new EFClient() { NetworkId = targetId },
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target,
GameTime = gameTime
};
}
}
@ -159,7 +175,8 @@ namespace IW4MAdmin.Application.EventParsers
Data = logLine,
Origin = new EFClient() { NetworkId = originId },
Target = new EFClient() { NetworkId = targetId },
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target,
GameTime = gameTime
};
}
}
@ -185,7 +202,8 @@ namespace IW4MAdmin.Application.EventParsers
State = EFClient.ClientState.Connecting,
},
RequiredEntity = GameEvent.EventRequiredEntity.None,
IsBlocking = true
IsBlocking = true,
GameTime = gameTime
};
}
}
@ -210,7 +228,8 @@ namespace IW4MAdmin.Application.EventParsers
State = EFClient.ClientState.Disconnecting
},
RequiredEntity = GameEvent.EventRequiredEntity.None,
IsBlocking = true
IsBlocking = true,
GameTime = gameTime
};
}
}
@ -223,7 +242,8 @@ namespace IW4MAdmin.Application.EventParsers
Data = logLine,
Origin = Utilities.IW4MAdminClient(),
Target = Utilities.IW4MAdminClient(),
RequiredEntity = GameEvent.EventRequiredEntity.None
RequiredEntity = GameEvent.EventRequiredEntity.None,
GameTime = gameTime
};
}
@ -238,7 +258,8 @@ namespace IW4MAdmin.Application.EventParsers
Origin = Utilities.IW4MAdminClient(),
Target = Utilities.IW4MAdminClient(),
Extra = dump.DictionaryFromKeyValue(),
RequiredEntity = GameEvent.EventRequiredEntity.None
RequiredEntity = GameEvent.EventRequiredEntity.None,
GameTime = gameTime
};
}
@ -250,7 +271,8 @@ namespace IW4MAdmin.Application.EventParsers
Type = GameEvent.EventType.JoinTeam,
Data = logLine,
Origin = new EFClient() { NetworkId = lineSplit[1].ConvertGuidToLong(Configuration.GuidNumberStyle) },
RequiredEntity = GameEvent.EventRequiredEntity.Target
RequiredEntity = GameEvent.EventRequiredEntity.Target,
GameTime = gameTime
};
}
@ -267,7 +289,8 @@ namespace IW4MAdmin.Application.EventParsers
Data = logLine,
Origin = new EFClient() { NetworkId = originId },
Target = new EFClient() { NetworkId = targetId },
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target,
GameTime = gameTime
};
}
@ -283,7 +306,8 @@ namespace IW4MAdmin.Application.EventParsers
Data = logLine,
Origin = new EFClient() { NetworkId = originId },
Target = new EFClient() { NetworkId = targetId },
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target
RequiredEntity = GameEvent.EventRequiredEntity.Origin | GameEvent.EventRequiredEntity.Target,
GameTime = gameTime
};
}
@ -293,7 +317,8 @@ namespace IW4MAdmin.Application.EventParsers
Data = logLine,
Origin = Utilities.IW4MAdminClient(),
Target = Utilities.IW4MAdminClient(),
RequiredEntity = GameEvent.EventRequiredEntity.None
RequiredEntity = GameEvent.EventRequiredEntity.None,
GameTime = gameTime
};
}
}