diff --git a/BigBaseV2/src/backend/backend.cpp b/BigBaseV2/src/backend/backend.cpp index c7306d67..cba50b63 100644 --- a/BigBaseV2/src/backend/backend.cpp +++ b/BigBaseV2/src/backend/backend.cpp @@ -41,6 +41,7 @@ namespace big QUEUE_JOB_BEGIN_CLAUSE() { looped::self_frame_flags(); + looped::self_free_cam(); looped::self_godmode(); looped::self_off_radar(); looped::self_police(); diff --git a/BigBaseV2/src/backend/looped/looped.hpp b/BigBaseV2/src/backend/looped/looped.hpp index fc7bd63e..6dbb9562 100644 --- a/BigBaseV2/src/backend/looped/looped.hpp +++ b/BigBaseV2/src/backend/looped/looped.hpp @@ -15,6 +15,7 @@ namespace big static void protections_replay_interface(); static void self_frame_flags(); + static void self_free_cam(); static void self_godmode(); static void self_off_radar(); static void self_police(); diff --git a/BigBaseV2/src/backend/looped/self/free_cam.cpp b/BigBaseV2/src/backend/looped/self/free_cam.cpp new file mode 100644 index 00000000..780f80f8 --- /dev/null +++ b/BigBaseV2/src/backend/looped/self/free_cam.cpp @@ -0,0 +1,93 @@ +#include "backend/looped/looped.hpp" +#include "natives.hpp" +#include "util/math.hpp" + +namespace big +{ + static bool bLastFreeCam = false; + + static float speed = 0.5f; + static float mult = 0.f; + + static Cam cCam = -1; + static Vector3 vecPosition; + static Vector3 vecRot; + + void looped::self_free_cam() + { + if (g_local_player == nullptr) return; + + Entity ent = PLAYER::PLAYER_PED_ID(); + if (!g.self.free_cam && !bLastFreeCam) return; + + if (g.self.free_cam && !bLastFreeCam) + { + cCam = CAM::CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", 0); + + vecPosition = CAM::GET_GAMEPLAY_CAM_COORD(); + vecRot = CAM::GET_GAMEPLAY_CAM_ROT(2); + + CAM::SET_CAM_COORD(cCam, vecPosition.x, vecPosition.y, vecPosition.z); + CAM::SET_CAM_ROT(cCam, vecRot.x, vecRot.y, vecRot.z, 2); + CAM::SET_CAM_ACTIVE(cCam, true); + CAM::RENDER_SCRIPT_CAMS(true, true, 500, true, true, 0); + + bLastFreeCam = true; + } + else if (!g.self.free_cam && bLastFreeCam) + { + CAM::SET_CAM_ACTIVE(cCam, false); + CAM::RENDER_SCRIPT_CAMS(false, true, 500, true, true, 0); + CAM::DESTROY_CAM(cCam, false); + + bLastFreeCam = false; + + return; + } + + PAD::DISABLE_ALL_CONTROL_ACTIONS(0); + const int controls[] = { 1, 2, 3, 4, 5, 6, 270, 271, 272, 273 }; + for (int control : controls) + PAD::ENABLE_CONTROL_ACTION(2, control, true); + + Vector3 vecChange = { 0.f, 0.f, 0.f }; + + // Left Shift + if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 21)) + vecChange.z += speed / 2; + // Left Control + if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 36)) + vecChange.z -= speed / 2; + // Forward + if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 32)) + vecChange.y += speed; + // Backward + if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 33)) + vecChange.y -= speed; + // Left + if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 34)) + vecChange.x -= speed; + // Right + if (PAD::IS_DISABLED_CONTROL_PRESSED(0, 35)) + vecChange.x += speed; + + if (vecChange.x == 0.f && vecChange.y == 0.f && vecChange.z == 0.f) + mult = 0.f; + else if (mult < 10) + mult += 0.15f; + + Vector3 rot = CAM::GET_CAM_ROT(cCam, 2); + //float pitch = math::deg_to_rad(rot.x); // vertical + //float roll = rot.y; + float yaw = math::deg_to_rad(rot.z); // horizontal + + vecPosition.x += (vecChange.x * cos(yaw) - vecChange.y * sin(yaw)) * mult; + vecPosition.y += (vecChange.x * sin(yaw) + vecChange.y * cos(yaw)) * mult; + vecPosition.z += vecChange.z * mult; + + CAM::SET_CAM_COORD(cCam, vecPosition.x, vecPosition.y, vecPosition.z); + + vecRot = CAM::GET_GAMEPLAY_CAM_ROT(2); + CAM::SET_CAM_ROT(cCam, vecRot.x, vecRot.y, vecRot.z, 2); + } +} \ No newline at end of file diff --git a/BigBaseV2/src/core/globals.hpp b/BigBaseV2/src/core/globals.hpp index 07299128..a16b479b 100644 --- a/BigBaseV2/src/core/globals.hpp +++ b/BigBaseV2/src/core/globals.hpp @@ -60,6 +60,7 @@ struct globals { }; bool godmode = false; + bool free_cam = false; bool off_radar = false; bool never_wanted = false; bool noclip = false; diff --git a/BigBaseV2/src/gui/window/main/tab_self.cpp b/BigBaseV2/src/gui/window/main/tab_self.cpp index b49f563e..a0303d6b 100644 --- a/BigBaseV2/src/gui/window/main/tab_self.cpp +++ b/BigBaseV2/src/gui/window/main/tab_self.cpp @@ -20,6 +20,7 @@ namespace big ImGui::Checkbox("God Mode", &g.self.godmode); ImGui::Checkbox("Off Radar", &g.self.off_radar); + ImGui::Checkbox("Free Cam", &g.self.free_cam); ImGui::Checkbox("No Clip", &g.self.noclip); ImGui::Checkbox("No Ragdoll", &g.self.no_ragdoll);