diff --git a/Application/Application.csproj b/Application/Application.csproj
index 8ef18759a..1ea5f9cf7 100644
--- a/Application/Application.csproj
+++ b/Application/Application.csproj
@@ -5,7 +5,7 @@
netcoreapp2.1
false
RaidMax.IW4MAdmin.Application
- 2.1.9.2
+ 2.1.9.4
RaidMax
Forever None
IW4MAdmin
@@ -30,7 +30,8 @@
true
true
- 2.1.9.3
+ 2.1.9.4
+ 2.1.9.4
diff --git a/Application/BuildScripts/PostPublish.bat b/Application/BuildScripts/PostPublish.bat
index 807ee448c..49d175a58 100644
--- a/Application/BuildScripts/PostPublish.bat
+++ b/Application/BuildScripts/PostPublish.bat
@@ -82,10 +82,13 @@ if "%CurrentConfiguration" == "Release" (
echo PR-RT
move "%SolutionDir%Publish\WindowsPrerelease\runtimes" "%SolutionDir%Publish\WindowsPrerelease\Lib\runtimes"
+if exist "%SolutionDir%Publish\WindowsPrerelease\refs" move "%SolutionDir%Publish\WindowsPrerelease\refs" "%SolutionDir%Publish\WindowsPrerelease\Lib\refs"
+
if "%CurrentConfiguration" == "Release" (
echo R-RT
- rem move "%SolutionDir%Publish\Windows\runtimes" "%SolutionDir%Publish\Windows\Lib\runtimes"
+ move "%SolutionDir%Publish\Windows\runtimes" "%SolutionDir%Publish\Windows\Lib\runtimes"
+ if exist "%SolutionDir%Publish\Windows\refs" move "%SolutionDir%Publish\Windows\refs" "%SolutionDir%Publish\Windows\Lib\refs"
)
echo making start scripts
diff --git a/Application/Manager.cs b/Application/Manager.cs
index 453ec4c3b..b34241aa5 100644
--- a/Application/Manager.cs
+++ b/Application/Manager.cs
@@ -383,11 +383,10 @@ namespace IW4MAdmin.Application
await Plugin.OnLoadAsync(this);
}
- catch (Exception e)
+ catch (Exception ex)
{
Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_PLUGIN"]} {Plugin.Name}");
- Logger.WriteDebug($"Exception: {e.Message}");
- Logger.WriteDebug($"Stack Trace: {e.StackTrace}");
+ Logger.WriteDebug(ex.GetExceptionInfo());
}
}
#endregion
diff --git a/Plugins/ScriptPlugins/VPNDetection.js b/Plugins/ScriptPlugins/VPNDetection.js
index c55798b0c..ac2911284 100644
--- a/Plugins/ScriptPlugins/VPNDetection.js
+++ b/Plugins/ScriptPlugins/VPNDetection.js
@@ -42,6 +42,7 @@ var plugin = {
var library = importNamespace('SharedLibraryCore');
var kickOrigin = new library.Objects.Player();
kickOrigin.ClientId = 1;
+ kickOrigin.CurrentServer = origin.CurrentServer;
origin.Kick(_localization.LocalizationIndex["SERVER_KICK_VPNS_NOTALLOWED"], kickOrigin);
}
},
@@ -55,7 +56,7 @@ var plugin = {
onLoadAsync: function (manager) {
this.manager = manager;
- this.logger = manager.GetLogger();
+ this.logger = manager.GetLogger(0);
},
onUnloadAsync: function () {
diff --git a/Plugins/Stats/Cheat/Detection.cs b/Plugins/Stats/Cheat/Detection.cs
index e51d75055..892e15c16 100644
--- a/Plugins/Stats/Cheat/Detection.cs
+++ b/Plugins/Stats/Cheat/Detection.cs
@@ -26,8 +26,8 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
Dictionary HitLocationCount;
double AngleDifferenceAverage;
EFClientStatistics ClientStats;
- DateTime LastHit;
long LastOffset;
+ IW4Info.WeaponName LastWeapon;
ILogger Log;
Strain Strain;
readonly DateTime ConnectionTime = DateTime.UtcNow;
@@ -53,16 +53,16 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
if ((kill.DeathType != IW4Info.MeansOfDeath.MOD_PISTOL_BULLET &&
kill.DeathType != IW4Info.MeansOfDeath.MOD_RIFLE_BULLET &&
kill.DeathType != IW4Info.MeansOfDeath.MOD_HEAD_SHOT) ||
- kill.HitLoc == IW4Info.HitLocation.none || kill.TimeOffset - LastOffset < 0)
+ kill.HitLoc == IW4Info.HitLocation.none || kill.TimeOffset - LastOffset < 0 ||
+ // hack: prevents false positives
+ (LastWeapon != kill.Weapon && (kill.TimeOffset - LastOffset) == 50))
return new DetectionPenaltyResult()
{
ClientPenalty = Penalty.PenaltyType.Any,
};
DetectionPenaltyResult result = null;
-
- if (LastHit == DateTime.MinValue)
- LastHit = DateTime.UtcNow;
+ LastWeapon = kill.Weapon;
HitLocationCount[kill.HitLoc]++;
if (!isDamage)
diff --git a/Plugins/Stats/Helpers/StatManager.cs b/Plugins/Stats/Helpers/StatManager.cs
index fa12ca833..db276eba7 100644
--- a/Plugins/Stats/Helpers/StatManager.cs
+++ b/Plugins/Stats/Helpers/StatManager.cs
@@ -147,7 +147,7 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
});
#if DEBUG == true
- var statsInfoSql = iqStatsInfo.ToSql();
+ var statsInfoSql = iqStatsInfo.ToSql();
#endif
var topPlayers = await iqStatsInfo.ToListAsync();
@@ -406,6 +406,14 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
string fraction, string visibilityPercentage, string snapAngles)
{
var statsSvc = ContextThreads[serverId];
+
+ // incase the add palyer event get delayed
+ if (!Servers[serverId].PlayerStats.ContainsKey(attacker.ClientId))
+ {
+ await AddPlayer(attacker);
+ }
+
+
Vector3 vDeathOrigin = null;
Vector3 vKillOrigin = null;
Vector3 vViewAngles = null;
@@ -675,7 +683,7 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
}
#if DEBUG
- Log.WriteDebug("Calculating standard kill");
+ Log.WriteDebug("Calculating standard kill");
#endif
// update the total stats
@@ -727,7 +735,7 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
#if !DEBUG
if ((DateTime.UtcNow - attackerStats.LastStatHistoryUpdate).TotalMinutes >= 2.5)
#else
- if ((DateTime.UtcNow - attackerStats.LastStatHistoryUpdate).TotalMinutes >= 0.1)
+ if ((DateTime.UtcNow - attackerStats.LastStatHistoryUpdate).TotalMinutes >= 0.1)
#endif
{
attackerStats.LastStatHistoryUpdate = DateTime.UtcNow;
diff --git a/SharedLibraryCore/Commands/NativeCommands.cs b/SharedLibraryCore/Commands/NativeCommands.cs
index 889e669ce..b3b81ff0a 100644
--- a/SharedLibraryCore/Commands/NativeCommands.cs
+++ b/SharedLibraryCore/Commands/NativeCommands.cs
@@ -1126,7 +1126,7 @@ namespace SharedLibraryCore.Commands
{
}
- public override Task ExecuteAsync(GameEvent E)
+ public override async Task ExecuteAsync(GameEvent E)
{
var gameserverProcesses = System.Diagnostics.Process.GetProcessesByName("iw4x");
@@ -1180,12 +1180,12 @@ namespace SharedLibraryCore.Commands
E.Origin.Tell("Could not kill server process");
E.Owner.Logger.WriteDebug("Unable to kill process");
E.Owner.Logger.WriteDebug($"Exception: {e.Message}");
- return Task.CompletedTask;
+ return;
}
}
}
- return Task.CompletedTask;
+ return;
}
}
diff --git a/SharedLibraryCore/Helpers/BaseConfigurationHandler.cs b/SharedLibraryCore/Helpers/BaseConfigurationHandler.cs
index 3780f1572..ac6289ae5 100644
--- a/SharedLibraryCore/Helpers/BaseConfigurationHandler.cs
+++ b/SharedLibraryCore/Helpers/BaseConfigurationHandler.cs
@@ -37,7 +37,7 @@ namespace SharedLibraryCore.Configuration
public Task Save()
{
var appConfigJSON = JsonConvert.SerializeObject(_configuration, Formatting.Indented);
- return File.WriteAllTextAsync(Path.Join(AppDomain.CurrentDomain.BaseDirectory, "Configuration", $"{Filename}.json"), appConfigJSON);
+ return File.WriteAllTextAsync(Path.Join(Utilities.OperatingDirectory, "Configuration", $"{Filename}.json"), appConfigJSON);
}
public T Configuration() => _configuration;
diff --git a/SharedLibraryCore/RCon/StaticHelpers.cs b/SharedLibraryCore/RCon/StaticHelpers.cs
index 2ac9cebd2..d09c62436 100644
--- a/SharedLibraryCore/RCon/StaticHelpers.cs
+++ b/SharedLibraryCore/RCon/StaticHelpers.cs
@@ -39,7 +39,7 @@ namespace SharedLibraryCore.RCon
///
/// timeout in seconds to wait for a socket send or receive before giving up
///
- public static readonly int SocketTimeout = 1000;
+ public static readonly int SocketTimeout = 7500;
///
/// interval in milliseconds to wait before sending the next RCon request
///
diff --git a/WebfrontCore/Program.cs b/WebfrontCore/Program.cs
index 661538ba6..cb093725c 100644
--- a/WebfrontCore/Program.cs
+++ b/WebfrontCore/Program.cs
@@ -30,7 +30,7 @@ namespace WebfrontCore
#if DEBUG
.UseContentRoot(Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\..\..\..\", "WebfrontCore")))
#else
- .UseContentRoot(Path.Join(Directory.GetCurrentDirectory(), "..\\"))
+ .UseContentRoot(SharedLibraryCore.Utilities.OperatingDirectory)
#endif
.UseUrls(Manager.GetApplicationSettings().Configuration().WebfrontBindUrl)
.UseKestrel()
diff --git a/WebfrontCore/Startup.cs b/WebfrontCore/Startup.cs
index d18609147..ab88f0277 100644
--- a/WebfrontCore/Startup.cs
+++ b/WebfrontCore/Startup.cs
@@ -20,7 +20,7 @@ namespace WebfrontCore
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
- .SetBasePath(env.ContentRootPath)
+ // .SetBasePath(SharedLibraryCore.Utilities.OperatingDirectory)
.AddEnvironmentVariables();
Configuration = builder.Build();
@@ -32,10 +32,10 @@ namespace WebfrontCore
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
- var mvcBulder = services.AddMvc();
+ var mvcBuilder = services.AddMvc();
foreach (var asm in Program.Manager.GetPluginAssemblies())
- mvcBulder.AddApplicationPart(asm);
+ mvcBuilder.AddApplicationPart(asm);
services.Configure(o =>
{