From d25aead1a7a2f2e01f721ec3f25a30cd4ec7e5e2 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Tue, 3 Mar 2020 22:44:35 +0100 Subject: [PATCH] Added 'shadows' key to CBaseEntity. --- src/gs-entbase/client/baseentity.cpp | 15 +++++++++++++++ src/gs-entbase/server/baseentity.cpp | 20 ++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/gs-entbase/client/baseentity.cpp b/src/gs-entbase/client/baseentity.cpp index 69596b5a..5feb3554 100644 --- a/src/gs-entbase/client/baseentity.cpp +++ b/src/gs-entbase/client/baseentity.cpp @@ -42,8 +42,16 @@ class CBaseEntity virtual void() Initialized; virtual void(string, string) SpawnKey; virtual void(float flChanged) ReadEntity; + virtual float(void) predraw; }; +float CBaseEntity::predraw(void) +{ + frame1time += clframetime; + addentity(this); + return PREDRAW_NEXT; +} + void CBaseEntity::ReadEntity(float flChanged) { if (flChanged & BASEFL_CHANGED_ORIGIN) { @@ -78,6 +86,7 @@ void CBaseEntity::ReadEntity(float flChanged) maxs[2] = readcoord(); } if (flChanged & BASEFL_CHANGED_FRAME) { + frame1time = 0.0; frame = readbyte(); } if (flChanged & BASEFL_CHANGED_SKIN) { @@ -103,6 +112,11 @@ void CBaseEntity::ReadEntity(float flChanged) void CBaseEntity::SpawnKey(string strField, string strKey) { switch (strField) { + case "shadows": + if (stof(strKey) == 1) { + effects &= ~EF_NOSHADOW; + } + break; case "targetname": targetname = strKey; break; @@ -141,6 +155,7 @@ void CBaseEntity::SpawnKey(string strField, string strKey) void CBaseEntity::Init(void) { + effects |= EF_NOSHADOW; for (int i = 0; i < (tokenize(__fullspawndata) - 1); i += 2) { //dprint(sprintf("SpawnData: %s %s\n", argv(i), argv(i+1))); SpawnKey(argv(i), argv(i+1)); diff --git a/src/gs-entbase/server/baseentity.cpp b/src/gs-entbase/server/baseentity.cpp index 48d02683..ae2671ab 100644 --- a/src/gs-entbase/server/baseentity.cpp +++ b/src/gs-entbase/server/baseentity.cpp @@ -77,6 +77,10 @@ class CBaseEntity /* Make sure StartFrame calls this */ float CBaseEntity::SendEntity(entity ePEnt, float fChanged) { + if (!modelindex) { + return FALSE; + } + WriteByte(MSG_ENTITY, ENT_ENTITY); WriteFloat(MSG_ENTITY, fChanged); @@ -201,7 +205,11 @@ void CBaseEntity :: CBaseEntity ( void ) gflags |= GF_CANRESPAWN; m_oldModel = Util_FixModel(model); - precache_model(m_oldModel); + + if (m_oldModel != "") { + precache_model(m_oldModel); + } + m_oldSolid = solid; m_oldHealth = health; m_oldOrigin = origin; @@ -211,6 +219,11 @@ void CBaseEntity :: CBaseEntity ( void ) int nfields = tokenize( __fullspawndata ); for ( int i = 1; i < ( nfields - 1 ); i += 2 ) { switch ( argv( i ) ) { + case "shadows": + if (stof(argv( i + 1 )) == 1) { + effects &= ~EF_NOSHADOW; + } + break; case "targetname": m_strTargetName = argv( i + 1 ); targetname = __NULL__; @@ -268,7 +281,10 @@ void CBaseEntity :: Respawn ( void ) origin = m_oldOrigin; angles = m_oldAngle; setorigin( this, origin ); - setmodel( this, model ); + + if (model != "") { + setmodel(this, model); + } } void CBaseEntity :: Hide ( void )