Technical solution to eliminate desync in single-player sessions
" But my point is there's no need to do this in real time. Nothing gets sent back to the server between predefined time intervals, e.g., once per second. Even if you make the interval very short --- qwave himself said that combat calculations shouldn't even take 1ms, so surely 100ms would be more than enough to calculate a few dozen possible outcomes at the VERY least? |
|
" There are a multitude of hacks possible with this proposal. I wouldnt waste your breath. For years i searched for deep truths. A thousand revelations. At the very edge...the ability to think itself dissolves away.Thinking in human language is the problem. Any separation from 'the whole truth' is incomplete.My incomplete concepts may add to your 'whole truth', accept it or think about it
|
|
There are a lot of possible cheats even in the current system (i named a few of them).
Another example: - You can automatically cast enduring cry when charge has only one second left and there is a nearby monster. This is an enormous cheat: it is related to the fact that, even with current implementation, it is easily predictable that you will refresh charges [if the mob is actually there...]. However nobody cares about this kind of cheating, so why should we care about cheating more difficult to achieve such as reverse engineering/dumping the rng to get a crit and which give less advantages? The only dangerous cheat is the one that give you 999 Ex in one click. Concerning the 'calculation that may get wrong in server and client and cause desync'.... this is tautologic, they must be avoided. If things do not work,... well... they do not work. It is a design issue which should be handled carefully by ggg, but this is a general aspect of programming. Roma timezone (Italy)
|
|
" However they all need to be in the range of the seed given both the client and the server, right? There won't be a "invulnerability", given that the seed changes randomly between checks. Or did I misunderstand something? Last edited by Nightmare90#4217 on Nov 20, 2013, 1:49:38 PM
|
|
" Few dozen, yes, and easily more. The question is, are any of them good, and how does the program determine which one is best. Also, will the best possible outcome for this interval not be the worst overall sever intervals later. Basically, yes, it's theoretically possible to hack it, the goal is not to make it impossible, but to make it sufficiently hard. |
|
Yes the cheating they are referring to is that, since you can calculate, you can choose the best result. Is something like saying that i can cheat during chess player because i will evaluate a lot of combinations and choose the best one.
I do not consider this 'cheating'. You cheat if you move a pawn like a queen, but this is forbidden by the proposed system. Roma timezone (Italy)
|
|
" Yes, you are right. You can not become invulnerable, or get 100% crit rolls. What you can do, is arrange player actions in such a way, that would be beneficial to you, but as I said, it's not that easy to always determine what is beneficial. |
|
" Well, to be fair, it would only be not-cheating if it is easily done by everyone without 3rd party software. Else we talk ToU violations. Maybe make the last possible ways of cheating inherent game-mechanics? Like a "feeling lucky" buff apparent to the player if the client knows that the next strike will be a critical. I know it sounds silly. Last edited by Nightmare90#4217 on Nov 20, 2013, 2:05:42 PM
|
|
You know, when you get right down to it, using shared random seed to handle combat math isn't really that relevant of a change. For the most part, it isn't combat math prediction which is causing desync, it's monster location prediction.
What this game needs is much better client-side prediction in terms of when monsters will initiate the use of skills. If a Rhoa is going to charge you, the client should know this about one latency-trip-time before the server knows it. I believe right now the system is that the client waits on the server to send a command ("this Rhoa is now charging you"), then the Rhoa begins the charge on the client once the client receives said message. Naturally, this leads to massive desync, because the Rhoa movement skill begins two latency-trip-times later on the client than it should. And, in all seriousness, a shared random seed could help with this. If any part of a monster's decision tree is based on an RNG call — say, 70% chance for a Voidbearer within melee range to use melee attack, 30% chance to activate its Incinerate attack — then a shared random seed actually would be of great help. This would make monster skill selection deterministic from a simulation perspective while at the same time appear random. In short, if the player's skills initiate on the client one latency-trip-time before they begin initiating on the server, so should monster skills. When Stephen Colbert was killed by HYDRA's Project Insight in 2014, the comedy world lost a hero. Since his life model decoy isn't up to the task, please do not mistake my performance as political discussion. I'm just doing what Steve would have wanted. Last edited by ScrotieMcB#2697 on Nov 20, 2013, 1:46:48 PM
|
|
" Seems obvious to me you are correct. Perhaps we are wrong. But i assume since it seems so obvious to us then GGG would already be doing something similar... Or there is a good reason they dont. Another thing that could be examined is; have client side monsters only base their decisions on data from the last packet containing their state to the server. Might look weird for monster to be momentarily moving or attacking where you were .2 seconds ago, but it may be worth it. For years i searched for deep truths. A thousand revelations. At the very edge...the ability to think itself dissolves away.Thinking in human language is the problem. Any separation from 'the whole truth' is incomplete.My incomplete concepts may add to your 'whole truth', accept it or think about it
|
|