Push teleport, menu & player (vc)

This commit is contained in:
Grinch_ 2021-08-06 21:53:18 +06:00
parent 880ceba2c4
commit 0a15765771
26 changed files with 516 additions and 296 deletions

View File

@ -0,0 +1,48 @@
{
"Special" :
{
"Alex Shrub" : "IGalscb",
"Lance 1" : "IGbuddy",
"Lance Cop" : "IGBudy2",
"Lance Beaten Up" : "IGBudy3",
"Candy Suxxx" : "IGCandy",
"Colonel Cortez" : "IGColon",
"Ricardo Diaz" : "IGDiaz",
"Dick (Lovefist)" : "IGDick",
"Gonzalez" : "IGGonz",
"Hilary" : "IGHlary",
"Hilary (Bank Mission)" : "IGHlry2",
"Jezz Torrent" : "IGJezz",
"Ken Rosenberg" : "IGKen",
"Mercedes" : "IGMerc",
"Mercedes (purple dress)" : "IGMerc2",
"Cam Jones" : "IGmike",
"Cam Jones (Bank Mission)" : "IGMike2",
"Percy (Lovefist)" : "IGPercy",
"Phil Cassidy" : "IGPhil",
"Phil (Injured)" : "IGphil2",
"Phil (Bank Mission)" : "IGPhil3",
"Sonny Forelli" : "IGSonny"
},
"Misc" :
{
"Fsfa" : "FSFA",
"Courier" : "COURIER",
"Chef" : "CHEF",
"Sgc" : "SGC",
"Psycho" : "PSYCHO",
"Striper" : "STRIPA"
},
"Player" :
{
"Tommy Default" : "Player",
"Tommy Suit Plain" : "Player2",
"Tommy Worker" : "Player3",
"Tommy Golfer" : "Player4",
"Tommy Cuban" : "Player5",
"Tommy Cop" : "Player6",
"Tommy Bank" : "Player7",
"Tommy Simple" : "Player8",
"Tommy Suit Stripe" : "Player9"
}
}

View File

@ -85,7 +85,7 @@ void Animation::Draw()
{
ImGui::Spacing();
Ui::DrawJSON(m_AnimData.m_Json, m_AnimData.m_Categories, m_AnimData.m_Selected, m_AnimData.m_Filter, &PlayAnimation,
&RemoveAnimation);
&RemoveAnimation);
ImGui::EndChild();
}
ImGui::EndTabItem();
@ -154,7 +154,7 @@ void Animation::Draw()
{
ImGui::Spacing();
Ui::DrawJSON(m_Cutscene::m_Data.m_Json, m_Cutscene::m_Data.m_Categories, m_Cutscene::m_Data.m_Selected,
m_Cutscene::m_Data.m_Filter, &PlayCutscene, nullptr);
m_Cutscene::m_Data.m_Filter, &PlayCutscene, nullptr);
ImGui::EndChild();
}
ImGui::EndTabItem();

View File

@ -18,8 +18,8 @@ private:
inline static bool m_Loop;
inline static bool m_bSecondary;
inline static std::string m_nWalkingStyle = "default";
inline static std::vector<std::string> m_FightingStyleList = {"Default", "Boxing", "Kung fu", "Kick Boxing", "Punch Kick"};
inline static std::vector<std::string> m_WalkingStyleList =
inline static std::vector<std::string> m_FightingStyleList = { "Default", "Boxing", "Kung fu", "Kick Boxing", "Punch Kick" };
inline static std::vector<std::string> m_WalkingStyleList =
{
"default", "man", "shuffle", "oldman", "gang1", "gang2", "oldfatman",
"fatman", "jogger", "drunkman", "blindman", "swat", "woman", "shopping", "busywoman",

View File

@ -9,11 +9,11 @@ void CheatMenu::DrawWindow()
ImGuiIO& io = ImGui::GetIO();
static bool bRunning = true;
#ifdef GTASA
#ifdef GTASA
if (FrontEndMenuManager.m_bMenuActive)
#elif GTAVC
#elif GTAVC
if (FrontendMenuManager.m_bMenuVisible)
#endif
#endif
{
if (bRunning)
{
@ -25,11 +25,11 @@ void CheatMenu::DrawWindow()
else
{
bRunning = true;
#ifdef GTASA
#ifdef GTASA
if (Globals::m_bShowMenu || m_Commands::m_bShowMenu)
#elif GTAVC
#elif GTAVC
if (Globals::m_bShowMenu)
#endif
#endif
{
if (Globals::m_bShowMenu)
{
@ -38,7 +38,7 @@ void CheatMenu::DrawWindow()
{
ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(250, 350));
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,
ImVec2(ImGui::GetWindowWidth() / 85, ImGui::GetWindowHeight() / 200));
ImVec2(ImGui::GetWindowWidth() / 85, ImGui::GetWindowHeight() / 200));
if (Updater::m_State == UPDATER_UPDATE_FOUND)
Updater::ShowUpdateScreen();
@ -53,12 +53,12 @@ void CheatMenu::DrawWindow()
ImGui::End();
}
}
#ifdef GTASA
#ifdef GTASA
else
{
DrawShortcutsWindow();
}
#endif
#endif
}
}
DrawOverlay();
@ -77,12 +77,12 @@ CheatMenu::CheatMenu()
Events::processScriptsEvent += []()
{
if (Globals::m_bInit &&
#ifdef GTASA
if (Globals::m_bInit &&
#ifdef GTASA
!FrontEndMenuManager.m_bMenuActive
#elif GTAVC
#elif GTAVC
!FrontendMenuManager.m_bMenuVisible
#endif
#endif
)
{
if (Ui::HotKeyPressed(Menu::m_HotKeys::menuOpen))
@ -196,11 +196,11 @@ void MenuThread(void* param)
}
static bool bGameInit = false;
#ifdef GTASA
#ifdef GTASA
Hook::ApplyMouseFix();
#endif
#endif
// Wait till the game is initialized
// Wait till the game is initialized
Events::initRwEvent += []
{
bGameInit = true;
@ -244,7 +244,7 @@ BOOL WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved)
if (nReason == DLL_PROCESS_ATTACH)
{
uint gameVersion = GetGameVersion();
#ifdef GTASA
#ifdef GTASA
if (gameVersion == GAME_10US_HOODLUM || gameVersion == GAME_10US_COMPACT)
{
CreateThread(nullptr, NULL, (LPTHREAD_START_ROUTINE)&MenuThread, nullptr, NULL, nullptr);
@ -253,7 +253,7 @@ BOOL WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved)
{
MessageBox(HWND_DESKTOP, "Unknown game version. GTA SA v1.0 US is required.", "CheatMenu", MB_ICONERROR);
}
#elif GTAVC
#elif GTAVC
if (gameVersion == GAME_10EN)
{
CreateThread(nullptr, NULL, (LPTHREAD_START_ROUTINE)&MenuThread, nullptr, NULL, nullptr);
@ -262,7 +262,7 @@ BOOL WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved)
{
MessageBox(HWND_DESKTOP, "Unknown game version. GTA VC v1.0 EN is required.", "CheatMenu", MB_ICONERROR);
}
#endif
#endif
}
return TRUE;

View File

@ -1,5 +1,5 @@
/*
Author: Grinch_
Author: Grinch_
Copyright GPLv3 2019-2021
Required:
DirectX 9 SDK
@ -12,35 +12,35 @@
#include "Hook.h"
#include "Menu.h"
#include "Teleport.h"
#include "Player.h"
#ifdef GTASA
#include "Animation.h"
#include "Game.h"
#include "Ped.h"
#include "Player.h"
#include "Vehicle.h"
#include "Visual.h"
#include "Weapon.h"
class CheatMenu : Hook, Animation, Game, Menu, Ped, Player, Teleport, Vehicle, Visual, Weapon
#include "Animation.h"
#include "Game.h"
#include "Ped.h"
#include "Vehicle.h"
#include "Visual.h"
#include "Weapon.h"
class CheatMenu : Hook, Animation, Game, Menu, Ped, Player, Teleport, Vehicle, Visual, Weapon
#elif defined(GTAVC)
class CheatMenu : Hook, Menu, Teleport
class CheatMenu : Hook, Menu, Player, Teleport
#endif
{
private:
#ifdef GTASA
inline static CallbackTable header
{
{"Teleport", &Teleport::Draw}, {"Player", &Player::Draw}, {"Ped", &Ped::Draw},
{"Animation", &Animation::Draw}, {"Vehicle", &Vehicle::Draw}, {"Weapon", &Weapon::Draw},
{"Game", &Game::Draw}, {"Visual", &Visual::Draw}, {"Menu", &Menu::Draw}
};
#elif GTAVC
inline static CallbackTable header
{
{"Teleport", &Teleport::Draw}, {"Menu", &Menu::Draw}
};
#endif
#ifdef GTASA
inline static CallbackTable header
{
{"Teleport", &Teleport::Draw}, {"Player", &Player::Draw}, {"Ped", &Ped::Draw},
{"Animation", &Animation::Draw}, {"Vehicle", &Vehicle::Draw}, {"Weapon", &Weapon::Draw},
{"Game", &Game::Draw}, {"Visual", &Visual::Draw}, {"Menu", &Menu::Draw}
};
#elif GTAVC
inline static CallbackTable header
{
{"Teleport", &Teleport::Draw}, {"Player", &Player::Draw}, {"Menu", &Menu::Draw}
};
#endif
static void ApplyStyle();
static void DrawWindow();

View File

@ -329,7 +329,7 @@ void Game::Draw()
CPlayerPed* pPlayer = FindPlayerPed();
int hplayer = CPools::GetPedRef(pPlayer);
if (ImGui::Button("Save game (might cause game bugs)",Ui::GetSize()))
if (ImGui::Button("Save game (might cause game bugs)", Ui::GetSize()))
{
FrontEndMenuManager.m_bActivateMenuNextFrame = true;
bSaveGameFlag = true;
@ -434,10 +434,10 @@ Lowers armour, health, stamina etc."))
Command<Commands::SWITCH_DEATH_PENALTIES>(m_bKeepStuff);
}
Ui::CheckboxWithHint("Screenshot shortcut", &m_bScreenShot,
(("Take screenshot using ") + Ui::GetHotKeyNameString(Menu::m_HotKeys::quickSceenShot)
+ "\nSaved inside 'GTA San Andreas User Files\\Gallery'").c_str());
(("Take screenshot using ") + Ui::GetHotKeyNameString(Menu::m_HotKeys::quickSceenShot)
+ "\nSaved inside 'GTA San Andreas User Files\\Gallery'").c_str());
if (Ui::CheckboxWithHint("Solid water", &m_bSolidWater,
"Player can walk on water\nTurn this off if you want to swim."))
"Player can walk on water\nTurn this off if you want to swim."))
{
if (!m_bSolidWater && m_nSolidWaterObj != 0)
{
@ -588,7 +588,7 @@ It's recommanded not to save after using the mission loader. Use it at your own
ImGui::Spacing();
Ui::DrawJSON(m_MissionData.m_Json, m_MissionData.m_Categories, m_MissionData.m_Selected, m_MissionData.m_Filter,
SetPlayerMission, nullptr);
SetPlayerMission, nullptr);
}
ImGui::EndTabItem();
}

View File

@ -2,8 +2,8 @@
class Game
{
public:
inline static SSearchData m_MissionData{"mission"};
inline static std::vector<std::string> m_DayNames =
inline static SSearchData m_MissionData{ "mission" };
inline static std::vector<std::string> m_DayNames =
{
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
};

View File

@ -9,9 +9,9 @@ LRESULT Hook::WndProc(const HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
if (ImGui::GetIO().WantTextInput)
{
#ifdef GTASA
#ifdef GTASA
Call<0x53F1E0>(); // CPad::ClearKeyboardHistory
#endif
#endif
return 1;
}
@ -113,10 +113,10 @@ void Hook::RenderFrame(void* ptr)
ImGui_ImplWin32_Init(RsGlobal.ps->window);
#ifdef GTASA
// shift trigger fix
#ifdef GTASA
// shift trigger fix
patch::Nop(0x00531155, 5);
#endif
#endif
if (Globals::renderer == Render_DirectX9)
{
@ -165,9 +165,9 @@ void Hook::ShowMouse(bool state)
ImGui::GetIO().MouseDrawCursor = state;
#ifdef GTASA
#ifdef GTASA
Hook::ApplyMouseFix(); // Reapply the patches
#elif GTAVC
#elif GTAVC
if (m_bShowMouse)
{
patch::SetUChar(0x6020A0, 0xC3); // psSetMousePos
@ -178,7 +178,7 @@ void Hook::ShowMouse(bool state)
patch::SetUChar(0x6020A0, 0x53);
patch::SetRaw(0x4AB6CA, (char*)"\xE8\x51\x21\x00\x00", 5);
}
#endif
#endif
CPad::NewMouseControllerState.X = 0;
CPad::NewMouseControllerState.Y = 0;

View File

@ -15,7 +15,7 @@ private:
inline static f_EndScene oEndScene;
inline static f_Reset oReset;
inline static bool m_bMouseVisibility;
static void CALLBACK RenderFrame(void* ptr);
static HRESULT CALLBACK Dx9Handler(IDirect3DDevice9* pDevice);
static HRESULT CALLBACK Dx11Handler(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags);
@ -26,10 +26,10 @@ private:
public:
inline static bool m_bShowMouse = false;
inline static std::function<void()> windowCallback = nullptr;
#ifdef GTASA
#ifdef GTASA
static void ApplyMouseFix();
#endif
#endif
Hook();
~Hook();

View File

@ -1,6 +1,6 @@
#pragma once
#define MENU_NAME "Cheat Menu"
#define MENU_VERSION_NUMBER "2.8"
#define MENU_VERSION_NUMBER "2.9"
#define MENU_VERSION MENU_VERSION_NUMBER"-beta"
#define BUILD_NUMBER "20210801"
#define BUILD_NUMBER "20210806"
#define MENU_TITLE MENU_NAME " v" MENU_VERSION "(" BUILD_NUMBER ")"

View File

@ -1,30 +1,32 @@
#include "pch.h"
#include "Player.h"
#include "Ped.h"
#include "Menu.h"
#include "Ui.h"
#include "Util.h"
#ifdef GTASA
#include "Ped.h"
// hardcoded cloth category names
const char* cloth_category[18] =
{
"Shirts",
"Shirts",
"Heads",
"Trousers",
"Shoes",
"Tattoos left lower arm",
"Tattoos left upper arm",
"Tattoos right upper arm",
"Tattoos right lower arm",
"Tattoos back",
"Tattoos left chest",
"Trousers",
"Shoes",
"Tattoos left lower arm",
"Tattoos left upper arm",
"Tattoos right upper arm",
"Tattoos right lower arm",
"Tattoos back",
"Tattoos left chest",
"Tattoos right chest",
"Tattoos stomach",
"Tattoos stomach",
"Tattoos lower back",
"Necklaces",
"Watches",
"Glasses",
"Hats",
"Necklaces",
"Watches",
"Glasses",
"Hats",
"Extras"
};
@ -35,17 +37,23 @@ inline static void PlayerModelBrokenFix()
if (pPlayer->m_nModelIndex == 0)
Call<0x5A81E0>(0, pPlayer->m_pPlayerData->m_pPedClothesDesc, 0xBC1C78, false);
}
#elif GTAVC
inline static SSearchData tempPedData{ "peds" };
#endif
Player::Player()
{
// Fix player model being broken after rebuild
#ifdef GTASA
// Fix player model being broken after rebuild
patch::RedirectCall(0x5A834D, &PlayerModelBrokenFix);
#endif
m_bAimSkinChanger = config.GetValue("aim_skin_changer", false);
// Custom skins setup
if (GetModuleHandle("modloader.asi"))
{
#ifdef GTASA
if (fs::is_directory(m_CustomSkins::m_Path))
{
for (auto& p : fs::recursive_directory_iterator(m_CustomSkins::m_Path))
@ -61,7 +69,11 @@ Player::Player()
}
}
}
else fs::create_directory(m_CustomSkins::m_Path);
else
{
fs::create_directory(m_CustomSkins::m_Path);
}
#endif
m_bModloaderInstalled = true;
}
@ -69,17 +81,25 @@ Player::Player()
Events::processScriptsEvent += []
{
uint timer = CTimer::m_snTimeInMilliseconds;
static CPlayerPed* player = FindPlayerPed();
CPlayerPed* player = FindPlayerPed();
int hplayer = CPools::GetPedRef(player);
if (!m_bImagesLoaded)
{
Util::LoadTextureDirectory(m_ClothData, PLUGIN_PATH((char*)"CheatMenu\\clothes.txd"), true);
#ifdef GTASA
Util::LoadTextureDirectory(m_ClothData, PLUGIN_PATH((char*)"CheatMenu\\clothes.txd"), true);
#elif GTAVC
tempPedData.m_Json.LoadData(tempPedData.m_Categories, tempPedData.m_Selected);
#endif
m_bImagesLoaded = true;
}
if (m_KeepPosition::m_bEnabled)
{
if (!player->IsAlive())
if (Command<Commands::IS_CHAR_DEAD>(hplayer))
{
m_KeepPosition::m_fPos = player->GetPosition();
}
@ -90,7 +110,8 @@ Player::Player()
if (m_KeepPosition::m_fPos.x != 0 && m_KeepPosition::m_fPos.x != cur_pos.x
&& m_KeepPosition::m_fPos.y != 0 && m_KeepPosition::m_fPos.y != cur_pos.y)
{
player->Teleport(m_KeepPosition::m_fPos, false);
BY_GAME(player->Teleport(m_KeepPosition::m_fPos, false)
, player->Teleport(m_KeepPosition::m_fPos));
m_KeepPosition::m_fPos = CVector(0, 0, 0);
}
}
@ -98,36 +119,53 @@ Player::Player()
if (m_bGodMode)
{
#ifdef GTASA
patch::Set<bool>(0x96916D, 1, false);
player->m_nPhysicalFlags.bBulletProof = 1;
player->m_nPhysicalFlags.bCollisionProof = 1;
player->m_nPhysicalFlags.bExplosionProof = 1;
player->m_nPhysicalFlags.bFireProof = 1;
player->m_nPhysicalFlags.bMeeleProof = 1;
player->m_nPhysicalFlags.bMeeleProof = 1;
#elif GTAVC
player->m_nFlags.bBulletProof = 1;
player->m_nFlags.bCollisionProof = 1;
player->m_nFlags.bExplosionProof = 1;
player->m_nFlags.bFireProof = 1;
player->m_nFlags.bMeleeProof = 1;
#endif
}
#ifdef GTASA
if (m_bAimSkinChanger && Ui::HotKeyPressed(Menu::m_HotKeys::aimSkinChanger))
{
CPed* target_ped = player->m_pPlayerTargettedPed;
if (target_ped)
CPed* targetPed = player->m_pPlayerTargettedPed;
if (targetPed)
{
player->SetModelIndex(target_ped->m_nModelIndex);
player->SetModelIndex(targetPed->m_nModelIndex);
Util::ClearCharTasksVehCheck(player);
}
}
#endif
if (Ui::HotKeyPressed(Menu::m_HotKeys::godMode))
{
if (m_bGodMode)
{
SetHelpMessage("God mode disabled", false, false, false);
#ifdef GTASA
patch::Set<bool>(0x96916D, m_bGodMode, false);
player->m_nPhysicalFlags.bBulletProof = false;
player->m_nPhysicalFlags.bCollisionProof = false;
player->m_nPhysicalFlags.bExplosionProof = false;
player->m_nPhysicalFlags.bFireProof = false;
player->m_nPhysicalFlags.bMeeleProof = false;
player->m_nPhysicalFlags.bBulletProof = 0;
player->m_nPhysicalFlags.bCollisionProof = 0;
player->m_nPhysicalFlags.bExplosionProof = 0;
player->m_nPhysicalFlags.bFireProof = 0;
player->m_nPhysicalFlags.bMeeleProof = 0;
#elif GTAVC
player->m_nFlags.bBulletProof = 0;
player->m_nFlags.bCollisionProof = 0;
player->m_nFlags.bExplosionProof = 0;
player->m_nFlags.bFireProof = 0;
player->m_nFlags.bMeleeProof = 0;
#endif
m_bGodMode = false;
}
else
@ -139,6 +177,7 @@ Player::Player()
};
}
#ifdef GTASA
void Player::ChangePlayerCloth(std::string& name)
{
std::stringstream ss(name);
@ -171,16 +210,19 @@ void Player::ChangePlayerCloth(std::string& name)
player->m_pPlayerData->m_pPedClothesDesc->SetTextureAndModel(-1750049245, 1393983095, body_part);
else
player->m_pPlayerData->m_pPedClothesDesc->
SetTextureAndModel(texture9.c_str(), model.c_str(), body_part);
SetTextureAndModel(texture9.c_str(), model.c_str(), body_part);
}
}
CClothes::RebuildPlayer(player, false);
}
#endif
#ifdef GTASA
void Player::ChangePlayerModel(std::string& model)
{
bool custom_skin = std::find(m_CustomSkins::m_List.begin(), m_CustomSkins::m_List.end(), model) !=
m_CustomSkins::m_List.end();
if (Ped::m_PedData.m_Json.m_Data.contains(model) || custom_skin)
{
CPlayerPed* player = FindPlayerPed();
@ -210,12 +252,24 @@ void Player::ChangePlayerModel(std::string& model)
}
}
}
#elif GTAVC
void Player::ChangePlayerModel(std::string& cat, std::string& name, std::string& id)
{
CPlayerPed* player = FindPlayerPed();
player->Undress(id.c_str());
CStreaming::LoadAllRequestedModels(false);
player->Dress();
}
#endif
void Player::Draw()
{
CPlayerPed* pPlayer = FindPlayerPed();
int hplayer = CPools::GetPedRef(pPlayer);
#ifdef GTASA
CPad* pad = pPlayer->GetPadFromPlayer();
#endif
CPlayerInfo *pInfo = &CWorld::Players[CWorld::PlayerInFocus];
if (ImGui::Button("Copy coordinates", ImVec2(Ui::GetSize(2))))
{
@ -227,7 +281,9 @@ void Player::Draw()
}
ImGui::SameLine();
if (ImGui::Button("Suicide", ImVec2(Ui::GetSize(2))))
{
pPlayer->m_fHealth = 0.0;
}
ImGui::Spacing();
@ -241,36 +297,60 @@ void Player::Draw()
ImGui::Columns(2, 0, false);
Ui::CheckboxAddress("Bounty on yourself", 0x96913F);
#ifdef GTASA
Ui::CheckboxAddress("Bounty on yourself", 0x96913F);
#endif
Ui::CheckboxAddress("Free healthcare", (int)&pInfo->m_bFreeHealthCare);
if (Ui::CheckboxWithHint("God mode", &m_bGodMode))
{
#ifdef GTASA
patch::Set<bool>(0x96916D, m_bGodMode, false);
pPlayer->m_nPhysicalFlags.bBulletProof = m_bGodMode;
pPlayer->m_nPhysicalFlags.bCollisionProof = m_bGodMode;
pPlayer->m_nPhysicalFlags.bExplosionProof = m_bGodMode;
pPlayer->m_nPhysicalFlags.bFireProof = m_bGodMode;
pPlayer->m_nPhysicalFlags.bMeeleProof = m_bGodMode;
#elif GTAVC
pPlayer->m_nFlags.bBulletProof = m_bGodMode;
pPlayer->m_nFlags.bCollisionProof = m_bGodMode;
pPlayer->m_nFlags.bExplosionProof = m_bGodMode;
pPlayer->m_nFlags.bFireProof = m_bGodMode;
pPlayer->m_nFlags.bMeleeProof = m_bGodMode;
#endif
}
#ifdef GTASA
Ui::CheckboxAddress("Higher cycle jumps", 0x969161);
Ui::CheckboxAddress("Infinite oxygen", 0x96916E);
Ui::CheckboxAddress("Infinite run", 0xB7CEE4);
if (Ui::CheckboxBitFlag("Invisible player", pPlayer->m_nPedFlags.bDontRender))
{
pPlayer->m_nPedFlags.bDontRender = (pPlayer->m_nPedFlags.bDontRender == 1) ? 0 : 1;
}
#elif GTAVC
Ui::CheckboxAddress("Infinite run", (int)&pInfo->m_bNeverGetsTired);
#endif
ImGui::NextColumn();
Ui::CheckboxWithHint("Keep position", &m_KeepPosition::m_bEnabled, "Teleport to the position you died from");
#ifdef GTASA
if (Ui::CheckboxBitFlag("Lock control", pad->bPlayerSafe))
{
pad->bPlayerSafe = (pad->bPlayerSafe == 1) ? 0 : 1;
}
Ui::CheckboxAddress("Mega jump", 0x96916C);
Ui::CheckboxAddress("Mega punch", 0x969173);
Ui::CheckboxAddress("Never get hungry", 0x969174);
bool never_wanted = patch::Get<bool>(0x969171, false);
if (Ui::CheckboxWithHint("Never wanted", &never_wanted))
{
CCheat::NotWantedCheat();
}
#endif
Ui::CheckboxAddress("No arrest fee", (int)&pInfo->m_bGetOutOfJailFree);
ImGui::Columns(1);
@ -279,27 +359,37 @@ void Player::Draw()
ImGui::Columns(2, 0, false);
bool state = pPlayer->m_nPhysicalFlags.bBulletProof;
bool state = BY_GAME(pPlayer->m_nPhysicalFlags.bBulletProof, pPlayer->m_nFlags.bBulletProof);
if (Ui::CheckboxWithHint("Bullet proof", &state, nullptr, m_bGodMode))
pPlayer->m_nPhysicalFlags.bBulletProof = state;
{
BY_GAME(pPlayer->m_nPhysicalFlags.bBulletProof, pPlayer->m_nFlags.bBulletProof) = state;
}
state = pPlayer->m_nPhysicalFlags.bCollisionProof;
state = BY_GAME(pPlayer->m_nPhysicalFlags.bCollisionProof, pPlayer->m_nFlags.bCollisionProof);
if (Ui::CheckboxWithHint("Collision proof", &state, nullptr, m_bGodMode))
pPlayer->m_nPhysicalFlags.bCollisionProof = state;
{
BY_GAME(pPlayer->m_nPhysicalFlags.bCollisionProof, pPlayer->m_nFlags.bCollisionProof) = state;
}
state = pPlayer->m_nPhysicalFlags.bExplosionProof;
state = BY_GAME(pPlayer->m_nPhysicalFlags.bExplosionProof, pPlayer->m_nFlags.bExplosionProof);
if (Ui::CheckboxWithHint("Explosion proof", &state, nullptr, m_bGodMode))
pPlayer->m_nPhysicalFlags.bExplosionProof = state;
{
BY_GAME(pPlayer->m_nPhysicalFlags.bExplosionProof, pPlayer->m_nFlags.bExplosionProof) = state;
}
ImGui::NextColumn();
state = pPlayer->m_nPhysicalFlags.bFireProof;
state = BY_GAME(pPlayer->m_nPhysicalFlags.bFireProof, pPlayer->m_nFlags.bFireProof);
if (Ui::CheckboxWithHint("Fire proof", &state, nullptr, m_bGodMode))
pPlayer->m_nPhysicalFlags.bFireProof = state;
{
BY_GAME(pPlayer->m_nPhysicalFlags.bFireProof, pPlayer->m_nFlags.bFireProof) = state;
}
state = pPlayer->m_nPhysicalFlags.bMeeleProof;
state = BY_GAME(pPlayer->m_nPhysicalFlags.bMeeleProof, pPlayer->m_nFlags.bMeleeProof);
if (Ui::CheckboxWithHint("Meele proof", &state, nullptr, m_bGodMode))
pPlayer->m_nPhysicalFlags.bMeeleProof = state;
{
BY_GAME(pPlayer->m_nPhysicalFlags.bMeeleProof, pPlayer->m_nFlags.bMeleeProof) = state;
}
ImGui::EndChild();
ImGui::EndTabItem();
@ -310,6 +400,7 @@ void Player::Draw()
ImGui::BeginChild("PlayerMenus");
Ui::EditReference("Armour", pPlayer->m_fArmour, 0, 100, 150);
#ifdef GTASA
if (ImGui::CollapsingHeader("Body"))
{
if (pPlayer->m_nModelIndex == 0)
@ -347,18 +438,35 @@ void Player::Draw()
Ui::EditStat("Energy", STAT_ENERGY);
Ui::EditStat("Fat", STAT_FAT);
Ui::EditReference("Health", pPlayer->m_fHealth, 0, 100, static_cast<int>(pPlayer->m_fMaxHealth));
#endif
Ui::EditReference("Health", pPlayer->m_fHealth, 0, 100, BY_GAME(static_cast<int>(pPlayer->m_fMaxHealth), 100));
#ifdef GTASA
Ui::EditStat("Lung capacity", STAT_LUNG_CAPACITY);
Ui::EditStat("Max health", STAT_MAX_HEALTH, 0, 569, 1450);
Ui::EditAddress<int>("Money", 0xB7CE50, -99999999, 0, 99999999);
#elif GTAVC
int money = pInfo->m_nMoney;
Ui::EditAddress<int>("Money", (int)&money, -9999999, 0, 99999999);
pInfo->m_nMoney = money;
pInfo->m_nDisplayMoney = money;
#endif
#ifdef GTASA
Ui::EditStat("Muscle", STAT_MUSCLE);
Ui::EditStat("Respect", STAT_RESPECT);
Ui::EditStat("Stamina", STAT_STAMINA);
#endif
if (ImGui::CollapsingHeader("Wanted level"))
{
#ifdef GTASA
int val = pPlayer->m_pPlayerData->m_pWanted->m_nWantedLevel;
int max_wl = pPlayer->m_pPlayerData->m_pWanted->MaximumWantedLevel;
max_wl = max_wl < 6 ? 6 : max_wl;
max_wl = max_wl < 6 ? 6 : max_wl;
#elif GTAVC
int val = pPlayer->m_pWanted->m_nWantedLevel;
int max_wl = 6;
#endif
ImGui::Columns(3, 0, false);
ImGui::Text("Min: 0");
@ -371,21 +479,45 @@ void Player::Draw()
ImGui::Spacing();
if (ImGui::InputInt("Set value##Wanted level", &val))
{
#ifdef GTASA
pPlayer->CheatWantedLevel(val);
#elif GTAVC
pPlayer->m_pWanted->CheatWantedLevel(val);
#endif
}
ImGui::Spacing();
if (ImGui::Button("Minimum##Wanted level", Ui::GetSize(3)))
{
#ifdef GTASA
pPlayer->CheatWantedLevel(0);
#elif GTAVC
pPlayer->m_pWanted->CheatWantedLevel(0);
#endif
}
ImGui::SameLine();
if (ImGui::Button("Default##Wanted level", Ui::GetSize(3)))
{
#ifdef GTASA
pPlayer->CheatWantedLevel(0);
#elif GTAVC
pPlayer->m_pWanted->CheatWantedLevel(0);
#endif
}
ImGui::SameLine();
if (ImGui::Button("Maximum##Wanted level", Ui::GetSize(3)))
{
#ifdef GTASA
pPlayer->CheatWantedLevel(max_wl);
#elif GTAVC
pPlayer->m_pWanted->CheatWantedLevel(max_wl);
#endif
}
ImGui::Spacing();
ImGui::Separator();
@ -395,14 +527,15 @@ void Player::Draw()
ImGui::EndTabItem();
}
#ifdef GTASA
if (ImGui::BeginTabItem("Appearance"))
{
ImGui::Spacing();
if (Ui::CheckboxWithHint("Aim skin changer", &m_bAimSkinChanger,
(("Changes to the ped, player is targeting with a weapon.\nTo use aim a ped with a weapon and press ")
+ Ui::GetHotKeyNameString(Menu::m_HotKeys::aimSkinChanger)).c_str()))
config.SetValue("aim_skin_changer", m_bAimSkinChanger);
if (Ui::CheckboxWithHint("Aim skin changer", &m_bAimSkinChanger,
(("Changes to the ped, player is targeting with a weapon.\nTo use aim a ped with a weapon and press ")
+ Ui::GetHotKeyNameString(Menu::m_HotKeys::aimSkinChanger)).c_str()))
config.SetValue("aim_skin_changer", m_bAimSkinChanger);
if (ImGui::BeginTabBar("AppearanceTabBar"))
{
if (ImGui::BeginTabItem("Clothes"))
@ -418,23 +551,23 @@ void Player::Draw()
if (bClothOption == 0)
{
Ui::DrawImages(m_ClothData.m_ImagesList, ImVec2(70, 100), m_ClothData.m_Categories, m_ClothData.m_Selected,
m_ClothData.m_Filter, ChangePlayerCloth, nullptr,
[](std::string str)
{
std::stringstream ss(str);
std::string temp;
m_ClothData.m_Filter, ChangePlayerCloth, nullptr,
[](std::string str)
{
std::stringstream ss(str);
std::string temp;
getline(ss, temp, '$');
getline(ss, temp, '$');
getline(ss, temp, '$');
getline(ss, temp, '$');
return temp;
}, nullptr, cloth_category, sizeof(cloth_category)/ sizeof(const char*));
return temp;
}, nullptr, cloth_category, sizeof(cloth_category) / sizeof(const char*));
}
else
{
size_t count = 0;
if(ImGui::Button("Remove all", ImVec2(Ui::GetSize(2))))
if (ImGui::Button("Remove all", ImVec2(Ui::GetSize(2))))
{
CPlayerPed* player = FindPlayerPed();
for (uint i = 0; i < 18; i++)
@ -446,14 +579,14 @@ void Player::Draw()
ImGui::SameLine();
for (const char* clothName : cloth_category)
{
if(ImGui::Button(clothName, ImVec2(Ui::GetSize(2))))
if (ImGui::Button(clothName, ImVec2(Ui::GetSize(2))))
{
CPlayerPed* player = FindPlayerPed();
player->m_pPlayerData->m_pPedClothesDesc->SetTextureAndModel(0u, 0u, count);
CClothes::RebuildPlayer(player, false);
}
if (count %2 != 0)
if (count % 2 != 0)
{
ImGui::SameLine();
}
@ -480,8 +613,8 @@ void Player::Draw()
if (ImGui::BeginTabItem("Ped skins"))
{
Ui::DrawImages(Ped::m_PedData.m_ImagesList, ImVec2(65, 110), Ped::m_PedData.m_Categories,
Ped::m_PedData.m_Selected, Ped::m_PedData.m_Filter, ChangePlayerModel, nullptr,
[](std::string str) { return Ped::m_PedData.m_Json.m_Data[str].get<std::string>(); });
Ped::m_PedData.m_Selected, Ped::m_PedData.m_Filter, ChangePlayerModel, nullptr,
[](std::string str) { return Ped::m_PedData.m_Json.m_Data[str].get<std::string>(); });
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Custom skins"))
@ -491,8 +624,8 @@ void Player::Draw()
if (m_bModloaderInstalled)
{
Ui::FilterWithHint("Search", m_ClothData.m_Filter,
std::string("Total skins: " + std::to_string(m_CustomSkins::m_List.size()))
.c_str());
std::string("Total skins: " + std::to_string(m_CustomSkins::m_List.size()))
.c_str());
Ui::ShowTooltip("Place your dff & txd files inside 'modloader/Custom Skins'");
ImGui::Spacing();
ImGui::TextWrapped(
@ -525,7 +658,7 @@ Limitations:\n\
ImGui::Spacing();
if (ImGui::Button("Download Modloader", ImVec2(Ui::GetSize(1))))
ShellExecute(NULL, "open", "https://gtaforums.com/topic/669520-mod-loader/", NULL, NULL,
SW_SHOWNORMAL);
SW_SHOWNORMAL);
}
ImGui::EndTabItem();
}
@ -533,7 +666,16 @@ Limitations:\n\
}
ImGui::EndTabItem();
}
#elif GTAVC
if (ImGui::BeginTabItem("Skins"))
{
ImGui::Spacing();
ImGui::Text("Info");
Ui::ShowTooltip("Not all ped skins work. I've added the ones that works!");
Ui::DrawJSON(tempPedData.m_Json, tempPedData.m_Categories, tempPedData.m_Selected, tempPedData.m_Filter, ChangePlayerModel, nullptr);
ImGui::EndTabItem();
}
#endif
ImGui::EndTabBar();
}
}

View File

@ -1,11 +1,11 @@
#pragma once
#include "pch.h"
class Player
{
private:
inline static bool m_bGodMode;
inline static int m_nUiBodyState;
inline static bool m_bAimSkinChanger;
inline static SSearchData m_ClothData;
inline static bool m_bImagesLoaded;
inline static bool m_bModloaderInstalled;
struct m_KeepPosition
@ -13,16 +13,29 @@ private:
inline static bool m_bEnabled = false;
inline static CVector m_fPos;
};
#ifdef GTASA
inline static int m_nUiBodyState;
inline static SSearchData m_ClothData;
struct m_CustomSkins
{
inline static std::string m_Path = paths::GetGameDirPathA() + std::string("\\modloader\\Custom Skins\\");;
inline static ImGuiTextFilter m_Filter;
inline static std::vector<std::string> m_List;
};
#endif
public:
Player();
static void ChangePlayerCloth(std::string& model);
#ifdef GTASA
static void ChangePlayerModel(std::string& model);
#elif GTAVC
static void ChangePlayerModel(std::string& cat, std::string& name, std::string& id);
#endif
static void Draw();
#ifdef GTASA
static void ChangePlayerCloth(std::string& model);
#endif
};

View File

@ -51,7 +51,7 @@ Teleport::Teleport()
CPlayerPed* player = FindPlayerPed();
#ifdef GTASA
CEntity* player_entity = FindPlayerEntity();
CEntity* player_entity = FindPlayerEntity(-1);
m_Teleport::m_fPos.z = CWorld::FindGroundZFor3DCoord(m_Teleport::m_fPos.x, m_Teleport::m_fPos.y,
m_Teleport::m_fPos.z + 100.0f, nullptr, &player_entity) + 1.0f;
#elif GTAVC

View File

@ -8,29 +8,29 @@ private:
inline static bool m_bInsertCoord;
inline static bool m_bQuickTeleport;
inline static char m_nInputBuffer[INPUT_BUFFER_SIZE];
inline static SSearchData tp_data{"teleport"};
inline static SSearchData tp_data{ "teleport" };
inline static char m_nLocationBuffer[INPUT_BUFFER_SIZE];
inline static uint m_nQuickTeleportTimer;
#ifdef GTASA
#ifdef GTASA
inline static CJson m_SpriteJson = CJson("radar sprite");
#endif
#endif
struct m_Teleport
{
inline static bool m_bEnabled;
inline static CVector m_fPos = {-1, -1, -1};
inline static CVector m_fPos = { -1, -1, -1 };
inline static uint m_nTimer;
};
#ifdef GTASA
/*
Generates radar sprite coordinates on the fly.
Shouldn't get saved in 'teleport.json', needs to be cleared at game shutdown.
*/
#ifdef GTASA
/*
Generates radar sprite coordinates on the fly.
Shouldn't get saved in 'teleport.json', needs to be cleared at game shutdown.
*/
static void FetchRadarSpriteData();
#endif
#endif
protected:
Teleport();

View File

@ -45,7 +45,7 @@ bool Ui::ListBoxStr(const char* label, std::vector<std::string>& all_items, std:
bool Ui::ListBoxCustomNames(const char* label, std::vector<std::string>& all_items, std::string& selected, const char* custom_names[], size_t length)
{
bool rtn = false;
std::string display_selected = (selected == "All") ? selected: custom_names[std::stoi(selected)];
std::string display_selected = (selected == "All") ? selected : custom_names[std::stoi(selected)];
if (ImGui::BeginCombo(label, display_selected.c_str()))
{
@ -249,7 +249,7 @@ bool Ui::CheckboxWithHint(const char* label, bool* v, const char* hint, bool is_
ImGui::InvisibleButton("?", ImGui::CalcTextSize("?", nullptr, true));
min = ImGui::GetItemRectMin();
drawlist->AddText(ImVec2(min.x, min.y + style.ItemInnerSpacing.y), ImGui::GetColorU32(ImGuiCol_TextDisabled),
"?");
"?");
if (ImGui::IsItemHovered() && !is_disabled)
{
@ -317,7 +317,7 @@ bool Ui::CheckboxAddressVar(const char* label, bool val, int addr, const char* h
}
bool Ui::CheckboxAddressVarEx(const char* label, bool val, int addr, int enabled_val, int disabled_val,
const char* hint)
const char* hint)
{
bool rtn = false;
bool state = val;
@ -348,9 +348,9 @@ bool Ui::CheckboxBitFlag(const char* label, uint flag, const char* hint)
}
void Ui::DrawJSON(CJson& json, std::vector<std::string>& combo_items, std::string& selected_item,
ImGuiTextFilter& filter,
std::function<void(std::string&, std::string&, std::string&)> func_left_click,
std::function<void(std::string&, std::string&, std::string&)> func_right_click)
ImGuiTextFilter& filter,
std::function<void(std::string&, std::string&, std::string&)> func_left_click,
std::function<void(std::string&, std::string&, std::string&)> func_right_click)
{
ImGui::PushItemWidth(ImGui::GetContentRegionAvailWidth() / 2 - 5);
ListBoxStr("##Categories", combo_items, selected_item);
@ -485,10 +485,10 @@ void Ui::FilterWithHint(const char* label, ImGuiTextFilter& filter, const char*
// clean up the code someday
void Ui::DrawImages(std::vector<std::unique_ptr<STextureStructure>>& img_vec, ImVec2 image_size,
std::vector<std::string>& category_vec, std::string& selected_item, ImGuiTextFilter& filter,
std::function<void(std::string&)> on_left_click, std::function<void(std::string&)> on_right_click,
std::function<std::string(std::string&)> get_name_func,
std::function<bool(std::string&)> verify_func, const char** custom_names, size_t length)
std::vector<std::string>& category_vec, std::string& selected_item, ImGuiTextFilter& filter,
std::function<void(std::string&)> on_left_click, std::function<void(std::string&)> on_right_click,
std::function<std::string(std::string&)> get_name_func,
std::function<bool(std::string&)> verify_func, const char** custom_names, size_t length)
{
// scale image size
image_size.x *= screen::GetScreenWidth() / 1366.0f;
@ -540,13 +540,12 @@ void Ui::DrawImages(std::vector<std::unique_ptr<STextureStructure>>& img_vec, Im
}
else
{
IDirect3DTexture9* texture = (IDirect3DTexture9*)Util::GetTextureFromRaster(img_vec[i]->m_pRwTexture);
if (ImGui::ImageButton(texture, image_size, ImVec2(0, 0), ImVec2(1, 1), 1, ImVec4(1, 1, 1, 1),ImVec4(1, 1, 1, 1)))
if (ImGui::ImageButton(img_vec[i]->m_pTexture, image_size, ImVec2(0, 0), ImVec2(1, 1), 1, ImVec4(1, 1, 1, 1), ImVec4(1, 1, 1, 1)))
{
on_left_click(text);
}
}
if (ImGui::IsItemClicked(1) && on_right_click != nullptr)
{
@ -769,7 +768,7 @@ void Ui::EditBits(const char* label, const int address, const std::vector<std::s
}
void Ui::EditFloat(const char* label, const int address, const float min, const float def, const float max,
const float mul, const float change)
const float mul, const float change)
{
if (ImGui::CollapsingHeader(label))
{
@ -881,7 +880,7 @@ bool Ui::HotKey(const char* label, HotKeyData& key_data)
text += (" + " + key_names[key_data.m_key2 - 1]);
if (ImGui::Button((text + std::string("##") + std::string(label)).c_str(),
ImVec2(ImGui::GetWindowContentRegionWidth() / 3.5, ImGui::GetFrameHeight())))
ImVec2(ImGui::GetWindowContentRegionWidth() / 3.5, ImGui::GetFrameHeight())))
if (!active)
m_CurrentHotkey = label;
@ -955,7 +954,7 @@ bool Ui::ColorButton(int color_id, std::vector<float>& color, ImVec2 size)
{
ImDrawList* drawlist = ImGui::GetWindowDrawList();
drawlist->AddRectFilled(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(),
ImGui::GetColorU32(ImGuiCol_ModalWindowDimBg));
ImGui::GetColorU32(ImGuiCol_ModalWindowDimBg));
}
return rtn;

View File

@ -40,19 +40,19 @@ public:
static bool ColorButton(int color_id, std::vector<float>& color, ImVec2 size);
static bool CheckboxAddress(const char* label, int addr = NULL, const char* hint = nullptr);
static bool CheckboxAddressEx(const char* label, int addr = NULL, int enabled_val = 1, int disabled_val = 0,
const char* hint = nullptr);
const char* hint = nullptr);
static bool CheckboxAddressVar(const char* label, bool val, int addr, const char* hint = nullptr);
static bool CheckboxAddressVarEx(const char* label, bool val, int addr, int enabled_val, int disabled_val,
const char* hint = nullptr);
const char* hint = nullptr);
static bool CheckboxBitFlag(const char* label, uint flag, const char* hint = nullptr);
static bool CheckboxWithHint(const char* label, bool* state, const char* hint = nullptr, bool is_disabled = false);
static void DrawHeaders(CallbackTable& data);
static void DrawJSON(CJson& json, std::vector<std::string>& combo_items, std::string& selected_item,
ImGuiTextFilter& filter,
std::function<void(std::string&, std::string&, std::string&)> func_left_click,
std::function<void(std::string&, std::string&, std::string&)> func_right_click);
static void DrawImages( std::vector<std::unique_ptr<STextureStructure>>& img_vec, ImVec2 image_size,
ImGuiTextFilter& filter,
std::function<void(std::string&, std::string&, std::string&)> func_left_click,
std::function<void(std::string&, std::string&, std::string&)> func_right_click);
static void DrawImages(std::vector<std::unique_ptr<STextureStructure>>& img_vec, ImVec2 image_size,
std::vector<std::string>& category_vec, std::string& selected_item, ImGuiTextFilter& filter,
std::function<void(std::string&)> on_left_click,
std::function<void(std::string&)> on_right_click,
@ -68,11 +68,11 @@ public:
static void EditReference(const char* label, T& address, int min = 0, int def = 0, int max = 100);
static void EditRadioButtonAddress(const char* label, std::vector<NamedMemory>& named_mem);
static void EditRadioButtonAddressEx(const char* label, int addr, std::vector<NamedValue>& named_val);
#ifdef GTASA
#ifdef GTASA
static void EditStat(const char* label, int stat_id, int min = 0, int def = 0, int max = 1000);
#endif
#endif
static void FilterWithHint(const char* label, ImGuiTextFilter& filter, const char* hint);
static ImVec2 GetSize(short count = 1, bool spacing = true);

View File

@ -3,13 +3,14 @@
#include "psapi.h"
#include "CFileLoader.h"
void Util::LoadTextureDirectory(SSearchData& data, char *path, bool pass_full_name)
void Util::LoadTextureDirectory(SSearchData& data, char* path, bool pass_full_name)
{
RwTexDictionary* pRwTexDictionary = &data.txd;
// allow SA textures for VC
pRwTexDictionary = CFileLoader::LoadTexDictionary(path);
if (pRwTexDictionary)
if (pRwTexDictionary)
{
// FIX ME
if (pass_full_name)
@ -19,6 +20,7 @@ void Util::LoadTextureDirectory(SSearchData& data, char *path, bool pass_full_na
SSearchData* sdata = reinterpret_cast<SSearchData*>(data);
sdata->m_ImagesList.push_back(std::make_unique<STextureStructure>());
sdata->m_ImagesList.back().get()->m_pRwTexture = tex;
sdata->m_ImagesList.back().get()->m_pTexture = Util::GetTextureFromRaster(tex);
std::stringstream ss(tex->name);
std::string str;
@ -41,6 +43,7 @@ void Util::LoadTextureDirectory(SSearchData& data, char *path, bool pass_full_na
SSearchData* sdata = reinterpret_cast<SSearchData*>(data);
sdata->m_ImagesList.push_back(std::make_unique<STextureStructure>());
sdata->m_ImagesList.back().get()->m_pRwTexture = tex;
sdata->m_ImagesList.back().get()->m_pTexture = Util::GetTextureFromRaster(tex);
std::stringstream ss(tex->name);
std::string str;
@ -60,16 +63,17 @@ void Util::LoadTextureDirectory(SSearchData& data, char *path, bool pass_full_na
}
}
void* Util::GetTextureFromRaster(RwTexture *pTexture)
void* Util::GetTextureFromRaster(RwTexture* pTexture)
{
RwRasterEx* raster = (RwRasterEx*)(&pTexture->raster->parent);
return (&raster->renderResource->texture);
}
std::string Util::GetLocationName(CVector* pos)
{
#ifdef GTASA
#ifdef GTASA
int hplayer = CPools::GetPedRef(FindPlayerPed());
int interior = 0;
@ -81,27 +85,27 @@ std::string Util::GetLocationName(CVector* pos)
switch (city)
{
case 0:
town = "CS";
break;
case 1:
town = "LS";
break;
case 2:
town = "SF";
break;
case 3:
town = "LV";
break;
case 0:
town = "CS";
break;
case 1:
town = "LS";
break;
case 2:
town = "SF";
break;
case 3:
town = "LV";
break;
}
if (interior == 0)
return CTheZones::FindSmallestZoneForPosition(*pos, true)->GetTranslatedName() + std::string(", ") + town;
return std::string("Interior ") + std::to_string(interior) + ", " + town;
#elif GTAVC
#elif GTAVC
return "Vice City";
#endif
#endif
}
#ifdef GTASA
@ -165,7 +169,7 @@ int Util::GetLargestGangInZone()
CZoneExtraInfo* zone_info = CTheZones::GetZoneInfo(&pos, nullptr);
int density = zone_info->m_nGangDensity[i];
if (density > max_density)
{
max_density = density;

View File

@ -12,15 +12,15 @@ class Util
{
public:
#ifdef GTASA
#ifdef GTASA
static void ClearCharTasksVehCheck(CPed* ped);
static CPed* GetClosestPed();
static CVehicle* GetClosestVehicle();
static int GetLargestGangInZone();
static bool IsOnCutscene();
static RwTexture* LoadTextureFromMemory(char* data, unsigned int size);
#endif
#endif
static std::string GetLocationName(CVector* pos);
static bool IsOnMission();
static void RainbowValues(int& r, int& g, int& b, float speed);

View File

@ -138,9 +138,9 @@ Vehicle::Vehicle()
if (veh->m_nVehicleSubClass == VEHICLE_BIKE || veh->m_nVehicleSubClass == VEHICLE_BMX)
{
if (sqrt(veh->m_vecMoveSpeed.x * veh->m_vecMoveSpeed.x
+ veh->m_vecMoveSpeed.y * veh->m_vecMoveSpeed.y
+ veh->m_vecMoveSpeed.z * veh->m_vecMoveSpeed.z
) > 0.0
+ veh->m_vecMoveSpeed.y * veh->m_vecMoveSpeed.y
+ veh->m_vecMoveSpeed.z * veh->m_vecMoveSpeed.z
) > 0.0
&& CTimer::ms_fTimeStep > 0.0)
{
veh->FlyingControl(3, -9999.9902f, -9999.9902f, -9999.9902f, -9999.9902f);
@ -208,21 +208,21 @@ int Vehicle::GetRandomTrainIdForModel(int model)
switch (model)
{
case 449:
_start = 0;
_end = 1;
break;
case 537:
_start = 2;
_end = 7;
break;
case 538:
_start = 8;
_end = 10;
break;
default:
SetHelpMessage("Invalid train model", false, false, false);
return -1;
case 449:
_start = 0;
_end = 1;
break;
case 537:
_start = 2;
_end = 7;
break;
case 538:
_start = 8;
_end = 10;
break;
default:
SetHelpMessage("Invalid train model", false, false, false);
return -1;
}
int id = Random(_start, _end);
return train_ids[id];
@ -329,7 +329,7 @@ void Vehicle::ParseCarcolsDAT()
getline(ss, temp, ',');
int blue = std::stoi(temp);
std::vector<float> color = {red / 255.0f, green / 255.0f, blue / 255.0f};
std::vector<float> color = { red / 255.0f, green / 255.0f, blue / 255.0f };
m_CarcolsColorData.push_back(color);
++count;
@ -437,7 +437,7 @@ void Vehicle::SpawnVehicle(std::string& smodel)
int track = Random(0, 1);
int node = CTrain::FindClosestTrackNode(pos, &track);
CTrain::CreateMissionTrain(pos, (Random(0, 1)) == 1 ? true : false, train_id, &train, &carraige, node,
track, false);
track, false);
veh = (CVehicle*)train;
hveh = CPools::GetVehicleRef(veh);
@ -631,7 +631,7 @@ void Vehicle::Draw()
Ui::CheckboxAddress("Cars fly", 0x969160);
Ui::CheckboxWithHint("Cars heavy", &m_bVehHeavy);
if (Ui::CheckboxWithHint("Damage proof", &m_bNoDamage,
"Every vehicle entered will be damage proof\nBullet, Collision, Explosion, Fire, Meele etc"))
"Every vehicle entered will be damage proof\nBullet, Collision, Explosion, Fire, Meele etc"))
{
if (pVeh && !m_bNoDamage)
{
@ -779,7 +779,7 @@ void Vehicle::Draw()
ImGui::SameLine();
if (ImGui::Button((std::string("Passenger ") + std::to_string(i + 1)).c_str(),
ImVec2(Ui::GetSize(2))))
ImVec2(Ui::GetSize(2))))
Command<Commands::WARP_CHAR_INTO_CAR_AS_PASSENGER>(hplayer, veh, i);
}
}
@ -796,7 +796,7 @@ void Vehicle::Draw()
if (ImGui::Button("Remove vehicles", Ui::GetSize(1)))
{
CPlayerPed* player = FindPlayerPed();
for (CVehicle *pVeh : CPools::ms_pVehiclePool)
for (CVehicle* pVeh : CPools::ms_pVehiclePool)
{
if (DistanceBetweenPoints(pVeh->GetPosition(), player->GetPosition()) < m_nVehRemoveRadius
&& !(player->m_nPedFlags.bInVehicle && player->m_pVehicle == pVeh))
@ -810,7 +810,7 @@ void Vehicle::Draw()
}
if (ImGui::CollapsingHeader("Traffic options"))
{
static std::vector<Ui::NamedMemory> color{{"Black", 0x969151}, {"Pink", 0x969150}};
static std::vector<Ui::NamedMemory> color{ {"Black", 0x969151}, {"Pink", 0x969150} };
static std::vector<Ui::NamedMemory> type{
{"Cheap", 0x96915E}, {"Country", 0x96917B}, {"Fast", 0x96915F}
};
@ -849,20 +849,20 @@ void Vehicle::Draw()
{
switch (m_nDoorMenuButton)
{
case 0:
Command<Commands::DAMAGE_CAR_DOOR>(hveh, i);
break;
case 1:
Command<Commands::FIX_CAR_DOOR>(hveh, i);
break;
case 2:
Command<Commands::OPEN_CAR_DOOR>(hveh, i);
break;
case 3:
Command<Commands::POP_CAR_DOOR>(hveh, i);
break;
default:
break;
case 0:
Command<Commands::DAMAGE_CAR_DOOR>(hveh, i);
break;
case 1:
Command<Commands::FIX_CAR_DOOR>(hveh, i);
break;
case 2:
Command<Commands::OPEN_CAR_DOOR>(hveh, i);
break;
case 3:
Command<Commands::POP_CAR_DOOR>(hveh, i);
break;
default:
break;
}
}
}
@ -873,20 +873,20 @@ void Vehicle::Draw()
{
switch (m_nDoorMenuButton)
{
case 0:
Command<Commands::DAMAGE_CAR_DOOR>(hveh, i);
break;
case 1:
Command<Commands::FIX_CAR_DOOR>(hveh, i);
break;
case 2:
Command<Commands::OPEN_CAR_DOOR>(hveh, i);
break;
case 3:
Command<Commands::POP_CAR_DOOR>(hveh, i);
break;
default:
break;
case 0:
Command<Commands::DAMAGE_CAR_DOOR>(hveh, i);
break;
case 1:
Command<Commands::FIX_CAR_DOOR>(hveh, i);
break;
case 2:
Command<Commands::OPEN_CAR_DOOR>(hveh, i);
break;
case 3:
Command<Commands::POP_CAR_DOOR>(hveh, i);
break;
default:
break;
}
}
@ -935,11 +935,11 @@ void Vehicle::Draw()
ImGui::InputTextWithHint("##LicenseText", "License plate text", m_Spawner::m_nLicenseText, 9);
Ui::DrawImages(m_Spawner::m_VehData.m_ImagesList, ImVec2(100, 75), m_Spawner::m_VehData.m_Categories,
m_Spawner::m_VehData.m_Selected, m_Spawner::m_VehData.m_Filter, SpawnVehicle, nullptr,
[](std::string str)
{
return GetNameFromModel(std::stoi(str));
});
m_Spawner::m_VehData.m_Selected, m_Spawner::m_VehData.m_Filter, SpawnVehicle, nullptr,
[](std::string str)
{
return GetNameFromModel(std::stoi(str));
});
ImGui::EndTabItem();
}
@ -966,7 +966,7 @@ void Vehicle::Draw()
uchar r = m_Color::m_fColorPicker[0] * 255;
uchar g = m_Color::m_fColorPicker[1] * 255;
uchar b = m_Color::m_fColorPicker[2] * 255;
Paint::SetNodeColor(veh, Paint::veh_nodes::selected, {r, g, b, 255}, m_Color::m_bMatFilter);
Paint::SetNodeColor(veh, Paint::veh_nodes::selected, { r, g, b, 255 }, m_Color::m_bMatFilter);
}
ImGui::Spacing();
@ -1012,7 +1012,7 @@ void Vehicle::Draw()
for (int colorId : entry.second)
{
if (Ui::ColorButton(colorId, m_CarcolsColorData[colorId],
ImVec2(btnSize, btnSize)))
ImVec2(btnSize, btnSize)))
*(uint8_replacement*)(int(veh) + 0x433 + m_Color::m_nRadioButton) = colorId;
if (count % btnsInRow != 0)
@ -1131,7 +1131,7 @@ void Vehicle::Draw()
m_Color::m_bMatFilter);
},
nullptr,
[](std::string& str)
[](std::string& str)
{
return str;
});
@ -1143,14 +1143,14 @@ void Vehicle::Draw()
{
ImGui::Spacing();
Ui::DrawImages(m_TuneData.m_ImagesList, ImVec2(100, 80), m_TuneData.m_Categories, m_TuneData.m_Selected,
m_TuneData.m_Filter,
[](std::string& str) { AddComponent(str); },
[](std::string& str) { RemoveComponent(str); },
[](std::string& str) { return str; },
[](std::string& str)
{
return ((bool(*)(int, CVehicle*))0x49B010)(std::stoi(str), player->m_pVehicle);
}
m_TuneData.m_Filter,
[](std::string& str) { AddComponent(str); },
[](std::string& str) { RemoveComponent(str); },
[](std::string& str) { return str; },
[](std::string& str)
{
return ((bool(*)(int, CVehicle*))0x49B010)(std::stoi(str), player->m_pVehicle);
}
);
ImGui::EndTabItem();
@ -1182,13 +1182,13 @@ void Vehicle::Draw()
if (ImGui::Button("Read more", ImVec2(Ui::GetSize(3))))
ShellExecute(NULL, "open", "https://projectcerbera.com/gta/sa/tutorials/handling", NULL, NULL,
SW_SHOWNORMAL);
SW_SHOWNORMAL);
ImGui::Spacing();
ImGui::BeginChild("HandlingChild");
static std::vector<Ui::NamedValue> abs{{"On", 1}, {"Off", 0}};
static std::vector<Ui::NamedValue> abs{ {"On", 1}, {"Off", 0} };
Ui::EditRadioButtonAddressEx("Abs", pHandling + 0x9C, abs);
Ui::EditFloat("Anti dive multiplier", pHandling + 0xC4, 0.0f, 0.0f, 1.0f);
@ -1209,10 +1209,10 @@ void Vehicle::Draw()
Ui::EditFloat("Engine acceleration", pHandling + 0x7C, 0.0f, 0.0f, 49.0f, 12500.0f);
Ui::EditFloat("Engine inertia", pHandling + 0x80, 0.0f, 0.0f, 400.0f);
static std::vector<Ui::NamedValue> engine_type{{"Petrol", 80}, {"Diseal", 68}, {"Electric", 69}};
static std::vector<Ui::NamedValue> engine_type{ {"Petrol", 80}, {"Diseal", 68}, {"Electric", 69} };
Ui::EditRadioButtonAddressEx("Engine type", pHandling + 0x75, engine_type);
std::vector<Ui::NamedValue> front_lights{{"Long", 0}, {"Small", 1}, {"Big", 2}, {"Tall", 3}};
std::vector<Ui::NamedValue> front_lights{ {"Long", 0}, {"Small", 1}, {"Big", 2}, {"Tall", 3} };
Ui::EditRadioButtonAddressEx("Front lights", pHandling + 0xDC, front_lights);
Ui::EditFloat("Force level", pHandling + 0xAC, -10.0f, -10.0f, 10.0f); // test later
@ -1231,7 +1231,7 @@ void Vehicle::Draw()
Ui::EditAddress<BYTE>("Number of gears", pHandling + 0x76, 1, 1, 10);
Ui::EditAddress<BYTE>("Percent submerged", pHandling + 0x20, 10, 10, 120);
static std::vector<Ui::NamedValue> rear_lights{{"Long", 0}, {"Small", 1}, {"Big", 2}, {"Tall", 3}};
static std::vector<Ui::NamedValue> rear_lights{ {"Long", 0}, {"Small", 1}, {"Big", 2}, {"Tall", 3} };
Ui::EditRadioButtonAddressEx("Rear lights", pHandling + 0xDD, rear_lights);
Ui::EditFloat("Seat offset distance", pHandling + 0xD4, 0.0f, 0.0f, 1.0f);

View File

@ -12,7 +12,7 @@ private:
inline static bool m_bNoDamage;
inline static int m_nDoorMenuButton;
inline static std::string m_DoorNames[6] =
{"Hood", "Boot", "Front left door", "Front right door", "Rear left door", "Rear right door"};
{ "Hood", "Boot", "Front left door", "Front right door", "Rear left door", "Rear right door" };
inline static int m_nVehRemoveRadius;
inline static bool m_bLockSpeed;
inline static float m_fLockSpeed;
@ -24,11 +24,11 @@ private:
inline static bool m_bMatFilter = true;
inline static int m_nRadioButton = 1;
inline static bool bShowAll;
inline static float m_fColorPicker[3]{0, 0, 0};
inline static float m_fColorPicker[3]{ 0, 0, 0 };
};
struct m_Neon
{
inline static float m_fColorPicker[3]{0, 0, 0};
inline static float m_fColorPicker[3]{ 0, 0, 0 };
inline static bool m_bRainbowEffect;
inline static uint m_nRainbowTimer;
inline static bool m_bApplyOnTraffic;
@ -49,7 +49,7 @@ private:
inline static bool m_bCompAdded;
};
inline static std::vector<std::string> (m_HandlingFlagNames) = // 32 flags
inline static std::vector<std::string>(m_HandlingFlagNames) = // 32 flags
{
"1G_BOOST", "2G_BOOST", "NPC_ANTI_ROLL", "NPC_NEUTRAL_HANDL", "NO_HANDBRAKE", "STEER_REARWHEELS",
"HB_REARWHEEL_STEER", "ALT_STEER_OPT",
@ -61,7 +61,7 @@ private:
"Unused 4"
};
inline static std::vector<std::string> (m_ModelFlagNames) = // 32 flags
inline static std::vector<std::string>(m_ModelFlagNames) = // 32 flags
{
"IS_VAN", "IS_BUS", "IS_LOW", "IS_BIG", "REVERSE_BONNET", "HANGING_BOOT", "TAILGATE_BOOT", "NOSWING_BOOT",
"NO_DOORS", "TANDEM_SEATS",

View File

@ -57,7 +57,7 @@ bool Visual::TimeCycColorEdit3(const char* label, uchar* r, uchar* g, uchar* b,
auto green = static_cast<uchar*>(patch::GetPointer(int(g)));
auto blue = static_cast<uchar*>(patch::GetPointer(int(b)));
float col[3]{red[val] / 255.0f, green[val] / 255.0f, blue[val] / 255.0f};
float col[3]{ red[val] / 255.0f, green[val] / 255.0f, blue[val] / 255.0f };
if (ImGui::ColorEdit3(label, col, flags))
{
@ -80,7 +80,7 @@ bool Visual::TimeCycColorEdit4(const char* label, uchar* r, uchar* g, uchar* b,
auto blue = static_cast<uchar*>(patch::GetPointer(int(b)));
auto alpha = static_cast<uchar*>(patch::GetPointer(int(a)));
float col[4]{red[val] / 255.0f, green[val] / 255.0f, blue[val] / 255.0f, alpha[val] / 255.0f};
float col[4]{ red[val] / 255.0f, green[val] / 255.0f, blue[val] / 255.0f, alpha[val] / 255.0f };
if (ImGui::ColorEdit4(label, col, flags))
{
@ -322,7 +322,7 @@ void Visual::Draw()
{"No outline", 0}, {"Thin outline", 1}, {"Default outline", 2}
};
Ui::EditRadioButtonAddressEx("Money font outline", 0x58F58D, font_outline);
static std::vector<Ui::NamedValue> style{{"Style 1", 1}, {"Style 2", 2}, {"Default style", 3}};
static std::vector<Ui::NamedValue> style{ {"Style 1", 1}, {"Style 2", 2}, {"Default style", 3} };
Ui::EditRadioButtonAddressEx("Money font style", 0x58F57F, style);
Ui::EditAddress<float>("Radar Height", *(int*)0x5834F6, 0, 76, 999);
Ui::EditAddress<float>("Radar Width", *(int*)0x5834C2, 0, 94, 999);
@ -330,7 +330,7 @@ void Visual::Draw()
Ui::EditAddress<float>("Radar posY", *(int*)0x583500, -999, 104, 999);
Ui::EditAddress<int>("Radar zoom", 0xA444A3, 0, 0, 170);
Ui::ColorPickerAddress("Radio station color", 0xBAB24C, ImVec4(150, 150, 150, 255));
static std::vector<Ui::NamedValue> star_border{{"No border", 0}, {"Default", 1}, {"Bold border", 2}};
static std::vector<Ui::NamedValue> star_border{ {"No border", 0}, {"Default", 1}, {"Bold border", 2} };
Ui::EditRadioButtonAddressEx("Wanted star border", 0x58DD41, star_border);
Ui::EditAddress<float>("Wanted posX", *(int*)0x58DD0F, -999, 29, 999);
Ui::EditAddress<float>("Wanted posY", *(int*)0x58DDFC, -999, 114, 999);
@ -400,6 +400,17 @@ void Visual::Draw()
Ui::ShowTooltip("Sync system time is enabled.\n(Game/Sync system time)");
}
if (ImGui::Checkbox("Freeze game time", &Game::m_bFreezeTime))
{
if (Game::m_bFreezeTime)
{
patch::SetRaw(0x52CF10, (char*)"\xEB\xEF", 2);
}
else
{
patch::SetRaw(0x52CF10, (char*)"\x56\x8B", 2);
}
}
ImGui::Spacing();
if (ImGui::BeginTabBar("Timecyc subtab", ImGuiTabBarFlags_NoTooltip + ImGuiTabBarFlags_FittingPolicyScroll))
{
@ -411,7 +422,7 @@ void Visual::Draw()
TimeCycColorEdit3("Ambient", m_nAmbientRed, m_nAmbientGreen, m_nAmbientBlue);
TimeCycColorEdit3("Ambient obj", m_nAmbientRed_Obj, m_nAmbientGreen_Obj, m_nAmbientBlue_Obj);
TimeCycColorEdit3("Fluffy clouds", m_nFluffyCloudsBottomRed, m_nFluffyCloudsBottomGreen,
m_nFluffyCloudsBottomBlue);
m_nFluffyCloudsBottomBlue);
TimeCycColorEdit3("Low clouds", m_nLowCloudsRed, m_nLowCloudsGreen, m_nLowCloudsBlue);
TimeCycColorEdit4("Postfx 1", m_fPostFx1Red, m_fPostFx1Green, m_fPostFx1Blue, m_fPostFx1Alpha);

View File

@ -20,7 +20,7 @@ private:
static int GetCurrentHourTimeId(int hour = -1);
static bool TimeCycColorEdit3(const char* label, uchar* r, uchar* g, uchar* b, ImGuiColorEditFlags flags = 0);
static bool TimeCycColorEdit4(const char* label, uchar* r, uchar* g, uchar* b, uchar* a,
ImGuiColorEditFlags flags = 0);
ImGuiColorEditFlags flags = 0);
template <typename T>
static void TimecycSlider(const char* label, T* data, int min, int max);
public:

View File

@ -80,7 +80,7 @@ void Weapon::SetGangWeapon(std::string& weapon_type)
{
m_nGangWeaponList[m_nSelectedGang][m_nSelectedWeapon] = std::stoi(weapon_type);
CGangs::SetGangWeapons(m_nSelectedGang, m_nGangWeaponList[m_nSelectedGang][0], m_nGangWeaponList[m_nSelectedGang][1],
m_nGangWeaponList[m_nSelectedGang][2]);
m_nGangWeaponList[m_nSelectedGang][2]);
}
void Weapon::GiveWeaponToPlayer(std::string& weapon_type)
@ -153,7 +153,7 @@ void Weapon::Draw()
}
ImGui::Spacing();
if (ImGui::BeginTabBar("Ped", ImGuiTabBarFlags_NoTooltip + ImGuiTabBarFlags_FittingPolicyScroll))
{
@ -165,7 +165,7 @@ void Weapon::Draw()
Ui::CheckboxWithHint("Fast aim", &m_bAutoAim, "Enables aim assist on keyboard\n\nQ = left E = right\n\nPress Q and E to switch targets.\nMoving mouse removes the target!");
if (Ui::CheckboxWithHint("Dual wield", &m_bDualWeild,
"Dual wield pistol, shawoff, uzi, tec9\n(Other weapons don't work)"))
"Dual wield pistol, shawoff, uzi, tec9\n(Other weapons don't work)"))
{
if (!m_bDualWeild)
{
@ -233,13 +233,13 @@ void Weapon::Draw()
ImGui::Spacing();
ImGui::Text("Current weapon: %s",
m_WeaponData.m_Json.m_Data[std::to_string(m_nGangWeaponList[m_nSelectedGang][m_nSelectedWeapon])].get<
std::string>().c_str());
m_WeaponData.m_Json.m_Data[std::to_string(m_nGangWeaponList[m_nSelectedGang][m_nSelectedWeapon])].get<
std::string>().c_str());
ImGui::Spacing();
Ui::DrawImages(m_WeaponData.m_ImagesList, ImVec2(65, 65), m_WeaponData.m_Categories, m_WeaponData.m_Selected,
m_WeaponData.m_Filter, SetGangWeapon, nullptr,
[](std::string str) { return m_WeaponData.m_Json.m_Data[str].get<std::string>(); },
[](std::string str) { return str != "-1"; /*Jetpack*/ }
m_WeaponData.m_Filter, SetGangWeapon, nullptr,
[](std::string str) { return m_WeaponData.m_Json.m_Data[str].get<std::string>(); },
[](std::string str) { return str != "-1"; /*Jetpack*/ }
);
ImGui::EndTabItem();
}
@ -252,9 +252,9 @@ void Weapon::Draw()
m_nAmmoCount = (m_nAmmoCount > 99999) ? 99999 : m_nAmmoCount;
}
Ui::DrawImages(m_WeaponData.m_ImagesList, ImVec2(65, 65), m_WeaponData.m_Categories, m_WeaponData.m_Selected,
m_WeaponData.m_Filter, GiveWeaponToPlayer, nullptr,
[](std::string str) { return m_WeaponData.m_Json.m_Data[str].get<std::string>(); },
[](std::string str) { return str != "0"; /*Unarmed*/ }
m_WeaponData.m_Filter, GiveWeaponToPlayer, nullptr,
[](std::string str) { return m_WeaponData.m_Json.m_Data[str].get<std::string>(); },
[](std::string str) { return str != "0"; /*Unarmed*/ }
);
ImGui::EndTabItem();
}

View File

@ -3,7 +3,7 @@
class Weapon
{
public:
inline static SSearchData m_WeaponData{"weapon"};
inline static SSearchData m_WeaponData{ "weapon" };
inline static bool m_bImagesLoaded;
inline static bool m_bAutoAim;
inline static bool m_bFastReload;

View File

@ -131,6 +131,7 @@ struct STextureStructure
std::string m_FileName;
std::string m_CategoryName;
RwTexture *m_pRwTexture = nullptr;
void *m_pTexture = nullptr;
};
struct SSearchData

View File

@ -65,6 +65,8 @@ project "CheatMenuVC"
"../src/Json.cpp",
"../src/Teleport.h",
"../src/Teleport.cpp",
"../src/Player.h",
"../src/Player.cpp",
"../src/Ui.h",
"../src/Ui.cpp",
"../src/Util.h",