mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-02-14 10:41:41 +01:00
Adjust nopwnage speed check, remove timeout interval for a queue.
This commit is contained in:
parent
4144e14bac
commit
b997a651fb
@ -1,10 +1,7 @@
|
|||||||
package fr.neatmonster.nocheatplus.checks.chat;
|
package fr.neatmonster.nocheatplus.checks.chat;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -74,14 +71,12 @@ public class ChatConfig implements CheckConfig {
|
|||||||
|
|
||||||
public final boolean globalChatCheck;
|
public final boolean globalChatCheck;
|
||||||
public final boolean globalChatEngineCheck;
|
public final boolean globalChatEngineCheck;
|
||||||
public final Set<String> globalChatCommands;
|
|
||||||
public final float globalChatFrequencyFactor;
|
public final float globalChatFrequencyFactor;
|
||||||
public final float globalChatFrequencyWeight;
|
public final float globalChatFrequencyWeight;
|
||||||
public final double globalChatLevel;
|
public final double globalChatLevel;
|
||||||
public final ActionList globalChatActions;
|
public final ActionList globalChatActions;
|
||||||
|
|
||||||
public final boolean noPwnageCheck;
|
public final boolean noPwnageCheck;
|
||||||
public final List<String> noPwnageExclusions;
|
|
||||||
public final int noPwnageLevel;
|
public final int noPwnageLevel;
|
||||||
public final float noPwnageVLFactor;
|
public final float noPwnageVLFactor;
|
||||||
|
|
||||||
@ -121,7 +116,7 @@ public class ChatConfig implements CheckConfig {
|
|||||||
public final int noPwnageRepeatWeight;
|
public final int noPwnageRepeatWeight;
|
||||||
|
|
||||||
public final boolean noPwnageSpeedCheck;
|
public final boolean noPwnageSpeedCheck;
|
||||||
public final long noPwnageSpeedTimeout;
|
// public final long noPwnageSpeedTimeout;
|
||||||
public final int noPwnageSpeedWeight;
|
public final int noPwnageSpeedWeight;
|
||||||
|
|
||||||
public final int noPwnageWarnLevel;
|
public final int noPwnageWarnLevel;
|
||||||
@ -149,20 +144,12 @@ public class ChatConfig implements CheckConfig {
|
|||||||
|
|
||||||
globalChatCheck = data.getBoolean(ConfPaths.CHAT_GLOBALCHAT_CHECK);
|
globalChatCheck = data.getBoolean(ConfPaths.CHAT_GLOBALCHAT_CHECK);
|
||||||
globalChatEngineCheck = data.getBoolean(ConfPaths.CHAT_GLOBALCHAT_ENGINE_CHECK);
|
globalChatEngineCheck = data.getBoolean(ConfPaths.CHAT_GLOBALCHAT_ENGINE_CHECK);
|
||||||
final List<String> commands = data.getStringList(ConfPaths.CHAT_GLOBALCHAT_COMMANDS);
|
|
||||||
globalChatCommands = new HashSet<String>();
|
|
||||||
if (commands != null){
|
|
||||||
for (String cmd : commands){
|
|
||||||
globalChatCommands.add(cmd.trim().toLowerCase());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
globalChatFrequencyFactor = (float) data.getDouble(ConfPaths.CHAT_GLOBALCHAT_FREQUENCY_FACTOR);
|
globalChatFrequencyFactor = (float) data.getDouble(ConfPaths.CHAT_GLOBALCHAT_FREQUENCY_FACTOR);
|
||||||
globalChatFrequencyWeight = (float) data.getDouble(ConfPaths.CHAT_GLOBALCHAT_FREQUENCY_WEIGHT);
|
globalChatFrequencyWeight = (float) data.getDouble(ConfPaths.CHAT_GLOBALCHAT_FREQUENCY_WEIGHT);
|
||||||
globalChatLevel = data.getDouble(ConfPaths.CHAT_GLOBALCHAT_LEVEL);
|
globalChatLevel = data.getDouble(ConfPaths.CHAT_GLOBALCHAT_LEVEL);
|
||||||
globalChatActions = data.getActionList(ConfPaths.CHAT_GLOBALCHAT_ACTIONS, Permissions.CHAT_GLOBALCHAT);
|
globalChatActions = data.getActionList(ConfPaths.CHAT_GLOBALCHAT_ACTIONS, Permissions.CHAT_GLOBALCHAT);
|
||||||
|
|
||||||
noPwnageCheck = data.getBoolean(ConfPaths.CHAT_NOPWNAGE_CHECK);
|
noPwnageCheck = data.getBoolean(ConfPaths.CHAT_NOPWNAGE_CHECK);
|
||||||
noPwnageExclusions = data.getStringList(ConfPaths.CHAT_NOPWNAGE_EXCLUSIONS);
|
|
||||||
noPwnageLevel = data.getInt(ConfPaths.CHAT_NOPWNAGE_LEVEL);
|
noPwnageLevel = data.getInt(ConfPaths.CHAT_NOPWNAGE_LEVEL);
|
||||||
// VL decreasing factor, hidden option.
|
// VL decreasing factor, hidden option.
|
||||||
noPwnageVLFactor = (float) data.getDouble(ConfPaths.CHAT_NOPWNAGE_VL_FACTOR, 0.95);
|
noPwnageVLFactor = (float) data.getDouble(ConfPaths.CHAT_NOPWNAGE_VL_FACTOR, 0.95);
|
||||||
@ -203,7 +190,7 @@ public class ChatConfig implements CheckConfig {
|
|||||||
noPwnageRepeatWeight = data.getInt(ConfPaths.CHAT_NOPWNAGE_REPEAT_WEIGHT);
|
noPwnageRepeatWeight = data.getInt(ConfPaths.CHAT_NOPWNAGE_REPEAT_WEIGHT);
|
||||||
|
|
||||||
noPwnageSpeedCheck = data.getBoolean(ConfPaths.CHAT_NOPWNAGE_SPEED_CHECK);
|
noPwnageSpeedCheck = data.getBoolean(ConfPaths.CHAT_NOPWNAGE_SPEED_CHECK);
|
||||||
noPwnageSpeedTimeout = data.getLong(ConfPaths.CHAT_NOPWNAGE_SPEED_TIMEOUT);
|
// noPwnageSpeedTimeout = data.getLong(ConfPaths.CHAT_NOPWNAGE_SPEED_TIMEOUT);
|
||||||
noPwnageSpeedWeight = data.getInt(ConfPaths.CHAT_NOPWNAGE_SPEED_WEIGHT);
|
noPwnageSpeedWeight = data.getInt(ConfPaths.CHAT_NOPWNAGE_SPEED_WEIGHT);
|
||||||
|
|
||||||
noPwnageWarnLevel = data.getInt(ConfPaths.CHAT_NOPWNAGE_WARN_LEVEL);
|
noPwnageWarnLevel = data.getInt(ConfPaths.CHAT_NOPWNAGE_WARN_LEVEL);
|
||||||
|
@ -68,6 +68,7 @@ public class ChatData implements CheckData {
|
|||||||
public long noPwnageLeaveTime;
|
public long noPwnageLeaveTime;
|
||||||
public int noPwnageReloginWarnings;
|
public int noPwnageReloginWarnings;
|
||||||
public long noPwnageReloginWarningTime;
|
public long noPwnageReloginWarningTime;
|
||||||
|
public final ActionFrequency noPwnageSpeed = new ActionFrequency(5, 1000);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear the data of the no pwnage check.
|
* Clear the data of the no pwnage check.
|
||||||
|
@ -11,6 +11,10 @@ import org.bukkit.event.player.PlayerLoginEvent;
|
|||||||
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
|
||||||
|
import fr.neatmonster.nocheatplus.checks.chat.analysis.ds.SimpleCharPrefixTree;
|
||||||
|
import fr.neatmonster.nocheatplus.config.ConfPaths;
|
||||||
|
import fr.neatmonster.nocheatplus.config.ConfigFile;
|
||||||
|
import fr.neatmonster.nocheatplus.config.ConfigManager;
|
||||||
import fr.neatmonster.nocheatplus.players.Permissions;
|
import fr.neatmonster.nocheatplus.players.Permissions;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -37,6 +41,17 @@ public class ChatListener implements Listener {
|
|||||||
|
|
||||||
/** Global chat check (experiment: alternative / supplement). */
|
/** Global chat check (experiment: alternative / supplement). */
|
||||||
private final GlobalChat globalChat = new GlobalChat();
|
private final GlobalChat globalChat = new GlobalChat();
|
||||||
|
|
||||||
|
private final SimpleCharPrefixTree commandExclusions = new SimpleCharPrefixTree();
|
||||||
|
|
||||||
|
private final SimpleCharPrefixTree chatCommands = new SimpleCharPrefixTree();
|
||||||
|
|
||||||
|
public ChatListener(){
|
||||||
|
// Read some things from the global config file.
|
||||||
|
ConfigFile config = ConfigManager.getConfigFile();
|
||||||
|
commandExclusions.feedAll(config.getStringList(ConfPaths.CHAT_NOPWNAGE_EXCLUSIONS), true, true);
|
||||||
|
chatCommands.feedAll(config.getStringList(ConfPaths.CHAT_GLOBALCHAT_COMMANDS), true, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We listen to PlayerChat events for obvious reasons.
|
* We listen to PlayerChat events for obvious reasons.
|
||||||
@ -123,10 +138,12 @@ public class ChatListener implements Listener {
|
|||||||
// First the color check.
|
// First the color check.
|
||||||
event.setMessage(color.check(player, event.getMessage(), true));
|
event.setMessage(color.check(player, event.getMessage(), true));
|
||||||
|
|
||||||
final boolean handleAsChat = cc.globalChatCommands.contains(command) || cc.globalChatCommands.contains("/"+command);
|
final String lcMessage = event.getMessage().trim().toLowerCase();
|
||||||
|
|
||||||
|
final boolean handleAsChat = chatCommands.hasPrefix(lcMessage);
|
||||||
|
|
||||||
// Then the no pwnage check.
|
// Then the no pwnage check.
|
||||||
if (noPwnage.check(player, event.getMessage(), !handleAsChat, true))
|
if (!commandExclusions.hasPrefix(lcMessage) && noPwnage.check(player, event.getMessage(), !handleAsChat, true))
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
else if (handleAsChat && globalChat.check(player, event.getMessage(), noPwnage, true))
|
else if (handleAsChat && globalChat.check(player, event.getMessage(), noPwnage, true))
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -129,11 +129,6 @@ public class NoPwnage extends Check implements ICaptcha{
|
|||||||
final boolean isMainThread, final ChatConfig cc, final ChatData data) {
|
final boolean isMainThread, final ChatConfig cc, final ChatData data) {
|
||||||
boolean cancel = false;
|
boolean cancel = false;
|
||||||
|
|
||||||
// Don't not check excluded messages/commands.
|
|
||||||
for (final String exclusion : cc.noPwnageExclusions)
|
|
||||||
if (message.startsWith(exclusion))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
final long now = System.currentTimeMillis();
|
final long now = System.currentTimeMillis();
|
||||||
|
|
||||||
// Forget expired VL.
|
// Forget expired VL.
|
||||||
@ -165,8 +160,16 @@ public class NoPwnage extends Check implements ICaptcha{
|
|||||||
|
|
||||||
// NoPwnage will check if a player sends messages too fast. If a message is sent within "timeout"
|
// NoPwnage will check if a player sends messages too fast. If a message is sent within "timeout"
|
||||||
// milliseconds after the previous message, increase suspicion by "weight".
|
// milliseconds after the previous message, increase suspicion by "weight".
|
||||||
if (cc.noPwnageSpeedCheck && now - data.noPwnageLastMessageTime < cc.noPwnageSpeedTimeout)
|
// TODO: update description or method :p
|
||||||
suspicion += cc.noPwnageSpeedWeight;
|
if (cc.noPwnageSpeedCheck){
|
||||||
|
// First add old messages score:
|
||||||
|
data.noPwnageSpeed.update(now);
|
||||||
|
suspicion += data.noPwnageSpeed.getScore(0.7f) * cc.noPwnageSpeedWeight;
|
||||||
|
// Then add this message.
|
||||||
|
data.noPwnageSpeed.add(now, 1.0f);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// NoPwnage will check if a player repeats his messages within the "timeout" timeframe. Even if the message
|
// NoPwnage will check if a player repeats his messages within the "timeout" timeframe. Even if the message
|
||||||
// is a bit different, it will be counted as being a repetition. The suspicion is increased by "weight".
|
// is a bit different, it will be counted as being a repetition. The suspicion is increased by "weight".
|
||||||
|
@ -203,7 +203,7 @@ public abstract class ConfPaths {
|
|||||||
|
|
||||||
private static final String CHAT_NOPWNAGE_SPEED = CHAT_NOPWNAGE + "speed.";
|
private static final String CHAT_NOPWNAGE_SPEED = CHAT_NOPWNAGE + "speed.";
|
||||||
public static final String CHAT_NOPWNAGE_SPEED_CHECK = CHAT_NOPWNAGE_SPEED + "active";
|
public static final String CHAT_NOPWNAGE_SPEED_CHECK = CHAT_NOPWNAGE_SPEED + "active";
|
||||||
public static final String CHAT_NOPWNAGE_SPEED_TIMEOUT = CHAT_NOPWNAGE_SPEED + "timeout";
|
// public static final String CHAT_NOPWNAGE_SPEED_TIMEOUT = CHAT_NOPWNAGE_SPEED + "timeout";
|
||||||
public static final String CHAT_NOPWNAGE_SPEED_WEIGHT = CHAT_NOPWNAGE_SPEED + "weight";
|
public static final String CHAT_NOPWNAGE_SPEED_WEIGHT = CHAT_NOPWNAGE_SPEED + "weight";
|
||||||
|
|
||||||
public static final String CHAT_NOPWNAGE_VL = CHAT_NOPWNAGE + "vl.";
|
public static final String CHAT_NOPWNAGE_VL = CHAT_NOPWNAGE + "vl.";
|
||||||
|
@ -181,7 +181,7 @@ public class DefaultConfig extends ConfigFile {
|
|||||||
set(ConfPaths.CHAT_NOPWNAGE_REPEAT_WEIGHT, 150);
|
set(ConfPaths.CHAT_NOPWNAGE_REPEAT_WEIGHT, 150);
|
||||||
|
|
||||||
set(ConfPaths.CHAT_NOPWNAGE_SPEED_CHECK, true);
|
set(ConfPaths.CHAT_NOPWNAGE_SPEED_CHECK, true);
|
||||||
set(ConfPaths.CHAT_NOPWNAGE_SPEED_TIMEOUT, 500L);
|
// set(ConfPaths.CHAT_NOPWNAGE_SPEED_TIMEOUT, 500L);
|
||||||
set(ConfPaths.CHAT_NOPWNAGE_SPEED_WEIGHT, 200);
|
set(ConfPaths.CHAT_NOPWNAGE_SPEED_WEIGHT, 200);
|
||||||
|
|
||||||
set(ConfPaths.CHAT_NOPWNAGE_WARN_LEVEL, 400);
|
set(ConfPaths.CHAT_NOPWNAGE_WARN_LEVEL, 400);
|
||||||
|
Loading…
Reference in New Issue
Block a user