Lessen breakup kicks and more (#625)

This commit is contained in:
maybegreat48
2022-11-21 15:42:12 +00:00
committed by GitHub
parent abad615531
commit 64b47779e8
46 changed files with 1109 additions and 146 deletions

View File

@ -59,7 +59,6 @@ class CGameScriptHandlerNetwork;
class CGameScriptHandlerMgr;
class CEntity;
class CDynamicEntity;
class CPhysical;
class CObject;

View File

@ -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;
};

View File

@ -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);