diff --git a/src/Game.cpp b/src/Game.cpp index 1231ae0..0350719 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -3,6 +3,7 @@ #include "Menu.h" #include "Ui.h" #include "Util.h" +#include "CIplStore.h" ImGuiTextFilter Game::filter = ""; std::vector Game::search_categories; @@ -22,11 +23,15 @@ int Game::random_cheats::enable_wait_time = 10; uint Game::random_cheats::timer = 0; std::string Game::random_cheats::enabled_cheats[92][2]; -bool Game::airbreak::init_done = false; -bool Game::airbreak::enable = false; -float Game::airbreak::speed = 0.08f; -float Game::airbreak::tmouseX = 0; -float Game::airbreak::tmouseY = 0; +bool Game::freecam::init_done = false; +bool Game::freecam::enable = false; +float Game::freecam::speed = 0.08f; +float Game::freecam::tmouseX = 0; +float Game::freecam::tmouseY = 0; +float Game::freecam::mouseX = 0; +float Game::freecam::mouseY = 0; +int Game::freecam::hped = -1; +CPed *Game::freecam::ped = nullptr; bool Game::disable_cheats = false; bool Game::disable_replay = false; @@ -161,17 +166,17 @@ Game::Game() } } - if (Ui::HotKeyPressed(Menu::hotkeys::airbreak)) + if (Ui::HotKeyPressed(Menu::hotkeys::freecam)) { - if (airbreak::enable) + if (freecam::enable) { - airbreak::enable = false; - ClearAirbreakStuff(); + freecam::enable = false; + ClearFreecamStuff(); } - else airbreak::enable = true; + else freecam::enable = true; } - if (airbreak::enable) - AirbreakMode(player,hplayer); + if (freecam::enable) + FreeCam(); }; } @@ -195,89 +200,104 @@ void SetPlayerMission(std::string& rootkey, std::string& name, std::string& id) } -void Game::AirbreakMode(CPlayerPed* player, int hplayer) +void Game::FreeCam() { - CVector pos = player->GetPosition(); - uint delta_speed = airbreak::speed * (CTimer::m_snTimeInMillisecondsNonClipped - CTimer::m_snPreviousTimeInMillisecondsNonClipped); + uint delta_speed = freecam::speed * (CTimer::m_snTimeInMillisecondsNonClipped - CTimer::m_snPreviousTimeInMillisecondsNonClipped); - if (!airbreak::init_done) + if (!freecam::init_done) { + CPlayerPed *player = FindPlayerPed(-1); Command(0, true); - Command(hplayer,true); - Command(hplayer, false); - Command(hplayer, false); - player->m_nPedFlags.bDontRender = true; - CHud::bScriptDontDisplayRadar = true; CHud::m_Wants_To_Draw_Hud = false; + CVector player_pos = player->GetPosition(); + CPad::GetPad(0)->DisablePlayerControls = true; - airbreak::tmouseX = TheCamera.GetHeading() + (90.0f * 3.1416f / 180.0f); - airbreak::tmouseY = 0; - airbreak::init_done = true; + Command(player_pos.x,player_pos.y,player_pos.z, &freecam::hped); + freecam::ped = CPools::GetPed(freecam::hped); + freecam::ped->m_bIsVisible = false; + + Command(freecam::hped,true); + Command(freecam::hped, false); + Command(freecam::hped, false); + + freecam::tmouseX = player->GetHeading(); + freecam::tmouseY = 0; + + freecam::init_done = true; + player_pos.z -= 20; + freecam::ped->SetPosn(player_pos); } + CVector pos = freecam::ped->GetPosition(); - float mul = 1.0f; + Command(&freecam::mouseX, &freecam::mouseY); + freecam::tmouseX = freecam::tmouseX - freecam::mouseX/250; + freecam::tmouseY = freecam::tmouseY + freecam::mouseY/3; - airbreak::tmouseX -= (CPad::NewMouseControllerState.X / 6.0f); - airbreak::tmouseY += (CPad::NewMouseControllerState.Y / 3.0f); + if (freecam::tmouseY > 150) + freecam::tmouseY = 150; - airbreak::tmouseY = (airbreak::tmouseY > 17.1887f) ? 17.1887f : airbreak::tmouseY; - airbreak::tmouseY = (airbreak::tmouseY < -17.1887f) ? -17.1887f : airbreak::tmouseY; - - TheCamera.m_fOrientation = airbreak::tmouseY * (3.1416 / 180); - CHud::SetMessage((char*)std::to_string(TheCamera.m_fOrientation).c_str()); + if (freecam::tmouseY < -150) + freecam::tmouseY = -150; + if (KeyPressed(VK_RETURN)) + { + CPlayerPed *player = FindPlayerPed(-1); + CVector pos = freecam::ped->GetPosition(); + CEntity* player_entity = FindPlayerEntity(-1); + pos.z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, 1000, 0, &player_entity) + 0.5f; + Command(CPools::GetPedRef(player),pos.x,pos.y,pos.z); + } + if (KeyPressed(VK_RCONTROL)) - mul /= 2; + delta_speed /= 2; if (KeyPressed(VK_RSHIFT)) - mul *= 2; + delta_speed *= 2; if (KeyPressed(VK_KEY_I) || KeyPressed(VK_KEY_K)) { if (KeyPressed(VK_KEY_K)) - mul *= -1; + delta_speed *= -1; - float angle = TheCamera.GetHeading() + (90.0f * 3.1416f / 180.0f); - - pos.x += delta_speed * cos(angle) * mul; - pos.y += delta_speed * sin(angle) * mul; - pos.z += delta_speed * sin(TheCamera.m_fOrientation*2) * mul; + float angle; + Command(freecam::hped,&angle); + + pos.x += delta_speed * cos(angle * 3.14159f/180.0f); + pos.y += delta_speed * sin(angle * 3.14159f/180.0f); + pos.z += delta_speed* 2 * sin(freecam::tmouseY/3* 3.14159f/180.0f); } if (KeyPressed(VK_KEY_J) || KeyPressed(VK_KEY_L)) { if (KeyPressed(VK_KEY_J)) - mul *= -1; + delta_speed *= -1; - float angle = TheCamera.GetHeading() + (3.1416f / 180.0f); + float angle; + Command(freecam::hped,&angle); + angle -= 90.0f; - pos.x += delta_speed * cos(angle) * mul; - pos.y += delta_speed * sin(angle) * mul; + pos.x += delta_speed * cos(angle * 3.14159f/180.0f); + pos.y += delta_speed * sin(angle * 3.14159f/180.0f); } - player->SetPosn(pos); + freecam::ped->SetHeading(freecam::tmouseX); + Command(freecam::hped,0.0,0.0,20.0,90.0,180,freecam::tmouseY,0.0,2); + freecam::ped->SetPosn(pos); + CIplStore::AddIplsNeededAtPosn(pos); } -void Game::ClearAirbreakStuff() +void Game::ClearFreecamStuff() { - CPlayerPed *player = FindPlayerPed(); - uint hplayer = CPools::GetPedRef(player); - - airbreak::init_done = false; + freecam::init_done = false; Command(0, false); - Command(hplayer, false); - Command(hplayer, true); - Command(hplayer, true); - player->m_nPedFlags.bDontRender = false; - CHud::bScriptDontDisplayRadar = false; CHud::m_Wants_To_Draw_Hud = true; + CPad::GetPad(0)->DisablePlayerControls = false; + + Command(freecam::hped); + freecam::ped = nullptr; - CVector pos = player->GetPosition(); - CEntity* player_entity = FindPlayerEntity(-1); - pos.z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, 1000, 0, &player_entity) + 0.5f; - player->SetPosn(pos); Command(); } @@ -362,21 +382,6 @@ of LS without completing missions")) } if (ImGui::BeginTabItem("Menus")) { - if (ImGui::CollapsingHeader("Airbreak mode")) - { - if (Ui::CheckboxWithHint("Enable", &airbreak::enable, "Forward: I\tBackward: K\ -\nLeft: J\t\t Right: L\n\nSlower: RCtrl\tFaster: RShift")) - { - if (!airbreak::enable) - ClearAirbreakStuff(); - } - ImGui::Spacing(); - - ImGui::SliderFloat("Movement Speed", &airbreak::speed, 0.0, 0.5); - - ImGui::Spacing(); - ImGui::Separator(); - } if (ImGui::CollapsingHeader("Current day")) { int day = CClock::CurrentDay-1; @@ -387,6 +392,23 @@ of LS without completing missions")) } Ui::EditAddress("Days passed", 0xB79038, 0, 9999); Ui::EditReference("FPS limit", RsGlobal.frameLimit, 1, 30, 60); + if (ImGui::CollapsingHeader("Free cam")) + { + if (Ui::CheckboxWithHint("Enable", &freecam::enable, "Forward: I\tBackward: K\ +\nLeft: J\t\t Right: L\n\nSlower: RCtrl\tFaster: RShift")) + { + if (!freecam::enable) + ClearFreecamStuff(); + } + ImGui::Spacing(); + + ImGui::SliderFloat("Movement Speed", &freecam::speed, 0.0, 0.5); + + ImGui::Spacing(); + ImGui::TextWrapped("Press Enter to teleport player to camera location"); + ImGui::Spacing(); + ImGui::Separator(); + } Ui::EditReference("Game speed", CTimer::ms_fTimeScale,1, 1, 10); Ui::EditFloat("Gravity", 0x863984, -1.0f, 0.008f, 1.0f); diff --git a/src/Game.h b/src/Game.h index 5954290..13e61b0 100644 --- a/src/Game.h +++ b/src/Game.h @@ -19,12 +19,14 @@ public: static std::string enabled_cheats[92][2]; }; - struct airbreak + struct freecam { static bool enable; static float speed; static bool init_done; - static float tmouseX, tmouseY; + static CPed *ped; + static int hped; + static float mouseX, mouseY, tmouseX, tmouseY; }; static bool disable_cheats; @@ -52,8 +54,7 @@ public: Game(); ~Game(); static void Main(); - static void AirbreakMode(CPlayerPed* player, int hplayer); - static void CameraMode(); - static void ClearAirbreakStuff(); + static void FreeCam(); + static void ClearFreecamStuff(); }; diff --git a/src/Menu.cpp b/src/Menu.cpp index bdc6932..fa74ec6 100644 --- a/src/Menu.cpp +++ b/src/Menu.cpp @@ -19,7 +19,7 @@ float Menu::overlay::posX = NULL; float Menu::overlay::posY = NULL; HotKeyData Menu::hotkeys::aim_skin_changer{}; -HotKeyData Menu::hotkeys::airbreak{}; +HotKeyData Menu::hotkeys::freecam{}; HotKeyData Menu::hotkeys::command_window{}; HotKeyData Menu::hotkeys::flip_veh{}; HotKeyData Menu::hotkeys::fix_veh{}; @@ -52,8 +52,8 @@ Menu::Menu() hotkeys::aim_skin_changer.key1 = config.GetValue("hotkey.aim_skin_changer.key1", VK_RETURN); hotkeys::aim_skin_changer.key2 = config.GetValue("hotkey.aim_skin_changer.key2", VK_RETURN); - hotkeys::airbreak.key1 = config.GetValue("hotkey.airbreak.key1", VK_LMENU); - hotkeys::airbreak.key2 = config.GetValue("hotkey.airbreak.key2", VK_KEY_A); + hotkeys::freecam.key1 = config.GetValue("hotkey.freecam.key1", VK_LMENU); + hotkeys::freecam.key2 = config.GetValue("hotkey.freecam.key2", VK_KEY_A); hotkeys::quick_ss.key1 = config.GetValue("hotkey.quick_screenshot.key1", VK_LCONTROL); hotkeys::quick_ss.key2 = config.GetValue("hotkey.quick_screenshot.key2", VK_KEY_S); @@ -351,10 +351,10 @@ void Menu::Main() config.SetValue("hotkey.aim_skin_changer.key1", hotkeys::aim_skin_changer.key1); config.SetValue("hotkey.aim_skin_changer.key2", hotkeys::aim_skin_changer.key2); } - if (Ui::HotKey("Airbreak mode", hotkeys::airbreak)) + if (Ui::HotKey("Freecam", hotkeys::freecam)) { - config.SetValue("hotkey.airbreak.key1", hotkeys::airbreak.key1); - config.SetValue("hotkey.airbreak.key2", hotkeys::airbreak.key2); + config.SetValue("hotkey.freecam.key1", hotkeys::freecam.key1); + config.SetValue("hotkey.freecam.key2", hotkeys::freecam.key2); } if (Ui::HotKey("Take quick screenshot", hotkeys::quick_ss)) { diff --git a/src/Menu.h b/src/Menu.h index a61e5b1..cb3bada 100644 --- a/src/Menu.h +++ b/src/Menu.h @@ -20,7 +20,7 @@ public: struct hotkeys { static HotKeyData aim_skin_changer; - static HotKeyData airbreak; + static HotKeyData freecam; static HotKeyData command_window; static HotKeyData fix_veh; static HotKeyData flip_veh; diff --git a/src/Ui.h b/src/Ui.h index a9ff772..e8c3314 100644 --- a/src/Ui.h +++ b/src/Ui.h @@ -107,6 +107,12 @@ void Ui::EditAddress(const char *label, const int address, const int min, const ImGui::Spacing(); + if (val < min) + val = min; + + if (val > max) + val = max; + if (ImGui::Button(("Minimum##" + std::string(label)).c_str(), Ui::GetSize(items))) patch::Set(address, min, false); diff --git a/src/Visual.cpp b/src/Visual.cpp index 6c59c84..7618a5a 100644 --- a/src/Visual.cpp +++ b/src/Visual.cpp @@ -3,6 +3,7 @@ #include "Ui.h" #include "Util.h" #include "Game.h" +#include "CHudColours.h" bool Visual::lock_weather = false; int Visual::weather_type_backup = 0; @@ -14,6 +15,15 @@ std::vector Visual::weather_names{ "EXTRASUNNY DESERT","SUNNY DESERT","SANDSTORM DESERT","UNDERWATER","EXTRACOLOURS 1","EXTRACOLOURS 2" }; +// Let's just use our own variables +static float radar_posX; +static float radar_posY; +static float radar_width = 76.0f; +static float radar_height = 104.0f; +static CHudColour health_bar; +//static CHudColour armour_bar; +static bool init_patches = false; + Visual::Visual() { Events::initGameEvent += [] @@ -208,24 +218,62 @@ void Visual::Main() } if (ImGui::BeginTabItem("Menus")) { - Ui::ColorPickerAddress("Health bar + debt color", 0xBAB22C, ImVec4(180,25,29,255)); + + if (!init_patches) + { + // read those values from game + health_bar = HudColour.m_aColours[0]; + //armour_bar = HudColour.m_aColours[4]; + + radar_posX = *(float*)*(int*)0x5834D4; + radar_posY = *(float*)*(int*)0x583500; + radar_height = *(float*)*(int*)0x5834F6; + radar_width = *(float*)*(int*)0x5834C2; + + // patch radar stuff oof + patch::SetPointer(0x5834D4, &radar_posX); + patch::SetPointer(0x583500, &radar_posY); + patch::SetPointer(0x5834F6, &radar_height); + patch::SetPointer(0x5834C2, &radar_width); + + patch::SetPointer(0x58A79B, &radar_posX); + patch::SetPointer(0x58A7C7, &radar_posY); + patch::SetPointer(0x58A801, &radar_height); + patch::SetPointer(0x58A7E9, &radar_width); + patch::SetPointer(0x58A836, &radar_posX); + patch::SetPointer(0x58A868, &radar_posY); + patch::SetPointer(0x58A8AB, &radar_height); + patch::SetPointer(0x58A840, &radar_width); + patch::SetPointer(0x58A8E9, &radar_posX); + patch::SetPointer(0x58A913, &radar_posY); + patch::SetPointer(0x58A921, &radar_height); + patch::SetPointer(0x58A943, &radar_width); + patch::SetPointer(0x58A98A, &radar_posX); + patch::SetPointer(0x58A9C7, &radar_posY); + patch::SetPointer(0x58A9D5, &radar_height); + patch::SetPointer(0x58A99D, &radar_width); + + patch::SetPointer(0x589331, &health_bar); + //patch::SetPointer(0x5890FC,&armour_bar); + init = true; + } + + Ui::ColorPickerAddress("Armour bar", *(int*)0x5890FC, ImVec4(180,25,29,255)); + Ui::ColorPickerAddress("Health bar", *(int*)0x589331, ImVec4(180,25,29,255)); Ui::ColorPickerAddress("Main menu title border color", 0xBAB240, ImVec4(0,0,0,255)); Ui::ColorPickerAddress("Money color", 0xBAB230, ImVec4(54,104,44,255)); static std::vector font_outline{{ "No outline", 0 }, { "Thin outline" ,1 }, { "Default outline" ,2 }}; Ui::EditRadioButtonAddressEx("Money font outline", 0x58F58D, font_outline); static std::vector style{ { "Style 1", 1 }, { "Style 2" ,2 }, { "Default style" ,3 }}; Ui::EditRadioButtonAddressEx("Money font style", 0x58F57F, style); - Ui::EditAddress("Radar Height", 0x866B74, 0, 76, 999); - Ui::EditAddress("Radar Width", 0x866B78, 0, 94, 999); - Ui::EditAddress("Radar X position", 0x858A10, -999, 40, 999); - Ui::EditAddress("Radar Y position", 0x866B70, -999, 104, 999); + Ui::EditAddress("Radar Height", *(int*)0x5834F6, 0, 76, 999); + Ui::EditAddress("Radar Width", *(int*)0x5834C2, 0, 94, 999); + Ui::EditAddress("Radar X position", *(int*)0x5834D4, -999, 40, 999); + Ui::EditAddress("Radar Y position", *(int*)0x583500, -999, 104, 999); Ui::EditAddress("Radar zoom", 0xA444A3, 0, 0, 170); Ui::ColorPickerAddress("Radio station color", 0xBAB24C, ImVec4(150,150,150,255)); - Ui::ColorPickerAddress("Styled text color", 0xBAB258, ImVec4(226,192,99,255)); - Ui::ColorPickerAddress("Text color", 0xBAB234, ImVec4(50,60,127,255)); static std::vector star_border{ { "No border", 0 }, { "Default" ,1 }, { "Bold border" ,2 }}; Ui::EditRadioButtonAddressEx("Wanted star border", 0x58DD41, star_border); - Ui::ColorPickerAddress("Wanted star color + some text", 0xBAB244, ImVec4(144,98,16,255)); ImGui::EndTabItem(); }