Advertisement

MMO model

Started by July 26, 2013 09:48 PM
2 comments, last by frob 11 years, 4 months ago

Hey guys, I'm trying to develop a MMO, I already the terrain, a few characters, objects, and items. But now I am trying to make it online. So far I was able to connect to the server, update my position and stuff like that. If another player connects he will see the position the others characters were when he logged in. No update.

Now I'm trying to make a update during the game, so when a player move, the other sees it. But when I tried to do that it looks like the server can't keep up or something like that. When the player stops moving it will always go back a little bit. I'm not really sure what happens.

Also besides that every time there is a update from the server the screen flashes, as if the camera went to another position for a single frame.

Client:


forever()
{
   if(availableMessage())
   {
      updatePositions();
   }
   getInput();
   simulate();
}

Server:


forever()
{
   if(availableInput())
      getInput();
   simulate();
   broadcastChanges();
   Sleep(100);//Without this the flashing is way more frequent
}

The server broadcast everything, not just what changed. Maybe that might be a problem.

The weirdest part is that the player goes back for the other players too.

English is not my primary language so forgive me if I made any mistake.

Solution:

The screen flashed every time because the server was trying to update the y position for the player but the simulation on the client always changed it back.

I found out that the gravity on the server was switched off which caused the player to go to a higher position on update and instantly go back to ground level.

The delay was caused by the Sleep(100); that I used to test the flashing. Since messages were received in another socket if the client sent a stop message right before the server simulation the simulation treated as if he stopped on the last simulation, 100ms before.

I solved that by erasing the Sleep(100); and creating a timer on the loop that every 100ms he called the broadcastChanges();

Don't you think it would have been more helpful if you had left your question and also posted your solution so that others who have a similar problem in the future can benefit from it instead of just replacing the question with the word "solved" ?

[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!
Advertisement

The problem was quite stupid actually haha. But okay

I have restored the original post. The site's general policy is to keep questions around even if they are solved.

If your problem really is solved, feel free to post your solution as well so others can learn as well.

This topic is closed to new replies.

Advertisement