Files
firestorm/Gameleap/code/mw4/Code/mw4dedicatedui/DedicatedUI.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

685 lines
21 KiB
C++

#include "MW4DUIHeaders.hpp"
#include <windows.h>
#include "DedicatedUI.hpp"
#include "resource.h"
#include <buildnum\buildnum.h>
#include "..\ScriptStrings\resource.h" // scriptstrings.h - jcem
extern void (*RunFromOtherAppEnterStoppingGameState)(void);
extern void (*RunFromOtherAppEnterRecyclingGameState)(void);
extern void (*RunFromOtherAppEnterLoadingGameState)(void);
extern void (*RunFromOtherAppEnterRunningGameState)(void);
extern bool gNoDialogs;
extern bool gRunEula;
extern bool gNoAutoConfig;
extern bool RunAutoConfigIfNeeded();
extern bool FirstRunEula(const char *eula_filename,const char *warranty_filename);
extern bool EulaDeclineMsg(const char *str,const char *caption);
long _stdcall ProcessException( EXCEPTION_POINTERS* ep );
void _stdcall InitExceptionHandler( char* CommandLine );
DWORD _stdcall RunGameOSLogic();
void _stdcall ExitGameOS();
LRESULT CALLBACK GameOSWinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
extern HINSTANCE g_hInst;
extern HANDLE g_hThreadEditor;
HWND g_hWndMain = NULL;
HWND g_hWndSetup = NULL;
HWND g_hWndLobby = NULL;
HWND g_hWndServer = NULL;
DWORD g_langResources = 0;
int MechMessageBoxWin32(char *szTitle, char *szMessage, UINT uType=MB_OK)
{
return ::MessageBox(NULL, szMessage, szTitle, uType);
}
//
// Process any messages before GameOS sees them
//
INT CALLBACK WinProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch (uMsg) {
case WM_CLOSE:
CDedicatedServerUI::Quit();
EndDialog(hWnd, TRUE);
return 0;
}
return FALSE;
//return GameOSWinProc( hWnd, uMsg, wParam, lParam );
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void _stdcall CDedicatedServerUI::InitializeGameEngine()
{
// Set_Heap_Check(1, 100);
//
//---------------------
// Initialize libraries
//---------------------
//
Stuff::InitializeClasses(4800, 40000);
if(!gNoAutoConfig)
RunAutoConfigIfNeeded();
NotationFile startup_ini("options.ini", NotationFile::Standard, true);
MidLevelRenderer::InitializeClasses(&startup_ini, 2048, 2048);
gosFX::InitializeClasses(&startup_ini);
ElementRenderer::InitializeClasses(&startup_ini);
Compost::InitializeClasses(&startup_ini);
Adept::InitializeClasses(&startup_ini);
MechWarrior4::InitializeClasses(&startup_ini);
//
//--------------------------------------
// Create and initialize the application
//--------------------------------------
//
gos_PushCurrentHeap(MechWarrior4::Heap);
MWApplication *MW_Application =
new MWApplication(MWApplication::DefaultData,true);
Check_Object(MW_Application);
//Adept::Application::GetInstance() = MW_Application;
GlobalPointers::AddGlobalPointer(MW_Application, ApplicationGlobalPointerIndex);
MW_Application->Initialize();
//--------------------------------------
// Run the Eula
//--------------------------------------
if(gRunEula && Application::RunOK && !gNoDialogs)
{
bool gotlicense=false;
while(!gotlicense)
{
MString ename,wname;
ename=MWApplication::GetInstance()->GetLocString(IDS_EULA_FILENAME);
wname=MWApplication::GetInstance()->GetLocString(IDS_WARRANTY_FILENAME);
if(!FirstRunEula(ename,wname))
{
MString msg,cap;
msg=MWApplication::GetInstance()->GetLocString(IDS_EULA_FAIL_MESSAGE);
cap=MWApplication::GetInstance()->GetLocString(IDS_EULA_FAIL_CAPTION);
if(EulaDeclineMsg(msg,cap))
{
Quit();
}
}
else
{
gotlicense=true;
}
}
}
//
//------------------------------------------------------------------
// Now that we are out of building mode, reset the file hooks to use
// resources
//------------------------------------------------------------------
//
Environment.HookGetFile = Application::GetFileForGOS;
Environment.HookDoesFileExist = Application::FindFileForGOS;
Environment.defaultPlayerName = NULL;
//
// Now that resources are built. Add another layer in the getfile and find file change that can
// watch for .mw4 file requests and potentially remap them for 8.3 compatibility.
//
// Environment.HookGetFile = MWApplication::MW4GetFileForGOS;
// Environment.HookDoesFileExist = MWApplication::MW4FindFileForGOS;
//
//-----------------------------------------------
// Terminate the game if running is not permitted
//-----------------------------------------------
//
if (!Adept::Application::RunOK)
{
gos_TerminateApplication();
}
else
{
// generate the keys...
MWApplication::GetInstance()->localKey = MWApplication::GetInstance()->GetUniqueKey();
//
//--------------------------------------------------------
// We have disabled building, so load up the required data
//--------------------------------------------------------
//
ResourceManager::Instance->OpenResourceFile(
"Resource\\textures.mw4",
NULL,
TexturesResourceFileID,
VER_CONTENTVERSION,
true,
false
);
ResourceManager::Instance->OpenResourceFile(
"Resource\\core.mw4",
NULL,
CoreResourceFileID,
VER_CONTENTVERSION,
true,
false
);
ResourceManager::Instance->OpenResourceFile(
"Resource\\props.mw4",
NULL,
PropsResourceFileID,
VER_CONTENTVERSION,
true,
false
);
MWApplication::GetInstance()->LoadLookupTables();
}
//#ifdef LAB_ONLY
// g_BergerName = MidLevelRenderer::MLRTexturePool::Instance->Add ("bf");
//#endif
gos_PopCurrentHeap();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void _stdcall CDedicatedServerUI::TerminateGameEngine()
{
//
//-------------------
// Shut down the game
//-------------------
//
gos_PushCurrentHeap(MechWarrior4::Heap);
Adept::Application::GetInstance()->StopGame();
Adept::Application::GetInstance()->Terminate();
Unregister_Object(Adept::Application::GetInstance());
delete Adept::Application::GetInstance();
GlobalPointers::ClearPointer(ApplicationGlobalPointerIndex);
gos_PopCurrentHeap();
//
//-----------------------
// Shutdown the libraries
//-----------------------
//
{
NotationFile startup_ini("options.ini", NotationFile::Standard, true);
MechWarrior4::TerminateClasses(&startup_ini);
Adept::TerminateClasses(&startup_ini);
Compost::TerminateClasses(&startup_ini);
ElementRenderer::TerminateClasses(&startup_ini);
gosFX::TerminateClasses(&startup_ini);
MidLevelRenderer::TerminateClasses(&startup_ini);
startup_ini.Save();
}
Stuff::TerminateClasses();
}
char g_connection_type[5][STRING_SIZE];
char g_bandwidth[10][STRING_SIZE];
INT CALLBACK CDedicatedServerUI::DedicatedServerProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch( uMsg )
{
case WM_INITDIALOG:
{
MString new_pilot_directory = "Resource\\Pilots\\";
if(!gos_DoesFileExist(new_pilot_directory))
{
char temp[STRING_SIZE];
LoadString(g_hInst, IDS_STRING_NOPILOT, temp, STRING_SIZE);
MechMessageBoxWin32(Application::GetInstance()->GetLocString(IDS_NETUI_ERROR), temp);
Quit();
return TRUE;
}
MW4Shell::Instance->SelectLastUsedPilot();
MWApplication::GetInstance()->LoadServerOptions();
gos_NetStartGame(0, MWApplication::SecureNetGame);
CancelDialup(NULL, 0, NULL);
LoadMPConnectionSettings(NULL, NULL, NULL);
if(NumConnections <= 0)
{
char temp[STRING_SIZE];
LoadString(g_hInst, IDS_STRING_NOCONNECTION, temp, STRING_SIZE);
MechMessageBoxWin32(Application::GetInstance()->GetLocString(IDS_NETUI_ERROR), temp);
Quit();
return TRUE;
}
InitConnectionWizard(NULL, 0, NULL);
HWND comboConnection = ::GetDlgItem(hwndDlg, IDC_COMBO_CONNECTION);
SendMessage(comboConnection,CB_RESETCONTENT, 0,0);
for(int iloop = 0; iloop < NumConnections; iloop++)
{
SendMessage(comboConnection,CB_INSERTSTRING,iloop,(LPARAM) ListOfConnections[iloop]);
}
SendMessage(comboConnection,CB_SETCURSEL,ConnectionIndex,0);
Str_Copy(g_connection_type[0], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_TYPE_MODEM), STRING_SIZE);
Str_Copy(g_connection_type[1], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_TYPE_ISDN), STRING_SIZE);
Str_Copy(g_connection_type[2], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_TYPE_XDSL), STRING_SIZE);
Str_Copy(g_connection_type[3], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_TYPE_CABLE), STRING_SIZE);
Str_Copy(g_connection_type[4], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_TYPE_LAN), STRING_SIZE);
Str_Copy(g_bandwidth[0], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_14), STRING_SIZE);
Str_Copy(g_bandwidth[1], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_28), STRING_SIZE);
Str_Copy(g_bandwidth[2], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_56), STRING_SIZE);
Str_Copy(g_bandwidth[3], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_64), STRING_SIZE);
Str_Copy(g_bandwidth[4], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_128), STRING_SIZE);
Str_Copy(g_bandwidth[5], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_384), STRING_SIZE);
Str_Copy(g_bandwidth[6], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_768), STRING_SIZE);
Str_Copy(g_bandwidth[7], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_1500), STRING_SIZE);
Str_Copy(g_bandwidth[8], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_10K), STRING_SIZE);
Str_Copy(g_bandwidth[9], gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_100K), STRING_SIZE);
HWND descConnection = ::GetDlgItem(hwndDlg, IDC_CONNECTION_DESC);
RECT rc;
::GetWindowRect(descConnection, &rc);
SendMessage(descConnection, LB_SETCOLUMNWIDTH, (rc.right-rc.left)/2, 0);
SendMessage(descConnection, LB_SETCOUNT, 10*2, 0);
OnConnectionSelectionChange(hwndDlg);
return TRUE;
}
case WM_COMMAND:
switch( HIWORD(wParam) )
{
case CBN_SELCHANGE:
if (LOWORD(wParam) == IDC_COMBO_CONNECTION)
OnConnectionSelectionChange(hwndDlg);
return TRUE;
}
switch( LOWORD(wParam) )
{
case IDHOST:
{
EndDialog( hwndDlg, TRUE );
HWND comboConnection = ::GetDlgItem(hwndDlg, IDC_COMBO_CONNECTION);
int curSel = SendMessage(
(HWND) comboConnection,
CB_GETCURSEL,
(WPARAM) 0,
(LPARAM) 0);
if (curSel != CB_ERR) {
if (GetDialupConnectionStatus(NULL, 0, NULL)==0)
{
}
else {
if (!g_hWndSetup) {
g_hWndSetup = ::CreateDialog(g_hInst,
MAKEINTRESOURCE(IDD_HOSTSETUP),
g_hWndMain,
HostSetupProc);
}
else {
SendMessage(g_hWndSetup, WM_INITDIALOG, 0, 0);
}
ShowWindow(g_hWndSetup, SW_SHOW);
}
}
return TRUE;
}
case IDCANCEL:
Quit();
EndDialog( hwndDlg, TRUE );
return TRUE;
}
return TRUE;
case WM_CLOSE:
Quit();
EndDialog( hwndDlg, TRUE );
break;
}
return FALSE;
}
void CDedicatedServerUI::OnConnectionSelectionChange(HWND hWnd)
{
HWND comboConnection = ::GetDlgItem(hWnd, IDC_COMBO_CONNECTION);
ConnectionIndex = SendMessage(comboConnection,CB_GETCURSEL,0,0);
PreConnect(NULL, 0, NULL);
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_RESETCONTENT,0,0);
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 0, (LPARAM)(char*)gos_GetResourceString(g_langResources,IDS_ML_CH_TYPE));
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 1, (LPARAM)(char*)gos_GetResourceString(g_langResources,IDS_ML_MAIN_SPEED));
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 2, (LPARAM)(char*)gos_GetResourceString(g_langResources,IDS_MP_MC_BROWSE));
for (int i=3; i<10; i++)
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, i, (LPARAM)" ");
if (MWApplication::MyConnectionType > -1 && MWApplication::MyConnectionType < 5) {
MString type = g_connection_type[MWApplication::MyConnectionType];
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 10+0, (LPARAM)(char*)type);
}
if (MWApplication::MyConnectionSpeed > -1 && MWApplication::MyConnectionSpeed < 10) {
MString speed = g_bandwidth[MWApplication::MyConnectionSpeed];
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 10+1, (LPARAM)(char*)speed);
}
int index = 2;
if (BrowseGameSpy == 1) {
MString browse = gos_GetResourceString(g_langResources,IDS_NC_HOW_GAMESPY);
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 10+index++, (LPARAM)(char*)browse);
}
if (BrowseGUN == 1) {
MString browse = gos_GetResourceString(g_langResources,IDS_NC_HOW_GAMEZONE);
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 10+index++, (LPARAM)(char*)browse);
}
if (BrowseLAN == 1) {
MString browse = gos_GetResourceString(g_langResources,IDS_MP_NC_SPEED_TYPE_LAN);
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 10+index++, (LPARAM)(char*)browse);
}
MString ip_address = "";
for (int k = 0; k < BrowseIPAddresses; k++)
{
ip_address = ListOfTCPIPAddresses[k];
if (!strcmp(ip_address, "")) {
ip_address = gos_GetResourceString(g_langResources,IDS_MP_MC_IPADDRESS) + ip_address;
SendMessage(GetDlgItem(hWnd, IDC_CONNECTION_DESC), LB_INSERTSTRING, 10+index++, (LPARAM)(char*)ip_address);
}
}
}
void _stdcall CDedicatedServerUI::Run(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
RunFromOtherAppEnterRecyclingGameState = &EnterRecyclingGameState;
RunFromOtherAppEnterStoppingGameState = &EnterStoppingGameState;
RunFromOtherAppEnterLoadingGameState = &EnterLoadingGameState;
RunFromOtherAppEnterRunningGameState = &EnterRunningGameState;
g_langResources = gos_OpenResourceDLL("ScriptStrings.dll");
g_hWndMain = ::CreateDialog(g_hInst,
MAKEINTRESOURCE(IDD_MAINFRAME),
::GetDesktopWindow(),
WinProc);
RECT rcDesk, rc;
GetWindowRect(GetDesktopWindow(), &rcDesk);
GetWindowRect(g_hWndMain, &rc);
int w = rc.right-rc.left;
int h = rc.bottom-rc.top;
rc.left = rcDesk.left + ((rcDesk.right-rcDesk.left)-w)/2;
rc.top = rcDesk.top + ((rcDesk.bottom-rcDesk.top)-h)/2;
::MoveWindow(g_hWndMain, rc.left, rc.top, w, h, FALSE);
::ShowWindow(g_hWndMain, SW_SHOW);
if (MWApplication::GetInstance()->AutoLaunchServerGame)
{
if (AutoLaunchInitialize()) {
g_hWndLobby = ::CreateDialog(g_hInst,
MAKEINTRESOURCE(IDD_GAMELOBBY),
g_hWndMain,
GameLobbyProc);
::ShowWindow(g_hWndLobby, SW_SHOW);
}
else {
gos_CloseResourceDLL(g_langResources);
CDedicatedServerUI::TerminateGameEngine();
ExitGameOS();
}
}
else {
g_hWndServer = ::CreateDialog(g_hInst,
MAKEINTRESOURCE(IDD_DEDICATEDSERVER),
g_hWndMain,
DedicatedServerProc);
::ShowWindow(g_hWndServer, SW_SHOW);
}
MSG msg;
DWORD Terminate = 0;
DWORD LastRun = 0;
__try
{
while( !Terminate )
{
while( PeekMessage(&msg,NULL,0,0,PM_REMOVE) )
{
if( msg.message==WM_QUIT )
break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
DWORD ElapsedTime = timeGetTime() - LastRun;
if (ElapsedTime >= 60)
{
LastRun = timeGetTime();
Terminate = RunGameOSLogic();
}
else
Sleep(60-ElapsedTime);
}
}
__except( ProcessException(GetExceptionInformation()) )
{
}
if (g_hWndLobby) {
::CloseWindow(g_hWndLobby);
::DestroyWindow(g_hWndLobby);
g_hWndLobby = NULL;
}
if (g_hWndSetup) {
::CloseWindow(g_hWndSetup);
::DestroyWindow(g_hWndSetup);
g_hWndSetup = NULL;
}
if (g_hWndServer) {
::CloseWindow(g_hWndServer);
::DestroyWindow(g_hWndServer);
g_hWndServer = NULL;
}
if (g_hWndMain) {
::CloseWindow(g_hWndMain);
::DestroyWindow(g_hWndMain);
g_hWndMain = NULL;
}
gos_CloseResourceDLL(g_langResources);
CDedicatedServerUI::TerminateGameEngine();
ExitGameOS();
}
void _stdcall CDedicatedServerUI::Quit()
{
gos_NetEndGame();
gos_TerminateApplication();
::PostQuitMessage(0);
}
HWND g_hWndWait = NULL;
void CDedicatedServerUI::EnterRunningGameState()
{
CDedicatedServerUI::game_state = 2;
if (g_hWndWait) {
EndDialog(g_hWndWait, TRUE);
g_hWndWait = NULL;
}
EnableWindow(GetDlgItem(g_hWndLobby, IDDISCONNECT), TRUE);
EnableWindow(GetDlgItem(g_hWndLobby, IDEXIT), TRUE);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_KICK), TRUE);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_BAN), TRUE);
}
void CDedicatedServerUI::EnterStoppingGameState()
{
CDedicatedServerUI::game_state = 0;
if (IsWindowVisible(g_hWndLobby)) {
SetNextGame(g_hWndLobby);
EnableMissionEdit(g_hThreadEditor==NULL);
EnableWindow(GetDlgItem(g_hWndLobby, IDLAUNCH), TRUE);
EnableWindow(GetDlgItem(g_hWndLobby, IDDISCONNECT), TRUE);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_KICK), TRUE);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_BAN), TRUE);
}
}
void CDedicatedServerUI::EnterRecyclingGameState()
{
EnterStoppingGameState();
}
void CDedicatedServerUI::EnterLoadingGameState()
{
CDedicatedServerUI::game_state = 1;
EnableWindow(GetDlgItem(g_hWndLobby, IDLAUNCH), FALSE);
EnableWindow(GetDlgItem(g_hWndLobby, IDDISCONNECT), FALSE);
EnableWindow(GetDlgItem(g_hWndLobby, IDEXIT), FALSE);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_KICK), FALSE);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_BAN), FALSE);
EnableMissionEdit(FALSE);
g_hWndWait = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_WAIT), g_hWndMain, NULL);
RECT rcDesk, rc;
GetWindowRect(g_hWndMain, &rcDesk);
GetWindowRect(g_hWndWait, &rc);
int w = rc.right-rc.left;
int h = rc.bottom-rc.top;
rc.left = rcDesk.left + ((rcDesk.right-rcDesk.left)-w)/2;
rc.top = rcDesk.top + ((rcDesk.bottom-rcDesk.top)-h)/2;
MoveWindow(g_hWndWait, rc.left, rc.top, w, h, FALSE);
ShowWindow(g_hWndWait, SW_SHOW);
MSG msg;
while( PeekMessage(&msg,NULL,0,0,PM_REMOVE) )
{
if( msg.message==WM_QUIT )
break;
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
void CDedicatedServerUI::EnableMissionEdit(BOOL bEnable)
{
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_ADDBOT), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_COMBO_TIMELIMIT), bEnable);
//EnableWindow(GetDlgItem(g_hWndLobby, IDC_COMBO_TEAMSEL), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_COMBO_TEAMMINTON), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_COMBO_TEAMMAXTON), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_COMBO_TEAMTOTMAXTON), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_EDIT_BOTSKILL), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_EDIT_BOTNAME), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_COMBO_MECHS), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_COMBO_TEAM), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_CHECK_FILLTEAM), bEnable);
for (int i=IDC_COMBO_GAMETYPE; i<=IDC_CHECK_LOCKSERVER; i++)
EnableWindow(GetDlgItem(g_hWndLobby, i), bEnable);
for (i=0; i<16; i++)
{
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_CHANGE0+i), bEnable);
EnableWindow(GetDlgItem(g_hWndLobby, IDC_BUTTON_CHANGETEAM0+i), bEnable);
}
if (bEnable) {
OnCheckFragLimit(g_hWndLobby);
OnCheckNumLives(g_hWndLobby);
}
return;
}
BOOL CDedicatedServerUI::AutoLaunchInitialize()
{
MString new_pilot_directory = "Resource\\Pilots\\";
if(!gos_DoesFileExist(new_pilot_directory))
{
char temp[STRING_SIZE];
LoadString(g_hInst, IDS_STRING_NOPILOT, temp, STRING_SIZE);
MechMessageBoxWin32(Application::GetInstance()->GetLocString(IDS_NETUI_ERROR), temp);
Quit();
return FALSE;
}
MW4Shell::Instance->SelectLastUsedPilot();
MWApplication::GetInstance()->LoadServerOptions();
gos_InitializeNetworking();
//gos_ConnectTCP(0,0);
PrepareDefaultServerAdvertisers();
Mech4CreateGame(MWApplication::NetGameName, MWApplication::NetPlayerName, MWApplication::NetPassword);
DWORD networking = reinterpret_cast<DWORD>(gos_NetInformation(gos_Networking, 0));
MWApplication::GetInstance()->networkingFlag = (networking)?true:false;
NetMissionParameters::MWNetMissionParameters *params = MWApplication::GetInstance()->GetLocalNetParams();
Str_Copy(params->m_serverName, MWApplication::NetGameName, STRING_SIZE);
Str_Copy(params->m_serverIP, LocalIPAddress, STRING_SIZE);
if (MWApplication::GetInstance()->networkingFlag)
{
#if defined(_ARMOR)
DWORD server =
reinterpret_cast<DWORD>(
gos_NetInformation(gos_AmITheServer, 0)
);
Verify(server);
#endif
MWApplication::GetInstance()->serverFlag = true;
#if defined(LAB_ONLY)
MWGameInfo::g_lastGameType = MWGameInfo::g_currentGameType;
MWGameInfo::g_currentGameType = MWGameInfo::MultiServer;
#endif
Verify(!Network::GetInstance());
GlobalPointers::AddGlobalPointer(new Network, NetworkGlobalPointerIndex);
Register_Object(Network::GetInstance());
MWApplication::GetInstance()->SendRequestConnectionMessage();
MW4Shell::Instance->StartNetworkServerExecute();
Environment.DoGameLogic = &MWApplication::DoShellLogic;
}
else
{
STOP(("FAILED TO CREATE MULTIPLAYER GAME"));
return FALSE;
}
return TRUE;
}