]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
csqcmodels: make more suitable for using for non-players
authorRudolf Polzer <divverent@alientrap.org>
Fri, 2 Dec 2011 08:16:14 +0000 (09:16 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Fri, 2 Dec 2011 08:16:14 +0000 (09:16 +0100)
qcsrc/csqcmodel/cl_model.qc
qcsrc/csqcmodel/settings.qh
qcsrc/csqcmodel/sv_model.qc
qcsrc/server/g_world.qc

index ad582543c7fb8476a3c516b47caf21a14048c748..77f5e2cb01a56f521b1869c5b625dcd58cb4d3dd 100644 (file)
@@ -158,6 +158,11 @@ void CSQCModel_Read()
        float sf;
        sf = ReadShort();
 
+       // some nice flags for CSQCMODEL_IF and the hooks
+       float isplayer = (self.entnum >= 1 && self.entnum <= maxclients);
+       float islocalplayer = (self.entnum == player_localentnum);
+       float isnolocalplayer = (isplayer && (self.entnum != player_localentnum));
+
        self.iflags |= IFLAG_ANGLES; // interpolate angles too
 
        { CSQCMODEL_HOOK_PREUPDATE }
@@ -166,6 +171,8 @@ void CSQCModel_Read()
        InterpolateOrigin_Undo();
        CSQCModel_InterpolateAnimation_PreNote(sf);
 
+#define CSQCMODEL_IF(cond) if(cond) {
+#define CSQCMODEL_ENDIF }
 #define CSQCMODEL_PROPERTY(flag,r,w,f) \
        if(sf & flag) \
                self.f = r();
@@ -175,6 +182,8 @@ void CSQCModel_Read()
        ALLPROPERTIES
 #undef CSQCMODEL_PROPERTY_SCALED
 #undef CSQCMODEL_PROPERTY
+#undef CSQCMODEL_ENDIF
+#undef CSQCMODEL_IF
 
        if(sf & CSQCMODEL_PROPERTY_MODELINDEX)
                setmodelindex(self, self.modelindex); // this retrieves the .model key and sets mins/maxs/absmin/absmax
index 6d5ff53fdc476cf764bb243fd82051f7b596fd1f..97b5d661363f5695d6c7c9862c01f9e8e067c75a 100644 (file)
@@ -6,10 +6,12 @@
 
 // add properties you want networked to CSQC here
 #define CSQCMODEL_EXTRAPROPERTIES \
-       CSQCMODEL_PROPERTY(1, ReadByte, WriteByte, skin) \
-       CSQCMODEL_PROPERTY(2, ReadShort, WriteShort, colormap) \
-       CSQCMODEL_PROPERTY(4, ReadInt24_t, WriteInt24_t, effects) \
-       CSQCMODEL_PROPERTY_SCALED(8, ReadByte, WriteByte, alpha, 255, 0, 255)
+       CSQCMODEL_IF(isplayer) \
+               CSQCMODEL_PROPERTY(1, ReadByte, WriteByte, skin) \
+               CSQCMODEL_PROPERTY(2, ReadShort, WriteShort, colormap) \
+               CSQCMODEL_PROPERTY(4, ReadInt24_t, WriteInt24_t, effects) \
+               CSQCMODEL_PROPERTY_SCALED(8, ReadByte, WriteByte, alpha, 255, 0, 255) \
+       CSQCMODEL_ENDIF
 
 // add hook function calls here
 #define CSQCMODEL_HOOK_PREUPDATE
index b6952f02772905acb190dd1fdd3e823968263de5..bc9ddddef702e3c5067bf03bc6e1da2458db2986 100644 (file)
 
 // generic CSQC model code
 
+#define CSQCMODEL_IF(cond)
+#define CSQCMODEL_ENDIF
 #define CSQCMODEL_PROPERTY(flag,r,w,f) \
        .float csqcmodel_##f;
 #define CSQCMODEL_PROPERTY_SCALED(flag,r,w,f,s,mi,ma) CSQCMODEL_PROPERTY(flag,r,w,f)
        ALLPROPERTIES
 #undef CSQCMODEL_PROPERTY_SCALED
 #undef CSQCMODEL_PROPERTY
+#undef CSQCMODEL_ENDIF
+#undef CSQCMODEL_IF
 
 float CSQCModel_Send(entity to, float sf)
 {
+       // some nice flags for CSQCMODEL_IF
+       float isplayer = (self.flags & FL_CLIENT);
+       float islocalplayer = (self == to);
+       float isnolocalplayer = (isplayer && (self != to));
+
        WriteByte(MSG_ENTITY, ENT_CLIENT_MODEL);
        WriteShort(MSG_ENTITY, sf);
 
+#define CSQCMODEL_IF(cond) if(cond) {
+#define CSQCMODEL_ENDIF }
 #define CSQCMODEL_PROPERTY(flag,r,w,f) \
        if(sf & flag) \
        { \
@@ -43,12 +54,19 @@ float CSQCModel_Send(entity to, float sf)
        ALLPROPERTIES
 #undef CSQCMODEL_PROPERTY_SCALED
 #undef CSQCMODEL_PROPERTY
+#undef CSQCMODEL_ENDIF
+#undef CSQCMODEL_IF
 
        return TRUE;
 }
 
 void CSQCModel_CheckUpdate()
 {
+       // some nice flags for CSQCMODEL_IF
+       float isplayer = (self.flags & FL_CLIENT);
+       float islocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
+       float isnolocalplayer = isplayer; // we set BOTH to 1 here as we need the sendflags
+
        float tmp;
 
        if(self.effects & EF_RESTARTANIM_BIT)
@@ -63,6 +81,8 @@ void CSQCModel_CheckUpdate()
                self.effects &~= EF_TELEPORT_BIT;
        }
 
+#define CSQCMODEL_IF(cond) if(cond) {
+#define CSQCMODEL_ENDIF }
 #define CSQCMODEL_PROPERTY(flag,r,w,f) \
        tmp = self.f; \
        if(tmp != self.csqcmodel_##f) \
@@ -80,6 +100,8 @@ void CSQCModel_CheckUpdate()
        ALLPROPERTIES
 #undef CSQCMODEL_PROPERTY_SCALED
 #undef CSQCMODEL_PROPERTY
+#undef CSQCMODEL_ENDIF
+#undef CSQCMODEL_IF
 }
 
 void CSQCModel_LinkEntity()
index 5751dbdea4e866a2b5edf9ef5fc45f310f4b220b..a5540bb21e1020c8960851ba147cbfe27294ebb6 100644 (file)
@@ -929,8 +929,17 @@ void spawnfunc_worldspawn (void)
                s = "";
                n = tokenize_console(cvar_string("sv_curl_serverpackages"));
                for(i = 0; i < n; ++i)
-                       if(substring(argv(i), -14, -1) != ".serverpackage")
+                       if(substring(argv(i), -14, -1) != "-serverpackage.txt")
+                       if(substring(argv(i), -14, -1) != ".serverpackage") // OLD legacy
                                s = strcat(s, " ", argv(i));
+               fd = search_begin("*-serverpackage.txt", TRUE, FALSE);
+               if(fd >= 0)
+               {
+                       j = search_getsize(fd);
+                       for(i = 0; i < j; ++i)
+                               s = strcat(s, " ", search_getfilename(fd, i));
+                       search_end(fd);
+               }
                fd = search_begin("*.serverpackage", TRUE, FALSE);
                if(fd >= 0)
                {