summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--command.c5
-rw-r--r--network_server.c5
-rw-r--r--players.c2
3 files changed, 6 insertions, 6 deletions
diff --git a/command.c b/command.c
index 24f6817e1..44cb446d1 100644
--- a/command.c
+++ b/command.c
@@ -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) {
diff --git a/players.c b/players.c
index 01770c0b5..fe0721846 100644
--- a/players.c
+++ b/players.c
@@ -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();
}