Skip to content

Commit 9c44477

Browse files
committed
Fixed issue #149
1 parent fb3afac commit 9c44477

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

addons/source-python/packages/source-python/listeners/_run_command.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
# >> IMPORTS
77
# =============================================================================
88
# Source.Python Imports
9+
# Core
10+
from core import SOURCE_ENGINE_BRANCH
911
# Entities
1012
from entities.hooks import EntityPreHook
1113
from entities.hooks import EntityCondition
@@ -17,6 +19,14 @@
1719
from players.entity import Player
1820
# Memory
1921
from memory import make_object
22+
from memory import get_object_pointer
23+
from memory import get_size
24+
25+
26+
# =============================================================================
27+
# >> CONSTANTS
28+
# =============================================================================
29+
USER_CMD_SIZE = get_size(UserCmd)
2030

2131

2232
# =============================================================================
@@ -29,19 +39,29 @@ def _pre_player_run_command(args):
2939
return
3040

3141
player = make_object(Player, args[0])
32-
user_cmd = make_object(UserCmd, args[1])
42+
43+
# https://github.com/Source-Python-Dev-Team/Source.Python/issues/149
44+
use_rtti_fix = SOURCE_ENGINE_BRANCH == 'tf2' and player.is_fake_client()
45+
if use_rtti_fix:
46+
user_cmd = UserCmd()
47+
user_cmd_ptr = get_object_pointer(user_cmd)
48+
args[1].copy(user_cmd_ptr, USER_CMD_SIZE)
49+
else:
50+
user_cmd = make_object(UserCmd, args[1])
3351

3452
if on_player_run_command_listener_manager:
3553
on_player_run_command_listener_manager.notify(player, user_cmd)
3654

3755
if on_button_state_changed_listener_manager:
3856
_handle_button_state_changed(player, player.buttons, user_cmd.buttons)
3957

58+
if use_rtti_fix:
59+
user_cmd_ptr.copy(args[1], USER_CMD_SIZE)
60+
4061

4162
def _handle_button_state_changed(player, old_buttons, new_buttons):
4263
if old_buttons == new_buttons:
4364
return
4465

4566
on_button_state_changed_listener_manager.notify(
4667
player, old_buttons, new_buttons)
47-

0 commit comments

Comments
 (0)