From: dresk Date: Mon, 23 Apr 2007 20:25:05 +0000 (+0000) Subject: Implemented .string netaddress to SVQC, providing the IP Address of the associated... X-Git-Tag: xonotic-v0.1.0preview~3276 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=21ded8df6a28011633098ac23f92cd5a7f8250bc;p=xonotic%2Fdarkplaces.git 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 --- 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"},