mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
21d9e2c934
commit
1c22cea02d
10
command.c
10
command.c
|
@ -476,10 +476,16 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_NETWORK
|
#ifdef ENABLE_NETWORK
|
||||||
// If we are in network, and the command is not from the network
|
/** If we are in network, and the command is not from the network
|
||||||
// send it to the command-queue and abort execution
|
* 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 (_networking && !(cmd & CMD_NETWORK_COMMAND)) {
|
||||||
|
if (_network_dedicated) _local_player = 0;
|
||||||
NetworkSend_Command(tile, p1, p2, cmd, callback);
|
NetworkSend_Command(tile, p1, p2, cmd, callback);
|
||||||
|
if (_network_dedicated) _local_player = OWNER_SPECTATOR;
|
||||||
_docommand_recursive = 0;
|
_docommand_recursive = 0;
|
||||||
_cmd_text = NULL;
|
_cmd_text = NULL;
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue