static void UI_PromptDialog( void ) { if( !Host_ServerState()) { UI_CreateGame_Begin(); return; } // toggle main menu between active\inactive // show\hide quit dialog uiCreateGame.advOptions.generic.flags ^= QMF_INACTIVE; uiCreateGame.done.generic.flags ^= QMF_INACTIVE; uiCreateGame.cancel.generic.flags ^= QMF_INACTIVE; uiCreateGame.maxClients.generic.flags ^= QMF_INACTIVE; uiCreateGame.hostName.generic.flags ^= QMF_INACTIVE; uiCreateGame.password.generic.flags ^= QMF_INACTIVE; uiCreateGame.dedicatedServer.generic.flags ^= QMF_INACTIVE; uiCreateGame.mapsList.generic.flags ^= QMF_INACTIVE; uiCreateGame.msgBox.generic.flags ^= QMF_HIDDEN; uiCreateGame.dlgMessage1.generic.flags ^= QMF_HIDDEN; uiCreateGame.dlgMessage2.generic.flags ^= QMF_HIDDEN; uiCreateGame.no.generic.flags ^= QMF_HIDDEN; uiCreateGame.yes.generic.flags ^= QMF_HIDDEN; }
//#include <sys/mman.h> void CL_Connect_f( void ) { string server; if( Cmd_Argc() != 2 ) { Msg( "Usage: connect <server>\n" ); return; } // default value 40000 ignored as we don't want to grow userinfo string if( ( cl_maxpacket->integer < 40000 ) && ( cl_maxpacket->integer > 99 ) ) { cl_maxpacket->flags |= CVAR_USERINFO; userinfo->modified = true; } Q_strncpy( server, Cmd_Argv( 1 ), MAX_STRING ); if( Host_ServerState()) { // if running a local server, kill it and reissue Q_strncpy( host.finalmsg, "Server quit", MAX_STRING ); SV_Shutdown( false ); } NET_Config( true ); // allow remote Msg( "server %s\n", server ); CL_Disconnect(); cls.state = ca_connecting; Q_strncpy( cls.servername, server, sizeof( cls.servername )); cls.connect_time = MAX_HEARTBEAT; // CL_CheckForResend() will fire immediately }
//#include <sys/mman.h> void CL_Connect_f( void ) { char server[ sizeof( cls.servername ) ]; if( Cmd_Argc() != 2 ) { Msg( "Usage: connect <server>\n" ); return; } Q_strncpy( server, Cmd_Argv( 1 ), sizeof( cls.servername )); if( Host_ServerState()) { // if running a local server, kill it and reissue Q_strncpy( host.finalmsg, "Server quit", MAX_STRING ); SV_Shutdown( false ); } NET_Config( true ); // allow remote Msg( "server %s\n", server ); CL_Disconnect(); cls.state = ca_connecting; Q_strncpy( cls.servername, server, sizeof( cls.servername )); cls.connect_time = MAX_HEARTBEAT; // CL_CheckForResend() will fire immediately }
/* ================= Host_Autosleep ================= */ void Host_Autosleep( void ) { int sleeptime = host_sleeptime->value; if( host.type == HOST_DEDICATED ) { // let the dedicated server some sleep Sys_Sleep( sleeptime ); } else { if( host.state == HOST_NOFOCUS ) { if( Host_ServerState() && CL_IsInGame( )) Sys_Sleep( sleeptime ); // listenserver else Sys_Sleep( 20 ); // sleep 20 ms otherwise } else if( host.state == HOST_SLEEP ) { // completely sleep in minimized state Sys_Sleep( 20 ); } else { Sys_Sleep( sleeptime ); } } }
/* ================= UI_CreateGame_Begin ================= */ static void UI_CreateGame_Begin( void ) { if( Host_ServerState()) Cbuf_ExecuteText( EXEC_NOW, "killserver\n" ); Cvar_SetValue( "deathmatch", 1.0f ); // FIXME Cvar_SetValue( "sv_maxclients", com.atoi( uiCreateGame.maxClients.buffer )); Cvar_Set( "sv_hostname", uiCreateGame.hostName.buffer ); Cvar_Set( "defaultmap", uiCreateGame.mapName[uiCreateGame.mapsList.curItem] ); Host_WriteServerConfig (); // all done, start server if( uiCreateGame.dedicatedServer.enabled ) Sys_NewInstance( va("#%s", GI->gamefolder ), "Starting dedicated server...\n" ); else Cbuf_ExecuteText( EXEC_APPEND, "exec server.rc\n" ); }
/* ================= UI_CreateGame_Init ================= */ static void UI_CreateGame_Init( void ) { Mem_Set( &uiCreateGame, 0, sizeof( uiCreateGame_t )); com.strncat( uiCreateGame.hintText, "Map", MAPNAME_LENGTH ); com.strncat( uiCreateGame.hintText, uiEmptyString, MAPNAME_LENGTH ); com.strncat( uiCreateGame.hintText, "Title", TITLE_LENGTH ); com.strncat( uiCreateGame.hintText, uiEmptyString, TITLE_LENGTH ); uiCreateGame.background.generic.id = ID_BACKGROUND; uiCreateGame.background.generic.type = QMTYPE_BITMAP; uiCreateGame.background.generic.flags = QMF_INACTIVE; uiCreateGame.background.generic.x = 0; uiCreateGame.background.generic.y = 0; uiCreateGame.background.generic.width = 1024; uiCreateGame.background.generic.height = 768; uiCreateGame.background.pic = ART_BACKGROUND; uiCreateGame.banner.generic.id = ID_BANNER; uiCreateGame.banner.generic.type = QMTYPE_BITMAP; uiCreateGame.banner.generic.flags = QMF_INACTIVE; uiCreateGame.banner.generic.x = UI_BANNER_POSX; uiCreateGame.banner.generic.y = UI_BANNER_POSY; uiCreateGame.banner.generic.width = UI_BANNER_WIDTH; uiCreateGame.banner.generic.height = UI_BANNER_HEIGHT; uiCreateGame.banner.pic = ART_BANNER; uiCreateGame.advOptions.generic.id = ID_ADVOPTIONS; uiCreateGame.advOptions.generic.type = QMTYPE_ACTION; uiCreateGame.advOptions.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_GRAYED; uiCreateGame.advOptions.generic.x = 72; uiCreateGame.advOptions.generic.y = 230; uiCreateGame.advOptions.generic.name = "Adv. Options"; uiCreateGame.advOptions.generic.statusText = "Open the LAN game advanced options menu"; uiCreateGame.advOptions.generic.callback = UI_CreateGame_Callback; uiCreateGame.done.generic.id = ID_DONE; uiCreateGame.done.generic.type = QMTYPE_ACTION; uiCreateGame.done.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW; uiCreateGame.done.generic.x = 72; uiCreateGame.done.generic.y = 280; uiCreateGame.done.generic.name = "Ok"; uiCreateGame.done.generic.statusText = "Start the multiplayer game"; uiCreateGame.done.generic.callback = UI_CreateGame_Callback; uiCreateGame.cancel.generic.id = ID_CANCEL; uiCreateGame.cancel.generic.type = QMTYPE_ACTION; uiCreateGame.cancel.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW; uiCreateGame.cancel.generic.x = 72; uiCreateGame.cancel.generic.y = 330; uiCreateGame.cancel.generic.name = "Cancel"; uiCreateGame.cancel.generic.statusText = "Return to LAN game menu"; uiCreateGame.cancel.generic.callback = UI_CreateGame_Callback; uiCreateGame.dedicatedServer.generic.id = ID_DEDICATED; uiCreateGame.dedicatedServer.generic.type = QMTYPE_CHECKBOX; uiCreateGame.dedicatedServer.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_MOUSEONLY|QMF_DROPSHADOW; uiCreateGame.dedicatedServer.generic.name = "Dedicated server"; uiCreateGame.dedicatedServer.generic.x = 72; uiCreateGame.dedicatedServer.generic.y = 685; uiCreateGame.dedicatedServer.generic.callback = UI_CreateGame_Callback; uiCreateGame.dedicatedServer.generic.statusText = "faster, but you can't join the server from this machine"; uiCreateGame.hintMessage.generic.id = ID_TABLEHINT; uiCreateGame.hintMessage.generic.type = QMTYPE_ACTION; uiCreateGame.hintMessage.generic.flags = QMF_INACTIVE|QMF_SMALLFONT; uiCreateGame.hintMessage.generic.color = uiColorHelp; uiCreateGame.hintMessage.generic.name = uiCreateGame.hintText; uiCreateGame.hintMessage.generic.x = 590; uiCreateGame.hintMessage.generic.y = 215; uiCreateGame.mapsList.generic.id = ID_MAPLIST; uiCreateGame.mapsList.generic.type = QMTYPE_SCROLLLIST; uiCreateGame.mapsList.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_SMALLFONT; uiCreateGame.mapsList.generic.x = 590; uiCreateGame.mapsList.generic.y = 245; uiCreateGame.mapsList.generic.width = 410; uiCreateGame.mapsList.generic.height = 440; uiCreateGame.mapsList.generic.callback = UI_CreateGame_Callback; uiCreateGame.hostName.generic.id = ID_HOSTNAME; uiCreateGame.hostName.generic.type = QMTYPE_FIELD; uiCreateGame.hostName.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW; uiCreateGame.hostName.generic.name = "Server Name:"; uiCreateGame.hostName.generic.x = 350; uiCreateGame.hostName.generic.y = 260; uiCreateGame.hostName.generic.width = 205; uiCreateGame.hostName.generic.height = 32; uiCreateGame.hostName.generic.callback = UI_CreateGame_Callback; uiCreateGame.hostName.maxLength = 16; com.strncpy( uiCreateGame.hostName.buffer, Cvar_VariableString( "sv_hostname" ), sizeof( uiCreateGame.hostName.buffer )); uiCreateGame.maxClients.generic.id = ID_MAXCLIENTS; uiCreateGame.maxClients.generic.type = QMTYPE_FIELD; uiCreateGame.maxClients.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NUMBERSONLY; uiCreateGame.maxClients.generic.name = "Max Players:"; uiCreateGame.maxClients.generic.x = 350; uiCreateGame.maxClients.generic.y = 360; uiCreateGame.maxClients.generic.width = 205; uiCreateGame.maxClients.generic.height = 32; uiCreateGame.maxClients.maxLength = 3; if( Cvar_VariableInteger( "sv_maxclients" ) <= 1 ) com.snprintf( uiCreateGame.maxClients.buffer, sizeof( uiCreateGame.maxClients.buffer ), "8" ); else com.snprintf( uiCreateGame.maxClients.buffer, sizeof( uiCreateGame.maxClients.buffer ), "%i", Cvar_VariableInteger( "sv_maxclients" )); uiCreateGame.password.generic.id = ID_PASSWORD; uiCreateGame.password.generic.type = QMTYPE_FIELD; uiCreateGame.password.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW; uiCreateGame.password.generic.name = "Password:"******"Starting a new game will exit"; uiCreateGame.dlgMessage1.generic.x = 248; uiCreateGame.dlgMessage1.generic.y = 280; uiCreateGame.dlgMessage2.generic.id = ID_MSGTEXT; uiCreateGame.dlgMessage2.generic.type = QMTYPE_ACTION; uiCreateGame.dlgMessage2.generic.flags = QMF_INACTIVE|QMF_HIDDEN; uiCreateGame.dlgMessage2.generic.name = "any current game, OK to exit?"; uiCreateGame.dlgMessage2.generic.x = 248; uiCreateGame.dlgMessage2.generic.y = 310; uiCreateGame.yes.generic.id = ID_YES; uiCreateGame.yes.generic.type = QMTYPE_ACTION; uiCreateGame.yes.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_HIDDEN; uiCreateGame.yes.generic.name = "Ok"; uiCreateGame.yes.generic.x = 380; uiCreateGame.yes.generic.y = 460; uiCreateGame.yes.generic.callback = UI_CreateGame_Callback; uiCreateGame.no.generic.id = ID_NO; uiCreateGame.no.generic.type = QMTYPE_ACTION; uiCreateGame.no.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_HIDDEN; uiCreateGame.no.generic.name = "Cancel"; uiCreateGame.no.generic.x = 530; uiCreateGame.no.generic.y = 460; uiCreateGame.no.generic.callback = UI_CreateGame_Callback; UI_CreateGame_GetMapsList(); if( !Host_ServerState()) SV_LoadProgs( "server" ); // force to get user mp_variables UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.background ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.banner ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.advOptions ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.done ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.cancel ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.maxClients ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.hostName ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.password ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.dedicatedServer ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.hintMessage ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.mapsList ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.msgBox ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.dlgMessage1 ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.dlgMessage2 ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.no ); UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.yes ); }