Client-server Action Synchronisation
"Save yourself some time and just ignore people "Holy crap that was a good read. Now I know why the AI is so derpy and odd when it desyncs xD, now that I know how it works I'm not even scurred. Okay I am no expert or network management master, especially the mass transmit of data streaming all over the world in a complex calculated driven game like PoE. However I am creative and intuitive when it comes to problem solving, and I love this game so its only right that I throw out ideas for the cause. Okay so the system is action prediction, I'm not going to debate whether to change that system or not. I want to improve that system. I have some simple ideas to perfect and emulate the zero lag experience every gamer enjoys. The two main points to address: Enemy AI
Spoiler
I find the "prediction" of the enemies current AI okay, However I feel like with some simplified pathing and script for actions that the predictions could be better and more exactly predicted, counteracting the severity of the desync and rubber banding effect, especially mobs being in a different place as predicted and killing you while you think you're perfectly safe. I would test new enemies with new AI to work towards the most effective AI.
Prediction vs Pre-Calculation
Spoiler
Now this will be the hard part, could the game(servers) actually predict drops, damage, ignite, -all the calculations that are made, before the event actually occurs. I know this could be incredibly resourceful and hard to implement at this point, but if it was possible to make the AI/movement/location sync issues less prominent, then also to fix the "action/event-calculation lag" that could completely fix the desync issue so that it wouldn't effect people much at all. Not every prediction should be pre-calculated, and this could be very complicated to the point people will say it can't be done, but I believe with a very ingenious system GGG can cheat the cons of the action prediction method and desync. I would go on to talk about factoring for this buts that's another issue. Anyway this was a lot to think about, I based this on what I imagine to be utopian, thanks for reading.
Not Important but just wondering
Spoiler
Would it be horrible to not factor damage on either player or mob for 2 seconds after desync or something? Considering if its not abuse-able and desync continues to be an issue, Like you gain the same immunity effect you do when you first login/join and if you move or anything you lose the effect.
TeamSpeak: 104.206.199.149 - all friendly Poe'ers welcome, American+Euro+others, spam message Zell_Naga. cheers mates.
|
|
Zell_Naga, you have to keep in mind that they don't want anything in the game to be exploitable by bots and other means of automation. They also don't want information about what will spawn/drop to be made obvious in advance as users could likely observe and manipulate what item will spawn with such information made available in advance.
Computer specifications: Windows 10 Pro x64 | AMD Ryzen 5800X3D | ASUS Crosshair VIII Hero (WiFi) Motherboard | 16GB 3600MHz RAM | MSI Geforce 1070Ti Gamer | Corsair AX 760watt PSU | Samsung 860 Pro 512GB SSD & WD Black FZEX HDD Last edited by Nicholas_Steel#0509 on May 27, 2014, 12:51:06 AM
|
|
I'm no master coder, hacker, or know it all, So If any of this is wrong I'm sure someone will correct me, I'm just not knowledgeable enough about how PoE functions exactly.
Before any one actually reads this,
Spoiler
I want to note that monster AI, and the script actions for the monster AI are a HUGE part of the problem. I believe fixing this would destroy majority of desync issues.
" Which is why these advanced calculations would be done by PoE-GGG servers
Spoiler
not the player client, which is also why it would be inherently tough to adjust to this new method, depending on the sheer difficulty and amount of calculations to be done. The data would be encrypted and transferred to the client, whereas testing the mechanism to crack the code would not be plausible. Even if you inject or attempt to reverse engineer, GGG can rotate key codes, encryption types, and authentication in general. I would say updating security is the best way to discourage hackers and is always necessary because hackers will find a way to exploit everything.
The whole premise is that a trigger like, "monster takes damage" "monster is within 50 units" or "monster has 20% life" lets say, on that trigger the client would notify the server pre-generate the loot and stream the data to the client right before the actual kill allowing for seemingly instant data transmission. Smoothness can be achieved if crafted flawlessly. The problem is, could the information from the server to client be processed efficiently to mitigate lag? For example the lag you experience upon killing an enemy and loot dropping would be replaced with lag upon triggering the pre-calculations (Trigger="monster has 20% life" lets say) Without an additional mechanism or method for smooth data and fast processing, the lag would literally be moved to right before the monster was killed, in which time the monster could kill you and it would be very uncool. The trigger could then be something else like, "monster comes on screen", but this would cause excess and unnecessary calculations. Thats what I mean by, "if flawlessly crafted", it is difficult to do. Most developers would take shortcuts but I believe GGG can do it! Also I might add I focused completely on pre-calculated item drops, but imagine trying to do this for all calculations that add to desync, lag, etc. Its a huge mountain to climb but I set the bar high on purpose. TeamSpeak: 104.206.199.149 - all friendly Poe'ers welcome, American+Euro+others, spam message Zell_Naga. cheers mates.
|
|
@Naga and Steel: I'd just like to point out that "client performs calculation" and "server performs calculation" are not mutually exclusive scenarios. Thus, it is not true that either the client must wait on the server, or the server must trust the client. There is a third option: the server and the client attempt to separately draw matching conclusions without one completely and always relying on the other. I grant that this third option opens up issues of its own, most involving how to resolve mismatches between client and server when any correction the server sends will be effected by latency and thus attempting to correct a past, rather than present, version of events. However, it is vitally important to realize that, as a matter of practical reality, Path of Exile is currently in this third category. Sometimes it seems that the developers' view of their own netcode does not fully recognize this intractable truth.
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 May 28, 2014, 3:53:56 AM
|
|
Yeah I figure their intentionally designing the client to not reliably predict monster behaviour specifically to impede bots/automation. I mean what the client predicts, is slightly wrong and this is an intentional problem to counteract predictability that automation software can take advantage of.
If the client uses Logic X and the server uses Logic Y, automation software and other cheat software will only be able to operate off of Logic X even though Logic Y takes precedent. There will always be some desync with this approach. Computer specifications: Windows 10 Pro x64 | AMD Ryzen 5800X3D | ASUS Crosshair VIII Hero (WiFi) Motherboard | 16GB 3600MHz RAM | MSI Geforce 1070Ti Gamer | Corsair AX 760watt PSU | Samsung 860 Pro 512GB SSD & WD Black FZEX HDD Last edited by Nicholas_Steel#0509 on May 29, 2014, 4:56:41 PM
|
|
" With such a system, why make predictions at all? IGN: MortalKombat
Molten Strike build guide: https://www.pathofexile.com/forum/view-thread/1346504 There is no knowledge That is not power |
|
" To clarify things using a somewhat simplified model of what goes on in a system like PoE's, the client doesn't make "predictions", it displays what it thinks is going on in between sending info about the actions performed by the user to the server and receiving info about the canonical current game state. Since the server's info is always considered to be correct, the client needs to reset what it thinks is happening to what actually is happening -- sometimes the difference is large enough that it's noticeable, sometimes negatively so. It's unlikely that the methods used by the client to calculate what it thinks is going on differ from the methods used by the server in any significant manner in terms of algorithms used. It's also worth noting that while the noticeable effects sometimes seem to happen frequently in terms of us noticing them, they likely happen very infrequently in terms of how often this "send actions, display what should be happening while waiting for response, receive what has happened, update state / display to reflect response, repeat" cycle occurs. http://www.twitch.tv/exhortatory
|
|
"predictions = guesses about what is going to happen before you receive information on what happened Your argument is invalid. 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.
|
|
" The client isn't guessing at what it thinks the server is going to say happened / is happening. It's showing what is happening as far as it knows, and likely using the same methods of calculation as the server is, and then correcting itself if / when it receives data to the contrary. The client knows what you are doing, and what's happening in the game. It just always assumes that it must have been wrong when told so from on high. It's a bit of a subtle distinction, but it isn't prediction in the manner talked about in the post I was referencing, nor is it prediction in the senses relevant to programming or understanding what is happening in a program. It would be strictly prediction if the client was unable of knowing the methods by which the state coming back to it was calculated. Since both the client and the server are written by GGG, this is not the case. http://www.twitch.tv/exhortatory Last edited by exhortatory#6217 on May 31, 2014, 6:35:09 AM
|
|
"What's the difference, again? And worst change is putting almost all bosses in new version of maps into fucking small areas, where you can't kite well or dodge stuff. What a terrible idiot invented that I want say to him: dude flick you, seriously flick you very much.
|
|