]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
Implemented .string netaddress to SVQC, providing the IP Address of the associated...
authordresk <dresk@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 23 Apr 2007 20:25:05 +0000 (20:25 +0000)
committerdresk <dresk@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 23 Apr 2007 20:25:05 +0000 (20:25 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7161 d7cf8633-e32d-0410-b094-e92efae38249

progsvm.h
prvm_edict.c
server.h
sv_main.c

index d8eb4953a5d2d6eee5e89fc8ed64fc3a534a5ae7..e6dcafef31ee66cfb2a90de1017d38dde767e8e7 100644 (file)
--- 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
index c7429950bb307724799c9dc4fdbea12b1152212b..bb305ebcc9a9d289fe2ee258144af0238d941ca9 100644 (file)
@@ -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");
index bd2aabb297a8e23231fe4c6b2f072f344a515212..36593280c2c26cd6770b71ef638a167452a34b46 100644 (file)
--- 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];
 
index babe95813226ee297548bef21f67384458b7654a..7af52fdf2ddd07d68a7c33e2fa020b480cd1a791 100644 (file)
--- 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"},