improve jitter handle and fix item pickup desync spam

This commit is contained in:
RandomityGuy 2024-05-02 13:04:12 +05:30
parent f59348808d
commit df8aca4cbe
5 changed files with 33 additions and 20 deletions

View file

@ -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;

View file

@ -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() {

View file

@ -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) {

View file

@ -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);
}

View file

@ -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);