Sigrid Solveig HaflínudóttiraLways, aLready.fc395532 years agoHistory
1393 lines · 26.6 KB · C
RawDownload
#include "quakedef.h" int	current_skill; /*==================Host_Quit_f==================*/ extern void M_Menu_Quit_f (void); void Host_Quit_f (void){	if (key_dest != key_console && cls.state != ca_dedicated)	{		M_Menu_Quit_f ();		return;	}	CL_Disconnect ();	Host_ShutdownServer(false); 	game_shutdown ();}  /*==================Host_Status_f==================*/void Host_Status_f (void){	client_t	*client;	int			seconds;	int			minutes;	int			hours;	int			j;	void		(*print) (char *fmt, ...); 	if (cmd_source == src_command)	{		if (!sv.active)		{			Cmd_ForwardToServer ();			return;		}		print = Con_Printf;	}	else		print = SV_ClientPrintf; 	print ("host:	%s\n", Cvar_VariableString ("hostname"));	print ("version: %4.2f\n", VERSION);	print ("map:	 %s\n", sv.name);	print ("players: %d active (%d max)\n\n", net_activeconnections, svs.maxclients);	for (j=0, client = svs.clients ; j<svs.maxclients ; j++, client++)	{		if (!client->active)			continue;		seconds = (int)(net_time - client->netconnection->connecttime);		minutes = seconds / 60;		if (minutes)		{			seconds -= (minutes * 60);			hours = minutes / 60;			if (hours)				minutes -= (hours * 60);		}		else			hours = 0;		print ("#%-2ud %-16.16s  %3d  %2d:%02d:%02d\n", j+1, client->name, (int)client->edict->v.frags, hours, minutes, seconds);		print ("   %s\n", client->netconnection->address);	}}  /*==================Host_God_f Sets client to godmode==================*/void Host_God_f (void){	if (cmd_source == src_command)	{		Cmd_ForwardToServer ();		return;	} 	if (sv.pr->global_struct->deathmatch)		return; 	sv_player->v.flags = (int)sv_player->v.flags ^ FL_GODMODE;	if (!((int)sv_player->v.flags & FL_GODMODE) )		SV_ClientPrintf ("godmode OFF\n");	else		SV_ClientPrintf ("godmode ON\n");} void Host_Notarget_f (void){	if (cmd_source == src_command)	{		Cmd_ForwardToServer ();		return;	} 	if (sv.pr->global_struct->deathmatch)		return; 	sv_player->v.flags = (int)sv_player->v.flags ^ FL_NOTARGET;	if (!((int)sv_player->v.flags & FL_NOTARGET) )		SV_ClientPrintf ("notarget OFF\n");	else		SV_ClientPrintf ("notarget ON\n");} bool noclip_anglehack; void Host_Noclip_f (void){	if (cmd_source == src_command)	{		Cmd_ForwardToServer ();		return;	} 	if (sv.pr->global_struct->deathmatch)		return; 	if (sv_player->v.movetype != MOVETYPE_NOCLIP)	{		noclip_anglehack = true;		sv_player->v.movetype = MOVETYPE_NOCLIP;		SV_ClientPrintf ("noclip ON\n");	}	else	{		noclip_anglehack = false;		sv_player->v.movetype = MOVETYPE_WALK;		SV_ClientPrintf ("noclip OFF\n");	}} /*==================Host_Fly_f Sets client to flymode==================*/void Host_Fly_f (void){	if (cmd_source == src_command)	{		Cmd_ForwardToServer ();		return;	} 	if (sv.pr->global_struct->deathmatch)		return; 	if (sv_player->v.movetype != MOVETYPE_FLY)	{		sv_player->v.movetype = MOVETYPE_FLY;		SV_ClientPrintf ("flymode ON\n");	}	else	{		sv_player->v.movetype = MOVETYPE_WALK;		SV_ClientPrintf ("flymode OFF\n");	}}  /*==================Host_Ping_f ==================*/void Host_Ping_f (void){	int		i, j;	float	total;	client_t	*client; 	if (cmd_source == src_command)	{		Cmd_ForwardToServer ();		return;	} 	SV_ClientPrintf ("Client ping times:\n");	for (i=0, client = svs.clients ; i<svs.maxclients ; i++, client++)	{		if (!client->active)			continue;		total = 0;		for (j=0 ; j<NUM_PING_TIMES ; j++)			total+=client->ping_times[j];		total /= NUM_PING_TIMES;		SV_ClientPrintf ("%4d %s\n", (int)(total*1000), client->name);	}} /*=============================================================================== SERVER TRANSITIONS ===============================================================================*/  /*======================Host_Map_f handle amap <servername>command from the console.  Active clients are kicked off.======================*/void Host_Map_f (void){	int		i;	char	name[Npath]; 	if (cmd_source != src_command)		return; 	cls.demonum = -1;		// stop demo loop in case this fails 	CL_Disconnect ();	Host_ShutdownServer(false); 	key_dest = key_game;			// remove console or menu	SCR_BeginLoadingPlaque (); 	cls.mapstring[0] = 0;	for (i=0 ; i<Cmd_Argc() ; i++)	{		strcat (cls.mapstring, Cmd_Argv(i));		strcat (cls.mapstring, " ");	}	strcat (cls.mapstring, "\n"); 	svs.serverflags = 0;			// haven't completed an episode yet	strcpy (name, Cmd_Argv(1));	SV_SpawnServer (name);	if (!sv.active)		return; 	if (cls.state != ca_dedicated)	{		strcpy (cls.spawnparms, ""); 		for (i=2 ; i<Cmd_Argc() ; i++)		{			strcat (cls.spawnparms, Cmd_Argv(i));			strcat (cls.spawnparms, " ");		} 		Cmd_ExecuteString ("connect local", src_command);	}} /*==================Host_Changelevel_f Goes to a new map, taking all clients along==================*/void Host_Changelevel_f (void){	char	level[Npath]; 	if (Cmd_Argc() != 2)	{		Con_Printf ("changelevel <levelname> : continue game on a new level\n");		return;	}	if (!sv.active || cls.demoplayback)	{		Con_Printf ("Only the server may changelevel\n");		return;	}	SV_SaveSpawnparms ();	strcpy (level, Cmd_Argv(1));	SV_SpawnServer (level);} /*==================Host_Restart_f Restarts the current server for a dead player==================*/void Host_Restart_f (void){	char	mapname[Npath]; 	if (cls.demoplayback || !sv.active)		return; 	if (cmd_source != src_command)		return;	strcpy (mapname, sv.name);	// must copy out, because it gets cleared								// in sv_spawnserver	SV_SpawnServer (mapname);} /* wait for signon messages; sent before server level change */static voidreconnect(void){	SCR_BeginLoadingPlaque();	cls.signon = 0;} /*=====================Host_Connect_f User command to connect to server=====================*/void Host_Connect_f (void){	char	name[Npath]; 	cls.demonum = -1;		// stop demo loop in case this fails	if (cls.demoplayback)	{		abortdemo ();		CL_Disconnect ();	}	strcpy (name, Cmd_Argv(1));	CL_EstablishConnection (name);	reconnect();} /*======================Host_Name_f======================*/void Host_Name_f (void){	char	newName[16]; 	if (Cmd_Argc () == 1)	{		Con_Printf ("\"name\" is \"%s\"\n", cl_name.string);		return;	}	if (Cmd_Argc () == 2)		strncpy(newName, Cmd_Argv(1), sizeof(newName));	else		strncpy(newName, Cmd_Args(), sizeof(newName));	newName[sizeof(newName)-1] = 0; 	if (cmd_source == src_command)	{		if(strcmp(cl_name.string, newName) == 0)			return;		setcvar ("_cl_name", newName);		if (cls.state == ca_connected)			Cmd_ForwardToServer ();		return;	} 	if (host_client->name[0] && strcmp(host_client->name, "unconnected") != 0)		if(strcmp(host_client->name, newName) != 0)			Con_Printf ("%s renamed to %s\n", host_client->name, newName);	strcpy(host_client->name, newName);	host_client->edict->v.netname = PR_SetStr(sv.pr, host_client->name); 	// send notification to all clients 	MSG_WriteByte (&sv.reliable_datagram, svc_updatename);	MSG_WriteByte (&sv.reliable_datagram, host_client - svs.clients);	MSG_WriteString (&sv.reliable_datagram, host_client->name);}  void Host_Version_f (void){	Con_Printf ("Version %4.2f\n", VERSION);	Con_Printf ("Exe: 00:00:00 Jun 22 1996\n");}  void Host_Say(bool teamonly){	client_t *client;	client_t *save;	int		j;	char	*p;	char	text[64];	bool	fromServer = false; 	if (cmd_source == src_command)	{		if (cls.state == ca_dedicated)		{			fromServer = true;			teamonly = false;		}		else		{			Cmd_ForwardToServer ();			return;		}	} 	if (Cmd_Argc () < 2)		return; 	save = host_client; 	p = Cmd_Args();	// remove quotes if present	if (*p == '"')	{		p++;		p[strlen(p)-1] = 0;	} 	// turn on color set 1	if (!fromServer)		sprint (text, "%c%s: ", 1, save->name);	else		sprint (text, "%c<%s> ", 1, hostname.string); 	j = sizeof(text) - 2 - strlen(text);  // -2 for /n and null terminator	if(j < (int)strlen(p))		p[j] = 0; 	strcat (text, p);	strcat (text, "\n"); 	for (j = 0, client = svs.clients; j < svs.maxclients; j++, client++)	{		if (!client || !client->active || !client->spawned)			continue;		if (teamplay.value && teamonly && client->edict->v.team != save->edict->v.team)			continue;		host_client = client;		SV_ClientPrintf("%s", text);	}	host_client = save; 	Con_DPrintf("%s", &text[1]);}  void Host_Say_f(void){	Host_Say(false);}  void Host_Say_Team_f(void){	Host_Say(true);}  void Host_Tell_f(void){	client_t *client;	client_t *save;	int		j;	char	*p;	char	text[64]; 	if (cmd_source == src_command)	{		Cmd_ForwardToServer ();		return;	} 	if (Cmd_Argc () < 3)		return; 	strcpy(text, host_client->name);	strcat(text, ": "); 	p = Cmd_Args(); 	// remove quotes if present	if (*p == '"')	{

Lines 1–500 of 1393.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t