Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # =============================================================================
- # >> IMPORTS
- # =============================================================================
- # Source.Python
- from engines.server import engine_server
- from filters.recipients import RecipientFilter
- 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 = (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
- message_index, buffer = user_message_data
- on_user_message_created(message_index, BitBufferRead(buffer), buffer)
- # =============================================================================
- # >> TEST
- # =============================================================================
- from messages import get_message_index
- saytext2_index = get_message_index('SayText2')
- def on_user_message_created(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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement