| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 62df379 commit 9cc17b6
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -21,7 +21,6 @@ | |||
| 21 | 21 | from core.version import VERSION | |
| 22 | 22 | # Cvars | |
| 23 | 23 | from cvars import ConVar | |
| 24 | - from cvars import cvar | ||
| 25 | 24 | # Engines | |
| 26 | 25 | from engines.server import server_game_dll | |
| 27 | 26 | # Entities | |
@@ -52,6 +51,7 @@ | |||
| 52 | 51 | from _listeners import on_client_fully_connect_listener_manager | |
| 53 | 52 | from _listeners import on_client_put_in_server_listener_manager | |
| 54 | 53 | from _listeners import on_client_settings_changed_listener_manager | |
| 54 | + from _listeners import on_convar_changed_listener_manager | ||
| 55 | 55 | from _listeners import on_level_init_listener_manager | |
| 56 | 56 | from _listeners import on_level_shutdown_listener_manager | |
| 57 | 57 | from _listeners import on_network_id_validated_listener_manager | |
@@ -166,7 +166,6 @@ | |||
| 166 | 166 | listeners_logger = _sp_logger.listeners | |
| 167 | 167 | ||
| 168 | 168 | on_version_update_listener_manager = ListenerManager() | |
| 169 | - on_convar_changed_listener_manager = ListenerManager() | ||
| 170 | 169 | on_plugin_loaded_manager = ListenerManager() | |
| 171 | 170 | on_plugin_unloaded_manager = ListenerManager() | |
| 172 | 171 | on_plugin_loading_manager = ListenerManager() | |
@@ -600,14 +599,6 @@ def _on_level_shutdown(): | |||
| 600 | 599 | OnLevelEnd._level_initialized = False | |
| 601 | 600 | ||
| 602 | 601 | ||
| 603 | - @PreHook(get_virtual_function(cvar, 'CallGlobalChangeCallbacks')) | ||
| 604 | - def _pre_call_global_change_callbacks(args): | ||
| 605 | - """Called when a ConVar has been changed.""" | ||
| 606 | - convar = make_object(ConVar, args[1]) | ||
| 607 | - old_value = args[2] | ||
| 608 | - on_convar_changed_listener_manager.notify(convar, old_value) | ||
| 609 | - | ||
| 610 | - | ||
| 611 | 602 | def _pre_fire_output(args): | |
| 612 | 603 | """Called when an output is about to be fired.""" | |
| 613 | 604 | if not on_entity_output_listener_manager: | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -30,6 +30,18 @@ | |||
| 30 | 30 | #include "listeners_manager.h" | |
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | + //----------------------------------------------------------------------------- | ||
| 34 | + // External variables. | ||
| 35 | + //----------------------------------------------------------------------------- | ||
| 36 | + extern ICvar* g_pCVar; | ||
| 37 | + | ||
| 38 | + | ||
| 39 | + //----------------------------------------------------------------------------- | ||
| 40 | + // Extern functions | ||
| 41 | + //----------------------------------------------------------------------------- | ||
| 42 | + extern CConVarChangedListenerManager* GetOnConVarChangedListenerManager(); | ||
| 43 | + | ||
| 44 | + | ||
| 33 | 45 | //----------------------------------------------------------------------------- | |
| 34 | 46 | // Adds a callable to the end of the CListenerManager vector. | |
| 35 | 47 | //----------------------------------------------------------------------------- | |
@@ -149,7 +161,38 @@ object CListenerManager::__getitem__(unsigned int index) | |||
| 149 | 161 | ||
| 150 | 162 | void CListenerManager::clear() | |
| 151 | 163 | { | |
| 152 | - m_vecCallables.RemoveAll(); | ||
| 164 | + if (GetCount()) { | ||
| 165 | + m_vecCallables.RemoveAll(); | ||
| 166 | + Finalize(); | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + | ||
| 171 | + //----------------------------------------------------------------------------- | ||
| 172 | + // Convar changed callback. | ||
| 173 | + //----------------------------------------------------------------------------- | ||
| 174 | + void ConVarChangedCallback(IConVar* var, const char* pOldValue, float flOldValue) | ||
| 175 | + { | ||
| 176 | + static CConVarChangedListenerManager* on_convar_changed_listener_manager = GetOnConVarChangedListenerManager(); | ||
| 177 | + CALL_LISTENERS_WITH_MNGR(on_convar_changed_listener_manager, ptr(static_cast<ConVar*>(var)), pOldValue); | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | + | ||
| 181 | + //----------------------------------------------------------------------------- | ||
| 182 | + // Called when the first callback is being registered. | ||
| 183 | + //----------------------------------------------------------------------------- | ||
| 184 | + void CConVarChangedListenerManager::Initialize() | ||
| 185 | + { | ||
| 186 | + g_pCVar->InstallGlobalChangeCallback(ConVarChangedCallback); | ||
| 187 | + } | ||
| 188 | + | ||
| 189 | + | ||
| 190 | + //----------------------------------------------------------------------------- | ||
| 191 | + // Called when the last callback is being unregistered. | ||
| 192 | + //----------------------------------------------------------------------------- | ||
| 193 | + void CConVarChangedListenerManager::Finalize() | ||
| 194 | + { | ||
| 195 | + g_pCVar->RemoveGlobalChangeCallback(ConVarChangedCallback); | ||
| 153 | 196 | } | |
| 154 | 197 | ||
| 155 | 198 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -33,6 +33,8 @@ | |||
| 33 | 33 | #include "utilities/wrap_macros.h" | |
| 34 | 34 | #include "utlvector.h" | |
| 35 | 35 | ||
| 36 | + #include "convar.h" | ||
| 37 | + | ||
| 36 | 38 | ||
| 37 | 39 | //----------------------------------------------------------------------------- | |
| 38 | 40 | // Helper macros. | |
@@ -99,6 +101,17 @@ class CListenerManager: public wrapper<CListenerManager> | |||
| 99 | 101 | }; | |
| 100 | 102 | ||
| 101 | 103 | ||
| 104 | + //----------------------------------------------------------------------------- | ||
| 105 | + // CConVarChangedListenerManager class. | ||
| 106 | + //----------------------------------------------------------------------------- | ||
| 107 | + class CConVarChangedListenerManager: public CListenerManager | ||
| 108 | + { | ||
| 109 | + public: | ||
| 110 | + virtual void Initialize(); | ||
| 111 | + virtual void Finalize(); | ||
| 112 | + }; | ||
| 113 | + | ||
| 114 | + | ||
| 102 | 115 | //----------------------------------------------------------------------------- | |
| 103 | 116 | // Functions | |
| 104 | 117 | //----------------------------------------------------------------------------- | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -65,6 +65,12 @@ DEFINE_MANAGER_ACCESSOR(OnServerOutput) | |||
| 65 | 65 | DEFINE_MANAGER_ACCESSOR(OnPlayerRunCommand) | |
| 66 | 66 | DEFINE_MANAGER_ACCESSOR(OnButtonStateChanged) | |
| 67 | 67 | ||
| 68 | + static CConVarChangedListenerManager s_OnConVarChanged; | ||
| 69 | + CConVarChangedListenerManager* GetOnConVarChangedListenerManager() | ||
| 70 | + { | ||
| 71 | + return &s_OnConVarChanged; | ||
| 72 | + } | ||
| 73 | + | ||
| 68 | 74 | ||
| 69 | 75 | //----------------------------------------------------------------------------- | |
| 70 | 76 | // Forward declarations. | |
@@ -142,6 +148,8 @@ void export_listener_managers(scope _listeners) | |||
| 142 | 148 | _listeners.attr("on_client_put_in_server_listener_manager") = object(ptr(GetOnClientPutInServerListenerManager())); | |
| 143 | 149 | _listeners.attr("on_client_settings_changed_listener_manager") = object(ptr(GetOnClientSettingsChangedListenerManager())); | |
| 144 | 150 | ||
| 151 | + _listeners.attr("on_convar_changed_listener_manager") = object(ptr((CListenerManager *)GetOnConVarChangedListenerManager())); | ||
| 152 | + | ||
| 145 | 153 | _listeners.attr("on_level_init_listener_manager") = object(ptr(GetOnLevelInitListenerManager())); | |
| 146 | 154 | _listeners.attr("on_level_shutdown_listener_manager") = object(ptr(GetOnLevelShutdownListenerManager())); | |
| 147 | 155 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -111,6 +111,7 @@ extern ICvar* g_pCVar; | |||
| 111 | 111 | extern void InitCommands(); | |
| 112 | 112 | extern void ClearAllCommands(); | |
| 113 | 113 | extern PLUGIN_RESULT DispatchClientCommand(edict_t *pEntity, const CCommand &command); | |
| 114 | + extern CConVarChangedListenerManager* GetOnConVarChangedListenerManager(); | ||
| 114 | 115 | ||
| 115 | 116 | //----------------------------------------------------------------------------- | |
| 116 | 117 | // The plugin is a static singleton that is exported as an interface | |
@@ -397,6 +398,9 @@ void CSourcePython::Unload( void ) | |||
| 397 | 398 | DevMsg(1, MSG_PREFIX "Shutting down python...\n"); | |
| 398 | 399 | g_PythonManager.Shutdown(); | |
| 399 | 400 | ||
| 401 | + DevMsg(1, MSG_PREFIX "Clearing convar changed listener...\n"); | ||
| 402 | + GetOnConVarChangedListenerManager()->clear(); | ||
| 403 | + | ||
| 400 | 404 | DevMsg(1, MSG_PREFIX "Unhooking all functions...\n"); | |
| 401 | 405 | GetHookManager()->UnhookAllFunctions(); | |
| 402 | 406 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments