add one log indicator for games (Pluto IW5) that don't log to mods folder even when fs_game is specified.

This commit is contained in:
RaidMax 2021-06-07 16:58:36 -05:00
parent c397fd5479
commit 3a1e8359c2
6 changed files with 26 additions and 12 deletions

View File

@ -1177,12 +1177,12 @@ namespace IW4MAdmin
GameDirectory = EventParser.Configuration.GameDirectory ?? "", GameDirectory = EventParser.Configuration.GameDirectory ?? "",
ModDirectory = game.Value ?? "", ModDirectory = game.Value ?? "",
LogFile = logfile.Value, LogFile = logfile.Value,
IsWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) IsWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows),
IsOneLog = RconParser.IsOneLog
}; };
LogPath = GenerateLogPath(logInfo); LogPath = GenerateLogPath(logInfo);
ServerLogger.LogInformation("Game log information {@logInfo}", logInfo); ServerLogger.LogInformation("Game log information {@logInfo}", logInfo);
if (!File.Exists(LogPath) && ServerConfig.GameLogServerUrl == null) if (!File.Exists(LogPath) && ServerConfig.GameLogServerUrl == null)
{ {
Console.WriteLine(loc["SERVER_ERROR_DNE"].FormatExt(LogPath)); Console.WriteLine(loc["SERVER_ERROR_DNE"].FormatExt(LogPath));
@ -1223,12 +1223,12 @@ namespace IW4MAdmin
public static string GenerateLogPath(LogPathGeneratorInfo logInfo) public static string GenerateLogPath(LogPathGeneratorInfo logInfo)
{ {
string logPath; string logPath;
string workingDirectory = logInfo.BasePathDirectory; var workingDirectory = logInfo.BasePathDirectory;
bool baseGameIsDirectory = !string.IsNullOrWhiteSpace(logInfo.BaseGameDirectory) && var baseGameIsDirectory = !string.IsNullOrWhiteSpace(logInfo.BaseGameDirectory) &&
logInfo.BaseGameDirectory.IndexOfAny(Utilities.DirectorySeparatorChars) != -1; logInfo.BaseGameDirectory.IndexOfAny(Utilities.DirectorySeparatorChars) != -1;
bool baseGameIsRelative = logInfo.BaseGameDirectory.FixDirectoryCharacters() var baseGameIsRelative = logInfo.BaseGameDirectory.FixDirectoryCharacters()
.Equals(logInfo.GameDirectory.FixDirectoryCharacters(), StringComparison.InvariantCultureIgnoreCase); .Equals(logInfo.GameDirectory.FixDirectoryCharacters(), StringComparison.InvariantCultureIgnoreCase);
// we want to see if base game is provided and it 'looks' like a directory // we want to see if base game is provided and it 'looks' like a directory
@ -1237,7 +1237,7 @@ namespace IW4MAdmin
workingDirectory = logInfo.BaseGameDirectory; workingDirectory = logInfo.BaseGameDirectory;
} }
if (string.IsNullOrWhiteSpace(logInfo.ModDirectory)) if (string.IsNullOrWhiteSpace(logInfo.ModDirectory) || logInfo.IsOneLog)
{ {
logPath = Path.Combine(workingDirectory, logInfo.GameDirectory, logInfo.LogFile); logPath = Path.Combine(workingDirectory, logInfo.GameDirectory, logInfo.LogFile);
} }

View File

@ -41,5 +41,11 @@ namespace IW4MAdmin.Application.Misc
/// indicates if running on windows /// indicates if running on windows
/// </summary> /// </summary>
public bool IsWindows { get; set; } = true; public bool IsWindows { get; set; } = true;
/// <summary>
/// indicates that the game does not log to the mods folder (when mod is loaded),
/// but rather always to the fs_basegame directory
/// </summary>
public bool IsOneLog { get; set; }
} }
} }

View File

@ -75,11 +75,12 @@ namespace IW4MAdmin.Application.RConParsers
public bool CanGenerateLogPath { get; set; } = true; public bool CanGenerateLogPath { get; set; } = true;
public string Name { get; set; } = "Call of Duty"; public string Name { get; set; } = "Call of Duty";
public string RConEngine { get; set; } = "COD"; public string RConEngine { get; set; } = "COD";
public bool IsOneLog { get; set; }
public async Task<string[]> ExecuteCommandAsync(IRConConnection connection, string command) public async Task<string[]> ExecuteCommandAsync(IRConConnection connection, string command)
{ {
var response = await connection.SendQueryAsync(StaticHelpers.QueryType.COMMAND, command); var response = await connection.SendQueryAsync(StaticHelpers.QueryType.COMMAND, command);
return response.Skip(1).ToArray(); return response.Where(item => item != Configuration.CommandPrefixes.RConResponse).ToArray();
} }
public async Task<Dvar<T>> GetDvarAsync<T>(IRConConnection connection, string dvarName, T fallbackValue = default) public async Task<Dvar<T>> GetDvarAsync<T>(IRConConnection connection, string dvarName, T fallbackValue = default)

View File

@ -3,7 +3,7 @@ var eventParser;
var plugin = { var plugin = {
author: 'RaidMax', author: 'RaidMax',
version: 0.7, version: 0.8,
name: 'Plutonium IW5 Parser', name: 'Plutonium IW5 Parser',
isParser: true, isParser: true,
@ -35,6 +35,7 @@ var plugin = {
rconParser.Configuration.Status.AddMapping(103, 5); rconParser.Configuration.Status.AddMapping(103, 5);
rconParser.Configuration.Status.AddMapping(104, 6); rconParser.Configuration.Status.AddMapping(104, 6);
rconParser.IsOneLog = true;
rconParser.Version = 'IW5 MP 1.9 build 388110 Fri Sep 14 00:04:28 2012 win-x86'; rconParser.Version = 'IW5 MP 1.9 build 388110 Fri Sep 14 00:04:28 2012 win-x86';
rconParser.GameName = 3; // IW5 rconParser.GameName = 3; // IW5
eventParser.Version = 'IW5 MP 1.9 build 388110 Fri Sep 14 00:04:28 2012 win-x86'; eventParser.Version = 'IW5 MP 1.9 build 388110 Fri Sep 14 00:04:28 2012 win-x86';

View File

@ -1359,13 +1359,13 @@ namespace SharedLibraryCore.Commands
public override async Task ExecuteAsync(GameEvent E) public override async Task ExecuteAsync(GameEvent E)
{ {
var Response = await E.Owner.ExecuteCommandAsync(E.Data.Trim()); var response = await E.Owner.ExecuteCommandAsync(E.Data.Trim());
foreach (string S in Response) foreach (var item in response)
{ {
E.Origin.Tell(S); E.Origin.Tell(item);
} }
if (Response.Length == 0) if (response.Length == 0)
{ {
E.Origin.Tell(_translationLookup["COMMANDS_RCON_SUCCESS"]); E.Origin.Tell(_translationLookup["COMMANDS_RCON_SUCCESS"]);
} }

View File

@ -72,6 +72,12 @@ namespace SharedLibraryCore.Interfaces
/// </summary> /// </summary>
string RConEngine { get; } string RConEngine { get; }
/// <summary>
/// indicates that the game does not log to the mods folder (when mod is loaded),
/// but rather always to the fs_basegame directory
/// </summary>
bool IsOneLog { get; }
/// <summary> /// <summary>
/// retrieves the value of given dvar key if it exists in the override dict /// retrieves the value of given dvar key if it exists in the override dict
/// otherwise returns original /// otherwise returns original