From 21ded8df6a28011633098ac23f92cd5a7f8250bc Mon Sep 17 00:00:00 2001 From: dresk Date: Mon, 23 Apr 2007 20:25:05 +0000 Subject: [PATCH] Implemented .string netaddress to SVQC, providing the IP Address of the associated client entity (string is "null/botclient is client is not valid) git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7161 d7cf8633-e32d-0410-b094-e92efae38249 --- progsvm.h | 1 + prvm_edict.c | 1 + server.h | 3 +++ sv_main.c | 14 ++++++++++++++ 4 files changed, 19 insertions(+) diff --git a/progsvm.h b/progsvm.h index d8eb4953..e6dcafef 100644 --- a/progsvm.h +++ b/progsvm.h @@ -187,6 +187,7 @@ typedef struct prvm_prog_fieldoffsets_s int light_lev; // ssqc int movement; // ssqc int nextthink; // common - used by OP_STATE + int netaddress; // ssqc int nodrawtoclient; // ssqc int pflags; // ssqc int ping; // ssqc diff --git a/prvm_edict.c b/prvm_edict.c index c7429950..bb305ebc 100644 --- a/prvm_edict.c +++ b/prvm_edict.c @@ -1361,6 +1361,7 @@ void PRVM_FindOffsets(void) prog->fieldoffsets.lerpfrac = PRVM_ED_FindFieldOffset("lerpfrac"); prog->fieldoffsets.light_lev = PRVM_ED_FindFieldOffset("light_lev"); prog->fieldoffsets.movement = PRVM_ED_FindFieldOffset("movement"); + prog->fieldoffsets.netaddress = PRVM_ED_FindFieldOffset("netaddress"); prog->fieldoffsets.nextthink = PRVM_ED_FindFieldOffset("nextthink"); prog->fieldoffsets.nodrawtoclient = PRVM_ED_FindFieldOffset("nodrawtoclient"); prog->fieldoffsets.pflags = PRVM_ED_FindFieldOffset("pflags"); diff --git a/server.h b/server.h index bd2aabb2..36593280 100644 --- a/server.h +++ b/server.h @@ -176,6 +176,9 @@ typedef struct client_s char playermodel[MAX_QPATH], old_model[MAX_QPATH]; char playerskin[MAX_QPATH], old_skin[MAX_QPATH]; + // netaddress support + char netaddress[MAX_QPATH]; + // visibility state float visibletime[MAX_EDICTS]; diff --git a/sv_main.c b/sv_main.c index babe9581..7af52fdf 100644 --- a/sv_main.c +++ b/sv_main.c @@ -2451,6 +2451,19 @@ void SV_VM_CB_InitEdict(prvm_edict_t *e) PRVM_EDICTFIELDVALUE(e, prog->fieldoffsets.playermodel)->string = PRVM_SetEngineString(svs.clients[num].playermodel); if( prog->fieldoffsets.playerskin >= 0 ) PRVM_EDICTFIELDVALUE(e, prog->fieldoffsets.playerskin)->string = PRVM_SetEngineString(svs.clients[num].playerskin); + // Assign netaddress (IP Address, etc) + if(prog->fieldoffsets.netaddress >= 0) + { // Valid Field; Process + if(svs.clients[num].netconnection != NULL) + {// Valid Address; Assign + // Acquire Readable Address + LHNETADDRESS_ToString(&svs.clients[num].netconnection->peeraddress, svs.clients[num].netaddress, sizeof(svs.clients[num].netaddress), false); + PRVM_EDICTFIELDVALUE(e, prog->fieldoffsets.netaddress)->string = PRVM_SetEngineString(svs.clients[num].netaddress); + } + else + // Invalid / Bot + PRVM_EDICTFIELDVALUE(e, prog->fieldoffsets.netaddress)->string = PRVM_SetEngineString("null/botclient"); + } } } @@ -2641,6 +2654,7 @@ prvm_required_field_t reqfields[] = {ev_float, "items2"}, {ev_float, "light_lev"}, {ev_float, "pflags"}, + {ev_string, "netaddress"}, {ev_float, "ping"}, {ev_float, "pitch_speed"}, {ev_float, "pmodel"}, -- 2.39.2