Lessen breakup kicks and more (#625)
This commit is contained in:
@ -59,7 +59,6 @@ class CGameScriptHandlerNetwork;
|
||||
class CGameScriptHandlerMgr;
|
||||
|
||||
class CEntity;
|
||||
class CDynamicEntity;
|
||||
class CPhysical;
|
||||
|
||||
class CObject;
|
||||
|
@ -211,6 +211,49 @@ namespace rage
|
||||
|
||||
WriteQWord((uint64_t)data, length);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline void WriteSigned(int length, T data)
|
||||
{
|
||||
int sign = data < 0;
|
||||
int signEx = (data < 0) ? 0xFFFFFFFF : 0;
|
||||
int d = (data ^ signEx);
|
||||
|
||||
Write<int>(1, sign);
|
||||
Write<int>(length - 1, d);
|
||||
}
|
||||
|
||||
inline float ReadFloat(int length, float divisor)
|
||||
{
|
||||
auto integer = Read<int>(length);
|
||||
|
||||
float max = (1 << length) - 1;
|
||||
return ((float)integer / max) * divisor;
|
||||
}
|
||||
|
||||
inline void WriteFloat(int length, float divisor, float value)
|
||||
{
|
||||
float max = (1 << length) - 1;
|
||||
int integer = (int)((value / divisor) * max);
|
||||
|
||||
Write<int>(length, integer);
|
||||
}
|
||||
|
||||
inline float ReadSignedFloat(int length, float divisor)
|
||||
{
|
||||
auto integer = ReadSigned<int>(length);
|
||||
|
||||
float max = (1 << (length - 1)) - 1;
|
||||
return ((float)integer / max) * divisor;
|
||||
}
|
||||
|
||||
inline void WriteSignedFloat(int length, float divisor, float value)
|
||||
{
|
||||
float max = (1 << (length - 1)) - 1;
|
||||
int integer = (int)((value / divisor) * max);
|
||||
|
||||
WriteSigned<int>(length, integer);
|
||||
}
|
||||
public:
|
||||
void* m_data; //0x0000
|
||||
uint32_t m_bitOffset; //0x0008
|
||||
@ -376,7 +419,7 @@ namespace rage
|
||||
virtual __int64 get_type() = 0;
|
||||
virtual void unk_0x20() = 0;
|
||||
virtual void unk_0x28() = 0;
|
||||
virtual bool get_extra_information(__int64* info_array, int check) = 0;
|
||||
virtual bool get_extra_information(void* info_array, int check) = 0;
|
||||
virtual void unk_0x38() = 0;
|
||||
};
|
||||
|
||||
|
@ -179,6 +179,86 @@ class CGameScriptHandlerMgr : public rage::scriptHandlerMgr
|
||||
{
|
||||
};
|
||||
|
||||
class CGameScriptHandlerNetComponent
|
||||
{
|
||||
public:
|
||||
virtual ~CGameScriptHandlerNetComponent() = default;
|
||||
|
||||
virtual bool _0x08(void*) = 0;
|
||||
|
||||
virtual void _0x10(CNetGamePlayer*) = 0; // creates a scriptId?
|
||||
|
||||
virtual void* player_left(CNetGamePlayer* player) = 0;
|
||||
|
||||
virtual void* send_host_migration_event(CNetGamePlayer* player) = 0;
|
||||
|
||||
virtual void* player_joined(void**, void* msg_ctx) = 0;
|
||||
|
||||
virtual void* player_joined_ack(void**, void* msg_ctx) = 0;
|
||||
|
||||
virtual bool _0x38(void*, void*) = 0; // join_script?
|
||||
|
||||
virtual void* _0x40(void*, void*) = 0;
|
||||
|
||||
virtual void* _0x48(void*, void*, void*) = 0;
|
||||
|
||||
virtual void* _0x50(void*, void*) = 0;
|
||||
|
||||
virtual void* _0x58(void*, void*) = 0;
|
||||
|
||||
virtual void* _0x60(void*, void*) = 0;
|
||||
|
||||
virtual void* _0x68(void*, void*) = 0;
|
||||
|
||||
virtual void _0x70(void*, void*) = 0;
|
||||
|
||||
virtual void _0x78(void*, void*) = 0;
|
||||
|
||||
virtual short _0x80(void*, void*) = 0;
|
||||
|
||||
virtual void* _0x88(void*, void*) = 0;
|
||||
|
||||
virtual void* _0x90(void*, void*) = 0; // HOST_MIGRATION_FAILED
|
||||
|
||||
virtual bool _0x98(void*, void*) = 0;
|
||||
|
||||
virtual void* _0xA0(void*, void*) = 0;
|
||||
|
||||
virtual void* _0xA8(void*, void*) = 0;
|
||||
|
||||
virtual short _0xB0(void*, void*) = 0;
|
||||
|
||||
virtual bool register_host_broadcast_data(void* data, int size, char* a3) = 0;
|
||||
|
||||
virtual bool register_player_broadcast_data(int a1, int size, bool a3) = 0;
|
||||
|
||||
virtual bool _0xC8() = 0; // something to do to joining session
|
||||
|
||||
virtual bool _0xD0() = 0;
|
||||
|
||||
virtual bool add_player_to_script(CNetGamePlayer* player, short* outParticipantID, short* outSlot, int* outFailReason) = 0;
|
||||
|
||||
virtual bool add_player_to_script_internal(CNetGamePlayer* player, short participantID, short slot) = 0; // player aka participant
|
||||
|
||||
virtual bool remove_player_from_script(CNetGamePlayer* player) = 0;
|
||||
|
||||
virtual void* player_left_impl(CNetGamePlayer*, bool) = 0;
|
||||
|
||||
virtual bool do_host_migration(CNetGamePlayer* player, short host_token, bool unk) = 0; // aka _0xF8
|
||||
|
||||
virtual void* leave_from_script() = 0; // calls above function with player = nullptr
|
||||
|
||||
virtual bool _0x108() = 0;
|
||||
|
||||
virtual void* _0x110() = 0;
|
||||
|
||||
virtual bool _0x118() = 0; // related to above function
|
||||
|
||||
CGameScriptHandler* m_script_handler; //0x0008
|
||||
char pad_0010[48]; //0x0010
|
||||
std::uint32_t m_participants; //0x0040
|
||||
};
|
||||
|
||||
static_assert(sizeof(rage::scriptHandler) == 0x60);
|
||||
static_assert(sizeof(CGameScriptHandler) == 0xA0);
|
||||
static_assert(sizeof(CGameScriptHandlerNetwork) == 0xB0);
|
||||
|
Reference in New Issue
Block a user