diff --git a/BigBaseV2/src/backend/backend.cpp b/BigBaseV2/src/backend/backend.cpp index 5dd47f3d..74a14302 100644 --- a/BigBaseV2/src/backend/backend.cpp +++ b/BigBaseV2/src/backend/backend.cpp @@ -21,6 +21,11 @@ namespace big looped::self_no_ragdoll(); }QUEUE_JOB_END_CLAUSE + QUEUE_JOB_BEGIN_CLAUSE() + { + looped::player_specate(); + }QUEUE_JOB_END_CLAUSE + QUEUE_JOB_BEGIN_CLAUSE() { looped::self_noclip(); diff --git a/BigBaseV2/src/backend/looped/looped.hpp b/BigBaseV2/src/backend/looped/looped.hpp index 19d7cdf3..9b5b946c 100644 --- a/BigBaseV2/src/backend/looped/looped.hpp +++ b/BigBaseV2/src/backend/looped/looped.hpp @@ -5,6 +5,8 @@ namespace big { class looped { public: + static void player_specate(); + static void self_godmode(); static void self_off_radar(); static void self_noclip(); diff --git a/BigBaseV2/src/backend/looped/player/spectate.cpp b/BigBaseV2/src/backend/looped/player/spectate.cpp new file mode 100644 index 00000000..cac80d5f --- /dev/null +++ b/BigBaseV2/src/backend/looped/player/spectate.cpp @@ -0,0 +1,19 @@ +#include "backend/looped/looped.hpp" +#include "pointers.hpp" +#include "natives.hpp" + +namespace big +{ + static Ped spectated_ped = -1; + static bool bLastSpectating = false; + + void looped::player_specate() + { + Ped player = PLAYER::GET_PLAYER_PED(g.selected_player.id); + + if (player != spectated_ped || (!bLastSpectating && bLastSpectating != g.player.spectating)) + g_pointers->m_spectate_player(g.player.spectating, player); + + bLastSpectating = g.player.spectating; + } +} \ No newline at end of file diff --git a/BigBaseV2/src/backend/looped/system/update_player_structs.cpp b/BigBaseV2/src/backend/looped/system/update_player_structs.cpp index c5cd60c5..8b7d7919 100644 --- a/BigBaseV2/src/backend/looped/system/update_player_structs.cpp +++ b/BigBaseV2/src/backend/looped/system/update_player_structs.cpp @@ -17,6 +17,7 @@ namespace big { // if (!g.players[i].is_online) // tell user player joined + g.players[i].id = i; g.players[i].is_online = true; int iNetworkHandle[26]; diff --git a/BigBaseV2/src/core/data/player_struct.hpp b/BigBaseV2/src/core/data/player_struct.hpp index 4c89de01..73914832 100644 --- a/BigBaseV2/src/core/data/player_struct.hpp +++ b/BigBaseV2/src/core/data/player_struct.hpp @@ -7,6 +7,7 @@ namespace big { struct CPlayer { + int32_t id; char name[20]; bool is_friend = false; diff --git a/BigBaseV2/src/function_types.hpp b/BigBaseV2/src/function_types.hpp index a867bf65..a192bbb1 100644 --- a/BigBaseV2/src/function_types.hpp +++ b/BigBaseV2/src/function_types.hpp @@ -33,4 +33,6 @@ namespace big::functions ); using send_event_ack = void(rage::netEventMgr* event_manager, CNetGamePlayer* source_player, CNetGamePlayer* target_player, int event_index, int event_handled_bitset); // Received Event Signatures END + + using spectate_player = bool(bool toggle, Ped player); } diff --git a/BigBaseV2/src/pointers.cpp b/BigBaseV2/src/pointers.cpp index abb5727d..c479d32c 100644 --- a/BigBaseV2/src/pointers.cpp +++ b/BigBaseV2/src/pointers.cpp @@ -166,6 +166,11 @@ namespace big memset(spectator_check, 0x90, 0x4); }); + + main_batch.add("Spectate Player", "48 89 5C 24 ? 57 48 83 EC 20 41 8A F8 84 C9", [this](memory::handle ptr) + { + m_spectate_player = ptr.as(); + }); main_batch.run(memory::module(nullptr)); diff --git a/BigBaseV2/src/pointers.hpp b/BigBaseV2/src/pointers.hpp index e438b82a..f87848b4 100644 --- a/BigBaseV2/src/pointers.hpp +++ b/BigBaseV2/src/pointers.hpp @@ -56,6 +56,8 @@ namespace big functions::received_event* m_received_event{}; functions::send_event_ack* m_send_event_ack{}; // Received Event Signatures END + + functions::spectate_player* m_spectate_player{}; }; inline pointers *g_pointers{};