# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python
from colors import Color
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_bits = buffer_read.num_bits_read
message = buffer_read.read_string()
param1 = buffer_read.read_string()
param2 = buffer_read.read_string()
param3 = buffer_read.read_string()
param4 = buffer_read.read_string()
new_message = "\x01{}[ADMIN] {}: {}{}".format(Color(255, 0, 0), param1, Color(255, 255, 255), param2)
buffer_write.seek_to_bit(message_bits)
buffer_write.write_string(new_message)
buffer_write.write_string("")
buffer_write.write_string("")
buffer_write.write_string("")
buffer_write.write_string("")