diff --git a/resource/III/CheatMenu/json/mission.json b/resource/III/CheatMenu/json/mission.json new file mode 100644 index 0000000..19e7838 --- /dev/null +++ b/resource/III/CheatMenu/json/mission.json @@ -0,0 +1,114 @@ +{ + "Misc" : + { + "Patriot Playground": "7", + "A Ride In The Park": "8", + "Gripped!": "9 ", + "Multistorey Mayhem": "10", + "Paramedic": "11", + "Firefighter": "12", + "Vigilante": "13", + "Taxi Driver": "14", + "The Exchange": "79" + }, + "Asuka Kasen" : + { + "Sayonara Salvatore": "44", + "Under Surveillance": "45", + "Paparazzi Purge": "46", + "Payday For Ray": "47", + "Two-Faced Tanner": "48", + "Bait": "71", + "Espresso-2-Go!": "72", + "S.A.M.": "73" + }, + "Kenji Kasen" : + { + "Kanbu Bust-Out": "49", + "Grand Theft Auto": "50", + "Deal Steal": "51", + "Shima": "52", + "Smack Down": "53" + }, + "Ray Machowski" : + { + "Silence The Sneak": "54", + "Arms Shortage": "55", + "Evidence Dash": "56", + "Gone Fishing": "57", + "Plaster Blaster": "58", + "Marked Man": "59" + }, + "Donald Love" : + { + "Liberator": "60", + "Waka-Gashira Wipeout!": "61", + "A Drop In The Ocean": "62", + "Grand Theft Aero": "67", + "Escort Service": "68", + "Decoy": "69", + "Love's Disappearance": "70" + }, + "Toni Cipriani": + { + "Taking Out The Laundry": "30", + "The Pick-Up": "31", + "Salvatore's Called A Meeting": "32", + "Triads And Tribulations": "33", + "Blow Fish": "34" + }, + "Luigi Goterelli": + { + "Give Me Liberty and Luigi's Girls": "19", + "Don't Spank My Bitch Up": "20", + "Drive Misty For Me": "21", + "Pump-Action Pimp": "22", + "The Fuzz Ball": "23" + }, + "Marty Chonks" : + { + "The Crook": "15", + "The Thieves": "16", + "The Wife": "17", + "Her Lover": "18" + }, + "Salvatore Leone" : + { + "Chaperone": "35", + "Cutting The Grass": "36", + "Bomb Da Base: Act I": "37", + "Bomb Da Base: Act II": "38", + "Last Requests": "39" + }, + "Joey Leone" : + { + "Mike Lips Last Lunch": "24", + "Farewell 'Chunky' Lee Chong": "25", + "Van Heist": "26", + "Cipriani's Chauffeur": "27", + "Dead Skunk In The Trunk": "28", + "The Getaway": "29" + }, + "El Burro" : + { + "Turismo": "40", + "I Scream, You Scream": "41", + "Trial By Fire": "42", + "Big'N'Veiny": "43" + }, + "King Courtney" : + { + "Bling-Bling Scramble": "63", + "Uzi Rider": "64", + "Gangcar Round-Up": "65", + "Kingdom Come": "66" + }, + "D-Ice" : + { + "Uzi Money": "74", + "Toyminator": "75", + "Rigged To Blow": "76", + "Bullion Run": "77", + "Rumble": "78" + } +} \ No newline at end of file diff --git a/src/cheatmenu.h b/src/cheatmenu.h index ef8eece..3124018 100644 --- a/src/cheatmenu.h +++ b/src/cheatmenu.h @@ -10,10 +10,10 @@ #pragma once #ifndef GTA3 -#include "animation.h" -#include "game.h" #include "visual.h" #endif +#include "animation.h" +#include "game.h" #include "ped.h" #include "player.h" #include "teleport.h" @@ -25,7 +25,7 @@ #ifndef GTA3 class CheatMenu : Hook, Animation, Game, Menu, Ped, Player, Teleport, Vehicle, Visual, Weapon #else -class CheatMenu : Hook, Menu, Player, Teleport, Vehicle, Weapon +class CheatMenu : Hook, Animation, Game, Menu, Ped, Player, Teleport, Vehicle, Weapon #endif { private: @@ -37,7 +37,7 @@ private: { {"Teleport", &Teleport::Draw}, {"Player", &Player::Draw}, {"Ped", &Ped::Draw}, {"Dummy", nullptr}, {"Vehicle", &Vehicle::Draw}, {"Weapon", &Weapon::Draw}, - {"Menu", &Menu::Draw}, + {"Game", &Game::Draw}, {"Menu", &Menu::Draw}, }; #else static inline CallbackTable header diff --git a/src/game.cpp b/src/game.cpp index fbf805b..a656513 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -205,9 +205,11 @@ void SetPlayerMission(std::string& rootkey, std::string& name, std::string& id) uint hplayer = CPools::GetPedRef(player); int interior = 0; +#ifndef GTA3 Command<0x09E8>(hplayer, &interior); +#endif - if (BY_GAME(Util::IsOnMission(), true) && interior == 0) + if (BY_GAME(Util::IsOnMission(), true, true) && interior == 0) { player->SetWantedLevel(0); Command(std::stoi(id)); @@ -403,6 +405,9 @@ void Game::Draw() #elif GTAVC patch::Nop(0x602BD8, 5); patch::Nop(0x602BE7, 5); +#else // GTA3 + patch::Nop(0x5841B8, 5); + patch::Nop(0x5841C7, 5); #endif } else @@ -414,6 +419,9 @@ void Game::Draw() #elif GTAVC patch::SetRaw(0x602BD8, (char*)"\x88\xD8\x89\xF1\x50", 5); patch::SetRaw(0x602BE7, (char*)"\xE8\x34\x91\xEA\xFF", 5); +#else // GTA3 + patch::SetRaw(0x5841B8, (char*)"\x88\xD8\x89\xF1\x50", 5); + patch::SetRaw(0x5841C7, (char*)"\xE8\x84\xE2\xF0\xFF", 5); #endif } } @@ -421,15 +429,15 @@ void Game::Draw() { if (m_bDisableReplay) { - patch::SetUChar(BY_GAME(0x460500, 0x624EC0), 0xC3); + patch::SetUChar(BY_GAME(0x460500, 0x624EC0, 0x593170), 0xC3); } else { - patch::SetUChar(BY_GAME(0x460500, 0x624EC0), 0x80); + patch::SetUChar(BY_GAME(0x460500, 0x624EC0, 0x593170), 0x80); } } - Ui::CheckboxAddress("Faster clock", BY_GAME(0x96913B, 0xA10B87)); + Ui::CheckboxAddress("Faster clock", BY_GAME(0x96913B, 0xA10B87, 0x95CDBB)); #ifdef GTASA if (Ui::CheckboxWithHint("Forbidden area wl", &m_bForbiddenArea, "Wanted levels that appears outside \ of LS without completing missions")) @@ -443,22 +451,24 @@ of LS without completing missions")) patch::Set(0x441770, 0xC3, false); } } -#endif Ui::CheckboxAddress("Free pay n spray", 0x96C009); +#endif #ifdef GTAVC ImGui::NextColumn(); #endif +#ifdef GTASA Ui::CheckboxAddress("Freeze game", 0xA10B48); +#endif if (ImGui::Checkbox("Freeze game time", &m_bFreezeTime)) { if (m_bFreezeTime) { - patch::SetRaw(BY_GAME(0x52CF10, 0x487010), (char*)"\xEB\xEF", 2); + patch::SetRaw(BY_GAME(0x52CF10, 0x487010, 0x473460), (char*)"\xEB\xEF", 2); } else { - patch::SetRaw(BY_GAME(0x52CF10, 0x487010), (char*)BY_GAME("\x56\x8B","\x6A\x01"), 2); + patch::SetRaw(BY_GAME(0x52CF10, 0x487010, 0x473460), (char*)BY_GAME("\x56\x8B", "\x6A\x01", "\x6A\x01"), 2); } } @@ -507,11 +517,11 @@ Lowers armour, health, stamina etc.")) { if (m_bSyncTime) { - patch::RedirectCall(BY_GAME(0x53BFBD, 0x4A44F7), &RealTimeClock); + patch::RedirectCall(BY_GAME(0x53BFBD, 0x4A44F7, 0x48C8EB), &RealTimeClock); } else { - patch::RedirectCall(BY_GAME(0x53BFBD, 0x4A44F7), &CClock::Update); + patch::RedirectCall(BY_GAME(0x53BFBD, 0x4A44F7, 0x48C8EB), &CClock::Update); } } @@ -533,8 +543,8 @@ Lowers armour, health, stamina etc.")) ImGui::Separator(); } #endif - Ui::EditAddress("Days passed", BY_GAME(0xB79038,0x97F1F4), 0, 9999); - Ui::EditReference("FPS limit", BY_GAME(RsGlobal.frameLimit, RsGlobal.maxFPS), 1, 30, 60); + Ui::EditAddress("Days passed", BY_GAME(0xB79038, 0x97F1F4, 0x8F2BB8), 0, 9999); + Ui::EditReference("FPS limit", BY_GAME(RsGlobal.frameLimit, RsGlobal.maxFPS, RsGlobal.maxFPS), 1, 30, 60); #ifdef GTASA if (ImGui::CollapsingHeader("Free cam")) { @@ -557,7 +567,7 @@ Lowers armour, health, stamina etc.")) } #endif Ui::EditReference("Game speed", CTimer::ms_fTimeScale, 1, 1, 10); - Ui::EditFloat("Gravity", BY_GAME(0x863984,0x68F5F0), -1.0f, 0.008f, 1.0f, 1.0f, 0.01f); + Ui::EditFloat("Gravity", BY_GAME(0x863984, 0x68F5F0, 0x5F68D4), -1.0f, 0.008f, 1.0f, 1.0f, 0.01f); if (ImGui::CollapsingHeader("Set time")) { @@ -623,7 +633,7 @@ Lowers armour, health, stamina etc.")) { Call<0x438F50>(); } -#elif GTAVC +#else // GTA3 & GTAVC if (ImGui::Button("Sunny", Ui::GetSize(3))) { CWeather::ForceWeatherNow(0); diff --git a/tools/premake5.lua b/tools/premake5.lua index a53e554..3adb2e3 100644 --- a/tools/premake5.lua +++ b/tools/premake5.lua @@ -86,6 +86,8 @@ project "CheatMenuIII" "../src/vehicle.cpp", "../src/weapon.h", "../src/weapon.cpp", + "../src/game.h", + "../src/game.cpp", "../src/filehandler.h", "../src/filehandler.cpp", "../src/dllmain.cpp"