Results -9 to 0 of 1854

Threaded View

  1. #11
    Player
    reality_check's Avatar
    Join Date
    Aug 2013
    Posts
    614
    Character
    Jesse Branford
    World
    Adamantoise
    Main Class
    Arcanist Lv 80
    For those of you who are interested, I found this information on a MMORPG blog about netcoding and hopefully it can help you understand where your problems are coming from until SE gets around to fixing this situation:

    When you move or attack or whatever, you send information from the server saying which way you're moving, what you're attacking, what gear you're equipping, or whatever. The server checks to see if the information is legitimate, and if so, records it into the official information on exactly where you are and what you have. If where the client claims you are at one point in time is close enough to where it said you were 100 ms ago, for example, the server will say, yeah, you could have moved there and allow it.

    If the client claims you've warped halfway across the map in that time, then unless you used some warping game mechanic to allow this (which should have been in the information the client sent to the server), the server rejects it and says, no, you're wrong, you're really back where you were before, and sends that information back to the client. The server has to check a bunch of things to make sure they're legitimate. For example, the skill that you're trying to use has to not be on cooldown, you have to have enough mana or energy or whatever to use it, the mob you're attacking has to be in range, you have to have positive health (i.e., not be dead), and so forth. The client tries to check such things as well and reject illegitimate moves much more quickly, so usually the server checks won't kick in at all. But if you're using external programs to alter information in memory to change what the client thinks is legitimate, the client won't reject some illegal moves. The server has to check as well to prevent that sort of cheating.

    The copy of the information that counts is the one that is on the server. If you try to move forward and the client thinks you can, it will show you moving forward immediately, while the information that you just moved forward goes to the server. If the server accepts the move as legitimate, it gets recorded into the official copy of the server information. If not, then when the server says, no, client, you're wrong, here's the correct information, the client updates its own copy to match what the server just said, and then displays that information accordingly in the game window.

    This is where FFXIV is killing us. It's not extrapolating our movements enough when we move out of an AoE. The server should predict what the client is going to do. This is why we end up out of the AoE but dead a second later when the server check comes in and says: "no, you're bad,"

    Meanwhile, the server is doing this for all of the other players in the area, too. The information it sends you to say where the other players are is wherever they are as recorded in the server information. If another player has altered the client information so that his client is out of sync with the server, you don't see that, but only see the official information from the server. The server has to constantly send updates of where other players are standing, which skills they're using, how much health they have, and so forth, and then your game client updates that information as it arrives from the server.

    What it really has to work with, however, is not exactly where other players are right now, but where they were recently, say, 100 ms ago. From that information, it tries to guess where the are right now and display the information accordingly. If it knows that a given player was at a particular spot 100 ms ago and moving in a particular direction, it guesses that he's kept moving in that direction in the meantime and posts where he is now. If it knows that he was 370 ms into activating a particular skill 100 ms ago, then it guesses that he's 100 ms further along into activating that skill and displays the animation appropriate to that.

    When the next server update comes, the client finds out if it guessed right, and if so, it looks perfectly smooth. If it guessed wrong, then the player may warp a bit to move him to the correct location. For example, if he had stopped and turned around just after the server sent the information on where he was, then the next time you get the information, the correct information of where the other player is will be slightly off from where the client guessed. Games try to smooth this out, but if your ping time is high enough, there's going to be a bit of jumping around.

    On the other hand, the game server knows exactly where NPCs and mobs are. If it wants to, it can usually predict where they will be far enough in advance that, if so inclined, it can make sure that the client guess is nearly always correct, so long as you keep the ping times down. For example, the server could say, this mob is moving this way right now, but it will turn left in 50 ms, so that the client assumes that the mob will do that and displays it correctly. It will still be wrong sometimes if it finds that another player has knocked the mob down, interrupted it, killed it, or whatever shortly after sending you the message. I'm not sure whether games try to do such prediction of telling you where mobs will go, and it could easily vary by game. But it would allow displaying what mobs do to be much smoother than displaying what players do. It's also conceivable that that sort of information could be used to cheat slightly, so games might shy away on that basis.

    Displaying mobs for you is going to be smoother than other players anyway, as when the server sends information on other players to you, the information is already a little dated. If right after it sends information to you, it gets information saying that the player has stopped and turned around 50 ms ago, it accepts that as the correct information, but takes a bit of time to send that information to you. Apart from mobs getting knocked down, killed, or whatever, the server always knows exactly where they are with no delay.

    Where things really get out of sync is when you have Internet lag. An update on where the server said various things are might not make it to your computer at all. Or it might make it there, but take two seconds to arrive. When the client has to try to predict where things are based on where they were 1 second ago, rather than 100 ms ago, it can be far more wildly wrong, which leads to far more severe rubber banding.
    The client knows when its information is very outdated, so if it hasn't gotten an update in long enough, it will give up on trying to predict. I'd assume there is a time stamp of some sort saying not just, here's the most recent information on where mobs are, but here's when they were there, too. How games handle this varies greatly from one game to another. Some will assume that everything has stopped and won't let you move. Some will show everything else stopping but let you keep running around and just rubber band you back later. Some will show mobs keep moving in the same direction as before, even when it's obviously ridiculous. After some length of time, if the client hasn't gotten further updates, it figures the connection is simply gone and removes you from the game world entirely.

    When the server rejects the client's claims of where you're standing and says, no, you're really over there instead, the client rubber bands you back. This can be for complicated reasons, such as that it looked like a path was open at the time and the client let you go through, but then the server found out that another player moved into the path and blocked you, but the client didn't find out soon enough and let you go through, and then when the client says you've kept on running, the server says, wait, you couldn't be there, so it sends you back to the last place that it knows that you were. Then the client has to warp you back, too, so you can get a big instance of rubberbanding even without that high of ping times, because it took a lot of sending information back and forth to catch what was illegitimate.

    There are some things like how much damage a hit does or what loot a mob drops that the client presumably won't even try to guess. The server has information that this player is trying to attack that mob, accepts it as legitimate because he's close enough, computes the damage on the server, and then sends that information to everyone else nearby.

    The server usually only sends you information on what's going on near you, in order to limit bandwidth usage. What's going on near you is the only thing that would display on your screen anyway.
    (9)
    Last edited by reality_check; 09-26-2013 at 04:29 AM.