Advertisement
KirillMysnik

Colored messages

Sep 5th, 2016
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.61 KB | None | 0 0
  1. from colors import Color
  2. from bitbuffers import BitBufferRead, BitBufferWrite
  3. from engines.server import engine_server
  4. from filters.recipients import RecipientFilter
  5. from memory import Convention, DataType, get_object_pointer, make_object
  6. from memory.hooks import PostHook, PreHook
  7. from messages import get_message_index
  8.  
  9.  
  10. HIGHLIGHT_COLOR = Color(255, 0, 150)
  11. COLOR_MSG_COMMANDS = ("!c", "/c")
  12.  
  13. engine_server_ptr = get_object_pointer(engine_server)
  14. saytext2_index = get_message_index('SayText2')
  15.  
  16.  
  17. # CVEngineServer::UserMessageBegin(IRecipientFilter *, int)
  18. user_message_begin = engine_server_ptr.make_virtual_function(
  19.     43,
  20.     Convention.THISCALL,
  21.     [DataType.POINTER, DataType.POINTER, DataType.INT],
  22.     DataType.POINTER
  23. )
  24.  
  25. message_end = engine_server_ptr.make_virtual_function(
  26.     44,
  27.     Convention.THISCALL,
  28.     [DataType.POINTER],
  29.     DataType.VOID
  30. )
  31.  
  32. user_message_data = None
  33.  
  34.  
  35. @PostHook(user_message_begin)
  36. def post_user_message_begin(args, ret_val):
  37.     global user_message_data
  38.     user_message_data = (
  39.         make_object(RecipientFilter, args[1]),
  40.         args[2],
  41.         make_object(BitBufferWrite, ret_val)
  42.     )
  43.  
  44.  
  45. @PreHook(message_end)
  46. def pre_message_end(args):
  47.     # This happens when we initialize our hooks, while a user message is
  48.     # currently being created
  49.     if user_message_data is None:
  50.         return
  51.  
  52.     recipients, message_index, buffer = user_message_data
  53.     on_user_message_created(
  54.         recipients, message_index, BitBufferRead(buffer), buffer)
  55.  
  56.  
  57. def on_user_message_created(
  58.         recipients, message_index, buffer_read, buffer_write):
  59.  
  60.     if message_index != saytext2_index:
  61.         return
  62.  
  63.     index = buffer_read.read_byte()  # sender index (e.g. player's index)
  64.     chat = buffer_read.read_byte()
  65.  
  66.     message_bits = buffer_read.num_bits_read # store current position
  67.     message = buffer_read.read_string()
  68.  
  69.     param1 = buffer_read.read_string()
  70.     param2 = buffer_read.read_string()
  71.     param3 = buffer_read.read_string()
  72.     param4 = buffer_read.read_string()
  73.    
  74.     for color_msg_cmd in COLOR_MSG_COMMANDS:
  75.         if param2.startswith(color_msg_cmd):
  76.             break
  77.     else:
  78.         return
  79.  
  80.     new_message = "\x01{color}{param2}".format(
  81.         color=HIGHLIGHT_COLOR,
  82.         param2=param2[len(color_msg_cmd):]
  83.     )
  84.     buffer_write.seek_to_bit(message_bits)
  85.     buffer_write.write_string(new_message)
  86.  
  87.     if len(new_message) != len(message):
  88.         buffer_write.write_string(param1)
  89.         buffer_write.write_string(param2)
  90.         buffer_write.write_string(param3)
  91.         buffer_write.write_string(param4)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement