From 6cd762209ef0993de6e2a7109856a14ad02e21e4 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 2 Dec 2011 09:16:14 +0100 Subject: [PATCH] csqcmodels: make more suitable for using for non-players --- qcsrc/csqcmodel/cl_model.qc | 9 +++++++++ qcsrc/csqcmodel/settings.qh | 10 ++++++---- qcsrc/csqcmodel/sv_model.qc | 22 ++++++++++++++++++++++ qcsrc/server/g_world.qc | 11 ++++++++++- 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/qcsrc/csqcmodel/cl_model.qc b/qcsrc/csqcmodel/cl_model.qc index ad582543c..77f5e2cb0 100644 --- a/qcsrc/csqcmodel/cl_model.qc +++ b/qcsrc/csqcmodel/cl_model.qc @@ -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 diff --git a/qcsrc/csqcmodel/settings.qh b/qcsrc/csqcmodel/settings.qh index 6d5ff53fd..97b5d6613 100644 --- a/qcsrc/csqcmodel/settings.qh +++ b/qcsrc/csqcmodel/settings.qh @@ -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 diff --git a/qcsrc/csqcmodel/sv_model.qc b/qcsrc/csqcmodel/sv_model.qc index b6952f027..bc9ddddef 100644 --- a/qcsrc/csqcmodel/sv_model.qc +++ b/qcsrc/csqcmodel/sv_model.qc @@ -22,18 +22,29 @@ // 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() diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 5751dbdea..a5540bb21 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -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) { -- 2.39.2