feat(hooks): General cleanup on hooks and pointers (#322)

This commit is contained in:
Forever Gone
2022-07-05 16:54:45 -04:00
committed by GitHub
parent faee5efb6e
commit 825584a520
22 changed files with 512 additions and 522 deletions

View File

@ -726,96 +726,96 @@ enum class NetObjEntityType : uint16_t
NetObjEntityType_Max
};
enum class RockstarEvent : uint16_t
enum class eNetworkEvents : uint16_t
{
OBJECT_ID_FREED_EVENT,
OBJECT_ID_REQUEST_EVENT,
ARRAY_DATA_VERIFY_EVENT,
SCRIPT_ARRAY_DATA_VERIFY_EVENT,
REQUEST_CONTROL_EVENT,
GIVE_CONTROL_EVENT,
WEAPON_DAMAGE_EVENT,
REQUEST_PICKUP_EVENT,
REQUEST_MAP_PICKUP_EVENT,
GAME_CLOCK_EVENT,
GAME_WEATHER_EVENT,
RESPAWN_PLAYER_PED_EVENT,
GIVE_WEAPON_EVENT,
REMOVE_WEAPON_EVENT,
REMOVE_ALL_WEAPONS_EVENT,
VEHICLE_COMPONENT_CONTROL_EVENT,
FIRE_EVENT,
EXPLOSION_EVENT,
START_PROJECTILE_EVENT,
UPDATE_PROJECTILE_TARGET_EVENT,
REMOVE_PROJECTILE_ENTITY_EVENT,
BREAK_PROJECTILE_TARGET_LOCK_EVENT,
ALTER_WANTED_LEVEL_EVENT,
CHANGE_RADIO_STATION_EVENT,
RAGDOLL_REQUEST_EVENT,
PLAYER_TAUNT_EVENT,
PLAYER_CARD_STAT_EVENT,
DOOR_BREAK_EVENT,
SCRIPTED_GAME_EVENT,
REMOTE_SCRIPT_INFO_EVENT,
REMOTE_SCRIPT_LEAVE_EVENT,
MARK_AS_NO_LONGER_NEEDED_EVENT,
CONVERT_TO_SCRIPT_ENTITY_EVENT,
SCRIPT_WORLD_STATE_EVENT,
CLEAR_AREA_EVENT,
CLEAR_RECTANGLE_AREA_EVENT,
NETWORK_REQUEST_SYNCED_SCENE_EVENT,
NETWORK_START_SYNCED_SCENE_EVENT,
NETWORK_STOP_SYNCED_SCENE_EVENT,
NETWORK_UPDATE_SYNCED_SCENE_EVENT,
INCIDENT_ENTITY_EVENT,
GIVE_PED_SCRIPTED_TASK_EVENT,
GIVE_PED_SEQUENCE_TASK_EVENT,
NETWORK_CLEAR_PED_TASKS_EVENT,
NETWORK_START_PED_ARREST_EVENT,
NETWORK_START_PED_UNCUFF_EVENT,
NETWORK_SOUND_CAR_HORN_EVENT,
NETWORK_ENTITY_AREA_STATUS_EVENT,
NETWORK_GARAGE_OCCUPIED_STATUS_EVENT,
PED_CONVERSATION_LINE_EVENT,
SCRIPT_ENTITY_STATE_CHANGE_EVENT,
NETWORK_PLAY_SOUND_EVENT,
NETWORK_STOP_SOUND_EVENT,
NETWORK_PLAY_AIRDEFENSE_FIRE_EVENT,
NETWORK_BANK_REQUEST_EVENT,
NETWORK_AUDIO_BARK_EVENT,
REQUEST_DOOR_EVENT,
NETWORK_TRAIN_REPORT_EVENT,
NETWORK_TRAIN_REQUEST_EVENT,
NETWORK_INCREMENT_STAT_EVENT,
MODIFY_VEHICLE_LOCK_WORD_STATE_DATA,
MODIFY_PTFX_WORD_STATE_DATA_SCRIPTED_EVOLVE_EVENT,
REQUEST_PHONE_EXPLOSION_EVENT,
REQUEST_DETACHMENT_EVENT,
KICK_VOTES_EVENT,
GIVE_PICKUP_REWARDS_EVENT,
NETWORK_CRC_HASH_CHECK_EVENT,
BLOW_UP_VEHICLE_EVENT,
NETWORK_SPECIAL_FIRE_EQUIPPED_WEAPON,
NETWORK_RESPONDED_TO_THREAT_EVENT,
NETWORK_SHOUT_TARGET_POSITION,
VOICE_DRIVEN_MOUTH_MOVEMENT_FINISHED_EVENT,
PICKUP_DESTROYED_EVENT,
UPDATE_PLAYER_SCARS_EVENT,
NETWORK_CHECK_EXE_SIZE_EVENT,
NETWORK_PTFX_EVENT,
NETWORK_PED_SEEN_DEAD_PED_EVENT,
REMOVE_STICKY_BOMB_EVENT,
NETWORK_CHECK_CODE_CRCS_EVENT,
INFORM_SILENCED_GUNSHOT_EVENT,
PED_PLAY_PAIN_EVENT,
CACHE_PLAYER_HEAD_BLEND_DATA_EVENT,
REMOVE_PED_FROM_PEDGROUP_EVENT,
REPORT_MYSELF_EVENT,
REPORT_CASH_SPAWN_EVENT,
ACTIVATE_VEHICLE_SPECIAL_ABILITY_EVENT,
BLOCK_WEAPON_SELECTION,
NETWORK_CHECK_CATALOG_CRC
CObjectIdFreedEvent,
CObjectIdRequestEvent,
CArrayDataVerifyEvent,
CScriptArrayDataVerifyEvent,
CRequestControlEvent,
CGiveControlEvent,
CWeaponDamageEvent,
CRequestPickupEvent,
CRequestMapPickupEvent,
CGameClockEvent,
CGameWeatherEvent,
CRespawnPlayerPedEvent,
CGiveWeaponEvent,
CRemoveWeaponEvent,
CRemoveAllWeaponsEvent,
CVehicleComponentControlEvent,
CFireEvent,
CExplosionEvent,
CStartProjectileEvent,
CUpdateProjectileTargetEvent,
CRemoveProjectileEntityEvent,
CBreakProjectileTargetLockEvent,
CAlterWantedLevelEvent,
CChangeRadioStationEvent,
CRagdollRequestEvent,
CPlayerTauntEvent,
CPlayerCardStatEvent,
CDoorBreakEvent,
CScriptedGameEvent,
CRemoteScriptInfoEvent,
CRemoteScriptLeaveEvent,
CMarkAsNoLongerNeededEvent,
CConvertToScriptEntityEvent,
CScriptWorldStateEvent,
CClearAreaEvent,
CClearRectangleAreaEvent,
CNetworkRequestSyncedSceneEvent,
CNetworkStartSyncedSceneEvent,
CNetworkStopSyncedSceneEvent,
CNetworkUpdateSyncedSceneEvent,
CIncidentEntityEvent,
CGivePedScriptedTaskEvent,
CGivePedSequenceTaskEvent,
CNetworkClearPedTasksEvent,
CNetworkStartPedArrestEvent,
CNetworkStartPedUncuffEvent,
CNetworkSoundCarHornEvent,
CNetworkEntityAreaStatusEvent,
CNetworkGarageOccupiedStatusEvent,
CPedConversationLineEvent,
CScriptEntityStateChangeEvent,
CNetworkPlaySoundEvent,
CNetworkStopSoundEvent,
CNetworkPlayAirdefenseFireEvent,
CNetworkBankRequestEvent,
CNetworkAudioBarkEvent,
CRequestDoorEvent,
CNetworkTrainReportEvent,
CNetworkTrainRequestEvent,
CNetworkIncrementStatEvent,
CModifyVehicleLockWordStateData,
CModifyPtfxWordStateDataScriptedEvolveEvent,
CRequestPhoneExplosionEvent,
CRequestDetachmentEvent,
CKickVotesEvent,
CGivePickupRewardsEvent,
CNetworkCrcHashCheckEvent,
CBlowUpVehicleEvent,
CNetworkSpecialFireEquippedWeapon,
CNetworkRespondedToThreatEvent,
CNetworkShoutTargetPosition,
CVoiceDrivenMouthMovementFinishedEvent,
CPickupDestroyedEvent,
CUpdatePlayerScarsEvent,
CNetworkCheckExeSizeEvent,
CNetworkPtfxEvent,
CNetworkPedSeenDeadPedEvent,
CRemoveStickyBombEvent,
CNetworkCheckCodeCrcsEvent,
CInformSilencedGunshotEvent,
CPedPlayPainEvent,
CCachePlayerHeadBlendDataEvent,
CRemovePedFromPedgroupEvent,
CUpdateFxnEvent,
CReportCashSpawnEvent,
CActivateVehicleSpecialAbilityEvent,
CBlockWeaponSelection,
CNetworkCheckCatalogCrc
};
enum class BlipIcons

View File

@ -54,12 +54,45 @@ namespace rage
std::int32_t m_data_count;
std::uint32_t m_data[48];
};
static_assert(sizeof(scrNativeCallContext) == 0xE0);
using scrNativeHash = std::uint64_t;
using scrNativeMapping = std::pair<scrNativeHash, scrNativeHash>;
using scrNativeHandler = void(*)(scrNativeCallContext*);
class scrNativeRegistration;
class scrNativeRegistration {
public:
uint64_t m_nextRegistration1;
uint64_t m_nextRegistration2;
void* m_handlers[7];
uint32_t m_numEntries1;
uint32_t m_numEntries2;
uint64_t m_hashes;
scrNativeRegistration* get_next_registration() {
std::uintptr_t result;
auto nextReg = uintptr_t(&m_nextRegistration1);
auto newReg = nextReg ^ m_nextRegistration2;
auto charTableOfRegs = (char*)&result - nextReg;
for (auto i = 0; i < 3; i++) {
*(DWORD*)&charTableOfRegs[nextReg] = static_cast<DWORD>(newReg) ^ *(DWORD*)nextReg;
nextReg += 4;
}
return reinterpret_cast<scrNativeRegistration*>(result);
}
std::uint32_t get_num_entries() {
return static_cast<std::uint32_t>(((std::uintptr_t)&m_numEntries1) ^ m_numEntries1 ^ m_numEntries2);
}
std::uint64_t get_hash(std::uint32_t index) {
auto nativeAddress = 16 * index + std::uintptr_t(&m_nextRegistration1) + 0x54;
std::uint64_t result;
auto charTableOfRegs = (char*)&result - nativeAddress;
auto addressIndex = nativeAddress ^ *(DWORD*)(nativeAddress + 8);
for (auto i = 0; i < 3; i++) {
*(DWORD*)&charTableOfRegs[nativeAddress] = static_cast<DWORD>(addressIndex ^ *(DWORD*)(nativeAddress));
nativeAddress += 4;
}
return result;
}
};
#pragma pack(push, 1)
class scrNativeRegistrationTable
@ -69,8 +102,6 @@ namespace rage
bool m_initialized;
};
#pragma pack(pop)
static_assert(sizeof(scrNativeCallContext) == 0xE0);
}
using Void = void;

View File

@ -7,139 +7,266 @@
namespace rage
{
class netPlayer;
class datBitBuffer
{
public:
inline datBitBuffer(void* data, uint32_t size)
{
datBitBuffer(uint8_t* data, uint32_t size) {
m_data = data;
m_f8 = 0;
m_bitOffset = 0;
m_maxBit = size * 8;
m_bitsRead = 0;
m_curBit = 0;
m_unk2Bit = 0;
m_highestBitsRead = 0;
m_flagBits = 0;
}
inline uint32_t GetPosition()
{
uint32_t GetPosition() {
return m_bitsRead;
}
inline bool Seek(uint32_t bits)
{
if (bits >= 0)
{
bool Seek(uint32_t bits) {
if (bits >= 0) {
uint32_t length = (m_flagBits & 1) ? m_maxBit : m_curBit;
if (bits <= length)
{
m_bitsRead = bits;
}
}
return false;
}
inline int GetDataLength()
{
bool WriteBool(bool integer) {
return big::g_pointers->m_write_bitbuf_bool(this, integer, 1);
}
bool ReadBool(bool* integer) {
return big::g_pointers->m_read_bitbuf_bool(this, integer, 1);
}
bool ReadPeerId(uint64_t* integer) {
return this->ReadQWord(integer, 0x32);
}
uint64_t ReadBits(size_t numBits) {
auto const totalBits = (m_flagBits & 1) ? m_maxBit : m_curBit;
if ((m_flagBits & 2) || m_bitsRead + numBits > totalBits)
return 0;
auto const bufPos = m_bitsRead + m_bitOffset;
auto const initialBitOffset = bufPos & 0b111;
auto const start = &m_data[bufPos / 8];
auto const next = &start[1];
auto result = (start[0] << initialBitOffset) & 0xff;
for (auto i = 0; i < ((numBits - 1) / 8); i++) {
result <<= 8;
result |= next[i] << initialBitOffset;
}
if (initialBitOffset)
result |= next[0] >> (8 - initialBitOffset);
m_bitsRead += static_cast<uint32_t>(numBits);
if (m_bitsRead > m_highestBitsRead)
m_highestBitsRead = m_bitsRead;
return result >> ((8 - numBits) % 8);
}
int GetDataLength() {
int leftoverBit = (m_curBit % 8) ? 1 : 0;
return (m_curBit / 8) + leftoverBit;
}
inline bool ReadByte(uint8_t* integer, int bits)
{
bool ReadString(char* string, int bits) {
return big::g_pointers->m_read_bitbuf_string(this, string, bits);
}
bool WriteByte(uint8_t integer, int bits) {
return big::g_pointers->m_write_bitbuf_dword(this, integer, bits);
}
bool ReadByte(uint8_t* integer, int bits) {
uint32_t read;
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits))
{
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits)) {
*integer = read;
return true;
}
return false;
}
inline bool ReadWord(uint16_t* integer, int bits)
{
bool WriteWord(uint16_t integer, int bits) {
return big::g_pointers->m_write_bitbuf_dword(this, integer, bits);
}
bool ReadWord(uint16_t* integer, int bits) {
uint32_t read;
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits))
{
if (big::g_pointers->m_read_bitbuf_dword(this, &read, bits)) {
*integer = read;
return true;
}
return false;
}
inline bool ReadDword(uint32_t* integer, int bits)
{
bool WriteDword(uint32_t integer, int bits) {
return big::g_pointers->m_write_bitbuf_dword(this, integer, bits);
}
bool ReadDword(uint32_t* integer, int bits) {
return big::g_pointers->m_read_bitbuf_dword(this, integer, bits);
}
inline bool ReadInt32(int32_t* integer, int bits)
{
bool WriteInt32(int32_t integer, int bits) {
return big::g_pointers->m_write_bitbuf_int32(this, integer, bits);
}
bool ReadInt32(int32_t* integer, int bits) {
int32_t v8;
int32_t v9;
if (ReadDword((uint32_t*)&v8, 1u) && ReadDword((uint32_t*)&v9, bits - 1))
{
if (ReadDword((uint32_t*)&v8, 1u) && ReadDword((uint32_t*)&v9, bits - 1)) {
*integer = v8 + (v9 ^ -v8);
return true;
}
return false;
}
inline bool ReadQWord(uint64_t* integer, int bits)
{
if (bits <= 32)
{
uint32_t v10{};
if (ReadDword(&v10, bits))
{
bool WriteQWord(uint64_t integer, int bits) {
return big::g_pointers->m_write_bitbuf_qword(this, integer, bits);
}
bool ReadQWord(uint64_t* integer, int bits) {
if (bits <= 32) {
uint32_t v10;
if (ReadDword(&v10, bits)) {
*integer = v10;
return true;
}
return false;
}
else
{
uint32_t v10{}, v11{};
if (ReadDword(&v11, 32u) && ReadDword(&v10, bits - 32u))
{
else {
uint32_t v10, v11;
if (ReadDword(&v11, 32u) && ReadDword(&v10, bits - 32u)) {
*integer = v11 | ((uint64_t)v10 << 32);
return true;
}
return false;
}
return false;
}
inline bool ReadInt64(int64_t* integer, int bits)
{
bool WriteInt64(int64_t integer, int bits) {
return big::g_pointers->m_write_bitbuf_int64(this, integer, bits);
}
bool ReadInt64(int64_t* integer, int bits) {
uint32_t v8;
uint64_t v9;
if (ReadDword(&v8, 1u) && ReadQWord(&v9, bits - 1))
{
if (ReadDword(&v8, 1u) && ReadQWord(&v9, bits - 1)) {
*integer = v8 + (v9 ^ -(int64_t)v8);
return true;
}
return false;
}
inline bool ReadArray(PVOID array, int size)
{
bool WriteArray(uint8_t* array, int size) {
return big::g_pointers->m_write_bitbuf_array(this, array, size, 0);
}
bool ReadArray(PVOID array, int size) {
return big::g_pointers->m_read_bitbuf_array(this, array, size, 0);
}
public:
void* m_data; //0x0000
uint32_t m_f8; //0x0008
uint8_t* m_data; //0x0000
uint32_t m_bitOffset; //0x0008
uint32_t m_maxBit; //0x000C
uint32_t m_bitsRead; //0x0010
uint32_t m_curBit; //0x0014
uint32_t m_unk2Bit; //0x0018
uint32_t m_highestBitsRead; //0x0018
uint8_t m_flagBits; //0x001C
char pad_0x01D[3];
uint32_t m_f20;
};
enum class eNetMessage : uint32_t {
CMsgInvalid = 0xFFFFF,
CMsgSessionAcceptChat = 0x62,
CMsgStartMatchCmd = 0x2D,
CMsgSetInvitableCmd = 0x1F,
CMsgSessionMemberIds = 0x23,
CMsgRequestGamerInfo = 0x54,
CMsgRemoveGamersFromSessionCmd = 0x53,
CMsgNotMigrating = 0x35,
CMsgMigrateHostResponse = 0x12,
CMsgMigrateHostRequest = 0x66,
CMsgJoinResponse = 0x2A,
CMsgJoinRequest = 0x41,
CMsgHostLeftWhilstJoiningCmd = 0x58,
CMsgConfigResponse = 0x5F,
CMsgConfigRequest = 0x48,
CMsgChangeSessionAttributesCmd = 0x5A,
CMsgAddGamerToSessionCmd = 0x64, // this is where send net info to lobby is called, among other things
CMsgReassignResponse = 0x10,
CMsgReassignNegotiate = 0x01,
CMsgReassignConfirm = 0x26,
CMsgPlayerData = 0x18,
CMsgPackedReliables = 0x30,
CMsgPackedCloneSyncACKs = 0x3B,
CMsgNonPhysicalData = 0x16,
CMsgNetArrayMgrUpdateAck = 0x5D,
CMsgNetArrayMgrUpdate = 0x60,
CMsgNetArrayMgrSplitUpdateAck = 0x25,
CMsgScriptVerifyHostAck = 0x0B,
CMsgScriptVerifyHost = 0x3E,
CMsgScriptNewHost = 0x0E,
CMsgScriptMigrateHostFailAck = 0x1A,
CMsgScriptMigrateHost = 0x33,
CMsgScriptLeaveAck = 0x40,
CMsgScriptLeave = 0x17,
CMsgScriptJoinHostAck = 0x4D,
CMsgScriptJoinAck = 0x43,
CMsgScriptJoin = 0x5C,
CMsgScriptHostRequest = 0x67,
CMsgScriptHandshakeAck = 0x5B,
CMsgScriptHandshake = 0x57,
CMsgScriptBotLeave = 0x2B, // unused?
CMsgScriptBotJoinAck = 0x63, // unused?
CMsgScriptBotJoin = 0x1C, // unused?
CMsgScriptBotHandshakeAck = 0x31, // unused?
CMsgScriptBotHandshake = 0x4B, // unused?
CMsgPartyLeaveGame = 0x3D,
CMsgPartyEnterGame = 0x1E,
CMsgCloneSync = 0x4E, // aka clone_create, clone_sync etc.
CMsgActivateNetworkBot = 0x65, // unused?
CMsgRequestObjectIds = 0x29,
CMsgInformObjectIds = 0x09,
CMsgTextMessage = 0x24, // this one is for chat
CMsgPlayerIsTyping = 0x61,
CMsgPackedEvents = 0x4F, // aka received_event
CMsgPackedEventReliablesCMsgs = 0x20,
CMsgRequestKickFromHost = 0x0D,
CMsgTransitionToGameStart = 0x50,
CMsgTransitionToGameNotify = 0x02,
CMsgTransitionToActivityStart = 0x06,
CMsgTransitionToActivityFinish = 0x36,
CMsgTransitionParameters = 0x3C,
CMsgTransitionParameterString = 0x37,
CMsgTransitionLaunchNotify = 0x1B,
CMsgTransitionLaunch = 0x19,
CMsgTransitionGamerInstruction = 0x14,
CMsgTextMessage2 = 0x0A, // this one is for phone message
CMsgSessionEstablishedRequest = 0x52,
CMsgSessionEstablished = 0x07,
CMsgRequestTransitionParameters = 0x42,
CMsgRadioStationSyncRequest = 0x47,
CMsgRadioStationSync = 0x46,
CMsgPlayerCardSync = 0x3A,
CMsgPlayerCardRequest = 0x6A,
CMsgLostConnectionToHost = 0x81,
CMsgKickPlayer = 0x34, // host kick
CMsgDebugStall = 0x7E, // unused?
CMsgCheckQueuedJoinRequestReply = 0x59,
CMsgCheckQueuedJoinRequest = 0x51,
CMsgBlacklist = 0x0C,
CMsgRoamingRequestBubbleRequiredResponse = 0x83,
CMsgRoamingRequestBubbleRequiredCheck = 0x82,
CMsgRoamingRequestBubble = 0x2E,
CMsgRoamingJoinBubble = 0x4C,
CMsgRoamingJoinBubbleAck = 0x3F,
CMsgRoamingInitialBubble = 0x32,
CMsgVoiceStatus = 0x03,
CMsgTextChatStatus = 0x00,
CMsgJoinResponse2 = 0x08,
CMsgJoinRequest2 = 0x68,
CMsgNetTimeSync = 0x38, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 37
CMsgNetComplaint = 0x55, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 54
CMsgNetLagPing = 0x27, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 26
CMsgSearchResponse = 0x6B, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 6A
CMsgSearchRequest = 0x05, // unused?
CMsgQosProbeResponse = 0x2C, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2B
CMsgQosProbeRequest = 0x1D, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 1C
CMsgCxnRelayAddressChanged = 0x49, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 48
CMsgCxnRequestRemoteTimeout = 0x2F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2E
CMsgSessionDetailRequest = 0x22, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 21
CMsgSessionDetailResponse = 0x13, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 12
CMsgKeyExchangeOffer = 0x0F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 0E (last result)
CMsgKeyExchangeAnswer = 0x44, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 43
CMsg_0x87 = 0x87,
CMsg_0x88 = 0x88,
CMsg_0x80 = 0x80,
CMsg_0x28 = 0x28,
CMsg_0x11 = 0x11,
CMsg_0x45 = 0x45,
CMsg_0x89 = 0x89,
CMsg_0x86 = 0x86,
};
namespace netConnection {
class InFrame
{
@ -159,122 +286,6 @@ namespace rage
char pad_007C[4]; //0x007C
void* m_data; //0x0080
};
enum class MessageType : std::uint32_t
{
MsgInvalid = 0xFFFFF,
MsgSessionAcceptChat = 0x62,
MsgStartMatchCmd = 0x2D,
MsgSetInvitableCmd = 0x1F,
MsgSessionMemberIds = 0x23,
MsgRequestGamerInfo = 0x54,
MsgRemoveGamersFromSessionCmd = 0x53,
MsgNotMigrating = 0x35,
MsgMigrateHostResponse = 0x12,
MsgMigrateHostRequest = 0x66,
MsgJoinResponse = 0x2A,
MsgJoinRequest = 0x41,
MsgHostLeftWhilstJoiningCmd = 0x58,
MsgConfigResponse = 0x5F,
MsgConfigRequest = 0x48,
MsgChangeSessionAttributesCmd = 0x5A,
MsgAddGamerToSessionCmd = 0x64, // this is where send net info to lobby is called, among other things
MsgReassignResponse = 0x10,
MsgReassignNegotiate = 0x01,
MsgReassignConfirm = 0x26,
MsgPlayerData = 0x18,
MsgPackedReliables = 0x30,
MsgPackedCloneSyncACKs = 0x3B,
MsgNonPhysicalData = 0x16,
MsgNetArrayMgrUpdateAck = 0x5D,
MsgNetArrayMgrUpdate = 0x60,
MsgNetArrayMgrSplitUpdateAck = 0x25,
MsgScriptVerifyHostAck = 0x0B,
MsgScriptVerifyHost = 0x3E,
MsgScriptNewHost = 0x0E,
MsgScriptMigrateHostFailAck = 0x1A,
MsgScriptMigrateHost = 0x33,
MsgScriptLeaveAck = 0x40,
MsgScriptLeave = 0x17,
MsgScriptJoinHostAck = 0x4D,
MsgScriptJoinAck = 0x43,
MsgScriptJoin = 0x5C,
MsgScriptHostRequest = 0x67,
MsgScriptHandshakeAck = 0x5B,
MsgScriptHandshake = 0x57,
MsgScriptBotLeave = 0x2B, // unused?
MsgScriptBotJoinAck = 0x63, // unused?
MsgScriptBotJoin = 0x1C, // unused?
MsgScriptBotHandshakeAck = 0x31, // unused?
MsgScriptBotHandshake = 0x4B, // unused?
MsgPartyLeaveGame = 0x3D,
MsgPartyEnterGame = 0x1E,
MsgCloneSync = 0x4E, // aka clone_create, clone_sync etc.
MsgActivateNetworkBot = 0x65, // unused?
MsgRequestObjectIds = 0x29,
MsgInformObjectIds = 0x09,
MsgTextMessage = 0x24, // this one is for chat
MsgPlayerIsTyping = 0x61,
MsgPackedEvents = 0x4F, // aka received_event
MsgPackedEventReliablesMsgs = 0x20,
MsgRequestKickFromHost = 0x0D,
MsgTransitionToGameStart = 0x50,
MsgTransitionToGameNotify = 0x02,
MsgTransitionToActivityStart = 0x06,
MsgTransitionToActivityFinish = 0x36,
MsgTransitionParameters = 0x3C,
MsgTransitionParameterString = 0x37,
MsgTransitionLaunchNotify = 0x1B,
MsgTransitionLaunch = 0x19,
MsgTransitionGamerInstruction = 0x14,
MsgTextMessage2 = 0x0A, // this one is for phone message
MsgSessionEstablishedRequest = 0x52,
MsgSessionEstablished = 0x07,
MsgRequestTransitionParameters = 0x42,
MsgRadioStationSyncRequest = 0x47,
MsgRadioStationSync = 0x46,
MsgPlayerCardSync = 0x3A,
MsgPlayerCardRequest = 0x6A,
MsgLostConnectionToHost = 0x81,
MsgKickPlayer = 0x34, // host kick
MsgDebugStall = 0x7E, // unused?
MsgCheckQueuedJoinRequestReply = 0x59,
MsgCheckQueuedJoinRequest = 0x51,
MsgBlacklist = 0x0C,
MsgRoamingRequestBubbleRequiredResponse = 0x83,
MsgRoamingRequestBubbleRequiredCheck = 0x82,
MsgRoamingRequestBubble = 0x2E,
MsgRoamingJoinBubble = 0x4C,
MsgRoamingJoinBubbleAck = 0x3F,
MsgRoamingInitialBubble = 0x32,
MsgVoiceStatus = 0x03,
MsgTextChatStatus = 0x00,
MsgJoinResponse2 = 0x08,
MsgJoinRequest2 = 0x68,
MsgNetTimeSync = 0x38, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 37
MsgNetComplaint = 0x55, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 54
MsgNetLagPing = 0x27, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 26
MsgSearchResponse = 0x6B, // unused? ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 6A
MsgSearchRequest = 0x05, // unused?
MsgQosProbeResponse = 0x2C, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2B
MsgQosProbeRequest = 0x1D, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 1C
MsgCxnRelayAddressChanged = 0x49, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 48
MsgCxnRequestRemoteTimeout = 0x2F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 2E
MsgSessionDetailRequest = 0x22, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 21
MsgSessionDetailResponse = 0x13, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 12
MsgKeyExchangeOffer = 0x0F, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 0E (last result)
MsgKeyExchangeAnswer = 0x44, // ctor 40 53 48 83 EC 20 BA ? ? ? ? 4C 8D 0D ? ? ? ? 48 8B D9 44 8D 42 43
Msg_0x87 = 0x87,
Msg_0x88 = 0x88,
Msg_0x80 = 0x80,
Msg_0x28 = 0x28,
Msg_0x11 = 0x11,
Msg_0x45 = 0x45,
Msg_0x89 = 0x89,
Msg_0x86 = 0x86,
};
}
class CEventNetwork