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:
parent
04e631733b
commit
a3027eb6ce
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue