From fd05c2419c3a1bed62b7c37004fbe1f224412c55 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Wed, 1 Sep 2021 22:11:30 +0200 Subject: [PATCH] Minor cleanup of SendFlags assignments, fix for 'sv respawn_ents' affecting players. --- src/gs-entbase/server/ambient_generic.qc | 4 +- src/gs-entbase/server/basemonster.qc | 2 +- src/gs-entbase/server/env_laser.qc | 20 ++----- src/gs-entbase/server/prop_door_rotating.qc | 2 +- src/gs-entbase/shared/baseentity.h | 1 + src/gs-entbase/shared/baseentity.qc | 35 ++++++++---- src/gs-entbase/shared/basevehicle.h | 2 - src/gs-entbase/shared/basevehicle.qc | 10 ++-- src/gs-entbase/shared/env_projectedtexture.qc | 12 ++--- src/gs-entbase/shared/func_monitor.qc | 31 +++++------ src/gs-entbase/shared/info_particle_system.qc | 15 ++---- src/gs-entbase/shared/light_dynamic.qc | 15 ++---- src/gs-entbase/shared/trigger_camera.qc | 18 ++----- src/shared/player.h | 1 + src/shared/player.qc | 53 ++++++++++++------- src/shared/spectator.qc | 10 ++-- 16 files changed, 110 insertions(+), 121 deletions(-) diff --git a/src/gs-entbase/server/ambient_generic.qc b/src/gs-entbase/server/ambient_generic.qc index eb12d38b..3382d504 100644 --- a/src/gs-entbase/server/ambient_generic.qc +++ b/src/gs-entbase/server/ambient_generic.qc @@ -129,7 +129,7 @@ ambient_generic::UseLoop(entity act, int state) } m_iToggleSwitch = 1 - m_iToggleSwitch; - SendFlags |= AG_SAMPLE; + SetSendFlags(AG_SAMPLE); } void @@ -153,7 +153,7 @@ ambient_generic::Respawn(void) } Trigger = UseLoop; - SendFlags |= AG_SAMPLE; + SetSendFlags(AG_SAMPLE); } } diff --git a/src/gs-entbase/server/basemonster.qc b/src/gs-entbase/server/basemonster.qc index 69ce2648..ac9fbbf0 100644 --- a/src/gs-entbase/server/basemonster.qc +++ b/src/gs-entbase/server/basemonster.qc @@ -36,7 +36,7 @@ void CBaseMonster::AnimPlay(float seq) { /* forces a client-side update */ - SendFlags |= BASEFL_CHANGED_FRAME; + SetSendFlags(BASEFL_CHANGED_FRAME); SetFrame(seq); m_flAnimTime = time + frameduration(modelindex, frame); diff --git a/src/gs-entbase/server/env_laser.qc b/src/gs-entbase/server/env_laser.qc index e0ac5d63..d41ff104 100644 --- a/src/gs-entbase/server/env_laser.qc +++ b/src/gs-entbase/server/env_laser.qc @@ -67,7 +67,7 @@ class env_laser:CBaseTrigger virtual void(void) think; virtual void(entity, int) Trigger; virtual void(void) Respawn; - virtual void(void) ParentUpdate; + virtual void(void) EvaluateEntity; virtual float(entity, float) SendEntity; virtual void(string, string) SpawnKey; }; @@ -162,31 +162,21 @@ env_laser::SendEntity(entity ePEnt, float fChanged) } void -env_laser::ParentUpdate(void) +env_laser::EvaluateEntity(void) { /* FIXME: Check our fields for networking */ if (origin != net_origin) { - SendFlags |= ENVLASER_CHANGED_ORIGIN; + SetSendFlags(ENVLASER_CHANGED_ORIGIN); net_origin = origin; } if (angles != net_angles) { - SendFlags |= ENVLASER_CHANGED_ANGLES; + SetSendFlags(ENVLASER_CHANGED_ANGLES); net_angles = angles; } if (m_iState != m_iStateOld) { - SendFlags |= ENVLASER_CHANGED_STATE; + SetSendFlags(ENVLASER_CHANGED_STATE); m_iStateOld = m_iState; } - - if (m_parent) { - entity p = find(world, ::targetname, m_parent); - - if (!p) { - return; - } - - SetOrigin(p.origin); - } } void diff --git a/src/gs-entbase/server/prop_door_rotating.qc b/src/gs-entbase/server/prop_door_rotating.qc index c7a2d516..ed918fb1 100644 --- a/src/gs-entbase/server/prop_door_rotating.qc +++ b/src/gs-entbase/server/prop_door_rotating.qc @@ -87,7 +87,7 @@ prop_door_rotating::Interact(void) m_iValue = 1 - m_iValue; frame = 1; frame1time = 0.0f; - SendFlags |= BASEFL_CHANGED_FRAME; + SetSendFlags(BASEFL_CHANGED_FRAME); if (m_iValue) think = TurnAway; diff --git a/src/gs-entbase/shared/baseentity.h b/src/gs-entbase/shared/baseentity.h index 47ad157b..a36f7063 100644 --- a/src/gs-entbase/shared/baseentity.h +++ b/src/gs-entbase/shared/baseentity.h @@ -79,6 +79,7 @@ class CBaseEntity #endif /* we only provide these for networked keys, so we can send updates */ + virtual void(float) SetSendFlags; virtual void(float) SetEffects; virtual void(float) SetFrame; virtual void(string) SetModel; diff --git a/src/gs-entbase/shared/baseentity.qc b/src/gs-entbase/shared/baseentity.qc index e2194d3b..a3835f3c 100644 --- a/src/gs-entbase/shared/baseentity.qc +++ b/src/gs-entbase/shared/baseentity.qc @@ -388,11 +388,6 @@ CBaseEntity::Initialized(void) { } -void -CBaseEntity::CBaseEntity(void) -{ -} - /* our EV_SENTENCE event */ void CBaseEntity_ParseSentence(void) @@ -688,7 +683,7 @@ CBaseEntity::EvaluateEntity(void) * predict when origin/angle might change */ if (net_origin != origin) { net_origin = origin; - SendFlags |= BASEFL_CHANGED_ORIGIN; + SetSendFlags(BASEFL_CHANGED_ORIGIN); } if (net_angles != angles) { angles[0] = Math_FixDelta(angles[0]); @@ -696,11 +691,11 @@ CBaseEntity::EvaluateEntity(void) angles[2] = Math_FixDelta(angles[2]); net_angles = angles; - SendFlags |= BASEFL_CHANGED_ANGLES; + SetSendFlags(BASEFL_CHANGED_ANGLES); } if (net_velocity != velocity) { net_velocity = velocity; - SendFlags |= BASEFL_CHANGED_VELOCITY; + SetSendFlags(BASEFL_CHANGED_VELOCITY); } } @@ -759,10 +754,19 @@ CBaseEntity::Hide(void) SetMovetype(MOVETYPE_NONE); takedamage = DAMAGE_NO; } +#endif +/* +============ +CBaseEntity::CBaseEntity + +client doesn't have to do a whole lot here +============ +*/ void CBaseEntity::CBaseEntity(void) { +#ifdef SERVER /* Not in Deathmatch */ if (spawnflags & 2048) { if (cvar("sv_playerslots") > 1) { @@ -771,7 +775,9 @@ CBaseEntity::CBaseEntity(void) } } - identity = 1; + identity = 1; /* .identity is a global ent field we abuse to let find() calls + reliably know that those are CBaseEntity class-based */ + effects |= EF_NOSHADOW; scale = 1.0f; @@ -804,8 +810,8 @@ CBaseEntity::CBaseEntity(void) if (m_oldModel != "") { precache_model(m_oldModel); } -} #endif +} /* we want to really use those set functions because they'll notify of any * networking related changes. otherwise we'll have to keep track of copies @@ -965,6 +971,15 @@ CBaseEntity::SetRenderColor(vector newColor) } #endif +/* +============ +CBaseEntity::SpawnKey + +note that the engine still likes to try and map key/value +pairs on its own, but we can at least undo some of that in +here if needed +============ +*/ void CBaseEntity::SpawnKey(string strKey, string strValue) { diff --git a/src/gs-entbase/shared/basevehicle.h b/src/gs-entbase/shared/basevehicle.h index 96674a2f..8bcb5814 100644 --- a/src/gs-entbase/shared/basevehicle.h +++ b/src/gs-entbase/shared/basevehicle.h @@ -1,6 +1,4 @@ -.int m_iVehNum; - class CBaseVehicle:CBaseTrigger { int m_iVehicleFlags; diff --git a/src/gs-entbase/shared/basevehicle.qc b/src/gs-entbase/shared/basevehicle.qc index b63602f1..bfa1905b 100644 --- a/src/gs-entbase/shared/basevehicle.qc +++ b/src/gs-entbase/shared/basevehicle.qc @@ -107,7 +107,7 @@ CBaseVehicle::EvaluateEntity(void) * predict when origin/angle might change */ if (net_origin != origin) { net_origin = origin; - SendFlags |= VEHFL_CHANGED_ORIGIN; + SetSendFlags(VEHFL_CHANGED_ORIGIN); } if (net_angles != angles) { angles[0] = Math_FixDelta(angles[0]); @@ -115,11 +115,11 @@ CBaseVehicle::EvaluateEntity(void) angles[2] = Math_FixDelta(angles[2]); net_angles = angles; - SendFlags |= VEHFL_CHANGED_ANGLES; + SetSendFlags(VEHFL_CHANGED_ANGLES); } if (net_velocity != velocity) { net_velocity = velocity; - SendFlags |= VEHFL_CHANGED_VELOCITY; + SetSendFlags(VEHFL_CHANGED_VELOCITY); } } @@ -227,7 +227,7 @@ CBaseVehicle::PlayerEnter(base_player pl) pl.flags |= FL_INVEHICLE; #ifdef SERVER - SendFlags |= VEHFL_CHANGED_DRIVER; + SetSendFlags(VEHFL_CHANGED_DRIVER); #endif } @@ -247,7 +247,7 @@ CBaseVehicle::PlayerLeave(base_player pl) m_eDriver = __NULL__; #ifdef SERVER - SendFlags |= VEHFL_CHANGED_DRIVER; + SetSendFlags(VEHFL_CHANGED_DRIVER); #endif } diff --git a/src/gs-entbase/shared/env_projectedtexture.qc b/src/gs-entbase/shared/env_projectedtexture.qc index bc793e13..6a3539a0 100644 --- a/src/gs-entbase/shared/env_projectedtexture.qc +++ b/src/gs-entbase/shared/env_projectedtexture.qc @@ -249,27 +249,27 @@ env_projectedtexture::Input(entity eAct, string strInput, string strData) switch (strInput) { case "LightColor": m_vecLight = stov(strData); - SendFlags |= PRTEXFL_CHANGED_LIGHT; + SetSendFlags(PRTEXFL_CHANGED_LIGHT); break; case "SetNearZ": m_flNearZ = stof(strData); - SendFlags |= PRTEXFL_CHANGED_NEARZ; + SetSendFlags(PRTEXFL_CHANGED_NEARZ); break; case "SetFarZ": m_flFarZ = stof(strData); - SendFlags |= PRTEXFL_CHANGED_FARZ; + SetSendFlags(PRTEXFL_CHANGED_FARZ); break; case "SetLightStyle": m_flStyle = stof(strData); - SendFlags |= PRTEXFL_CHANGED_STYLE; + SetSendFlags(PRTEXFL_CHANGED_STYLE); break; case "SpotlightTexture": m_strTextureName = strData; - SendFlags |= PRTEXFL_CHANGED_TEXTURE; + SetSendFlags(PRTEXFL_CHANGED_TEXTURE); break; case "SetPattern": m_strPattern = strData; - SendFlags |= PRTEXFL_CHANGED_PATTERN; + SetSendFlags(PRTEXFL_CHANGED_PATTERN); break; case "TurnOn": Trigger(eAct, TRIG_ON); diff --git a/src/gs-entbase/shared/func_monitor.qc b/src/gs-entbase/shared/func_monitor.qc index 7350fbf4..22dc6b87 100644 --- a/src/gs-entbase/shared/func_monitor.qc +++ b/src/gs-entbase/shared/func_monitor.qc @@ -97,7 +97,7 @@ class func_monitor:CBaseTrigger virtual void(float) ReceiveEntity; #else virtual void(void) Respawn; - virtual void(void) ParentUpdate; + virtual void(void) EvaluateEntity; virtual float(entity, float) SendEntity; virtual void(string, string) SpawnKey; virtual void(entity, int) Trigger; @@ -221,18 +221,11 @@ func_monitor::SendEntity(entity ePEnt, float flFlags) } void -func_monitor::ParentUpdate(void) +func_monitor::EvaluateEntity(void) { if (net_origin != origin) { net_origin = origin; - SendFlags |= MONITORFL_CHANGED_BASE; - } - - if (m_parent) { - entity p = find(world, ::targetname, m_parent); - - if (p) - SetOrigin(p.origin); + SetSendFlags(MONITORFL_CHANGED_BASE); } /* this monitor is disabled */ @@ -251,35 +244,35 @@ func_monitor::ParentUpdate(void) if (m_vecCamOrigin != viewer.origin) { m_vecCamOrigin = viewer.origin; - SendFlags |= MONITORFL_CHANGED_ORIGIN; + SetSendFlags(MONITORFL_CHANGED_ORIGIN); } if (m_vecCamAngles != viewer.angles) { m_vecCamAngles = viewer.angles; - SendFlags |= MONITORFL_CHANGED_ANGLES; + SetSendFlags(MONITORFL_CHANGED_ANGLES); } if (m_flFOV != viewer.m_flFOV) { m_flFOV = viewer.m_flFOV; - SendFlags |= MONITORFL_CHANGED_FOV; + SetSendFlags(MONITORFL_CHANGED_FOV); } if (m_iUseSAR != viewer.m_iUseSAR) { m_iUseSAR = viewer.m_iUseSAR; - SendFlags |= MONITORFL_CHANGED_ASPECT; + SetSendFlags(MONITORFL_CHANGED_ASPECT); } if (m_vecFogColor != viewer.m_vecFogColor) { m_vecFogColor = viewer.m_vecFogColor; - SendFlags |= MONITORFL_CHANGED_FOGCOLOR; + SetSendFlags(MONITORFL_CHANGED_FOGCOLOR); } if (m_flFogStart != viewer.m_flFogStart) { m_flFogStart = viewer.m_flFogStart; - SendFlags |= MONITORFL_CHANGED_FOGSTART; + SetSendFlags(MONITORFL_CHANGED_FOGSTART); } if (m_flFogEnd != viewer.m_flFogEnd) { m_flFogEnd = viewer.m_flFogEnd; - SendFlags |= MONITORFL_CHANGED_FOGEND; + SetSendFlags(MONITORFL_CHANGED_FOGEND); } if (m_flFogEnd != viewer.m_flFogEnd) { m_flFogEnd = viewer.m_flFogEnd; - SendFlags |= MONITORFL_CHANGED_STATUS; + SetSendFlags(MONITORFL_CHANGED_STATUS); } } @@ -297,7 +290,7 @@ func_monitor::Trigger(entity act, int state) m_iValue = 1 - m_iValue; } - SendFlags |= MONITORFL_CHANGED_STATUS; + SetSendFlags(MONITORFL_CHANGED_STATUS); } void diff --git a/src/gs-entbase/shared/info_particle_system.qc b/src/gs-entbase/shared/info_particle_system.qc index 82436586..b6bc5881 100644 --- a/src/gs-entbase/shared/info_particle_system.qc +++ b/src/gs-entbase/shared/info_particle_system.qc @@ -65,7 +65,7 @@ class info_particle_system:CBaseTrigger virtual void(float) ReceiveEntity; #else virtual void(void) Respawn; - virtual void(void) ParentUpdate; + virtual void(void) EvaluateEntity; virtual float(entity, float) SendEntity; virtual void(string, string) SpawnKey; virtual void(entity, int) Trigger; @@ -161,23 +161,16 @@ info_particle_system::SendEntity(entity ePEnt, float flFlags) } void -info_particle_system::ParentUpdate(void) +info_particle_system::EvaluateEntity(void) { if (net_origin != origin) { net_origin = origin; - SendFlags |= PARTSYSFL_CHANGED_ORIGIN; + SetSendFlags(PARTSYSFL_CHANGED_ORIGIN); } if (net_angles != angles) { net_angles = angles; - SendFlags |= PARTSYSFL_CHANGED_ANGLES; - } - - if (m_parent) { - entity p = find(world, ::targetname, m_parent); - - if (p) - SetOrigin(p.origin); + SetSendFlags(PARTSYSFL_CHANGED_ANGLES); } } diff --git a/src/gs-entbase/shared/light_dynamic.qc b/src/gs-entbase/shared/light_dynamic.qc index 0b25c94c..90978a33 100644 --- a/src/gs-entbase/shared/light_dynamic.qc +++ b/src/gs-entbase/shared/light_dynamic.qc @@ -94,7 +94,7 @@ class light_dynamic:CBaseTrigger virtual void(void) Respawn; virtual float(entity, float) SendEntity; virtual void(entity, string, string) Input; - virtual void(void) ParentUpdate; + virtual void(void) EvaluateEntity; #endif }; @@ -182,22 +182,15 @@ light_dynamic::Initialized(void) } #else void -light_dynamic::ParentUpdate(void) +light_dynamic::EvaluateEntity(void) { if (net_origin != origin) { net_origin = origin; - SendFlags |= DLIGHTFL_CHANGED_ORIGIN; + SetSendFlags(DLIGHTFL_CHANGED_ORIGIN); } if (net_angles != angles) { net_angles = angles; - SendFlags |= DLIGHTFL_CHANGED_ANGLES; - } - - if (m_parent) { - entity p = find(world, ::targetname, m_parent); - - if (p) - SetOrigin(p.origin); + SetSendFlags(DLIGHTFL_CHANGED_ANGLES); } } diff --git a/src/gs-entbase/shared/trigger_camera.qc b/src/gs-entbase/shared/trigger_camera.qc index b49a8fa5..baf0dd34 100644 --- a/src/gs-entbase/shared/trigger_camera.qc +++ b/src/gs-entbase/shared/trigger_camera.qc @@ -66,7 +66,7 @@ class trigger_camera:CBaseTrigger virtual void(void) Respawn; virtual void(string, string) SpawnKey; virtual float(entity, float) SendEntity; - virtual void(void) ParentUpdate; + virtual void(void) EvaluateEntity; #endif }; @@ -139,7 +139,7 @@ trigger_camera::SendEntity(entity ePEnt, float flFlags) } void -trigger_camera::ParentUpdate(void) +trigger_camera::EvaluateEntity(void) { entity t = find(world, ::targetname, m_strAimAt); if (t) { @@ -148,19 +148,11 @@ trigger_camera::ParentUpdate(void) if (net_origin != origin) { net_origin = origin; - SendFlags |= OCAMFL_CHANGED_ORIGIN; + SetSendFlags(OCAMFL_CHANGED_ORIGIN); } if (net_angles != angles) { net_angles = angles; - SendFlags |= OCAMFL_CHANGED_ANGLES; - } - - /* camera don't support parenting when we're following paths! */ - if (m_parent && !m_strMoveTo) { - entity p = find(world, ::targetname, m_parent); - - if (p) - SetOrigin(p.origin); + SetSendFlags(OCAMFL_CHANGED_ANGLES); } } @@ -250,7 +242,7 @@ trigger_camera::Trigger(entity act, int state) target = m_strMoveTo; NextPath(); GoToTarget(); - SendFlags |= OCAMFL_CHANGED_ORIGIN | OCAMFL_CHANGED_ANGLES | OCAMFL_CHANGED_WAIT; + SetSendFlags(OCAMFL_CHANGED_ORIGIN | OCAMFL_CHANGED_ANGLES | OCAMFL_CHANGED_WAIT); } void diff --git a/src/shared/player.h b/src/shared/player.h index cfaf184b..0fdcc141 100644 --- a/src/shared/player.h +++ b/src/shared/player.h @@ -105,6 +105,7 @@ base_player float underwater_dmg; float pain_time; + virtual void(void) Respawn; virtual void(void) EvaluateEntity; virtual float(entity, float) SendEntity; #endif diff --git a/src/shared/player.qc b/src/shared/player.qc index 26821891..7490bd50 100644 --- a/src/shared/player.qc +++ b/src/shared/player.qc @@ -174,6 +174,19 @@ base_player::PredictPostFrame(void) ROLL_BACK(vehicle); } #else +/* +================= +base_player::Respawn + +it'd be pretty unfortunate if 'sv respawn_ents' or something called this +================= +*/ +void +base_player::Respawn(void) +{ + /* make sure nothing happens here */ +} + /* ================= base_player::EvaluateEntity @@ -186,64 +199,64 @@ at the top of player::EvaluateEntity void base_player::EvaluateEntity(void) { - SendFlags |= PLAYER_KEEPALIVE; + SetSendFlags(PLAYER_KEEPALIVE); if (ATTR_CHANGED(modelindex)) - SendFlags |= PLAYER_MODELINDEX; + SetSendFlags(PLAYER_MODELINDEX); if (VEC_CHANGED(origin, 0)) - SendFlags |= PLAYER_ORIGIN; + SetSendFlags(PLAYER_ORIGIN); if (VEC_CHANGED(origin, 1)) - SendFlags |= PLAYER_ORIGIN; + SetSendFlags(PLAYER_ORIGIN); if (VEC_CHANGED(origin, 2)) - SendFlags |= PLAYER_ORIGIN_Z; + SetSendFlags(PLAYER_ORIGIN_Z); if (VEC_CHANGED(v_angle, 0)) - SendFlags |= PLAYER_ANGLES_X; + SetSendFlags(PLAYER_ANGLES_X); if (VEC_CHANGED(angles, 1)) - SendFlags |= PLAYER_ANGLES_Y; + SetSendFlags(PLAYER_ANGLES_Y); if (ATTR_CHANGED(colormap)) - SendFlags |= PLAYER_COLORMAP; + SetSendFlags(PLAYER_COLORMAP); if (VEC_CHANGED(velocity, 0)) - SendFlags |= PLAYER_VELOCITY; + SetSendFlags(PLAYER_VELOCITY); if (VEC_CHANGED(velocity, 1)) - SendFlags |= PLAYER_VELOCITY; + SetSendFlags(PLAYER_VELOCITY); if (VEC_CHANGED(velocity, 2)) - SendFlags |= PLAYER_VELOCITY_Z; + SetSendFlags(PLAYER_VELOCITY_Z); if (ATTR_CHANGED(flags)) - SendFlags |= PLAYER_FLAGS; + SetSendFlags(PLAYER_FLAGS); if (ATTR_CHANGED(gflags)) - SendFlags |= PLAYER_FLAGS; + SetSendFlags(PLAYER_FLAGS); if (ATTR_CHANGED(pmove_flags)) - SendFlags |= PLAYER_FLAGS; + SetSendFlags(PLAYER_FLAGS); if (ATTR_CHANGED(activeweapon)) - SendFlags |= PLAYER_WEAPON; + SetSendFlags(PLAYER_WEAPON); if (ATTR_CHANGED(g_items)) - SendFlags |= PLAYER_ITEMS; + SetSendFlags(PLAYER_ITEMS); if (ATTR_CHANGED(health)) - SendFlags |= PLAYER_HEALTH; + SetSendFlags(PLAYER_HEALTH); if (ATTR_CHANGED(armor)) - SendFlags |= PLAYER_ARMOR; + SetSendFlags(PLAYER_ARMOR); if (ATTR_CHANGED(movetype)) - SendFlags |= PLAYER_MOVETYPE; + SetSendFlags(PLAYER_MOVETYPE); if (ATTR_CHANGED(view_ofs)) - SendFlags |= PLAYER_VIEWOFS; + SetSendFlags(PLAYER_VIEWOFS); SAVE_STATE(modelindex); SAVE_STATE(origin); diff --git a/src/shared/spectator.qc b/src/shared/spectator.qc index 7690ba1b..6b6a846b 100644 --- a/src/shared/spectator.qc +++ b/src/shared/spectator.qc @@ -339,19 +339,19 @@ spectator::PostFrame(void) /* check for which values have changed in this frame and announce to network said changes */ if (origin != origin_net) - SendFlags |= SPECFL_ORIGIN; + SetSendFlags(SPECFL_ORIGIN); if (velocity != velocity_net) - SendFlags |= SPECFL_VELOCITY; + SetSendFlags(SPECFL_VELOCITY); if (spec_ent != spec_ent_net) - SendFlags |= SPECFL_TARGET; + SetSendFlags(SPECFL_TARGET); if (spec_mode != spec_mode_net) - SendFlags |= SPECFL_MODE; + SetSendFlags(SPECFL_MODE); if (spec_flags != spec_flags_net) - SendFlags |= SPECFL_FLAGS; + SetSendFlags(SPECFL_FLAGS); origin_net = origin; velocity_net = velocity;