mirror of
https://git.code.sf.net/p/quake/quakeforge-old
synced 2024-11-10 14:42:06 +00:00
common/host.c:
put Host_GetConsoleCommands back uquake/server.h: proto for SV_Frame uquake/sv_main.c add SV_ClientPrintf SV_BroadcastPrintf SV_DropClient SV_Frame* from old host.c
This commit is contained in:
parent
74e0de143a
commit
866f2514d0
3 changed files with 209 additions and 0 deletions
|
@ -152,6 +152,25 @@ Host_EndGame ( char *message, ... )
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===================
|
||||||
|
Host_GetConsoleCommands
|
||||||
|
|
||||||
|
Add them exactly as if they had been typed at the console
|
||||||
|
===================
|
||||||
|
*/
|
||||||
|
void Host_GetConsoleCommands (void)
|
||||||
|
{
|
||||||
|
char *cmd;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
cmd = Sys_ConsoleInput ();
|
||||||
|
if (!cmd)
|
||||||
|
break;
|
||||||
|
Cbuf_AddText (cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Host_FilterTime
|
Host_FilterTime
|
||||||
|
@ -190,6 +209,7 @@ Host_FilterTime ( float time )
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#ifdef QUAKEWORLD
|
#ifdef QUAKEWORLD
|
||||||
int nopacketcount; // for Host_FrameMain
|
int nopacketcount; // for Host_FrameMain
|
||||||
|
|
|
@ -262,5 +262,6 @@ void SV_SpawnServer (char *server, char *startspot);
|
||||||
#else
|
#else
|
||||||
void SV_SpawnServer (char *server);
|
void SV_SpawnServer (char *server);
|
||||||
#endif
|
#endif
|
||||||
|
void SV_Frame (void);
|
||||||
|
|
||||||
#endif // _SERVER_H
|
#endif // _SERVER_H
|
||||||
|
|
188
uquake/sv_main.c
188
uquake/sv_main.c
|
@ -34,6 +34,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include <mathlib.h>
|
#include <mathlib.h>
|
||||||
#include <net.h>
|
#include <net.h>
|
||||||
#include <cmd.h>
|
#include <cmd.h>
|
||||||
|
#include <keys.h>
|
||||||
|
|
||||||
server_t sv;
|
server_t sv;
|
||||||
server_static_t svs;
|
server_static_t svs;
|
||||||
|
@ -1208,3 +1209,190 @@ void SV_SpawnServer (char *server)
|
||||||
Con_DPrintf ("Server spawned.\n");
|
Con_DPrintf ("Server spawned.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
SV_ClientPrintf
|
||||||
|
|
||||||
|
Sends text across to be displayed
|
||||||
|
FIXME: make this just a stuffed echo?
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void SV_ClientPrintf (char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list argptr;
|
||||||
|
char string[1024];
|
||||||
|
|
||||||
|
va_start (argptr, fmt);
|
||||||
|
vsnprintf (string, sizeof(string), fmt, argptr);
|
||||||
|
va_end (argptr);
|
||||||
|
|
||||||
|
MSG_WriteByte (&host_client->message, svc_print);
|
||||||
|
MSG_WriteString (&host_client->message, string);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
SV_BroadcastPrintf
|
||||||
|
|
||||||
|
Sends text to all active clients
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
void SV_BroadcastPrintf (char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list argptr;
|
||||||
|
char string[1024];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
va_start (argptr, fmt);
|
||||||
|
vsnprintf (string, sizeof(string), fmt, argptr);
|
||||||
|
va_end (argptr);
|
||||||
|
|
||||||
|
for (i=0 ; i<svs.maxclients ; i++)
|
||||||
|
if (svs.clients[i].active && svs.clients[i].spawned)
|
||||||
|
{
|
||||||
|
MSG_WriteByte (&svs.clients[i].message, svc_print);
|
||||||
|
MSG_WriteString (&svs.clients[i].message, string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=====================
|
||||||
|
SV_DropClient
|
||||||
|
|
||||||
|
Called when the player is getting totally kicked off the host
|
||||||
|
if (crash = true), don't bother sending signofs
|
||||||
|
=====================
|
||||||
|
*/
|
||||||
|
void SV_DropClient (qboolean crash)
|
||||||
|
{
|
||||||
|
int saveSelf;
|
||||||
|
int i;
|
||||||
|
client_t *client;
|
||||||
|
|
||||||
|
if (!crash)
|
||||||
|
{
|
||||||
|
// send any final messages (don't check for errors)
|
||||||
|
if (NET_CanSendMessage (host_client->netconnection))
|
||||||
|
{
|
||||||
|
MSG_WriteByte (&host_client->message, svc_disconnect);
|
||||||
|
NET_SendMessage (host_client->netconnection, &host_client->message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (host_client->edict && host_client->spawned)
|
||||||
|
{
|
||||||
|
// call the prog function for removing a client
|
||||||
|
// this will set the body to a dead frame, among other things
|
||||||
|
saveSelf = pr_global_struct->self;
|
||||||
|
pr_global_struct->self = EDICT_TO_PROG(host_client->edict);
|
||||||
|
PR_ExecuteProgram (pr_global_struct->ClientDisconnect);
|
||||||
|
pr_global_struct->self = saveSelf;
|
||||||
|
}
|
||||||
|
|
||||||
|
Sys_Printf ("Client %s removed\n",host_client->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// break the net connection
|
||||||
|
NET_Close (host_client->netconnection);
|
||||||
|
host_client->netconnection = NULL;
|
||||||
|
|
||||||
|
// free the client (the body stays around)
|
||||||
|
host_client->active = false;
|
||||||
|
host_client->name[0] = 0;
|
||||||
|
host_client->old_frags = -999999;
|
||||||
|
net_activeconnections--;
|
||||||
|
|
||||||
|
// send notification to all clients
|
||||||
|
for (i=0, client = svs.clients ; i<svs.maxclients ; i++, client++)
|
||||||
|
{
|
||||||
|
if (!client->active)
|
||||||
|
continue;
|
||||||
|
MSG_WriteByte (&client->message, svc_updatename);
|
||||||
|
MSG_WriteByte (&client->message, host_client - svs.clients);
|
||||||
|
MSG_WriteString (&client->message, "");
|
||||||
|
MSG_WriteByte (&client->message, svc_updatefrags);
|
||||||
|
MSG_WriteByte (&client->message, host_client - svs.clients);
|
||||||
|
MSG_WriteShort (&client->message, 0);
|
||||||
|
MSG_WriteByte (&client->message, svc_updatecolors);
|
||||||
|
MSG_WriteByte (&client->message, host_client - svs.clients);
|
||||||
|
MSG_WriteByte (&client->message, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
==================
|
||||||
|
Host_ServerFrame
|
||||||
|
|
||||||
|
==================
|
||||||
|
*/
|
||||||
|
#ifdef FPS_20
|
||||||
|
|
||||||
|
void SV_FrameMain (void)
|
||||||
|
{
|
||||||
|
// run the world state
|
||||||
|
pr_global_struct->frametime = host_frametime;
|
||||||
|
|
||||||
|
// read client messages
|
||||||
|
SV_RunClients ();
|
||||||
|
|
||||||
|
// move things around and think
|
||||||
|
// always pause in single player if in console or menus
|
||||||
|
if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game) )
|
||||||
|
SV_Physics ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SV_Frame (void)
|
||||||
|
{
|
||||||
|
float save_host_frametime;
|
||||||
|
float temp_host_frametime;
|
||||||
|
|
||||||
|
// run the world state
|
||||||
|
pr_global_struct->frametime = host_frametime;
|
||||||
|
|
||||||
|
// set the time and clear the general datagram
|
||||||
|
SV_ClearDatagram ();
|
||||||
|
|
||||||
|
// check for new clients
|
||||||
|
SV_CheckForNewClients ();
|
||||||
|
|
||||||
|
temp_host_frametime = save_host_frametime = host_frametime;
|
||||||
|
while(temp_host_frametime > (1.0/72.0))
|
||||||
|
{
|
||||||
|
if (temp_host_frametime > 0.05)
|
||||||
|
host_frametime = 0.05;
|
||||||
|
else
|
||||||
|
host_frametime = temp_host_frametime;
|
||||||
|
temp_host_frametime -= host_frametime;
|
||||||
|
SV_FrameMain ();
|
||||||
|
}
|
||||||
|
host_frametime = save_host_frametime;
|
||||||
|
|
||||||
|
// send all messages to the clients
|
||||||
|
SV_SendClientMessages ();
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void SV_Frame (void)
|
||||||
|
{
|
||||||
|
// run the world state
|
||||||
|
pr_global_struct->frametime = host_frametime;
|
||||||
|
|
||||||
|
// set the time and clear the general datagram
|
||||||
|
SV_ClearDatagram ();
|
||||||
|
|
||||||
|
// check for new clients
|
||||||
|
SV_CheckForNewClients ();
|
||||||
|
|
||||||
|
// read client messages
|
||||||
|
SV_RunClients ();
|
||||||
|
|
||||||
|
// move things around and think
|
||||||
|
// always pause in single player if in console or menus
|
||||||
|
if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game) )
|
||||||
|
SV_Physics ();
|
||||||
|
|
||||||
|
// send all messages to the clients
|
||||||
|
SV_SendClientMessages ();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue