From eaed7bd451bd359a38f6ede274b043334c943c0d Mon Sep 17 00:00:00 2001 From: ariclone <> Date: Sun, 5 Aug 2001 14:33:59 +0000 Subject: [PATCH] Transmit Network Client Race Selection to Server --- src/network/netconnect.cpp | 2 ++ src/ui/menus.cpp | 71 ++++++++++++++++++++++++++------------ 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/src/network/netconnect.cpp b/src/network/netconnect.cpp index c5d2fbff4..cc70039fb 100644 --- a/src/network/netconnect.cpp +++ b/src/network/netconnect.cpp @@ -1357,6 +1357,8 @@ local void NetworkParseMenuPacket(const InitMessage *msg, int size) /// Use information supplied by the client: ServerSetupState.Ready[h] = msg->u.State.Ready[h]; ServerSetupState.Race[h] = msg->u.State.Race[h]; + DebugLevel3Fn("Server: ICMState: Client[%d]: Ready: %d Race: %d\n", + h, ServerSetupState.Ready[h], ServerSetupState.Race[h]); /// Add additional info usage here! /* Fall through */ case ccs_async: diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp index d0b71e1b8..75dab28e6 100644 --- a/src/ui/menus.cpp +++ b/src/ui/menus.cpp @@ -111,6 +111,7 @@ local void MultiClientReady(void); local void MultiClientNotReady(void); local void MultiClientGemAction(Menuitem *mi); local void MultiClientCancel(void); +local void MultiClientRCSAction(Menuitem *mi, int i); local void MultiGameCancel(void); local void MultiGameSetupInit(Menuitem *mi); // master init @@ -587,7 +588,7 @@ local Menuitem NetMultiClientMenuItems[] = { { MI_TYPE_TEXT, 40, 10+240-20, 0, GameFont, NULL, NULL, { text:{ "~<Your Race:~>", 0} } }, { MI_TYPE_PULLDOWN, 40, 10+240, 0, GameFont, NULL, NULL, - { pulldown:{ rcsoptions, 152, 20, MBUTTON_PULLDOWN, GameRCSAction, 3, 2, 2, 0, 0} } }, + { pulldown:{ rcsoptions, 152, 20, MBUTTON_PULLDOWN, MultiClientRCSAction, 3, 2, 2, 0, 0} } }, { MI_TYPE_TEXT, 220, 10+240-20, 0, GameFont, NULL, NULL, { text:{ "~<Resources:~>", 0} } }, { MI_TYPE_PULLDOWN, 220, 10+240, 0, GameFont, NULL, NULL, @@ -1865,40 +1866,47 @@ local void GameDrawFunc(Menuitem *mi) SetDefaultTextColors(nc, rc); } -local void GameRCSAction(Menuitem *mi __attribute__((unused)), int i) +local void GameRCSAction(Menuitem *mi, int i) { int v[] = { PlayerRaceHuman, PlayerRaceOrc, SettingsPresetMapDefault }; - GameSettings.Presets[0].Race = v[i]; - ServerSetupState.Race[0] = i; - NetworkServerResyncClients(); - /// FIXME : Do similar for clients + if (mi->d.pulldown.curopt == i) { + GameSettings.Presets[0].Race = v[i]; + ServerSetupState.Race[0] = i; + NetworkServerResyncClients(); + } } -local void GameRESAction(Menuitem *mi __attribute__((unused)), int i) +local void GameRESAction(Menuitem *mi, int i) { int v[] = { SettingsResourcesMapDefault, SettingsResourcesLow, SettingsResourcesMedium, SettingsResourcesHigh }; - GameSettings.Resources = v[i]; - ServerSetupState.ResOpt = i; - NetworkServerResyncClients(); + if (!mi || mi->d.pulldown.curopt == i) { + GameSettings.Resources = v[i]; + ServerSetupState.ResOpt = i; + NetworkServerResyncClients(); + } } -local void GameUNSAction(Menuitem *mi __attribute__((unused)), int i) +local void GameUNSAction(Menuitem *mi, int i) { - GameSettings.NumUnits = i ? SettingsNumUnits1 : SettingsNumUnitsMapDefault; - ServerSetupState.UnsOpt = i; - NetworkServerResyncClients(); + if (!mi || mi->d.pulldown.curopt == i) { + GameSettings.NumUnits = i ? SettingsNumUnits1 : SettingsNumUnitsMapDefault; + ServerSetupState.UnsOpt = i; + NetworkServerResyncClients(); + } } -local void GameTSSAction(Menuitem *mi __attribute__((unused)), int i) +local void GameTSSAction(Menuitem *mi, int i) { int v[] = { SettingsPresetMapDefault, TilesetSummer, TilesetWinter, TilesetWasteland, TilesetSwamp }; - GameSettings.Terrain = v[i]; - ServerSetupState.TssOpt = i; - NetworkServerResyncClients(); + if (!mi || mi->d.pulldown.curopt == i) { + GameSettings.Terrain = v[i]; + ServerSetupState.TssOpt = i; + NetworkServerResyncClients(); + } } local void CustomGameOPSAction(Menuitem *mi __attribute__((unused)), int i) @@ -1906,11 +1914,13 @@ local void CustomGameOPSAction(Menuitem *mi __attribute__((unused)), int i) GameSettings.Opponents = i ? i : SettingsPresetMapDefault; } -local void MultiGameFWSAction(Menuitem *mi __attribute__((unused)), int i) +local void MultiGameFWSAction(Menuitem *mi, int i) { - FlagRevealMap = i; - ServerSetupState.FwsOpt = i; - NetworkServerResyncClients(); + if (!mi || mi->d.pulldown.curopt == i) { + FlagRevealMap = i; + ServerSetupState.FwsOpt = i; + NetworkServerResyncClients(); + } } local void MultiGamePTSAction(Menuitem *mi, int o) @@ -2153,6 +2163,17 @@ local void MultiClientGemAction(Menuitem *mi __attribute__((unused))) } } +local void MultiClientRCSAction(Menuitem *mi, int i) +{ + int v[] = { PlayerRaceHuman, PlayerRaceOrc, SettingsPresetMapDefault }; + + if (mi->d.pulldown.curopt == i) { + LocalSetupState.Race[NetLocalHostsSlot] = i; + GameSettings.Presets[NetLocalHostsSlot].Race = v[i]; + MultiClientUpdate(0); + } +} + local void MultiClientReady(void) { NetMultiClientMenuItems[2].flags = MenuButtonDisabled; @@ -2180,7 +2201,11 @@ global void NetClientCheckLocalState(void) NetLocalState = ccs_changed; return; } - /* ADD HERE (FIXME: Race) */ + if (LocalSetupState.Race[NetLocalHostsSlot] != ServerSetupState.Race[NetLocalHostsSlot]) { + NetLocalState = ccs_changed; + return; + } + /* ADD HERE */ } global int NetClientSelectScenario(void)