summaryrefslogtreecommitdiff
path: root/players.c
diff options
context:
space:
mode:
Diffstat (limited to 'players.c')
-rw-r--r--players.c42
1 files changed, 38 insertions, 4 deletions
diff --git a/players.c b/players.c
index 4cfd5522c..9dcd727cd 100644
--- a/players.c
+++ b/players.c
@@ -11,6 +11,7 @@
#include "command.h"
#include "ai.h"
#include "sound.h"
+#include "network.h"
extern void StartupEconomy();
@@ -489,6 +490,7 @@ Player *DoStartupNewPlayer(bool is_ai)
InvalidateWindow(WC_GRAPH_LEGEND, 0);
InvalidateWindow(WC_TOOLBAR_MENU, 0);
+ InvalidateWindow(WC_CLIENT_LIST, 0);
return p;
}
@@ -538,7 +540,7 @@ void OnTick_Players()
_cur_player_tick_index = (_cur_player_tick_index + 1) % MAX_PLAYERS;
if (p->name_1 != 0) GenerateCompanyName(p);
- if (_game_mode != GM_MENU && !--_next_competitor_start) {
+ if (!_networking && _game_mode != GM_MENU && !--_next_competitor_start) {
MaybeStartNewPlayer();
}
}
@@ -636,12 +638,44 @@ int32 CmdPlayerCtrl(int x, int y, uint32 flags, uint32 p1, uint32 p2)
if (!(flags & DC_EXEC))
return 0;
+ _current_player = OWNER_NONE;
+
switch(p1 & 0xff) {
case 0: // make new player
p = DoStartupNewPlayer(false);
- if (_local_player == OWNER_SPECTATOR && p != NULL) {
- _local_player = p->index;
- MarkWholeScreenDirty();
+ if (p != NULL) {
+ if (_local_player == OWNER_SPECTATOR) {
+ _local_player = p->index;
+ MarkWholeScreenDirty();
+ }
+#ifdef ENABLE_NETWORK
+ if (_network_server) {
+ NetworkClientInfo *ci;
+ // UGLY! p2 is mis-used to fetch the client-id
+ ci = &_network_client_info[p2];
+ ci->client_playas = p->index + 1;
+ NetworkUpdateClientInfo(ci->client_index);
+
+ if (ci->client_playas != 0 && ci->client_playas <= MAX_PLAYERS) {
+ memcpy(_decode_parameters, ci->client_name, 32);
+ /* XXX - What are the consequents of this? It is needed, but is it bad? */
+ _docommand_recursive = 0;
+ DoCommandP(0, ci->client_playas-1, 0, NULL, CMD_CHANGE_PRESIDENT_NAME | CMD_MSG(STR_700D_CAN_T_CHANGE_PRESIDENT));
+ }
+ } else {
+ _network_playas = p->index + 1;
+ }
+ } else {
+ if (_network_server) {
+ NetworkClientInfo *ci;
+ // UGLY! p2 is mis-used to fetch the client-id
+ ci = &_network_client_info[p2];
+ ci->client_playas = OWNER_SPECTATOR;
+ NetworkUpdateClientInfo(ci->client_index);
+ } else {
+ _network_playas = OWNER_SPECTATOR;
+ }
+#endif /* ENABLE_NETWORK */
}
break;
case 1: // make new ai player