Push teleport, menu & player (vc)
This commit is contained in:
parent
880ceba2c4
commit
0a15765771
48
resource/VC/CheatMenu/json/peds.json
Normal file
48
resource/VC/CheatMenu/json/peds.json
Normal 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"
|
||||
}
|
||||
}
|
@ -12,18 +12,18 @@
|
||||
#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
|
||||
#elif defined(GTAVC)
|
||||
class CheatMenu : Hook, Menu, Teleport
|
||||
class CheatMenu : Hook, Menu, Player, Teleport
|
||||
#endif
|
||||
|
||||
{
|
||||
@ -38,7 +38,7 @@ private:
|
||||
#elif GTAVC
|
||||
inline static CallbackTable header
|
||||
{
|
||||
{"Teleport", &Teleport::Draw}, {"Menu", &Menu::Draw}
|
||||
{"Teleport", &Teleport::Draw}, {"Player", &Player::Draw}, {"Menu", &Menu::Draw}
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -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 ")"
|
||||
|
200
src/Player.cpp
200
src/Player.cpp
@ -1,10 +1,12 @@
|
||||
#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] =
|
||||
{
|
||||
@ -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()
|
||||
{
|
||||
#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)
|
||||
{
|
||||
#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;
|
||||
#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);
|
||||
@ -176,11 +215,14 @@ void Player::ChangePlayerCloth(std::string& name)
|
||||
}
|
||||
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);
|
||||
|
||||
#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;
|
||||
#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 (ImGui::BeginTabBar("AppearanceTabBar"))
|
||||
{
|
||||
if (ImGui::BeginTabItem("Clothes"))
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
19
src/Player.h
19
src/Player.h
@ -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
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -540,8 +540,7 @@ 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);
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ void Util::LoadTextureDirectory(SSearchData& data, char *path, bool pass_full_na
|
||||
{
|
||||
RwTexDictionary* pRwTexDictionary = &data.txd;
|
||||
|
||||
// allow SA textures for VC
|
||||
pRwTexDictionary = CFileLoader::LoadTexDictionary(path);
|
||||
|
||||
if (pRwTexDictionary)
|
||||
@ -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,6 +63,7 @@ void Util::LoadTextureDirectory(SSearchData& data, char *path, bool pass_full_na
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void* Util::GetTextureFromRaster(RwTexture* pTexture)
|
||||
{
|
||||
RwRasterEx* raster = (RwRasterEx*)(&pTexture->raster->parent);
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -131,6 +131,7 @@ struct STextureStructure
|
||||
std::string m_FileName;
|
||||
std::string m_CategoryName;
|
||||
RwTexture *m_pRwTexture = nullptr;
|
||||
void *m_pTexture = nullptr;
|
||||
};
|
||||
|
||||
struct SSearchData
|
||||
|
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user