| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent b00879b commit 4c48e52
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -6,18 +6,17 @@ | |||
| 6 | 6 | # ============================================================================= | |
| 7 | 7 | # >> IMPORTS | |
| 8 | 8 | # ============================================================================= | |
| 9 | - # Python | ||
| 10 | - import collections | ||
| 9 | + # Python Imports | ||
| 10 | + from collections import defaultdict | ||
| 11 | 11 | ||
| 12 | - # Source.Python | ||
| 12 | + # Source.Python Imports | ||
| 13 | 13 | # Engines | |
| 14 | 14 | from engines.server import global_vars | |
| 15 | 15 | # Listeners | |
| 16 | - from listeners import OnClientDisconnect | ||
| 16 | + from listeners import on_client_disconnect_listener_manager | ||
| 17 | 17 | # Memory | |
| 18 | - import memory | ||
| 19 | - | ||
| 20 | - from memory.hooks import PreHook | ||
| 18 | + from memory import get_virtual_function | ||
| 19 | + from memory.hooks import HookType | ||
| 21 | 20 | ||
| 22 | 21 | ||
| 23 | 22 | # ============================================================================= | |
@@ -40,8 +39,21 @@ | |||
| 40 | 39 | # ============================================================================= | |
| 41 | 40 | # >> CLASSES | |
| 42 | 41 | # ============================================================================= | |
| 43 | - class _MuteManager(collections.defaultdict): | ||
| 42 | + class _MuteManager(defaultdict): | ||
| 44 | 43 | """A singleton that manages muting players.""" | |
| 44 | + _set_client_listening = None | ||
| 45 | + | ||
| 46 | + @classmethod | ||
| 47 | + def _hook_set_client_listening(cls): | ||
| 48 | + if cls._set_client_listening is not None: | ||
| 49 | + return | ||
| 50 | + | ||
| 51 | + function = get_virtual_function(voice_server, 'SetClientListening') | ||
| 52 | + function.add_hook(HookType.PRE, _pre_set_client_listening) | ||
| 53 | + | ||
| 54 | + cls._set_client_listening = function | ||
| 55 | + | ||
| 56 | + on_client_disconnect_listener_manager.register_listener(_on_client_disconnect) | ||
| 45 | 57 | ||
| 46 | 58 | @staticmethod | |
| 47 | 59 | def _get_receivers(receivers): | |
@@ -75,6 +87,8 @@ def mute_player(self, sender, receivers=None): | |||
| 75 | 87 | that contains the player indexes that shouldn't hear the sender | |
| 76 | 88 | anymore. | |
| 77 | 89 | """ | |
| 90 | + self._hook_set_client_listening() | ||
| 91 | + | ||
| 78 | 92 | for receiver in self._get_receivers(receivers): | |
| 79 | 93 | self[receiver].add(sender) | |
| 80 | 94 | ||
@@ -111,7 +125,6 @@ def is_muted(self, sender, receivers=None): | |||
| 111 | 125 | # ============================================================================= | |
| 112 | 126 | # >> CALLBACKS | |
| 113 | 127 | # ============================================================================= | |
| 114 | - @PreHook(memory.get_virtual_function(voice_server, 'SetClientListening')) | ||
| 115 | 128 | def _pre_set_client_listening(args): | |
| 116 | 129 | """Called before IVoiceServer::SetClientListening is called.""" | |
| 117 | 130 | receiver = args[1] | |
@@ -122,7 +135,6 @@ def _pre_set_client_listening(args): | |||
| 122 | 135 | args[3] = False | |
| 123 | 136 | ||
| 124 | 137 | ||
| 125 | - @OnClientDisconnect | ||
| 126 | 138 | def _on_client_disconnect(index): | |
| 127 | 139 | """Called when a player left the server.""" | |
| 128 | 140 | # Unmute the player, so the next player who gets this index won't be muted | |
| Back | FazBrowse Home | New Git URL |
0 commit comments