mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 18:47:35 +00:00
Replace cheat-detection teleport with server reconciliation
The old PUNKBUSTER check compared client-reported position to server position and snapped the player back when latency made them diverge, which felt like getting teleported under any real network conditions. Replaces that with proper client-side prediction + reconciliation: client tags each input with a sequence number and keeps an input buffer; server tracks the last processed sequence and reports its authoritative position via a per-user inputAck alongside each worldUpdate. The client only corrects when the actual disagreement exceeds what the unacked input time can explain — so steady-state movement runs purely on local physics, and only genuine unexpected events (collisions, being hit) trigger a smooth blend toward the server state. Includes adaptive threshold scaling so high-latency sessions don't false-positive corrections during normal running.
This commit is contained in:
parent
e6089687ed
commit
71e4b4e847
9 changed files with 162 additions and 149 deletions
|
|
@ -2,11 +2,10 @@ define([
|
|||
"Game/Core/GameObjects/Doll",
|
||||
"Game/Channel/GameObjects/Item",
|
||||
"Lib/Vendor/Box2D",
|
||||
"Lib/Utilities/NotificationCenter",
|
||||
"Lib/Utilities/Assert"
|
||||
"Lib/Utilities/NotificationCenter"
|
||||
],
|
||||
|
||||
function (Parent, Item, Box2D, nc, Assert) {
|
||||
|
||||
function (Parent, Item, Box2D, nc) {
|
||||
|
||||
"use strict";
|
||||
|
||||
|
|
@ -93,16 +92,6 @@ function (Parent, Item, Box2D, nc, Assert) {
|
|||
}
|
||||
};
|
||||
|
||||
Doll.prototype.updatePositionState = function(update) {
|
||||
if(!this.isAnotherPlayerNearby()) {
|
||||
Assert.number(update.p.x, update.p.y);
|
||||
Assert.number(update.lv.x, update.lv.y);
|
||||
this.body.SetAwake(true);
|
||||
this.body.SetPosition(update.p);
|
||||
this.body.SetLinearVelocity(update.lv);
|
||||
}
|
||||
};
|
||||
|
||||
Doll.prototype.getUpdateData = function(getSleeping) {
|
||||
|
||||
var updateData = Parent.prototype.getUpdateData.call(this, getSleeping);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue