2022-12-06 16:12:02 +00:00
# pragma once
2023-04-14 18:54:07 +02:00
# include "memory/fwddec.hpp"
namespace big
{
struct broadcast_net_array
{
inline static memory : : byte_patch * m_patch ;
} ;
}
2023-03-01 21:27:15 +00:00
class CNetGamePlayer ;
namespace rage
{
class netArrayHandlerBase ;
}
2022-12-06 16:12:02 +00:00
class CGameArrayMgr
{
public :
char padding [ 0x40 ] ;
rage : : netArrayHandlerBase * m_start ;
} ;
static_assert ( sizeof ( CGameArrayMgr ) = = 0x48 ) ;
namespace rage
{
class netSyncDataUnit_Dynamic
{
public :
2023-03-01 21:27:15 +00:00
virtual ~ netSyncDataUnit_Dynamic ( ) = default ; // 0x00
2022-12-06 16:12:02 +00:00
virtual void _0x08 ( ) = 0 ;
virtual void _0x10 ( ) = 0 ;
2023-03-01 21:27:15 +00:00
virtual void set_data_counter ( int index , uint16_t counter ) = 0 ; // 0x18
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void reset_data_counter ( int index ) = 0 ; // 0x20
2022-12-06 16:12:02 +00:00
// ...
int m_players_need_ack ; // 0x08
2023-03-01 21:27:15 +00:00
int m_players_need_sync ; // 0x0C
2022-12-06 16:12:02 +00:00
} ;
class netSyncData_Dynamic
{
public :
2023-03-01 21:27:15 +00:00
virtual ~ netSyncData_Dynamic ( ) = default ; // 0x00
2022-12-06 16:12:02 +00:00
virtual rage : : datBitBuffer * _0x08 ( ) = 0 ;
virtual rage : : datBitBuffer * _0x10 ( ) = 0 ;
2023-03-01 21:27:15 +00:00
virtual int get_num_receivers ( ) = 0 ; // 0x18
2022-12-06 16:12:02 +00:00
virtual int _0x20 ( ) = 0 ;
2023-03-01 21:27:15 +00:00
virtual void _0x28 ( ) = 0 ; // same as get_sync_unit_for_element
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual netSyncDataUnit_Dynamic * get_sync_unit_for_element ( uint32_t element ) = 0 ; // 0x30
2022-12-06 16:12:02 +00:00
// ...
} ;
class netArrayHandlerBase
{
public :
2023-03-01 21:27:15 +00:00
virtual ~ netArrayHandlerBase ( ) = default ; // 0x00
2022-12-06 16:12:02 +00:00
virtual void _0x08 ( ) = 0 ;
virtual void _0x10 ( ) = 0 ;
virtual void _0x18 ( ) = 0 ;
virtual void _0x20 ( ) = 0 ;
virtual void _0x28 ( ) = 0 ;
virtual void _0x30 ( ) = 0 ;
2023-03-01 21:27:15 +00:00
virtual void _0x38 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0x40 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual int _0x48 ( CNetGamePlayer * player , int max_size , uint32_t * a3 , uint32_t * a4 ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual int get_size ( CNetGamePlayer * player , int max_size , uint32_t element ) = 0 ; // 0x50
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual int pack_array_data ( CNetGamePlayer * player , rage : : datBitBuffer * bit_buffer , uint16_t counter , uint32_t * elem_start , bool silent ) = 0 ; // 0x58
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0x60 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual bool _0x68 ( CNetGamePlayer * player ) = 0 ; // is_player_out_of_scope or something like that
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0x70 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual bool can_send_update ( CNetGamePlayer * player ) = 0 ; // 0x78
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0x80 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0x88 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void * get_identifier ( ) = 0 ; // 0x90
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void * _0x98 ( ) = 0 ; // same as get_identifier
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0xA0 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual bool can_verify_array_data ( ) = 0 ; // 0xA8
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0xB0 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0xB8 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void should_sync_element ( uint32_t element ) = 0 ; // 0xC0
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0xC8 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0xD0 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual bool are_all_elements_in_scope ( ) = 0 ; // 0xD8
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0xE0 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void verify_array_data ( ) = 0 ; // 0xE8
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void _0xF0 ( ) = 0 ; //
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual char * get_name ( ) = 0 ; // 0xF8
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual bool is_local_player_owner_of_array ( ) = 0 ; // 0x100
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual CNetGamePlayer * get_owner_of_array ( ) = 0 ; // 0x108
2022-12-06 16:12:02 +00:00
virtual void _0x110 ( ) = 0 ;
virtual uint32_t get_array_hash ( ) = 0 ;
2023-03-01 21:27:15 +00:00
virtual int _0x120 ( ) = 0 ; // gets array size for hashing
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual netSyncData_Dynamic * _0x128 ( ) = 0 ; // same as get_dynamic_sync_data
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual netSyncData_Dynamic * get_dynamic_sync_data ( ) = 0 ; // 0x130
2022-12-06 16:12:02 +00:00
virtual void _0x138 ( ) = 0 ;
2023-03-01 21:27:15 +00:00
virtual bool is_element_in_scope ( uint32_t element , CNetGamePlayer * player ) = 0 ; // 0x140
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual int get_receiver_index_from_player ( CNetGamePlayer * ) = 0 ; // 0x148
2022-12-06 16:12:02 +00:00
virtual void _0x150 ( ) = 0 ;
virtual void _0x158 ( ) = 0 ;
// pasted from fivem
2023-03-01 21:27:15 +00:00
virtual bool is_element_empty ( uint32_t element ) = 0 ; // 0x160
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void set_element_empty ( uint32_t element ) = 0 ; // 0x168
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void write_element_index ( rage : : datBitBuffer & buffer , uint32_t ) = 0 ; // 0x170
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void read_element_index ( rage : : datBitBuffer & buffer , uint32_t & ) = 0 ; // 0x178
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual bool is_valid_index ( uint32_t ) = 0 ; // 0x180
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void recalculate_dirty_elements ( ) = 0 ; // 0x188
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void reset_element_sync_data ( uint32_t element ) = 0 ; // 0x190
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void do_post_read_processing ( ) = 0 ; // 0x198
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void do_post_element_read_processing ( uint32_t element ) = 0 ; // 0x1A0
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual bool can_apply_element_data ( uint32_t element , const rage : : netPlayer & sender , bool force ) = 0 ; // 0x1A8
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void extract_data_for_serializing ( uint32_t elem ) = 0 ; // 0x1B0
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void write_element ( rage : : datBitBuffer & buffer , uint32_t elem , void * logger ) = 0 ; // 0x1B8
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void read_element ( rage : : datBitBuffer & buffer , uint32_t elem , void * logger ) = 0 ; // 0x1C0
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void log_element ( uint32_t elem , void * logger ) = 0 ; // 0x1C8
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual uint32_t get_current_element_size_in_bits ( uint32_t elem ) = 0 ; // 0x1D0
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
virtual void apply_element_data ( uint32_t element , const rage : : netPlayer & sender ) = 0 ; // 0x1D8
2022-12-06 16:12:02 +00:00
virtual void _0x1E0 ( ) = 0 ;
2023-03-01 21:27:15 +00:00
virtual void _0x1E8 ( bool ) = 0 ; // very important! changes send function to use some kind of cached buffer that prevents us from modifing array data per player
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
void * m_something ; // 0x10
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
netArrayHandlerBase * m_next ; // 0x18
2022-12-06 16:12:02 +00:00
2023-03-01 21:27:15 +00:00
uint8_t m_pad [ 100 - 0x18 ] ; // +8
2022-12-06 16:12:02 +00:00
uint32_t m_hash ;
2023-03-01 21:27:15 +00:00
uint8_t m_pad2 [ 244 - 104 ] ; // +8
uint16_t m_index ; // 244
uint16_t m_count ; // 246
uint8_t m_max_elements ; // 248
uint8_t m_element_size ; // 249
2022-12-06 16:12:02 +00:00
uint8_t m_element_size_2 ; // 250
2023-03-01 21:27:15 +00:00
uint8_t m_pad3 [ 13 ] ; // 251
void * m_array ; // 264
2022-12-06 16:12:02 +00:00
#if 0
static inline netArrayHandlerBase * get_by_data ( void * data )
{
2023-04-14 18:54:07 +02:00
if ( auto array_mgr = * big : : g_pointers - > m_gta . m_game_array_mgr )
2022-12-06 16:12:02 +00:00
{
if ( auto handler = array_mgr - > m_start )
{
do
{
if ( handler - > m_array = = data )
return handler ;
}
while ( handler = handler - > m_next ) ;
}
}
return nullptr ;
}
# endif
} ;
static_assert ( sizeof ( netArrayHandlerBase ) = = 272 ) ;
}