diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java index 9b6c2e3..9726853 100644 --- a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java +++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/KACalc.java @@ -3,6 +3,7 @@ package dev.brighten.ac.check.impl.combat.killaura.calc; import dev.brighten.ac.check.Hook; import dev.brighten.ac.check.KListener; import dev.brighten.ac.check.WAction; +import dev.brighten.ac.check.impl.combat.killaura.calc.impl.KAGrid; import dev.brighten.ac.check.impl.combat.killaura.calc.impl.KAZero; import dev.brighten.ac.data.APlayer; import dev.brighten.ac.packet.wrapper.in.WPacketPlayInFlying; @@ -59,5 +60,6 @@ public class KACalc extends KListener { std[1] = MathUtils.stdev(PITCH_OFFSET); find(KAZero.class).ifPresent(zero -> zero.runCheck(tuple, std, offset, rotations)); + find(KAGrid.class).ifPresent(grid -> grid.runCheck(tuple, std, offset, rotations)); }; } diff --git a/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/impl/KAGrid.java b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/impl/KAGrid.java new file mode 100644 index 0000000..5c71078 --- /dev/null +++ b/Anticheat/src/main/java/dev/brighten/ac/check/impl/combat/killaura/calc/impl/KAGrid.java @@ -0,0 +1,36 @@ +package dev.brighten.ac.check.impl.combat.killaura.calc.impl; + +import dev.brighten.ac.api.check.CheckType; +import dev.brighten.ac.check.Check; +import dev.brighten.ac.check.CheckData; +import dev.brighten.ac.check.impl.combat.killaura.calc.RotationCheck; +import dev.brighten.ac.data.APlayer; +import dev.brighten.ac.utils.EntityLocation; +import dev.brighten.ac.utils.MathUtils; +import dev.brighten.ac.utils.Tuple; +import dev.brighten.ac.utils.objects.evicting.EvictingList; + +import java.util.List; + +@CheckData(name = "KillAura (Grid)", checkId = "kacalcgrid", type = CheckType.KILLAURA) +public class KAGrid extends Check implements RotationCheck { + public KAGrid(APlayer player) { + super(player); + } + + private int buffer; + private List offsetGrid = new EvictingList<>(50); + + @Override + public void runCheck(Tuple locs, double[] std, double[] offset, float[] rot) { + double totalOffset = Math.abs(offset[0]) + Math.abs(offset[1]); + + offsetGrid.add(totalOffset); + + if(offsetGrid.size() >= 50) { + double grid = MathUtils.getGridDouble(offsetGrid); + + debug("grid=%.2f", grid); + } + } +} diff --git a/Compat/src/main/java/dev/brighten/ac/utils/MathUtils.java b/Compat/src/main/java/dev/brighten/ac/utils/MathUtils.java index 13782c3..1f0c095 100644 --- a/Compat/src/main/java/dev/brighten/ac/utils/MathUtils.java +++ b/Compat/src/main/java/dev/brighten/ac/utils/MathUtils.java @@ -147,6 +147,36 @@ public class MathUtils { return (max - average) - min; } + public static double getGridDouble(final Collection entry) { + double average = 0.0; + double min = 0.0, max = 0.0; + + for (final double number : entry) { + if (number < min) min = number; + if (number > max) max = number; + average += number; + } + + average /= entry.size(); + + return (max - average) - min; + } + + public static double getGridDouble(final double[] entry) { + double average = 0.0; + double min = 0.0, max = 0.0; + + for (final double number : entry) { + if (number < min) min = number; + if (number > max) max = number; + average += number; + } + + average /= entry.length; + + return (max - average) - min; + } + //Skidded from Luke. public static double getAngle(Location loc1, Location loc2) { if (loc1 == null || loc2 == null) return -1;