mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-03-10 21:49:53 +01:00
Add shortterm component to frequency check.
This commit is contained in:
parent
0c12553c4b
commit
3ed408a3af
@ -92,6 +92,9 @@ public class BlockBreakConfig extends ACheckConfig {
|
|||||||
public final float frequencyBucketFactor;
|
public final float frequencyBucketFactor;
|
||||||
public final int frequencyIntervalCreative;
|
public final int frequencyIntervalCreative;
|
||||||
public final int frequencyIntervalSurvival;
|
public final int frequencyIntervalSurvival;
|
||||||
|
|
||||||
|
public final int frequencyShortTermLimit;
|
||||||
|
public final int frequencyShortTermTicks;
|
||||||
public final ActionList frequencyActions;
|
public final ActionList frequencyActions;
|
||||||
|
|
||||||
public boolean improbableFastBreakCheck;
|
public boolean improbableFastBreakCheck;
|
||||||
@ -135,6 +138,8 @@ public class BlockBreakConfig extends ACheckConfig {
|
|||||||
frequencyBucketFactor = (float) data.getDouble(ConfPaths.BLOCKBREAK_FREQUENCY_BUCKETS_FACTOR, 1f);
|
frequencyBucketFactor = (float) data.getDouble(ConfPaths.BLOCKBREAK_FREQUENCY_BUCKETS_FACTOR, 1f);
|
||||||
frequencyIntervalCreative = data.getInt(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_CREATIVE);
|
frequencyIntervalCreative = data.getInt(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_CREATIVE);
|
||||||
frequencyIntervalSurvival = data.getInt(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_SURVIVAL);
|
frequencyIntervalSurvival = data.getInt(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_SURVIVAL);
|
||||||
|
frequencyShortTermLimit = data.getInt(ConfPaths.BLOCKBREAK_FREQUENCY_SHORTTERM_LIMIT);
|
||||||
|
frequencyShortTermTicks = data.getInt(ConfPaths.BLOCKBREAK_FREQUENCY_SHORTTERM_TICKS);
|
||||||
frequencyActions = data.getActionList(ConfPaths.BLOCKBREAK_FREQUENCY_ACTIONS, Permissions.BLOCKBREAK_FREQUENCY);
|
frequencyActions = data.getActionList(ConfPaths.BLOCKBREAK_FREQUENCY_ACTIONS, Permissions.BLOCKBREAK_FREQUENCY);
|
||||||
|
|
||||||
improbableFastBreakCheck = data.getBoolean(ConfPaths.COMBINED_IMPROBABLE_FASTBREAK_CHECK);
|
improbableFastBreakCheck = data.getBoolean(ConfPaths.COMBINED_IMPROBABLE_FASTBREAK_CHECK);
|
||||||
|
@ -89,6 +89,8 @@ public class BlockBreakData extends ACheckData {
|
|||||||
public long fastBreakfirstDamage = System.currentTimeMillis();
|
public long fastBreakfirstDamage = System.currentTimeMillis();
|
||||||
|
|
||||||
public final ActionFrequency frequencyBuckets;
|
public final ActionFrequency frequencyBuckets;
|
||||||
|
public int frequencyShortTermCount;
|
||||||
|
public int frequencyShortTermTick;
|
||||||
|
|
||||||
// Data of the no swing check.
|
// Data of the no swing check.
|
||||||
public boolean noSwingArmSwung = true;
|
public boolean noSwingArmSwung = true;
|
||||||
|
@ -5,6 +5,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import fr.neatmonster.nocheatplus.checks.Check;
|
import fr.neatmonster.nocheatplus.checks.Check;
|
||||||
import fr.neatmonster.nocheatplus.checks.CheckType;
|
import fr.neatmonster.nocheatplus.checks.CheckType;
|
||||||
|
import fr.neatmonster.nocheatplus.utilities.TickTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This checks just limits the number of blocks broken per time frame.
|
* This checks just limits the number of blocks broken per time frame.
|
||||||
@ -22,16 +23,36 @@ public class Frequency extends Check {
|
|||||||
final float interval = (float) ((player.getGameMode() == GameMode.CREATIVE)?(cc.frequencyIntervalCreative):(cc.frequencyIntervalSurvival));
|
final float interval = (float) ((player.getGameMode() == GameMode.CREATIVE)?(cc.frequencyIntervalCreative):(cc.frequencyIntervalSurvival));
|
||||||
data.frequencyBuckets.add(System.currentTimeMillis(), interval);
|
data.frequencyBuckets.add(System.currentTimeMillis(), interval);
|
||||||
|
|
||||||
final float score = data.frequencyBuckets.getScore(cc.frequencyBucketFactor);
|
// Full period frequency.
|
||||||
final float allowed = cc.frequencyBuckets * cc.frequencyBucketDur;
|
final float fullScore = data.frequencyBuckets.getScore(cc.frequencyBucketFactor);
|
||||||
|
final float fullTime = cc.frequencyBuckets * cc.frequencyBucketDur;
|
||||||
|
|
||||||
|
// Short term arrivals.
|
||||||
|
final int tick = TickTask.getTick();
|
||||||
|
if (tick - data.frequencyShortTermTick < cc.frequencyShortTermTicks){
|
||||||
|
// Within range, add.
|
||||||
|
data.frequencyShortTermCount ++;
|
||||||
|
System.out.println(data.frequencyShortTermCount);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
data.frequencyShortTermTick = tick;
|
||||||
|
data.frequencyShortTermCount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find if one of both or both are violations:
|
||||||
|
final float fullViolation = (fullScore > fullTime) ? (fullScore - fullTime) : 0;
|
||||||
|
final float shortTermWeight = 50f * cc.frequencyShortTermTicks / (float) cc.frequencyShortTermLimit;
|
||||||
|
final float shortTermViolation = (data.frequencyShortTermCount > cc.frequencyShortTermLimit)
|
||||||
|
? (data.frequencyShortTermCount - cc.frequencyShortTermLimit) * shortTermWeight : 0;
|
||||||
|
final float violation = Math.max(fullViolation, shortTermViolation);
|
||||||
|
|
||||||
boolean cancel = false;
|
boolean cancel = false;
|
||||||
if (score > allowed){
|
if (violation > 0){
|
||||||
final double change = (score - allowed) / 1000;
|
final double change = violation / 1000;
|
||||||
data.frequencyVL += change;
|
data.frequencyVL += change;
|
||||||
cancel = executeActions(player, data.frequencyVL, change, cc.frequencyActions);
|
cancel = executeActions(player, data.frequencyVL, change, cc.frequencyActions);
|
||||||
}
|
}
|
||||||
else if (data.frequencyVL > 0d && score < allowed * .75)
|
else if (data.frequencyVL > 0d && fullScore < fullTime * .75)
|
||||||
data.frequencyVL *= 0.95;
|
data.frequencyVL *= 0.95;
|
||||||
|
|
||||||
return cancel;
|
return cancel;
|
||||||
|
@ -86,6 +86,9 @@ public abstract class ConfPaths {
|
|||||||
public static final String BLOCKBREAK_FREQUENCY_BUCKETS_DUR = BLOCKBREAK_FREQUENCY_BUCKETS + "duration";
|
public static final String BLOCKBREAK_FREQUENCY_BUCKETS_DUR = BLOCKBREAK_FREQUENCY_BUCKETS + "duration";
|
||||||
public static final String BLOCKBREAK_FREQUENCY_BUCKETS_FACTOR = BLOCKBREAK_FREQUENCY_BUCKETS + "factor";
|
public static final String BLOCKBREAK_FREQUENCY_BUCKETS_FACTOR = BLOCKBREAK_FREQUENCY_BUCKETS + "factor";
|
||||||
public static final String BLOCKBREAK_FREQUENCY_BUCKETS_N = BLOCKBREAK_FREQUENCY_BUCKETS + "number";
|
public static final String BLOCKBREAK_FREQUENCY_BUCKETS_N = BLOCKBREAK_FREQUENCY_BUCKETS + "number";
|
||||||
|
private static final String BLOCKBREAK_FREQUENCY_SHORTTERM = BLOCKBREAK_FREQUENCY + "shortterm.";
|
||||||
|
public static final String BLOCKBREAK_FREQUENCY_SHORTTERM_LIMIT = BLOCKBREAK_FREQUENCY_SHORTTERM + "limit";
|
||||||
|
public static final String BLOCKBREAK_FREQUENCY_SHORTTERM_TICKS = BLOCKBREAK_FREQUENCY_SHORTTERM + "ticks";
|
||||||
public static final String BLOCKBREAK_FREQUENCY_ACTIONS = BLOCKBREAK_FREQUENCY + "actions";
|
public static final String BLOCKBREAK_FREQUENCY_ACTIONS = BLOCKBREAK_FREQUENCY + "actions";
|
||||||
|
|
||||||
private static final String BLOCKBREAK_NOSWING = BLOCKBREAK + "noswing.";
|
private static final String BLOCKBREAK_NOSWING = BLOCKBREAK + "noswing.";
|
||||||
|
@ -74,8 +74,10 @@ public class DefaultConfig extends ConfigFile {
|
|||||||
set(ConfPaths.BLOCKBREAK_FASTBREAK_ACTIONS, "cancel vl>500 log:fastbreak:3:5:cif cancel");
|
set(ConfPaths.BLOCKBREAK_FASTBREAK_ACTIONS, "cancel vl>500 log:fastbreak:3:5:cif cancel");
|
||||||
|
|
||||||
set(ConfPaths.BLOCKBREAK_FREQUENCY_CHECK, true);
|
set(ConfPaths.BLOCKBREAK_FREQUENCY_CHECK, true);
|
||||||
set(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_CREATIVE, 100);
|
set(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_CREATIVE, 95);
|
||||||
set(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_SURVIVAL, 50);
|
set(ConfPaths.BLOCKBREAK_FREQUENCY_MOD_SURVIVAL, 45);
|
||||||
|
set(ConfPaths.BLOCKBREAK_FREQUENCY_SHORTTERM_TICKS, 5);
|
||||||
|
set(ConfPaths.BLOCKBREAK_FREQUENCY_SHORTTERM_LIMIT, 7);
|
||||||
set(ConfPaths.BLOCKBREAK_FREQUENCY_ACTIONS, "cancel vl>5 log:bbfrequency:3:5:cif cancel vl>60 log:bbfrequency:0:5:cif cancel cmd:kickfrequency");
|
set(ConfPaths.BLOCKBREAK_FREQUENCY_ACTIONS, "cancel vl>5 log:bbfrequency:3:5:cif cancel vl>60 log:bbfrequency:0:5:cif cancel cmd:kickfrequency");
|
||||||
|
|
||||||
set(ConfPaths.BLOCKBREAK_NOSWING_CHECK, true);
|
set(ConfPaths.BLOCKBREAK_NOSWING_CHECK, true);
|
||||||
|
Loading…
Reference in New Issue
Block a user