diff options
author | Darkvater <darkvater@openttd.org> | 2005-05-17 18:22:59 +0000 |
---|---|---|
committer | Darkvater <darkvater@openttd.org> | 2005-05-17 18:22:59 +0000 |
commit | 54b7fb02034f703e539295edff80935144ea735a (patch) | |
tree | 9cbf8e97114b80319c5284dc86f0db95d2174b1a | |
parent | 166c1badc91d8ab0211f16e7c90b8c011e2b4a74 (diff) | |
download | openttd-54b7fb02034f703e539295edff80935144ea735a.tar.xz |
(svn r2339) - Fix: on a dedicated server, after the joining of a player, the player was set to player 0 instead of remaining OWNER_SPECTATOR. Fix this, and allow the dedicated server to execute commands (so 'patch <value>') now works and not only when a client is connected.
-rw-r--r-- | command.c | 5 | ||||
-rw-r--r-- | network_server.c | 5 | ||||
-rw-r--r-- | players.c | 2 |
3 files changed, 6 insertions, 6 deletions
@@ -413,8 +413,9 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, _error_message_2 = cmd >> 16; _additional_cash_required = 0; - // spectator has no rights. - if (_current_player == OWNER_SPECTATOR) { + /** Spectator has no rights except for the dedicated server which + * is a spectator but is the server, so can do anything */ + if (_current_player == OWNER_SPECTATOR && !_network_dedicated) { ShowErrorMessage(_error_message, _error_message_2, x, y); _cmd_text = NULL; return false; diff --git a/network_server.c b/network_server.c index 89e4c4c00..9a6ef0368 100644 --- a/network_server.c +++ b/network_server.c @@ -1036,12 +1036,11 @@ void NetworkServer_HandleChat(NetworkAction action, DestType desttype, int dest, NetworkTextMessage(action, GetDrawStringPlayerColor(ci->client_playas-1), false, ci->client_name, "%s", msg); if (from_index == NETWORK_SERVER_INDEX) show_local = false; - ci_to = ci; + ci_to = ci_own; } /* There is no such player */ - if (ci_to == NULL) - break; + if (ci_to == NULL) break; // Display the message locally (so you know you have sent it) if (ci != NULL && show_local) { @@ -674,7 +674,7 @@ int32 CmdPlayerCtrl(int x, int y, uint32 flags, uint32 p1, uint32 p2) if (p != NULL) { if (_local_player == OWNER_SPECTATOR) { /* Check if we do not want to be a spectator in network */ - if (!_networking || _network_server || _network_playas != OWNER_SPECTATOR) { + if (!_networking || (_network_server && !_network_dedicated) || _network_playas != OWNER_SPECTATOR) { _local_player = p->index; MarkWholeScreenDirty(); } |