Technical solution to eliminate desync in single-player sessions

"
Sachiru wrote:
"
MeltingPoint wrote:
Some people are missing the fact the the code posted contains just an example, the server checks would, in reality happen on the server, not the client.


This code sucks as an example.

It's not indicative IN ANY WAY about what's actually happening on the server. It's indicative only of what's happening in his head.

This supposed 12-year-industry-veteran is making noobie changes, saying that hackers will at most only change three variables and stop there, probably out of some sort of misguided notion of fair play. Memory injection, packet buffering and reordering, speedhacks and synchronization problems aren't even addressed here.

For instance, where's the code to keep the server in sync? Even if you send the packet containing the seed the moment it's generated, it has to travel through wires, and will automatically be LATE when it arrives at the client.

Latency also isn't constant, you don't somehow have only 80 ms ping for the next three hours, it fluctuates. What would you then do, check delta? So if ping spiked to 160 ms, what do you do, desync? Oh right, this is somehow a desync solution, right?


Yeah, man, and fucking magnets.
IGN: SplitEpimorphism
Sachiru, it's time for you to read the main post again. Not a single one of your replies has demonstrated that you have ANY understanding.


"
a) Prevent packet loss and therefore missing seeds


PoE uses TCP, packets get resent.


"
b) Prevent desync from flood of too many packets


One packet gets sent per second.


"
c) Be somehow better from what GGG is doing right now


Haha
"
For instance, where's the code to keep the server in sync? Even if you send the packet containing the seed the moment it's generated, it has to travel through wires, and will automatically be LATE when it arrives at the client.


The server does not respond to the client. Why are you asking this question? You know the answer already if you've read my main post.
Here is the updated code:
http://pastebin.com/raw.php?i=Z6fnW0jX

I removed anything that might confuse you, such as the hash/signature.
"
qwave wrote:

"
b) Prevent desync from flood of too many packets


One packet gets sent per second.


And I repeat my hack code right now. Only with a greater leniency.

y=Attack(clientSeed, mob, x);

for(x=timestamp, x< timestamp +999ms; x+1ms) {
if (Attack.AttackDamage > y){
y = Attack(clientSeed, mob, x);
}
}

I can, in one second, evaluate 999 possible outcomes and determine the best for them.

Your solution, the moment we lag for one second, resends a seed, resetting the state of the entire system and desyncing. But this is a secure desync solution, right?
"
qwave wrote:
"
For instance, where's the code to keep the server in sync? Even if you send the packet containing the seed the moment it's generated, it has to travel through wires, and will automatically be LATE when it arrives at the client.


The server does not respond to the client. Why are you asking this question? You know the answer already if you've read my main post.


So HOW does the client get the seed if the server does not respond to the client? Computer telepathy? Magical pixie fairy dust? You hire a human courier to type it in?
This

// The player attacked a mob out of range, cheater!
if (packet.Target > MoveSpeed) {
Console.WriteLine("The client's packet is hacked, SPEEDHACK!");
return;
}

looks fishy.

Units don't match up. packet.Target is a distance; MoveSpeed is a speed. This only makes sense if movespeed is measured as distance traveled per packet time sent -- that's not documented as far as I see.

It looks fishy because changing the timestamp would be a way to implement a speedhack, but this speedhack detection doesn't inspect the timestamp at all.
IGN: SplitEpimorphism
"
It looks fishy because changing the timestamp would be a way to implement a speedhack, but this speedhack detection doesn't inspect the timestamp at all.


Look for the delta check.
"
So HOW does the client get the seed if the server does not respond to the client? Computer telepathy? Magical pixie fairy dust? You hire a human courier to type it in?


It got the seed at the start of the session, like every post ive ever made says. They used a shared deterministic seed.
"
I can, in one second, evaluate 999 possible outcomes and determine the best for them.


This is a well-known fact. However, this becomes significantly more complicated when there are hundreds of actors rotating the seed in realtime. When you perform the action, the seed will not be the same by the time it finishes invocation. I have addressed this in my main post.
Last edited by qwave#5074 on Nov 21, 2013, 2:14:39 AM

Report Forum Post

Report Account:

Report Type

Additional Info