2018-11-25 21:00:36 -05:00
|
|
|
|
using SharedLibraryCore;
|
2018-11-05 22:01:29 -05:00
|
|
|
|
using SharedLibraryCore.Database.Models;
|
2018-04-13 02:32:30 -04:00
|
|
|
|
using SharedLibraryCore.Interfaces;
|
2018-11-25 21:00:36 -05:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text.RegularExpressions;
|
2019-02-05 19:02:45 -05:00
|
|
|
|
using static SharedLibraryCore.Server;
|
2018-04-13 02:32:30 -04:00
|
|
|
|
|
2018-04-25 02:38:59 -04:00
|
|
|
|
namespace IW4MAdmin.Application.EventParsers
|
2018-04-13 02:32:30 -04:00
|
|
|
|
{
|
2019-02-02 20:40:37 -05:00
|
|
|
|
class BaseEventParser : IEventParser
|
2018-04-13 02:32:30 -04:00
|
|
|
|
{
|
2019-02-02 20:40:37 -05:00
|
|
|
|
public BaseEventParser()
|
2019-01-26 21:33:37 -05:00
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
Configuration = new DynamicEventParserConfiguration()
|
2019-01-26 21:33:37 -05:00
|
|
|
|
{
|
2019-02-05 12:14:43 -05:00
|
|
|
|
GameDirectory = "main",
|
2019-01-26 21:33:37 -05:00
|
|
|
|
};
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
2019-04-21 17:28:13 -04:00
|
|
|
|
Configuration.Say.Pattern = @"^(say|sayteam);(-?[A-Fa-f0-9_]{1,32});([0-9]+);(.+);(.*)$";
|
2019-02-02 20:40:37 -05:00
|
|
|
|
Configuration.Say.AddMapping(ParserRegex.GroupType.EventType, 1);
|
|
|
|
|
Configuration.Say.AddMapping(ParserRegex.GroupType.OriginNetworkId, 2);
|
|
|
|
|
Configuration.Say.AddMapping(ParserRegex.GroupType.OriginClientNumber, 3);
|
|
|
|
|
Configuration.Say.AddMapping(ParserRegex.GroupType.OriginName, 4);
|
|
|
|
|
Configuration.Say.AddMapping(ParserRegex.GroupType.Message, 5);
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
2019-04-21 17:28:13 -04:00
|
|
|
|
Configuration.Quit.Pattern = @"^(Q);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+);([0-9]+);(.*)$";
|
2019-02-02 20:40:37 -05:00
|
|
|
|
Configuration.Quit.AddMapping(ParserRegex.GroupType.EventType, 1);
|
|
|
|
|
Configuration.Quit.AddMapping(ParserRegex.GroupType.OriginNetworkId, 2);
|
|
|
|
|
Configuration.Quit.AddMapping(ParserRegex.GroupType.OriginClientNumber, 3);
|
|
|
|
|
Configuration.Quit.AddMapping(ParserRegex.GroupType.OriginName, 4);
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
2019-04-21 17:28:13 -04:00
|
|
|
|
Configuration.Join.Pattern = @"^(J);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+);([0-9]+);(.*)$";
|
2019-02-02 20:40:37 -05:00
|
|
|
|
Configuration.Join.AddMapping(ParserRegex.GroupType.EventType, 1);
|
|
|
|
|
Configuration.Join.AddMapping(ParserRegex.GroupType.OriginNetworkId, 2);
|
|
|
|
|
Configuration.Join.AddMapping(ParserRegex.GroupType.OriginClientNumber, 3);
|
|
|
|
|
Configuration.Join.AddMapping(ParserRegex.GroupType.OriginName, 4);
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
2019-04-21 17:28:13 -04:00
|
|
|
|
Configuration.Damage.Pattern = @"^(D);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+);(-?[0-9]+);(axis|allies|world);(.{1,24});(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+)?;-?([0-9]+);(axis|allies|world);(.{1,24})?;((?:[0-9]+|[a-z]+|_)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$";
|
2019-02-02 20:40:37 -05:00
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.EventType, 1);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.TargetNetworkId, 2);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.TargetClientNumber, 3);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.TargetTeam, 4);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.TargetName, 5);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.OriginNetworkId, 6);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.OriginClientNumber, 7);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.OriginTeam, 8);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.OriginName, 9);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.Weapon, 10);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.Damage, 11);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.MeansOfDeath, 12);
|
|
|
|
|
Configuration.Damage.AddMapping(ParserRegex.GroupType.HitLocation, 13);
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
2019-04-21 17:28:13 -04:00
|
|
|
|
Configuration.Kill.Pattern = @"^(K);(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+);(-?[0-9]+);(axis|allies|world);(.{1,24});(-?[A-Fa-f0-9_]{1,32}|bot[0-9]+)?;-?([0-9]+);(axis|allies|world);(.{1,24})?;((?:[0-9]+|[a-z]+|_)+);([0-9]+);((?:[A-Z]|_)+);((?:[a-z]|_)+)$";
|
2019-02-02 20:40:37 -05:00
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.EventType, 1);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.TargetNetworkId, 2);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.TargetClientNumber, 3);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.TargetTeam, 4);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.TargetName, 5);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.OriginNetworkId, 6);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.OriginClientNumber, 7);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.OriginTeam, 8);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.OriginName, 9);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.Weapon, 10);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.Damage, 11);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.MeansOfDeath, 12);
|
|
|
|
|
Configuration.Kill.AddMapping(ParserRegex.GroupType.HitLocation, 13);
|
2019-01-26 21:33:37 -05:00
|
|
|
|
}
|
|
|
|
|
|
2019-01-27 19:41:54 -05:00
|
|
|
|
public IEventParserConfiguration Configuration { get; set; }
|
2018-07-04 22:09:42 -04:00
|
|
|
|
|
2019-02-05 12:14:43 -05:00
|
|
|
|
public string Version { get; set; } = "CoD";
|
2019-02-02 19:54:30 -05:00
|
|
|
|
|
2019-02-05 19:02:45 -05:00
|
|
|
|
public Game GameName { get; set; } = Game.COD;
|
|
|
|
|
|
2019-04-06 22:48:49 -04:00
|
|
|
|
public string URLProtocolFormat { get; set; } = "CoD://{{ip}}:{{port}}";
|
|
|
|
|
|
2018-04-23 01:43:48 -04:00
|
|
|
|
public virtual GameEvent GetEvent(Server server, string logLine)
|
2018-04-13 02:32:30 -04:00
|
|
|
|
{
|
2018-06-30 21:55:16 -04:00
|
|
|
|
logLine = Regex.Replace(logLine, @"([0-9]+:[0-9]+ |^[0-9]+ )", "").Trim();
|
2018-04-13 02:32:30 -04:00
|
|
|
|
string[] lineSplit = logLine.Split(';');
|
2018-06-30 21:55:16 -04:00
|
|
|
|
string eventType = lineSplit[0];
|
2018-04-13 02:32:30 -04:00
|
|
|
|
|
2019-05-02 23:33:38 -04:00
|
|
|
|
// this is a "custom callback" event
|
2018-06-30 21:55:16 -04:00
|
|
|
|
if (eventType == "JoinTeam")
|
2018-06-05 17:31:36 -04:00
|
|
|
|
{
|
2019-01-27 17:40:08 -05:00
|
|
|
|
var origin = server.GetClientsAsList()
|
2019-05-02 23:33:38 -04:00
|
|
|
|
.FirstOrDefault(c => c.NetworkId == lineSplit[1].ConvertGuidToLong());
|
2018-08-31 23:35:51 -04:00
|
|
|
|
|
2018-06-05 17:31:36 -04:00
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.JoinTeam,
|
2019-02-16 16:04:40 -05:00
|
|
|
|
Data = logLine,
|
2018-08-31 23:35:51 -04:00
|
|
|
|
Origin = origin,
|
2018-06-05 17:31:36 -04:00
|
|
|
|
Owner = server
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-30 21:55:16 -04:00
|
|
|
|
if (eventType == "say" || eventType == "sayteam")
|
2018-04-13 02:32:30 -04:00
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
var matchResult = Regex.Match(logLine, Configuration.Say.Pattern);
|
2018-05-10 01:34:29 -04:00
|
|
|
|
|
2018-07-04 22:09:42 -04:00
|
|
|
|
if (matchResult.Success)
|
2018-05-10 01:34:29 -04:00
|
|
|
|
{
|
2019-01-27 17:40:08 -05:00
|
|
|
|
string message = matchResult
|
2019-01-27 19:41:54 -05:00
|
|
|
|
.Groups[Configuration.Say.GroupMapping[ParserRegex.GroupType.Message]]
|
2019-01-27 17:40:08 -05:00
|
|
|
|
.ToString()
|
2018-07-04 22:09:42 -04:00
|
|
|
|
.Replace("\x15", "")
|
|
|
|
|
.Trim();
|
|
|
|
|
|
2019-05-02 23:33:38 -04:00
|
|
|
|
if (message.Length > 0)
|
2018-07-04 22:09:42 -04:00
|
|
|
|
{
|
2019-05-02 23:33:38 -04:00
|
|
|
|
var origin = server.GetClientsAsList()
|
|
|
|
|
.First(c => c.NetworkId == matchResult.Groups[Configuration.Say.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertGuidToLong());
|
|
|
|
|
|
|
|
|
|
if (message[0] == '!' || message[0] == '@')
|
|
|
|
|
{
|
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.Command,
|
|
|
|
|
Data = message,
|
|
|
|
|
Origin = origin,
|
|
|
|
|
Owner = server,
|
|
|
|
|
Message = message
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2018-07-04 22:09:42 -04:00
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
2019-05-02 23:33:38 -04:00
|
|
|
|
Type = GameEvent.EventType.Say,
|
2018-07-04 22:09:42 -04:00
|
|
|
|
Data = message,
|
2018-08-31 23:35:51 -04:00
|
|
|
|
Origin = origin,
|
2018-07-04 22:09:42 -04:00
|
|
|
|
Owner = server,
|
|
|
|
|
Message = message
|
|
|
|
|
};
|
|
|
|
|
}
|
2018-05-10 01:34:29 -04:00
|
|
|
|
}
|
2018-04-13 02:32:30 -04:00
|
|
|
|
}
|
|
|
|
|
|
2018-08-31 23:35:51 -04:00
|
|
|
|
if (eventType == "K")
|
|
|
|
|
{
|
|
|
|
|
if (!server.CustomCallback)
|
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
var match = Regex.Match(logLine, Configuration.Kill.Pattern);
|
2018-08-31 23:35:51 -04:00
|
|
|
|
|
2019-01-27 17:40:08 -05:00
|
|
|
|
if (match.Success)
|
2018-08-31 23:35:51 -04:00
|
|
|
|
{
|
2019-04-02 21:20:37 -04:00
|
|
|
|
string originId = match.Groups[Configuration.Kill.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].Value.ToString();
|
|
|
|
|
string targetId = match.Groups[Configuration.Kill.GroupMapping[ParserRegex.GroupType.TargetNetworkId]].Value.ToString();
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
2019-04-02 21:20:37 -04:00
|
|
|
|
var origin = !string.IsNullOrEmpty(originId) ? server.GetClientsAsList()
|
2019-05-02 23:33:38 -04:00
|
|
|
|
.First(c => c.NetworkId == originId.ConvertGuidToLong()) :
|
2019-04-02 21:20:37 -04:00
|
|
|
|
Utilities.IW4MAdminClient(server);
|
|
|
|
|
|
|
|
|
|
var target = !string.IsNullOrEmpty(targetId) ? server.GetClientsAsList()
|
2019-05-02 23:33:38 -04:00
|
|
|
|
.First(c => c.NetworkId == targetId.ConvertGuidToLong()) :
|
2019-04-02 21:20:37 -04:00
|
|
|
|
Utilities.IW4MAdminClient(server);
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.Kill,
|
|
|
|
|
Data = logLine,
|
|
|
|
|
Origin = origin,
|
|
|
|
|
Target = target,
|
|
|
|
|
Owner = server
|
|
|
|
|
};
|
|
|
|
|
}
|
2018-08-31 23:35:51 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-30 21:55:16 -04:00
|
|
|
|
if (eventType == "ScriptKill")
|
2018-04-13 02:32:30 -04:00
|
|
|
|
{
|
2019-05-02 23:33:38 -04:00
|
|
|
|
long originId = lineSplit[1].ConvertGuidToLong();
|
|
|
|
|
long targetId = lineSplit[2].ConvertGuidToLong();
|
2019-04-02 21:20:37 -04:00
|
|
|
|
|
|
|
|
|
var origin = originId == long.MinValue ? Utilities.IW4MAdminClient(server) :
|
|
|
|
|
server.GetClientsAsList().First(c => c.NetworkId == originId);
|
|
|
|
|
var target = targetId == long.MinValue ? Utilities.IW4MAdminClient(server) :
|
|
|
|
|
server.GetClientsAsList().FirstOrDefault(c => c.NetworkId == targetId) ?? Utilities.IW4MAdminClient(server);
|
|
|
|
|
|
2018-04-13 02:32:30 -04:00
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
2018-05-10 01:34:29 -04:00
|
|
|
|
Type = GameEvent.EventType.ScriptKill,
|
2018-04-13 02:32:30 -04:00
|
|
|
|
Data = logLine,
|
2018-08-31 23:35:51 -04:00
|
|
|
|
Origin = origin,
|
|
|
|
|
Target = target,
|
2018-04-13 02:32:30 -04:00
|
|
|
|
Owner = server
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-30 21:55:16 -04:00
|
|
|
|
if (eventType == "ScriptDamage")
|
2018-05-08 00:58:46 -04:00
|
|
|
|
{
|
2019-05-02 23:33:38 -04:00
|
|
|
|
long originId = lineSplit[1].ConvertGuidToLong();
|
|
|
|
|
long targetId = lineSplit[2].ConvertGuidToLong();
|
2019-04-02 21:20:37 -04:00
|
|
|
|
|
|
|
|
|
var origin = originId == long.MinValue ? Utilities.IW4MAdminClient(server) :
|
|
|
|
|
server.GetClientsAsList().First(c => c.NetworkId == originId);
|
|
|
|
|
var target = targetId == long.MinValue ? Utilities.IW4MAdminClient(server) :
|
|
|
|
|
server.GetClientsAsList().FirstOrDefault(c => c.NetworkId == targetId) ?? Utilities.IW4MAdminClient(server);
|
2018-08-31 23:35:51 -04:00
|
|
|
|
|
2018-05-08 00:58:46 -04:00
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.ScriptDamage,
|
|
|
|
|
Data = logLine,
|
2018-08-31 23:35:51 -04:00
|
|
|
|
Origin = origin,
|
|
|
|
|
Target = target,
|
2018-05-08 00:58:46 -04:00
|
|
|
|
Owner = server
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-07 22:19:12 -04:00
|
|
|
|
// damage
|
2018-06-30 21:55:16 -04:00
|
|
|
|
if (eventType == "D")
|
2018-05-03 01:25:49 -04:00
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
if (!server.CustomCallback)
|
2018-05-03 01:25:49 -04:00
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
var regexMatch = Regex.Match(logLine, Configuration.Damage.Pattern);
|
2019-01-27 17:40:08 -05:00
|
|
|
|
|
|
|
|
|
if (regexMatch.Success)
|
2018-05-14 13:55:10 -04:00
|
|
|
|
{
|
2019-04-02 21:20:37 -04:00
|
|
|
|
string originId = regexMatch.Groups[Configuration.Damage.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString();
|
|
|
|
|
string targetId = regexMatch.Groups[Configuration.Damage.GroupMapping[ParserRegex.GroupType.TargetNetworkId]].ToString();
|
|
|
|
|
|
|
|
|
|
var origin = !string.IsNullOrEmpty(originId) ? server.GetClientsAsList()
|
2019-05-02 23:33:38 -04:00
|
|
|
|
.First(c => c.NetworkId == originId.ConvertGuidToLong()) :
|
2019-04-02 21:20:37 -04:00
|
|
|
|
Utilities.IW4MAdminClient(server);
|
|
|
|
|
|
|
|
|
|
var target = !string.IsNullOrEmpty(targetId) ? server.GetClientsAsList()
|
2019-05-02 23:33:38 -04:00
|
|
|
|
.First(c => c.NetworkId == targetId.ConvertGuidToLong()) :
|
2019-04-02 21:20:37 -04:00
|
|
|
|
Utilities.IW4MAdminClient(server);
|
2018-09-02 17:59:27 -04:00
|
|
|
|
|
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.Damage,
|
2019-02-16 16:04:40 -05:00
|
|
|
|
Data = logLine,
|
2018-09-02 17:59:27 -04:00
|
|
|
|
Origin = origin,
|
|
|
|
|
Target = target,
|
|
|
|
|
Owner = server
|
|
|
|
|
};
|
|
|
|
|
}
|
2018-05-14 13:55:10 -04:00
|
|
|
|
}
|
2018-05-03 01:25:49 -04:00
|
|
|
|
}
|
|
|
|
|
|
2018-06-07 22:19:12 -04:00
|
|
|
|
// join
|
2018-06-30 21:55:16 -04:00
|
|
|
|
if (eventType == "J")
|
2018-06-07 22:19:12 -04:00
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
var regexMatch = Regex.Match(logLine, Configuration.Join.Pattern);
|
2018-06-07 22:19:12 -04:00
|
|
|
|
if (regexMatch.Success)
|
|
|
|
|
{
|
2019-02-05 12:14:43 -05:00
|
|
|
|
bool isBot = regexMatch.Groups[Configuration.Join.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().Contains("bot");
|
|
|
|
|
|
2018-06-07 22:19:12 -04:00
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
2018-11-07 21:30:11 -05:00
|
|
|
|
Type = GameEvent.EventType.PreConnect,
|
2018-06-30 21:55:16 -04:00
|
|
|
|
Data = logLine,
|
2018-06-07 22:19:12 -04:00
|
|
|
|
Owner = server,
|
2018-11-05 22:01:29 -05:00
|
|
|
|
Origin = new EFClient()
|
2018-06-07 22:19:12 -04:00
|
|
|
|
{
|
2018-11-25 21:00:36 -05:00
|
|
|
|
CurrentAlias = new EFAlias()
|
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
Name = regexMatch.Groups[Configuration.Join.GroupMapping[ParserRegex.GroupType.OriginName]].ToString().StripColors(),
|
2018-11-25 21:00:36 -05:00
|
|
|
|
},
|
2019-05-02 23:33:38 -04:00
|
|
|
|
NetworkId = regexMatch.Groups[Configuration.Join.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertGuidToLong(),
|
2019-01-27 19:41:54 -05:00
|
|
|
|
ClientNumber = Convert.ToInt32(regexMatch.Groups[Configuration.Join.GroupMapping[ParserRegex.GroupType.OriginClientNumber]].ToString()),
|
2018-11-05 22:01:29 -05:00
|
|
|
|
State = EFClient.ClientState.Connecting,
|
2019-02-05 12:14:43 -05:00
|
|
|
|
CurrentServer = server,
|
|
|
|
|
IsBot = isBot
|
2018-06-07 22:19:12 -04:00
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-11-07 21:30:11 -05:00
|
|
|
|
if (eventType == "Q")
|
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
var regexMatch = Regex.Match(logLine, Configuration.Quit.Pattern);
|
2018-11-07 21:30:11 -05:00
|
|
|
|
if (regexMatch.Success)
|
|
|
|
|
{
|
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.PreDisconnect,
|
|
|
|
|
Data = logLine,
|
|
|
|
|
Owner = server,
|
|
|
|
|
Origin = new EFClient()
|
|
|
|
|
{
|
2018-11-25 21:00:36 -05:00
|
|
|
|
CurrentAlias = new EFAlias()
|
|
|
|
|
{
|
2019-01-27 19:41:54 -05:00
|
|
|
|
Name = regexMatch.Groups[Configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginName]].ToString().StripColors()
|
2018-11-25 21:00:36 -05:00
|
|
|
|
},
|
2019-05-02 23:33:38 -04:00
|
|
|
|
NetworkId = regexMatch.Groups[Configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginNetworkId]].ToString().ConvertGuidToLong(),
|
2019-01-27 19:41:54 -05:00
|
|
|
|
ClientNumber = Convert.ToInt32(regexMatch.Groups[Configuration.Quit.GroupMapping[ParserRegex.GroupType.OriginClientNumber]].ToString()),
|
2018-11-07 21:30:11 -05:00
|
|
|
|
State = EFClient.ClientState.Disconnecting
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-06-30 21:55:16 -04:00
|
|
|
|
|
|
|
|
|
if (eventType.Contains("ExitLevel"))
|
2018-04-13 02:32:30 -04:00
|
|
|
|
{
|
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.MapEnd,
|
|
|
|
|
Data = lineSplit[0],
|
2018-11-07 21:30:11 -05:00
|
|
|
|
Origin = Utilities.IW4MAdminClient(server),
|
|
|
|
|
Target = Utilities.IW4MAdminClient(server),
|
2018-04-13 02:32:30 -04:00
|
|
|
|
Owner = server
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-30 21:55:16 -04:00
|
|
|
|
if (eventType.Contains("InitGame"))
|
2018-04-13 02:32:30 -04:00
|
|
|
|
{
|
2018-06-30 21:55:16 -04:00
|
|
|
|
string dump = eventType.Replace("InitGame: ", "");
|
2018-04-23 01:43:48 -04:00
|
|
|
|
|
2018-04-13 02:32:30 -04:00
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.MapChange,
|
|
|
|
|
Data = lineSplit[0],
|
2018-11-05 22:01:29 -05:00
|
|
|
|
Origin = Utilities.IW4MAdminClient(server),
|
|
|
|
|
Target = Utilities.IW4MAdminClient(server),
|
2018-04-24 18:01:27 -04:00
|
|
|
|
Owner = server,
|
|
|
|
|
Extra = dump.DictionaryFromKeyValue()
|
2018-04-13 02:32:30 -04:00
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new GameEvent()
|
|
|
|
|
{
|
|
|
|
|
Type = GameEvent.EventType.Unknown,
|
2018-11-05 22:01:29 -05:00
|
|
|
|
Origin = Utilities.IW4MAdminClient(server),
|
|
|
|
|
Target = Utilities.IW4MAdminClient(server),
|
2018-04-13 02:32:30 -04:00
|
|
|
|
Owner = server
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|