mindHog's qfpython patch. GIB info string event callbacks and a compile fix

for broken x11 headers.
This commit is contained in:
Bill Currie 2003-05-16 16:17:24 +00:00
parent ff5ad2ee1c
commit 460c8f7f0f
6 changed files with 62 additions and 7 deletions

View file

@ -81,6 +81,8 @@ static __attribute__ ((unused)) const char rcsid[] =
#include "d_iface.h"
#include "dga_check.h"
int XShmGetEventBase (Display *x); // for broken X11 headers
static Colormap x_cmap;
static GC x_gc;

View file

@ -543,9 +543,9 @@ void SV_ExecuteClientMessage (client_t *cl);
void SV_UserInit (void);
void SV_TogglePause (const char *msg);
void *SV_AddUserCommand (const char *name, void (*func) (void *userdata),
int flags,
void *userdata,
void (*on_free) (void *userdata));
int flags,
void *userdata,
void (*on_free) (void *userdata));
int SV_RemoveUserCommand (void *cmd);
//

View file

@ -36,3 +36,5 @@ extern gib_event_t *sv_client_connect_e;
extern gib_event_t *sv_client_disconnect_e;
extern gib_event_t *sv_client_spawn_e;
extern gib_event_t *sv_map_e;
extern gib_event_t *sv_frag_e;
extern gib_event_t *sv_setinfo_e;

View file

@ -51,6 +51,8 @@ gib_event_t *sv_client_connect_e;
gib_event_t *sv_client_disconnect_e;
gib_event_t *sv_client_spawn_e;
gib_event_t *sv_map_e;
gib_event_t *sv_frag_e;
gib_event_t *sv_setinfo_e;
static client_t *
SV_GIB_GetClient (int uid)
@ -174,4 +176,6 @@ SV_GIB_Init (void)
sv_client_disconnect_e = GIB_Event_New ("client.disconnect");
sv_client_spawn_e = GIB_Event_New ("client.spawn");
sv_map_e = GIB_Event_New ("map");
sv_frag_e = GIB_Event_New ("frag");
sv_setinfo_e = GIB_Event_New ("setinfo");
}

View file

@ -1370,6 +1370,34 @@ PF_logfrag (progs_t *pr)
e1 = NUM_FOR_EDICT (pr, ent1);
e2 = NUM_FOR_EDICT (pr, ent2);
// do gib event callback
if (sv_frag_e->func) {
char buf[16];
char type1[2], type2[2];
int u1, u2;
type1[1] = type2[1] = 0;
if (e1 < 1 || e1 > MAX_CLIENTS) {
type1[0] = 'e';
u1 = e1;
} else {
type1[0] = 'c';
u1 = svs.clients[e1 - 1].userid;
}
if (e2 < 1 || e2 > MAX_CLIENTS) {
type2[0] = 'e';
u2 = e2;
} else {
type2[0] = 'c';
u2 = svs.clients[e2 - 1].userid;
}
snprintf(buf, sizeof(buf), "%d", u2);
GIB_Event_Callback (sv_frag_e, 4, type1, va ("%d", u1), type2, buf);
}
if (e1 < 1 || e1 > MAX_CLIENTS || e2 < 1 || e2 > MAX_CLIENTS)
return;
@ -1521,6 +1549,7 @@ PF_setinfokey (progs_t *pr)
int e1 = NUM_FOR_EDICT (pr, edict);
const char *key = P_GSTRING (pr, 1);
const char *value = P_GSTRING (pr, 2);
char oldval[MAX_INFO_STRING];
if (e1 == 0) {
if (*value)
@ -1529,10 +1558,19 @@ PF_setinfokey (progs_t *pr)
else
Info_RemoveKey (localinfo, key);
} else if (e1 <= MAX_CLIENTS) {
strcpy(oldval, Info_ValueForKey (svs.clients[e1 - 1].userinfo, key));
Info_SetValueForKey (svs.clients[e1 - 1].userinfo, key, value,
!sv_highchars->int_val);
SV_ExtractFromUserinfo (&svs.clients[e1 - 1]);
// trigger a GIB event
if (sv_setinfo_e->func)
GIB_Event_Callback (sv_setinfo_e, 4,
va("%d", svs.clients[e1 - 1].userid),
key, oldval,
Info_ValueForKey (svs.clients[e1 - 1].userinfo,
key));
if (Info_FilterForKey (key, client_info_filters)) {
MSG_WriteByte (&sv.reliable_datagram, svc_setinfo);
MSG_WriteByte (&sv.reliable_datagram, e1 - 1);
@ -1540,6 +1578,7 @@ PF_setinfokey (progs_t *pr)
MSG_WriteString (&sv.reliable_datagram,
Info_ValueForKey (svs.clients[e1 - 1].userinfo,
key));
}
}
}

View file

@ -1081,6 +1081,8 @@ SV_Msg_f (void *unused)
static void
SV_SetInfo_f (void *unused)
{
char oldval[MAX_INFO_STRING];
if (Cmd_Argc () == 1) {
SV_Printf ("User info settings:\n");
Info_Print (host_client->userinfo);
@ -1095,6 +1097,9 @@ SV_SetInfo_f (void *unused)
if (Cmd_Argv (1)[0] == '*')
return; // don't set priveledged values
// preserve the old value
strcpy (oldval, Info_ValueForKey (host_client->userinfo,
Cmd_Argv (1)));
if (UserInfoCallback) {
*sv_globals.self = EDICT_TO_PROG (&sv_pr_state, sv_player);
@ -1103,10 +1108,6 @@ SV_SetInfo_f (void *unused)
PR_ExecuteProgram (&sv_pr_state, UserInfoCallback);
return;
} else {
char oldval[MAX_INFO_STRING];
strcpy (oldval, Info_ValueForKey (host_client->userinfo,
Cmd_Argv (1)));
Info_SetValueForKey (host_client->userinfo, Cmd_Argv (1), Cmd_Argv (2),
!sv_highchars->int_val);
if (strequal
@ -1117,6 +1118,13 @@ SV_SetInfo_f (void *unused)
// process any changed values
SV_ExtractFromUserinfo (host_client);
// trigger a GIB event
if (sv_setinfo_e->func)
GIB_Event_Callback (sv_setinfo_e, 4, va("%d", host_client->userid),
Cmd_Argv (1), oldval,
Info_ValueForKey (host_client->userinfo,
Cmd_Argv (1)));
if (Info_FilterForKey (Cmd_Argv (1), client_info_filters)) {
MSG_WriteByte (&sv.reliable_datagram, svc_setinfo);
MSG_WriteByte (&sv.reliable_datagram, host_client - svs.clients);