From df8aca4cbef6e55d2836d531fc08e7978bd45c12 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Thu, 2 May 2024 13:04:12 +0530 Subject: [PATCH] improve jitter handle and fix item pickup desync spam --- src/MarbleWorld.hx | 14 +++++++++----- src/modes/HuntMode.hx | 3 +++ src/net/MoveManager.hx | 30 +++++++++++++++--------------- src/shapes/Gem.hx | 2 ++ src/shapes/PowerUp.hx | 4 ++++ 5 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index c304712e..ae1bbabd 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1293,21 +1293,25 @@ class MarbleWorld extends Scheduler { advanceTimeState.ticks = ourLastMoveTime; // if (marbleNeedsPrediction & (1 << Net.clientId) > 0) { // Only for our clients pls - // if (qm != null) { + // if (qm != null) { // var mvs = qm.powerupStates.copy(); for (pw in marble.level.powerUps) { // var val = mvs.shift(); // if (pw.lastPickUpTime != val) - // Console.log('Revert powerup pickup: ${pw.lastPickUpTime} -> ${val}'); - pw.lastPickUpTime = powerupPredictions.getState(pw.netIndex); + // Console.log('Revert powerup pickup: ${pw.lastPickUpTime} -> ${val}'); + + if (pw.pickupClient != -1 && marbleNeedsPrediction & (1 << pw.pickupClient) > 0) + pw.lastPickUpTime = powerupPredictions.getState(pw.netIndex); } var huntMode:HuntMode = cast this.gameMode; if (@:privateAccess huntMode.activeGemSpawnGroup != null) { for (activeGem in @:privateAccess huntMode.activeGemSpawnGroup) { - huntMode.setGemHiddenStatus(activeGem, gemPredictions.getState(activeGem)); + var g = @:privateAccess huntMode.gemSpawnPoints[activeGem].gem; + if (g != null && g.pickUpClient != -1 && marbleNeedsPrediction & (1 << g.pickUpClient) > 0) + huntMode.setGemHiddenStatus(activeGem, gemPredictions.getState(activeGem)); } } - // } + // } // } ackLag = ourQueuedMoves.length; diff --git a/src/modes/HuntMode.hx b/src/modes/HuntMode.hx index 6e9dc198..9bf91be9 100644 --- a/src/modes/HuntMode.hx +++ b/src/modes/HuntMode.hx @@ -369,6 +369,9 @@ class HuntMode extends NullMode { @:privateAccess level.playGui.incrementPlayerScore(packet.clientId, packet.scoreIncr); } + if (this.level.isMultiplayer && Net.isClient) { + gem.pickUpClient = @:privateAccess marble.connection == null ? Net.clientId : @:privateAccess marble.connection.id; + } } function setupGems() { diff --git a/src/net/MoveManager.hx b/src/net/MoveManager.hx index f7f62831..4f21553e 100644 --- a/src/net/MoveManager.hx +++ b/src/net/MoveManager.hx @@ -47,7 +47,7 @@ class MoveManager { var maxMoves = 45; var serverTargetMoveListSize = 3; - var serverMaxMoveListSize = 5; + var serverMaxMoveListSize = 8; var serverAvgMoveListSize = 3.0; var serverSmoothMoveAvg = 0.15; var serverMoveListSizeSlack = 1.0; @@ -179,12 +179,12 @@ class MoveManager { && queuedMoves.length < serverTargetMoveListSize && queuedMoves.length != 0) { serverAvgMoveListSize = Math.max(Std.int(serverAvgMoveListSize + serverMoveListSizeSlack + 0.5), queuedMoves.length); - serverAbnormalMoveCount++; - if (serverAbnormalMoveCount > 3) { - serverTargetMoveListSize += 1; - if (serverTargetMoveListSize > serverMaxMoveListSize) - serverTargetMoveListSize = serverMaxMoveListSize; - } + // serverAbnormalMoveCount++; + // if (serverAbnormalMoveCount > 3) { + // serverTargetMoveListSize += 1; + // if (serverTargetMoveListSize > serverMaxMoveListSize) + // serverTargetMoveListSize = serverMaxMoveListSize; + // } // Send null move return null; } @@ -196,14 +196,14 @@ class MoveManager { queuedMoves.pop(); } serverAvgMoveListSize = serverTargetMoveListSize; - serverAbnormalMoveCount++; - if (serverAbnormalMoveCount > 3) { - serverTargetMoveListSize -= 1; - if (serverTargetMoveListSize < serverDefaultMinTargetMoveListSize) - serverTargetMoveListSize = serverDefaultMinTargetMoveListSize; - } else { - serverAbnormalMoveCount = 0; - } + // serverAbnormalMoveCount++; + // if (serverAbnormalMoveCount > 3) { + // serverTargetMoveListSize -= 1; + // if (serverTargetMoveListSize < serverDefaultMinTargetMoveListSize) + // serverTargetMoveListSize = serverDefaultMinTargetMoveListSize; + // } else { + // serverAbnormalMoveCount = 0; + // } } } if (queuedMoves.length == 0) { diff --git a/src/shapes/Gem.hx b/src/shapes/Gem.hx index 4402ff04..12dd41ce 100644 --- a/src/shapes/Gem.hx +++ b/src/shapes/Gem.hx @@ -13,6 +13,7 @@ class Gem extends DtsObject { public var pickedUp:Bool; public var netIndex:Int; + public var pickUpClient:Int = -1; var gemColor:String; @@ -76,6 +77,7 @@ class Gem extends DtsObject { override function reset() { this.pickedUp = false; + this.pickUpClient = -1; this.setOpacity(1); } diff --git a/src/shapes/PowerUp.hx b/src/shapes/PowerUp.hx index ecc059d9..b874bded 100644 --- a/src/shapes/PowerUp.hx +++ b/src/shapes/PowerUp.hx @@ -56,6 +56,10 @@ abstract class PowerUp extends DtsObject { pickupTicks = pickupPacket.serverTicks; } + if (level.isMultiplayer && Net.isClient) { + pickupClient = @:privateAccess marble.connection != null ? @:privateAccess marble.connection.id : Net.clientId; + } + this.lastPickUpTime = timeState.currentAttemptTime; if (this.autoUse) this.use(marble, timeState);