Advertisement
KirillMysnik

Ayuto's code with RecipientFilter cast removed

Jun 23rd, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.11 KB | None | 0 0
  1. # =============================================================================
  2. # >> IMPORTS
  3. # =============================================================================
  4. # Source.Python
  5. from engines.server import engine_server
  6. from filters.recipients import RecipientFilter
  7.  
  8. from bitbuffers import BitBufferWrite
  9. from bitbuffers import BitBufferRead
  10.  
  11. import memory
  12.  
  13. from memory import Convention
  14. from memory import DataType
  15. from memory.hooks import PreHook
  16. from memory.hooks import PostHook
  17.  
  18.  
  19. # =============================================================================
  20. # >> GLOBAL VARIABLES
  21. # =============================================================================
  22. engine_server_ptr = memory.get_object_pointer(engine_server)
  23.  
  24. # CVEngineServer::UserMessageBegin(IRecipientFilter *, int)
  25. UserMessageBegin = engine_server_ptr.make_virtual_function(
  26.     43,
  27.     Convention.THISCALL,
  28.     [DataType.POINTER, DataType.POINTER, DataType.INT],
  29.     DataType.POINTER
  30. )
  31.  
  32. # CVEngineServer::MessageEnd(void)
  33. MessageEnd = engine_server_ptr.make_virtual_function(
  34.     44,
  35.     Convention.THISCALL,
  36.     [DataType.POINTER],
  37.     DataType.VOID
  38. )
  39.  
  40. user_message_data = None
  41.  
  42.  
  43. # =============================================================================
  44. # >> HOOKS
  45. # =============================================================================
  46. @PostHook(UserMessageBegin)
  47. def post_user_message_begin(args, return_value):
  48.     global user_message_data
  49.     user_message_data = (args[2],
  50.                          memory.make_object(BitBufferWrite, return_value))
  51.  
  52. @PreHook(MessageEnd)
  53. def pre_message_end(args):
  54.     # This happens when we initialize our hooks, while a user message is
  55.     # currently being created
  56.     if user_message_data is None:
  57.         return
  58.  
  59.     message_index, buffer = user_message_data
  60.     on_user_message_created(message_index, BitBufferRead(buffer), buffer)
  61.  
  62.  
  63. # =============================================================================
  64. # >> TEST
  65. # =============================================================================
  66. from messages import get_message_index
  67.  
  68. saytext2_index = get_message_index('SayText2')
  69.  
  70. def on_user_message_created(message_index, buffer_read, buffer_write):
  71.     if message_index != saytext2_index:
  72.         return
  73.  
  74.     index = buffer_read.read_byte()
  75.     chat = buffer_read.read_byte()
  76.     message = buffer_read.read_string()
  77.     param1 = buffer_read.read_string()
  78.  
  79.     param2_bits = buffer_read.num_bits_read
  80.     param2 = buffer_read.read_string()
  81.  
  82.     param3 = buffer_read.read_string()
  83.     param4 = buffer_read.read_string()
  84.  
  85.     print(index, chat, message, param1, param2, param3, param4)
  86.  
  87.     # Seek to the param2 bit. At that bit the actual message is stored, which
  88.     # we want to modify.
  89.     buffer_write.seek_to_bit(param2_bits)
  90.  
  91.     new_message = 'Hello world!'
  92.     buffer_write.write_string(new_message)
  93.  
  94.     if len(new_message) != len(param2):
  95.         # We need to rewrite the buffer, because the user message might be
  96.         # corrupt now :(
  97.         buffer_write.write_string(param3)
  98.         buffer_write.write_string(param4)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement