diff options
author | Darkvater <darkvater@openttd.org> | 2005-05-17 20:52:52 +0000 |
---|---|---|
committer | Darkvater <darkvater@openttd.org> | 2005-05-17 20:52:52 +0000 |
commit | 1c22cea02d573f793126532090ba92ae4f1a4b63 (patch) | |
tree | 568c35c38cb6473dfe6fc2eaf5a5bf49eba6344d | |
parent | 21d9e2c934b263c16ddba19013994f567f4e81b0 (diff) | |
download | openttd-1c22cea02d573f793126532090ba92ae4f1a4b63.tar.xz |
(svn r2343) - Fix (regression): dedicated server caused desyncs with its commands, because the player sent over the network is OWNER_SPECTATOR as well, which on clients cannot execute anything. So *hack*hack* it into temporarily player 0.
-rw-r--r-- | command.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -476,10 +476,16 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, } #ifdef ENABLE_NETWORK - // If we are in network, and the command is not from the network - // send it to the command-queue and abort execution + /** If we are in network, and the command is not from the network + * send it to the command-queue and abort execution + * If we are a dedicated server temporarily switch local player, otherwise + * the other parties won't be able to execute our command and will desync. + * @todo Rewrite dedicated server to something more than a dirty hack! + */ if (_networking && !(cmd & CMD_NETWORK_COMMAND)) { + if (_network_dedicated) _local_player = 0; NetworkSend_Command(tile, p1, p2, cmd, callback); + if (_network_dedicated) _local_player = OWNER_SPECTATOR; _docommand_recursive = 0; _cmd_text = NULL; return true; |