Exploit Config Tweaks

This commit is contained in:
nossr50 2019-03-19 12:18:25 -07:00
parent 956b01a28e
commit ac04ca5c27
7 changed files with 26 additions and 8 deletions

View File

@ -10,6 +10,9 @@ Key:
Version 2.2.0
mcMMO's config system has been rewritten
Parties no longer have a cap, you can level them forever for bragging rights
Optimizations were made for many anti-exploit behaviours
Acrobatic's Dodge will no longer reward XP for a few seconds after a TP
Roll will not give XP for a few seconds after a TP
You can now disable the party system completely
Many config files are now generated on demand instead of being copied from within the JAR
All config nodes that used to be styled with CamelCase or otherwise now use hyphens (-) as spaces for readability and consistency
@ -131,7 +134,7 @@ Version 2.2.0
Update_Check, Prefer_Beta
Removed the following config settings for being unwanted
Config_Update_Overwrite
Config_Update_Overwrite, Tool_Mods_Enabled, Armor_Mods_Enabled, Block_Mods_Enabled, Entity_Mods_Enabled
API Changes
Added API method to check if player parties are size capped

View File

@ -8,6 +8,7 @@ public class ConfigSectionExploitAcrobatics {
public static final int ACROBATIC_LOCATION_LIMIT_DEFAULT = 50;
public static final boolean PREVENT_ACROBATICS_ABUSE_DEFAULT = true;
public static final int TELEPORT_COOLDOWN_DEFAULT = 30;
@Setting(value = "Player-Fall-Location-Tracking",
comment = "The amount of locations to keep track of for player falls." +
@ -27,6 +28,14 @@ public class ConfigSectionExploitAcrobatics {
"\nDefault value: "+PREVENT_ACROBATICS_ABUSE_DEFAULT)
private boolean preventAcrobaticsAbuse = PREVENT_ACROBATICS_ABUSE_DEFAULT;
@Setting(value = "No-XP-After-Teleporting-Cooldown-In-Seconds", comment = "Prevents XP gains for Acrobatics for a set period of time after teleporting." +
"\nDefault value: "+TELEPORT_COOLDOWN_DEFAULT)
private int teleportCooldownSeconds = TELEPORT_COOLDOWN_DEFAULT;
public int getTeleportCooldownSeconds() {
return teleportCooldownSeconds;
}
public int getAcrobaticLocationLimit() {
return acrobaticLocationLimit;
}

View File

@ -26,7 +26,7 @@ public class ConfigSuperAbilities {
private ConfigSectionSuperAbilityCooldowns superAbilityCooldowns = new ConfigSectionSuperAbilityCooldowns();
@Setting(value = "Super-Ability-Max-Length",
comment = "The maximum amount of time a player can use a super ability." +
comment = "The maximum amount of time in seconds that a super ability can last." +
"\nMost super abilities get longer as a player grows in skill.")
private ConfigSectionSuperAbilityMaxLength superAbilityMaxLength = new ConfigSectionSuperAbilityMaxLength();

View File

@ -92,7 +92,7 @@ public class McMMOPlayer {
private int recentlyHurt;
private int respawnATS;
private int teleportATS;
private long teleportATS;
private long databaseATS;
//private int chimeraWingLastUse;
private Location teleportCommence;
@ -388,12 +388,12 @@ public class McMMOPlayer {
respawnATS = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
}
public int getTeleportATS() {
public long getTeleportATS() {
return teleportATS;
}
public void actualizeTeleportATS() {
teleportATS = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
teleportATS = System.currentTimeMillis() + (mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitAcrobatics().getTeleportCooldownSeconds() * 1000);
}
public long getDatabaseATS() {

View File

@ -285,6 +285,10 @@ public class Roll extends AcrobaticsSubSkill {
return true;
}
//Teleport CD
if(System.currentTimeMillis() < UserManager.getPlayer(player).getTeleportATS())
return true;
if(fallLocationMap.get(player) == null)
fallLocationMap.put(player, new LimitedSizeList(mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitAcrobatics().getAcrobaticLocationLimit()));

View File

@ -77,11 +77,12 @@ public class PlayerListener implements Listener {
return;
}
if (!UserManager.hasPlayerDataKey(player) || MainConfig.getInstance().getXPAfterTeleportCooldown() <= 0 || event.getFrom().equals(event.getTo())) {
if (!UserManager.hasPlayerDataKey(player) || event.getFrom().equals(event.getTo())) {
return;
}
UserManager.getPlayer(player).actualizeTeleportATS();
if(mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitAcrobatics().isPreventAcrobaticsAbuse())
UserManager.getPlayer(player).actualizeTeleportATS();
}
/**

View File

@ -78,7 +78,8 @@ public class AcrobaticsManager extends SkillManager {
//Check respawn to prevent abuse
if(!mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitAcrobatics().isPreventAcrobaticsAbuse())
applyXpGain((float) (damage * Acrobatics.dodgeXpModifier), XPGainReason.PVP);
else if (SkillUtils.cooldownExpired(mcMMOPlayer.getRespawnATS(), Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS)) {
else if (SkillUtils.cooldownExpired(mcMMOPlayer.getRespawnATS(), Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS)
&& mcMMOPlayer.getTeleportATS() < System.currentTimeMillis()) {
applyXpGain((float) (damage * Acrobatics.dodgeXpModifier), XPGainReason.PVP);
}