Further fiddle with sf vl relaxation. Use the move count instead of ms.

* Allow to relax with normal lift-off envelope, provided clean
descending (and not having had a violation since last lift off ground).
* (Maintain a flag for violation since lift off.)
* (Use the move count for vl freeze instead of milliseconds.)

Related:
* (Also set sfVLInAir with hover violations.)
This commit is contained in:
asofold 2018-02-28 14:05:55 +01:00
parent 04e631733b
commit a3027eb6ce
5 changed files with 31 additions and 15 deletions

View File

@ -123,7 +123,7 @@ public class MovingConfig extends ACheckConfig {
// Leniency settings.
/** Horizontal buffer (rather sf), after failure leniency. */
public final double hBufMax;
public final long survivalFlyVLFreeze; // TODO: Rename to FreezeTime.
public final long survivalFlyVLFreezeCount;
public final boolean survivalFlyVLFreezeInAir;
// Set back policy.
public final boolean sfSetBackPolicyVoid;
@ -266,7 +266,7 @@ public class MovingConfig extends ACheckConfig {
this.sfStepHeight = sfStepHeight;
}
hBufMax = config.getDouble(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_HBUFMAX);
survivalFlyVLFreeze = config.getLong(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_FREEZETIME);
survivalFlyVLFreezeCount = config.getInt(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_FREEZECOUNT);
survivalFlyVLFreezeInAir = config.getBoolean(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_FREEZEINAIR);
survivalFlyActions = config.getOptimizedActionList(ConfPaths.MOVING_SURVIVALFLY_ACTIONS, Permissions.MOVING_SURVIVALFLY);

View File

@ -131,6 +131,8 @@ public class MovingData extends ACheckData implements IRemoveSubCheckData {
/** Count set back (re-) setting. */
private int playerMoveCount = 0;
/** playerMoveCount at the time of the last sf violation. */
public int sfVLTime = 0;
/**
* setBackResetCount (incremented) at the time of (re-) setting the ordinary
* set back.
@ -248,7 +250,8 @@ public class MovingData extends ACheckData implements IRemoveSubCheckData {
public int sfOnIce = 0; // TODO: Replace by allowed speed + friction.
public long sfCobwebTime = 0;
public double sfCobwebVL = 0;
public long sfVLTime = 0;
/** Fake in air flag: set with any violation, reset once on ground. */
public boolean sfVLInAir = false;
// Accounting info.
@ -1308,7 +1311,6 @@ public class MovingData extends ACheckData implements IRemoveSubCheckData {
timeSprinting = Math.min(timeSprinting, time);
vehicleMorePacketsLastTime = Math.min(vehicleMorePacketsLastTime, time);
sfCobwebTime = Math.min(sfCobwebTime, time);
sfVLTime = Math.min(sfVLTime, time);
clearAccounting(); // Not sure: adding up might not be nice.
removeAllPlayerSpeedModifiers(); // TODO: This likely leads to problems.
// (ActionFrequency can handle this.)
@ -1339,6 +1341,7 @@ public class MovingData extends ACheckData implements IRemoveSubCheckData {
playerMoveCount++;
if (playerMoveCount == Integer.MAX_VALUE) {
playerMoveCount = 0;
sfVLTime = 0;
morePacketsSetBackResetTime = 0;
setBackResetTime = 0;
}

View File

@ -502,9 +502,13 @@ public class SurvivalFly extends Check {
// Handle violations.
///////////////////////
final boolean inAir = Magic.inAir(thisMove);
final double result = (Math.max(hDistanceAboveLimit, 0D) + Math.max(vDistanceAboveLimit, 0D)) * 100D;
if (result > 0D) {
final Location vLoc = handleViolation(now, result, player, from, to, data, cc);
if (inAir) {
data.sfVLInAir = true;
}
if (vLoc != null) {
return vLoc;
}
@ -512,10 +516,16 @@ public class SurvivalFly extends Check {
else {
// Slowly reduce the level with each event, if violations have not recently happened.
// TODO: Switch to move count instead of time (!).
if (now - data.sfVLTime > cc.survivalFlyVLFreeze
&& (!cc.survivalFlyVLFreezeInAir || !Magic.inAir(thisMove))) {
if (data.getPlayerMoveCount() - data.sfVLTime > cc.survivalFlyVLFreezeCount
&& (!cc.survivalFlyVLFreezeInAir || !inAir
// Favor bunny-hopping slightly: clean descend.
|| !data.sfVLInAir
&& data.liftOffEnvelope == LiftOffEnvelope.NORMAL
&& lastMove.toIsValid
&& lastMove.yDistance < -Magic.GRAVITY_MIN
&& thisMove.yDistance - lastMove.yDistance < -Magic.GRAVITY_MIN)) {
// Relax VL.
data.survivalFlyVL *= 0.95D;
data.survivalFlyVL *= 0.95;
// Finally check horizontal buffer regain.
if (hDistanceAboveLimit < 0.0 && result <= 0.0
&& !isSamePos && data.sfHorizontalBuffer < cc.hBufMax) {
@ -596,7 +606,6 @@ public class SurvivalFly extends Check {
}
// Apply reset conditions.
boolean inAir = false; // Hack.
if (resetTo) {
// The player has moved onto ground.
if (toOnGround) {
@ -637,7 +646,6 @@ public class SurvivalFly extends Check {
if (to.getY() < 0.0 && cc.sfSetBackPolicyVoid) {
data.setSetBack(to);
}
inAir = true;
}
if (inAir) {
@ -652,6 +660,7 @@ public class SurvivalFly extends Check {
else {
data.sfZeroVdistRepeat = 0;
data.ws.resetConditions(WRPT.G_RESET_NOTINAIR);
data.sfVLInAir = false;
}
// Horizontal velocity invalidation.
@ -2028,7 +2037,7 @@ public class SurvivalFly extends Check {
{
// Increment violation level.
data.survivalFlyVL += result;
data.sfVLTime = now;
data.sfVLTime = data.getPlayerMoveCount();
final ViolationData vd = new ViolationData(this, player, data.survivalFlyVL, result, cc.survivalFlyActions);
if (vd.needsParameters()) {
vd.setParameter(ParameterName.LOCATION_FROM, String.format(Locale.US, "%.2f, %.2f, %.2f", from.getX(), from.getY(), from.getZ()));
@ -2042,6 +2051,7 @@ public class SurvivalFly extends Check {
return data.getSetBack(to);
}
else {
// TODO: Evaluate how data resetting can be done minimal (skip certain things flags)?
data.clearAccounting();
data.sfJumpPhase = 0;
// Cancelled by other plugin, or no cancel set by configuration.
@ -2061,7 +2071,8 @@ public class SurvivalFly extends Check {
data.survivalFlyVL += cc.sfHoverViolation;
// TODO: Extra options for set back / kick, like vl?
data.sfVLTime = System.currentTimeMillis();
data.sfVLTime = data.getPlayerMoveCount();
data.sfVLInAir = true;
final ViolationData vd = new ViolationData(this, player, data.survivalFlyVL, cc.sfHoverViolation, cc.survivalFlyActions);
if (vd.needsParameters()) {
vd.setParameter(ParameterName.LOCATION_FROM, String.format(Locale.US, "%.2f, %.2f, %.2f", loc.getX(), loc.getY(), loc.getZ()));

View File

@ -641,7 +641,7 @@ public abstract class ConfPaths {
public static final String MOVING_SURVIVALFLY_EXTENDED_VACC = MOVING_SURVIVALFLY_EXTENDED + "vertical-accounting";
private static final String MOVING_SURVIVALFLY_LENIENCY = MOVING_SURVIVALFLY + "leniency.";
public static final String MOVING_SURVIVALFLY_LENIENCY_HBUFMAX = MOVING_SURVIVALFLY_LENIENCY + "hbufmax";
public static final String MOVING_SURVIVALFLY_LENIENCY_FREEZETIME = MOVING_SURVIVALFLY_LENIENCY + "freezetime";
public static final String MOVING_SURVIVALFLY_LENIENCY_FREEZECOUNT = MOVING_SURVIVALFLY_LENIENCY + "freezecount";
public static final String MOVING_SURVIVALFLY_LENIENCY_FREEZEINAIR = MOVING_SURVIVALFLY_LENIENCY + "freezeinair";
private static final String MOVING_SURVIVALFLY_SETBACKPOLICY = MOVING_SURVIVALFLY + "setbackpolicy.";
public static final String MOVING_SURVIVALFLY_SETBACKPOLICY_FALLDAMAGE = MOVING_SURVIVALFLY_SETBACKPOLICY + "falldamage";
@ -832,8 +832,6 @@ public abstract class ConfPaths {
public static final String MOVING_MOREPACKETSVEHICLE_ACTIONS = "checks.moving.morepacketsvehicle.actions";
@Moved(newPath=MOVING_SURVIVALFLY_LENIENCY_HBUFMAX)
public static final String MOVING_SURVIVALFLY_HBUFMAX = "checks.moving.survivalfly.hbufmax";
@Moved(newPath=MOVING_SURVIVALFLY_LENIENCY_FREEZETIME)
public static final String MOVING_SURVIVALFLY_VLFREEZE = "checks.moving.survivalfly.vlfreeze";
// Deprecated paths (just removed).
@Deprecated
public static final String MISCELLANEOUS_REPORTTOMETRICS = "miscellaneous.reporttometrics";
@ -883,6 +881,10 @@ public abstract class ConfPaths {
public static final String LOGGING_USESUBSCRIPTIONS = "logging.usesubscriptions";
@Deprecated
public static final String LOGGING_BACKEND_INGAMECHAT_SUBSCRIPTIONS = "logging.backend.ingamechat.subscriptions";
@Deprecated
public static final String MOVING_SURVIVALFLY_VLFREEZE = "checks.moving.survivalfly.vlfreeze";
@Deprecated
public static final String MOVING_SURVIVALFLY_LENIENCY_FREEZETIME = "checks.moving.survivalfly.leniency.freezetime";
/**
* Get moved paths for which an annotation doesn't work.

View File

@ -457,7 +457,7 @@ public class DefaultConfig extends ConfigFile {
set(ConfPaths.MOVING_SURVIVALFLY_STEPHEIGHT, "default", 785);
set(ConfPaths.MOVING_SURVIVALFLY_EXTENDED_VACC, true, 785);
set(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_HBUFMAX, 1.0, 1143);
set(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_FREEZETIME, 2000, 1143);
set(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_FREEZECOUNT, 40, 1144);
set(ConfPaths.MOVING_SURVIVALFLY_LENIENCY_FREEZEINAIR, true, 1143);
set(ConfPaths.MOVING_SURVIVALFLY_SETBACKPOLICY_FALLDAMAGE, true, 785);
set(ConfPaths.MOVING_SURVIVALFLY_SETBACKPOLICY_VOIDTOVOID, true, 785);