Posted: Thu Apr 07, 2016 4:36 pm
All above code was written for CS:GO. What game do you run?
https://forums.sourcepython.com/
iPlayer wrote:Try thisSyntax: Select all
from filters.recipients import RecipientFilter
# ...
@PreHook(send_user_message)
def pre_send_user_message(args):
args[1] = RecipientFilter() # If we don't pass any filters, this RecipientFilter will target all existing players
# ...
iPlayer wrote:decompile, try this (props to Ayuto for original code)Syntax: Select all
from commands.say import SayCommand
from memory import Convention, DataType, get_object_pointer, make_object
from memory.hooks import PreHook
from messages import SayText2
from engines.server import engine_server
from messages import UserMessage
from _messages import ProtobufMessage
saytext2_index = UserMessage(RecipientFilter(), 'SayText2').message_index
# virtual void SendUserMessage( IRecipientFilter &filter, int message, const google: :p rotobuf::Message &msg ) = 0;
send_user_message = get_object_pointer(engine_server).make_virtual_function(
45,
Convention.THISCALL,
[DataType.POINTER, DataType.POINTER, DataType.INT, DataType.POINTER],
DataType.VOID
)
@PreHook(send_user_message)
def pre_send_user_message(args):
message_index = args[2]
if message_index != saytext2_index:
return
buffer = make_object(ProtobufMessage, args[3])
player_name = buffer.get_repeated_string('params', 0)
message = buffer.get_repeated_string('params', 1)
buffer.set_string('msg_name', "\x02{} \x01says: \x10{}".format(player_name, message))
@SayCommand("!test")
def say_test(command, index, team_only):
print("Issued !test by (index={})".format(index))
Syntax: Select all
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python
from engines.server import engine_server
from filters.recipients import BaseRecipientFilter
from bitbuffers import BitBufferWrite
from bitbuffers import BitBufferRead
import memory
from memory import Convention
from memory import DataType
from memory.hooks import PreHook
from memory.hooks import PostHook
# =============================================================================
# >> GLOBAL VARIABLES
# =============================================================================
engine_server_ptr = memory.get_object_pointer(engine_server)
# CVEngineServer::UserMessageBegin(IRecipientFilter *, int)
UserMessageBegin = engine_server_ptr.make_virtual_function(
43,
Convention.THISCALL,
[DataType.POINTER, DataType.POINTER, DataType.INT],
DataType.POINTER
)
# CVEngineServer::MessageEnd(void)
MessageEnd = engine_server_ptr.make_virtual_function(
44,
Convention.THISCALL,
[DataType.POINTER],
DataType.VOID
)
user_message_data = None
# =============================================================================
# >> HOOKS
# =============================================================================
@PostHook(UserMessageBegin)
def post_user_message_begin(args, return_value):
global user_message_data
user_message_data = (
memory.make_object(BaseRecipientFilter, args[1]),
args[2],
memory.make_object(BitBufferWrite, return_value))
@PreHook(MessageEnd)
def pre_message_end(args):
# This happens when we initialize our hooks, while a user message is
# currently being created
if user_message_data is None:
return
recipients, message_index, buffer = user_message_data
on_user_message_created(
recipients, message_index, BitBufferRead(buffer), buffer)
# =============================================================================
# >> TEST
# =============================================================================
from messages import get_message_index
saytext2_index = get_message_index('SayText2')
def on_user_message_created(
recipients, message_index, buffer_read, buffer_write):
if message_index != saytext2_index:
return
index = buffer_read.read_byte()
chat = buffer_read.read_byte()
message = buffer_read.read_string()
param1 = buffer_read.read_string()
param2_bits = buffer_read.num_bits_read
param2 = buffer_read.read_string()
param3 = buffer_read.read_string()
param4 = buffer_read.read_string()
print(index, chat, message, param1, param2, param3, param4)
# Seek to the param2 bit. At that bit the actual message is stored, which
# we want to modify.
buffer_write.seek_to_bit(param2_bits)
new_message = 'Hello world!'
buffer_write.write_string(new_message)
if len(new_message) != len(param2):
# We need to rewrite the buffer, because the user message might be
# corrupt now :(
buffer_write.write_string(param3)
buffer_write.write_string(param4)