From 783312ed7572286c933e56f764ad8f99b7f29241 Mon Sep 17 00:00:00 2001 From: xen Date: Thu, 14 Jul 2022 11:21:36 +0200 Subject: [PATCH] make some more entities non-edicts --- extension.cpp | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/extension.cpp b/extension.cpp index 722bed1..20fe0a9 100644 --- a/extension.cpp +++ b/extension.cpp @@ -308,21 +308,52 @@ DETOUR_DECL_MEMBER1(DETOUR_InputTestActivator, void, inputdata_t *, inputdata) DETOUR_MEMBER_CALL(DETOUR_InputTestActivator)(inputdata); } +static constexpr int s_iNonEdicts = 12; + +const char *pszNonEdicts[s_iNonEdicts] = +{ + "ambient_generic", + "game_score", + "game_text", + "game_ui", + "logic_auto", // bruh + "phys_thruster", + "phys_keepupright", + "player_speedmod", + "player_weaponstrip", + "point_clientcommand", + "point_servercommand", + "point_teleport", +}; + DETOUR_DECL_MEMBER1(DETOUR_PostConstructor, void, const char *, szClassname) { + CBaseEntity *pEntity = (CBaseEntity *)this; + + static datamap_t *pMap = gamehelpers->GetDataMap(pEntity); + static typedescription_t *td = gamehelpers->FindInDataMap(pMap, "m_iEFlags"); + static uint32 offset = td->fieldOffset[TD_OFFSET_NORMAL]; + if(strncasecmp(szClassname, "info_player_", 12) == 0) { - CBaseEntity *pEntity = (CBaseEntity *)this; - - datamap_t *pMap = gamehelpers->GetDataMap(pEntity); - typedescription_t *td = gamehelpers->FindInDataMap(pMap, "m_iEFlags"); - // Spawnpoints don't need edicts... - *(uint32 *)((intptr_t)pEntity + td->fieldOffset[TD_OFFSET_NORMAL]) |= (1<<9); // EFL_SERVER_ONLY + *(uint32 *)((intptr_t)pEntity + offset) |= (1<<9); // EFL_SERVER_ONLY // Only CT spawnpoints if(strcasecmp(szClassname, "info_player_terrorist") == 0) szClassname = "info_player_counterterrorist"; + + DETOUR_MEMBER_CALL(DETOUR_PostConstructor)(szClassname); + return; + } + + // Remove edicts for a bunch of entities that REALLY don't need them + for (int i = 0; i < s_iNonEdicts; i++) + { + if (!strcasecmp(szClassname, pszNonEdicts[i])) + { + *(uint32 *)((intptr_t)pEntity + offset) |= (1<<9); // EFL_SERVER_ONLY + } } DETOUR_MEMBER_CALL(DETOUR_PostConstructor)(szClassname);