Fix anticheat issue with needing index casting. IW you seem a little sloppy there...
This commit is contained in:
parent
7cdfe618a2
commit
23c78997ac
@ -399,7 +399,7 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task AddScriptHit(bool isDamage, DateTime time, EFClient attacker, EFClient victim, long serverId, string map, string hitLoc, string type,
|
public async Task AddScriptHit(bool isDamage, DateTime time, EFClient attacker, EFClient victim, long serverId, string map, string hitLoc, string type,
|
||||||
string damage, string weapon, string killOrigin, string deathOrigin, string viewAngles, string offset, string isKillstreakKill, string Ads,
|
string damage, string weapon, string killOrigin, string deathOrigin, string viewAngles, string offset, string isKillstreakKill, string Ads,
|
||||||
string fraction, string visibilityPercentage, string snapAngles)
|
string fraction, string visibilityPercentage, string snapAngles, string isAlive, string lastAttackTime)
|
||||||
{
|
{
|
||||||
Vector3 vDeathOrigin = null;
|
Vector3 vDeathOrigin = null;
|
||||||
Vector3 vKillOrigin = null;
|
Vector3 vKillOrigin = null;
|
||||||
@ -448,7 +448,9 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
Fraction = double.Parse(fraction, System.Globalization.CultureInfo.InvariantCulture),
|
Fraction = double.Parse(fraction, System.Globalization.CultureInfo.InvariantCulture),
|
||||||
VisibilityPercentage = double.Parse(visibilityPercentage, System.Globalization.CultureInfo.InvariantCulture),
|
VisibilityPercentage = double.Parse(visibilityPercentage, System.Globalization.CultureInfo.InvariantCulture),
|
||||||
IsKill = !isDamage,
|
IsKill = !isDamage,
|
||||||
AnglesList = snapshotAngles
|
AnglesList = snapshotAngles,
|
||||||
|
IsAlive = isAlive == "1",
|
||||||
|
TimeSinceLastAttack = long.Parse(lastAttackTime)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (hit.HitLoc == IW4Info.HitLocation.shield)
|
if (hit.HitLoc == IW4Info.HitLocation.shield)
|
||||||
@ -511,7 +513,7 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
DetectionPenaltyResult result = new DetectionPenaltyResult() { ClientPenalty = EFPenalty.PenaltyType.Any };
|
DetectionPenaltyResult result = new DetectionPenaltyResult() { ClientPenalty = EFPenalty.PenaltyType.Any };
|
||||||
clientDetection.TrackedHits.Add(hit);
|
clientDetection.TrackedHits.Add(hit);
|
||||||
|
|
||||||
if (clientDetection.TrackedHits.Count >= Detection.MIN_HITS_TO_RUN_DETECTION)
|
if (clientDetection.TrackedHits.Count >= MIN_HITS_TO_RUN_DETECTION)
|
||||||
{
|
{
|
||||||
while (clientDetection.TrackedHits.Count > 0)
|
while (clientDetection.TrackedHits.Count > 0)
|
||||||
{
|
{
|
||||||
@ -521,6 +523,8 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
|
|
||||||
clientDetection.TrackedHits.Remove(oldestHit);
|
clientDetection.TrackedHits.Remove(oldestHit);
|
||||||
|
|
||||||
|
if (oldestHit.IsAlive)
|
||||||
|
{
|
||||||
result = clientDetection.ProcessHit(oldestHit, isDamage);
|
result = clientDetection.ProcessHit(oldestHit, isDamage);
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
await ApplyPenalty(result, attacker);
|
await ApplyPenalty(result, attacker);
|
||||||
@ -541,6 +545,7 @@ namespace IW4MAdmin.Plugins.Stats.Helpers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
catch (TaskCanceledException) { }
|
catch (TaskCanceledException) { }
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -44,5 +44,17 @@ namespace IW4MAdmin.Plugins.Stats.Models
|
|||||||
public float AdsPercent { get; set; }
|
public float AdsPercent { get; set; }
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public List<Vector3> AnglesList { get; set; }
|
public List<Vector3> AnglesList { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates if the attacker was alive after last captured angle
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool IsAlive { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Specifies the last time the attack button was detected as pressed
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public long TimeSinceLastAttack { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ namespace IW4MAdmin.Plugins.Stats
|
|||||||
break;
|
break;
|
||||||
case GameEvent.EventType.ScriptKill:
|
case GameEvent.EventType.ScriptKill:
|
||||||
string[] killInfo = (E.Data != null) ? E.Data.Split(';') : new string[0];
|
string[] killInfo = (E.Data != null) ? E.Data.Split(';') : new string[0];
|
||||||
if ((E.Owner.CustomCallback || ShouldOverrideAnticheatSetting(E.Owner)) && killInfo.Length >= 14 && !ShouldIgnoreEvent(E.Origin, E.Target))
|
if ((E.Owner.CustomCallback || ShouldOverrideAnticheatSetting(E.Owner)) && killInfo.Length >= 18 && !ShouldIgnoreEvent(E.Origin, E.Target))
|
||||||
{
|
{
|
||||||
// this treats "world" damage as self damage
|
// this treats "world" damage as self damage
|
||||||
if (IsWorldDamage(E.Origin))
|
if (IsWorldDamage(E.Origin))
|
||||||
@ -96,7 +96,7 @@ namespace IW4MAdmin.Plugins.Stats
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
await Manager.AddScriptHit(false, E.Time, E.Origin, E.Target, StatManager.GetIdForServer(E.Owner), S.CurrentMap.Name, killInfo[7], killInfo[8],
|
await Manager.AddScriptHit(false, E.Time, E.Origin, E.Target, StatManager.GetIdForServer(E.Owner), S.CurrentMap.Name, killInfo[7], killInfo[8],
|
||||||
killInfo[5], killInfo[6], killInfo[3], killInfo[4], killInfo[9], killInfo[10], killInfo[11], killInfo[12], killInfo[13], killInfo[14], killInfo[15]);
|
killInfo[5], killInfo[6], killInfo[3], killInfo[4], killInfo[9], killInfo[10], killInfo[11], killInfo[12], killInfo[13], killInfo[14], killInfo[15], killInfo[16], killInfo[17]);
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
S.Logger.WriteInfo($"End ScriptKill {scriptKillCount}");
|
S.Logger.WriteInfo($"End ScriptKill {scriptKillCount}");
|
||||||
@ -129,7 +129,7 @@ namespace IW4MAdmin.Plugins.Stats
|
|||||||
break;
|
break;
|
||||||
case GameEvent.EventType.ScriptDamage:
|
case GameEvent.EventType.ScriptDamage:
|
||||||
killInfo = (E.Data != null) ? E.Data.Split(';') : new string[0];
|
killInfo = (E.Data != null) ? E.Data.Split(';') : new string[0];
|
||||||
if ((E.Owner.CustomCallback || ShouldOverrideAnticheatSetting(E.Owner)) && killInfo.Length >= 14 && !ShouldIgnoreEvent(E.Origin, E.Target))
|
if ((E.Owner.CustomCallback || ShouldOverrideAnticheatSetting(E.Owner)) && killInfo.Length >= 18 && !ShouldIgnoreEvent(E.Origin, E.Target))
|
||||||
{
|
{
|
||||||
// this treats "world" damage as self damage
|
// this treats "world" damage as self damage
|
||||||
if (IsWorldDamage(E.Origin))
|
if (IsWorldDamage(E.Origin))
|
||||||
@ -143,7 +143,7 @@ namespace IW4MAdmin.Plugins.Stats
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
await Manager.AddScriptHit(true, E.Time, E.Origin, E.Target, StatManager.GetIdForServer(E.Owner), S.CurrentMap.Name, killInfo[7], killInfo[8],
|
await Manager.AddScriptHit(true, E.Time, E.Origin, E.Target, StatManager.GetIdForServer(E.Owner), S.CurrentMap.Name, killInfo[7], killInfo[8],
|
||||||
killInfo[5], killInfo[6], killInfo[3], killInfo[4], killInfo[9], killInfo[10], killInfo[11], killInfo[12], killInfo[13], killInfo[14], killInfo[15]);
|
killInfo[5], killInfo[6], killInfo[3], killInfo[4], killInfo[9], killInfo[10], killInfo[11], killInfo[12], killInfo[13], killInfo[14], killInfo[15], killInfo[16], killInfo[17]);
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
S.Logger.WriteInfo($"End ScriptDamage {scriptDamageCount}");
|
S.Logger.WriteInfo($"End ScriptDamage {scriptDamageCount}");
|
||||||
|
@ -32,6 +32,22 @@ onPlayerConnect( player )
|
|||||||
player setClientDvar("cl_autorecord", 1);
|
player setClientDvar("cl_autorecord", 1);
|
||||||
player setClientDvar("cl_demosKeep", 200);
|
player setClientDvar("cl_demosKeep", 200);
|
||||||
player thread waitForFrameThread();
|
player thread waitForFrameThread();
|
||||||
|
player thread waitForAttack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
waitForAttack()
|
||||||
|
{
|
||||||
|
self endon( "disconnect" );
|
||||||
|
|
||||||
|
self.lastAttackTime = 0;
|
||||||
|
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
self notifyOnPlayerCommand( "player_shot", "+attack" );
|
||||||
|
self waittill( "player_shot" );
|
||||||
|
|
||||||
|
self.lastAttackTime = getTime();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +165,7 @@ waitForAdditionalAngles( logString, beforeFrameCount, afterFrameCount )
|
|||||||
{
|
{
|
||||||
fixedIndex = self.angleSnapshot.size - abs(i);
|
fixedIndex = self.angleSnapshot.size - abs(i);
|
||||||
}
|
}
|
||||||
anglesStr += self.angleSnapshot[fixedIndex] + ":";
|
anglesStr += self.angleSnapshot[int(fixedIndex)] + ":";
|
||||||
collectedFrames++;
|
collectedFrames++;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -169,12 +185,15 @@ waitForAdditionalAngles( logString, beforeFrameCount, afterFrameCount )
|
|||||||
{
|
{
|
||||||
fixedIndex = i % self.angleSnapshot.size;
|
fixedIndex = i % self.angleSnapshot.size;
|
||||||
}
|
}
|
||||||
anglesStr += self.angleSnapshot[fixedIndex] + ":";
|
anglesStr += self.angleSnapshot[int(fixedIndex)] + ":";
|
||||||
collectedFrames++;
|
collectedFrames++;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
logPrint(logString + ";" + anglesStr + "\n" );
|
lastAttack = int(getTime()) - int(self.lastAttackTime);
|
||||||
|
isAlive = isAlive(self);
|
||||||
|
|
||||||
|
logPrint(logString + ";" + anglesStr + ";" + isAlive + ";" + lastAttack + "\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
vectorScale( vector, scale )
|
vectorScale( vector, scale )
|
||||||
@ -205,7 +224,7 @@ Process_Hit( type, attacker, sHitLoc, sMeansOfDeath, iDamage, sWeapon )
|
|||||||
location = victim GetTagOrigin( hitLocationToBone( sHitLoc ) );
|
location = victim GetTagOrigin( hitLocationToBone( sHitLoc ) );
|
||||||
isKillstreakKill = !isPlayer( attacker ) || isKillstreakWeapon( sWeapon );
|
isKillstreakKill = !isPlayer( attacker ) || isKillstreakWeapon( sWeapon );
|
||||||
|
|
||||||
logLine = "Script" + type + ";" + _attacker.guid + ";" + victim.guid + ";" + _attacker GetTagOrigin("tag_eye") + ";" + location + ";" + iDamage + ";" + sWeapon + ";" + sHitLoc + ";" + sMeansOfDeath + ";" + _attacker getPlayerAngles() + ";" + gettime() + ";" + isKillstreakKill + ";" + _attacker playerADS() + ";0;0";
|
logLine = "Script" + type + ";" + _attacker.guid + ";" + victim.guid + ";" + _attacker GetTagOrigin("tag_eye") + ";" + location + ";" + iDamage + ";" + sWeapon + ";" + sHitLoc + ";" + sMeansOfDeath + ";" + _attacker getPlayerAngles() + ";" + int(gettime()) + ";" + isKillstreakKill + ";" + _attacker playerADS() + ";0;0";
|
||||||
attacker thread waitForAdditionalAngles( logLine, 2, 2 );
|
attacker thread waitForAdditionalAngles( logLine, 2, 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user