Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. # =============================================================================
  2. # >> IMPORTS
  3. # =============================================================================
  4. # Source.Python
  5. from colors import Color
  6. from engines.server import engine_server
  7. from filters.recipients import RecipientFilter
  8.  
  9. from bitbuffers import BitBufferWrite
  10. from bitbuffers import BitBufferRead
  11.  
  12. import memory
  13.  
  14. from memory import Convention
  15. from memory import DataType
  16. from memory.hooks import PreHook
  17. from memory.hooks import PostHook
  18.  
  19.  
  20. # =============================================================================
  21. # >> GLOBAL VARIABLES
  22. # =============================================================================
  23. engine_server_ptr = memory.get_object_pointer(engine_server)
  24.  
  25. # CVEngineServer::UserMessageBegin(IRecipientFilter *, int)
  26. UserMessageBegin = engine_server_ptr.make_virtual_function(
  27.     43,
  28.     Convention.THISCALL,
  29.     [DataType.POINTER, DataType.POINTER, DataType.INT],
  30.     DataType.POINTER
  31. )
  32.  
  33. # CVEngineServer::MessageEnd(void)
  34. MessageEnd = engine_server_ptr.make_virtual_function(
  35.     44,
  36.     Convention.THISCALL,
  37.     [DataType.POINTER],
  38.     DataType.VOID
  39. )
  40.  
  41. user_message_data = None
  42.  
  43.  
  44. # =============================================================================
  45. # >> HOOKS
  46. # =============================================================================
  47. @PostHook(UserMessageBegin)
  48. def post_user_message_begin(args, return_value):
  49.     global user_message_data
  50.     user_message_data = (args[2],
  51.                          memory.make_object(BitBufferWrite, return_value))
  52.  
  53. @PreHook(MessageEnd)
  54. def pre_message_end(args):
  55.     # This happens when we initialize our hooks, while a user message is
  56.     # currently being created
  57.     if user_message_data is None:
  58.         return
  59.  
  60.     message_index, buffer = user_message_data
  61.     on_user_message_created(message_index, BitBufferRead(buffer), buffer)
  62.  
  63.  
  64. # =============================================================================
  65. # >> TEST
  66. # =============================================================================
  67. from messages import get_message_index
  68.  
  69. saytext2_index = get_message_index('SayText2')
  70.  
  71. def on_user_message_created(message_index, buffer_read, buffer_write):
  72.     if message_index != saytext2_index:
  73.         return
  74.  
  75.     index = buffer_read.read_byte()
  76.     chat = buffer_read.read_byte()
  77.    
  78.     message_bits = buffer_read.num_bits_read
  79.     message = buffer_read.read_string()
  80.    
  81.     param1 = buffer_read.read_string()
  82.     param2 = buffer_read.read_string()
  83.     param3 = buffer_read.read_string()
  84.     param4 = buffer_read.read_string()
  85.    
  86.     new_message = "\x01{}[ADMIN] {}: {}{}".format(Color(255, 0, 0), param1, Color(255, 255, 255), param2)
  87.    
  88.     buffer_write.seek_to_bit(message_bits)
  89.     buffer_write.write_string(new_message)
  90.    
  91.     buffer_write.write_string("")
  92.     buffer_write.write_string("")
  93.     buffer_write.write_string("")
  94.     buffer_write.write_string("")