Update for b1158.13 (#988)

* Update for b1158.13

* update readme
This commit is contained in:
Arthur
2026-07-17 09:55:42 +03:00
committed by GitHub
parent ef1a4df216
commit 5d9ab8d6fb
34 changed files with 232 additions and 174 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ Experimental menu for GTA 5: Enhanced
## How to use
1. Download the latest version of FSL from [here](https://www.unknowncheats.me/forum/grand-theft-auto-v/616977-fsl-local-gtao-saves.html) and place version.dll in your GTA V directory. Using FSL is now optional but highly recommended for account safety
1. Download the latest version of FSL from [here](https://www.unknowncheats.me/forum/grand-theft-auto-v/616977-fsl-local-gtao-saves.html) and place WINMM.dll in your GTA V directory
2. Download YimMenuV2 from [GitHub Releases](https://github.com/YimMenu/YimMenuV2/releases/tag/nightly)
3. Download an injector, such as [Xenos](https://www.unknowncheats.me/forum/general-programming-and-reversing/124013-xenos-injector-v2-3-2-a.html)
4. Open Rockstar Launcher, select Grand Theft Auto V Enhanced, go to settings, and disable BattlEye. If you are using Steam or Epic Games, you may have to pass the -nobattleye command line parameter as well
+6
View File
@@ -93,12 +93,18 @@ namespace YimMenu
}
}
}
else
{
LOGF(FATAL, "YimMenu requires FSL to be loaded. Please get it from UnknownCheats.me");
}
if (m_BattlEyeRunning)
LOGF(WARNING, "If you are not running an actual BattlEye bypass, exit the game immediately and ensure that BE is properly disabled");
#if 0
if (!m_FSLProvidesBEBypass && !m_BattlEyeRunning)
Pointers.BattlEyeStatusUpdatePatch->Apply();
#endif
while (true)
{
+2 -2
View File
@@ -305,7 +305,7 @@ namespace YimMenu
auto garageOffset = GetPropertyGarageOffset(propertyIterator);
for (int garageSlotIterator = 1; garageSlotIterator <= garageSize; garageSlotIterator++)
{
auto itemInSlot = *ScriptGlobal(1944744).At(garageOffset).At(garageSlotIterator).As<int*>() - 1;
auto itemInSlot = *ScriptGlobal(1945138).At(garageOffset).At(garageSlotIterator).As<int*>() - 1;
if (itemInSlot == m_Id)
{
auto staticPropertyString = GetStaticPropertyName(propertyIterator, garageSlotIterator);
@@ -380,7 +380,7 @@ namespace YimMenu
ScriptMgr::Yield(100ms);
*ScriptLocal("freemode"_J, 19633).At(176).As<int*>() = 0;
*ScriptLocal("freemode"_J, 19672).At(176).As<int*>() = 0;
if (bring)
{
@@ -10,10 +10,10 @@ namespace YimMenu::Features
virtual void OnTick() override
{
constexpr auto is_incoming_call = ScriptGlobal(23010);
constexpr auto is_phone_call_in_progress = ScriptGlobal(23006);
constexpr auto phone_call_state = ScriptGlobal(23000);
constexpr auto calling_character = ScriptGlobal(8779);
constexpr auto is_incoming_call = ScriptGlobal(23050);
constexpr auto is_phone_call_in_progress = ScriptGlobal(23046);
constexpr auto phone_call_state = ScriptGlobal(23040);
constexpr auto calling_character = ScriptGlobal(8818);
if (*Pointers.IsSessionStarted)
{
+8 -8
View File
@@ -43,21 +43,21 @@ namespace YimMenu::Features
NativeHooks::AddHook(NativeHooks::ALL_SCRIPTS, NativeIndex::GET_EVER_HAD_BAD_PACK_ORDER, &PackOrderHook);
constexpr std::array<std::uint32_t, 16> validHashes = {
1222354255, // 0
1017, // 1
2008403316, // 2
3086857943, // 0
1029, // 1
578942327, // 2
472, // 3
0, // 4
0, // 5
2683527064, // 6
3471586599, // 6
0, // 7
0, // 8
1731098795, // 9
234493012, // 10
19919, // 11
4002619495, // 12
19987, // 11
1949347533, // 12
307143837, // 13
2653292054, // 14
2738033789, // 14
200299391, // 15
};
if (auto hashes = Pointers.GameDataHash)
@@ -93,7 +93,7 @@ namespace YimMenu::Hooks
uint32_t Network::GetDLCHash(void* manager, uint32_t seed)
{
if (YimMenu::Features::_SpoofDataHash.GetState())
return 2784221708;
return 1631480001;
return BaseHook::Get<Network::GetDLCHash, DetourHook<decltype(&Network::GetDLCHash)>>()->Original()(manager, seed);
}
+2 -2
View File
@@ -16,9 +16,9 @@ namespace YimMenu::Features
{
using LoopedCommand::LoopedCommand;
int slots_random_results_table = 1350;
int slots_random_results_table = 1357; // Static_1381.f_1[][]
std::set<int> slots_blacklist = {9, 21, 22, 87, 152};
int spin_state_var = 1668;
int spin_state_var = 1675;
std::set<int> spin_state_whitelist = {8, 14};
virtual void OnTick() override
@@ -43,43 +43,43 @@ namespace YimMenu::Features
case eAppVinewoodMenuSafe::NIGHTCLUB:
{
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.NightclubData.SafeCashValue > 0)
*ScriptGlobal(2708832).As<BOOL*>() = TRUE;
*ScriptGlobal(2708943).As<BOOL*>() = TRUE;
break;
}
case eAppVinewoodMenuSafe::ARCADE:
{
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.ArcadeData.SafeCashValue > 0)
*ScriptGlobal(2708841).As<BOOL*>() = TRUE;
*ScriptGlobal(2708952).As<BOOL*>() = TRUE;
break;
}
case eAppVinewoodMenuSafe::AGENCY:
{
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.FixerHQData.SafeCashValue > 0)
*ScriptGlobal(2708850).As<BOOL*>() = TRUE;
*ScriptGlobal(2708961).As<BOOL*>() = TRUE;
break;
}
case eAppVinewoodMenuSafe::SALVAGE_YARD:
{
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.SalvageYardData.TotalEarnings > 0)
*ScriptGlobal(2708859).As<BOOL*>() = TRUE;
*ScriptGlobal(2708970).As<BOOL*>() = TRUE;
break;
}
case eAppVinewoodMenuSafe::BAIL_OFFICE:
{
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.BailShopData.SafeCashValue > 0)
*ScriptGlobal(2708868).As<BOOL*>() = TRUE;
*ScriptGlobal(2708979).As<BOOL*>() = TRUE;
break;
}
case eAppVinewoodMenuSafe::GARMENT_FACTORY:
{
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.HackerDenData.SafeCashValue > 0)
*ScriptGlobal(2708883).As<BOOL*>() = TRUE;
*ScriptGlobal(2708994).As<BOOL*>() = TRUE;
break;
}
case eAppVinewoodMenuSafe::HANDS_ON_CAR_WASH:
{
if (GPBD_FM_2::Get()->Entries[Self::GetPlayer().GetId()].SYVehSaleData.HOWCData.SafeCashValue > 0)
*ScriptGlobal(2708890).As<BOOL*>() = TRUE;
*ScriptGlobal(2709001).As<BOOL*>() = TRUE;
break;
}
}
+20 -20
View File
@@ -166,13 +166,13 @@ namespace YimMenu::Features
static joaat_t GetNextExoticExportsVehicleHash()
{
constexpr ScriptGlobal order(1950369);
constexpr ScriptGlobal order(1950873);
for (int i = 1; i <= 10; i++)
{
auto offset = *order.At(i).As<int*>();
if (!GPBD_Flow::Get()->Entries[Self::GetPlayer().GetId()].TunerCBVDeliveredFlags.IsSet(offset))
{
auto hash = *ScriptGlobal(1950358 + (offset + 1)).As<joaat_t*>();
auto hash = *ScriptGlobal(1950862 + (offset + 1)).As<joaat_t*>();
return hash;
}
}
@@ -205,7 +205,7 @@ namespace YimMenu::Features
}
}
auto streetDealerData = ScriptLocal(m_Thread, 258).At(12);
auto streetDealerData = ScriptLocal(m_Thread, 265).At(12);
if (!initialized)
{
@@ -528,13 +528,13 @@ namespace YimMenu::Features
bool partime = Stats::GetPackedInt(34838 + (index * 4)) == location;
bool landing = Stats::GetPackedInt(34839 + (index * 4)) == location;
*ScriptGlobal(1979961).As<int*>() = 1;
*ScriptGlobal(1979961).At(1).As<int*>() = 1;
*ScriptGlobal(1979961).At(3).As<int*>() = 5;
*ScriptGlobal(1979961).At(4).As<int*>() = location + 1;
*ScriptGlobal(1979961).At(8).At(1).As<int*>() = checkpointReward.Get<int>() / (1 + (checkpoints * 9));
*ScriptGlobal(1979961).At(8).At(2).As<int*>() = parTimeReward.Get<int>() / (1 + (partime * 9));
*ScriptGlobal(1979961).At(8).At(3).As<int*>() = landingReward.Get<int>() / (1 + (landing * 9));
*ScriptGlobal(1980496).As<int*>() = 1;
*ScriptGlobal(1980496).At(1).As<int*>() = 1;
*ScriptGlobal(1980496).At(3).As<int*>() = 5;
*ScriptGlobal(1980496).At(4).As<int*>() = location + 1;
*ScriptGlobal(1980496).At(8).At(1).As<int*>() = checkpointReward.Get<int>() / (1 + (checkpoints * 9));
*ScriptGlobal(1980496).At(8).At(2).As<int*>() = parTimeReward.Get<int>() / (1 + (partime * 9));
*ScriptGlobal(1980496).At(8).At(3).As<int*>() = landingReward.Get<int>() / (1 + (landing * 9));
SET_SKYDIVE_COMPLETED data;
data.SkydiveIndex = index;
@@ -544,7 +544,7 @@ namespace YimMenu::Features
data.AccurateLanding = TRUE;
data.Send();
ScriptGlobal(1983930).At(4).As<SCR_BITSET<uint64_t>*>()->Clear(3);
ScriptGlobal(1984467).At(4).As<SCR_BITSET<uint64_t>*>()->Clear(3);
}
};
@@ -656,8 +656,8 @@ namespace YimMenu::Features
{
thread->m_Context.m_State = rage::scrThread::State::PAUSED;
*ScriptLocal(thread, 3103).At(131).At(1).As<int*>() = FreemodeGeneral::Get()->DailyReset.Seed % 14; // if we don't init this, the par time duration function will return 0 and the COMPLETED stat will be set to 0, which is bad
*ScriptLocal(thread, 146).At(4).As<int*>() = 0;
*ScriptLocal(thread, 3135).At(131).At(1).As<int*>() = FreemodeGeneral::Get()->DailyReset.Seed % 14; // if we don't init this, the par time duration function will return 0 and the COMPLETED stat will be set to 0, which is bad
*ScriptLocal(thread, 153).At(4).As<int*>() = 0;
static ScriptFunction onBTTEnd("fm_content_bicycle_time_trial"_J,
ScriptPointer("OnBTTEnd", "64 ? ? ? 5D ? ? ? 75 77").Add(1).Rip());
onBTTEnd.Call<void>();
@@ -712,7 +712,7 @@ namespace YimMenu::Features
}*/
auto hash = GetNextExoticExportsVehicleHash();
static ScriptFunction onFreemodeDeliveryEnd("freemode"_J, ScriptPointer("OnFreemodeDeliveryEnd", "2D 0C 2A 00 00"));
static ScriptFunction onFreemodeDeliveryEnd("freemode"_J, ScriptPointer("OnFreemodeDeliveryEnd", "2D 0C 2B 00"));
onFreemodeDeliveryEnd.Call<void>(0, Self::GetPlayer().GetId(), 0, 0, 0, 0, 0, 0, 0, 0, hash, 273);
//FreemodeDelivery::Get()->DeliveryCooldown1.Reset();
}
@@ -796,8 +796,8 @@ namespace YimMenu::Features
{
for (int i = 0; i < 3; i++)
{
int combination = *ScriptLocal(thread, 146).At(22).At(i, 2).At(1).As<int*>();
*ScriptLocal(thread, 146).At(22).At(i, 2).As<float*>() = combination;
int combination = *ScriptLocal(thread, 153).At(22).At(i, 2).At(1).As<int*>();
*ScriptLocal(thread, 153).At(22).At(i, 2).As<float*>() = combination;
}
}
}
@@ -915,7 +915,7 @@ namespace YimMenu::Features
if (auto thread = Scripts::FindScriptThread("fm_content_daily_bounty"_J))
{
if (auto coords = *ScriptLocal(thread, 243).At(434).At(1).At(0, 4).As<Vector3*>())
if (auto coords = *ScriptLocal(thread, 250).At(434).At(1).At(0, 4).As<Vector3*>())
{
Self::GetPed().TeleportTo(coords);
}
@@ -962,9 +962,9 @@ namespace YimMenu::Features
if (index < 0 || index >= wildlifePhotographyAnimalHashes.size())
return;
ScriptGlobal(2709409).At(545).As<SCR_BITSET<uint64_t>*>()->Set(6);
*ScriptGlobal(2709409).At(549).As<joaat_t*>() = wildlifePhotographyAnimalHashes[index];
*ScriptGlobal(2709409).At(550).As<int*>() = *Pointers.GameTimer - 1; // bypass 2 sec delay
ScriptGlobal(2709520).At(545).As<SCR_BITSET<uint64_t>*>()->Set(6);
*ScriptGlobal(2709520).At(549).As<joaat_t*>() = wildlifePhotographyAnimalHashes[index];
*ScriptGlobal(2709520).At(550).As<int*>() = *Pointers.GameTimer - 1; // bypass 2 sec delay
}
else
{
@@ -6,6 +6,7 @@
#include "game/gta/ScriptLocal.hpp"
#include "core/backend/ScriptMgr.hpp"
#include "types/script/globals/GlobalPlayerBD.hpp"
#include "game/backend/Self.hpp"
namespace YimMenu::Features
{
@@ -22,8 +23,8 @@ namespace YimMenu::Features
virtual void OnCall() override
{
auto base1 = ScriptGlobal(1936013).At(1);
auto base2 = ScriptGlobal(1937981).At(3008);
auto base1 = ScriptGlobal(1936406).At(1);
auto base2 = ScriptGlobal(1938374).At(3008);
*base1.At(0, 1).As<int*>() = 100 - (_ApartmentHeistCut1.GetState() + _ApartmentHeistCut2.GetState() + _ApartmentHeistCut3.GetState() + _ApartmentHeistCut4.GetState());
*base1.At(1, 1).As<int*>() = _ApartmentHeistCut2.GetState();
@@ -75,8 +76,8 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
{
*ScriptLocal(thread, 12223).At(24).As<int*>() = 7;
*ScriptLocal(thread, 10217).As<int*>() = *ScriptLocal(thread, 10217).As<int*>() | (1 << 9);
*ScriptLocal(thread, 12239).At(24).As<int*>() = 7;
*ScriptLocal(thread, 10233).As<int*>() = *ScriptLocal(thread, 10233).As<int*>() | (1 << 9);
}
}
};
@@ -89,7 +90,7 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
{
*ScriptLocal(thread, 10511).At(11).As<float*>() = 100.0f;
*ScriptLocal(thread, 10527).At(11).As<float*>() = 100.0f;
}
}
};
@@ -102,8 +103,8 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
{
*ScriptLocal(thread, 32616).As<int*>() = 8;
*ScriptLocal(thread, 63640).As<int*>() = 5;
*ScriptLocal(thread, 32785).At(Self::GetPlayer().GetId(), 294).At(143).As<int*>() = 8;
*ScriptLocal(thread, 64655).As<int*>() = 5;
}
}
};
@@ -119,10 +120,10 @@ namespace YimMenu::Features
Scripts::ForceScriptHost(thread);
ScriptMgr::Yield(500ms);
*ScriptLocal(thread, 20395).At(1725).At(0, 1).As<int*>() = 80;
*ScriptLocal(thread, 20395).As<int*>() = 12;
*ScriptLocal(thread, 29016).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32472).At(0, 294).At(68).As<int*>() = 99999;
*ScriptLocal(thread, 20412).At(1725).At(0, 1).As<int*>() = 80;
*ScriptLocal(thread, 20412).As<int*>() = 12;
*ScriptLocal(thread, 29326).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32785).At(0, 294).At(68).As<int*>() = 99999;
}
// TODO: find a way of getting current heist info so that InstantFinishPacific can be implemented here conditionally.
}
@@ -139,11 +140,11 @@ namespace YimMenu::Features
Scripts::ForceScriptHost(thread);
ScriptMgr::Yield(500ms);
*ScriptLocal(thread, 20395).At(2686).As<int*>() = 1875000;
*ScriptLocal(thread, 20395).At(1062).As<int*>() = 5;
*ScriptLocal(thread, 20395).As<int*>() = 12;
*ScriptLocal(thread, 29016).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32472).At(0, 294).At(68).As<int*>() = 99999;
*ScriptLocal(thread, 20412).At(2686).As<int*>() = 1875000;
*ScriptLocal(thread, 20412).At(1062).As<int*>() = 5;
*ScriptLocal(thread, 20412).As<int*>() = 12;
*ScriptLocal(thread, 29326).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32785).At(0, 294).At(68).As<int*>() = 99999;
}
}
};
@@ -25,7 +25,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
auto base = ScriptGlobal(1980035).At(831).At(56);
auto base = ScriptGlobal(1980570).At(831).At(56);
*base.At(0, 1).As<int*>() = _CayoPericoHeistCut1.GetState();
*base.At(1, 1).As<int*>() = _CayoPericoHeistCut2.GetState();
@@ -40,7 +40,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
auto base = ScriptGlobal(1981146);
auto base = ScriptGlobal(1973762);
for (int i = 0; i <= 3; i++)
{
@@ -123,7 +123,7 @@ namespace YimMenu::Features
ScriptMgr::Yield(500ms);
if (auto thread = Scripts::FindScriptThread("heist_island_planning"_J))
*ScriptLocal(thread, 1570).As<int*>() = 2;
*ScriptLocal(thread, 1580).As<int*>() = 2;
}
};
@@ -195,7 +195,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller_2020"_J))
*ScriptLocal(thread, 59705).At(1376).At(53).As<int*>() = _CayoPericoHeistSecondaryTakeValue.GetState();
*ScriptLocal(thread, 59986).At(1376).At(53).As<int*>() = _CayoPericoHeistSecondaryTakeValue.GetState();
}
};
@@ -206,7 +206,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller_2020"_J))
*ScriptLocal(thread, 26486).As<int*>() = 5;
*ScriptLocal(thread, 26619).As<int*>() = 5;
}
};
@@ -217,7 +217,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller_2020"_J))
*ScriptLocal(thread, 31349).As<int*>() = 6;
*ScriptLocal(thread, 31511).As<int*>() = 6;
}
};
@@ -228,7 +228,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller_2020"_J))
*ScriptLocal(thread, 32589).At(3).As<float*>() = 100.0f;
*ScriptLocal(thread, 32751).At(3).As<float*>() = 100.0f;
}
};
@@ -258,12 +258,12 @@ namespace YimMenu::Features
case 1:
case 3:
case 5:
*ScriptLocal(thread, 32588).As<int*>() = 5;
*ScriptLocal(thread, 32589).As<int*>() = 3;
*ScriptLocal(thread, 32750).As<int*>() = 5;
*ScriptLocal(thread, 32751).As<int*>() = 3;
break;
case 2:
case 4:
*ScriptLocal(thread, 32563).As<int*>() = 7;
*ScriptLocal(thread, 32725).As<int*>() = 7;
break;
default: break;
}
@@ -287,8 +287,8 @@ namespace YimMenu::Features
Scripts::ForceScriptHost(thread);
ScriptMgr::Yield(500ms);
*ScriptLocal(thread, 56223).As<int*>() = 9;
*ScriptLocal(thread, 56223).At(1776).At(0, 1).As<int*>() = 50;
*ScriptLocal(thread, 56504).As<int*>() = 9;
*ScriptLocal(thread, 56504).At(1776).At(0, 1).As<int*>() = 50;
}
}
};
@@ -7,6 +7,7 @@
#include "game/gta/ScriptLocal.hpp"
#include "core/backend/ScriptMgr.hpp"
#include "game/backend/Tunables.hpp"
#include "game/backend/Self.hpp"
namespace YimMenu::Features
{
@@ -23,7 +24,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
auto base = ScriptGlobal(1973231).At(1497).At(736).At(92);
auto base = ScriptGlobal(1973762).At(1497).At(736).At(92);
*base.At(0, 1).As<int*>() = _DiamondCasinoHeistCut1.GetState();
*base.At(1, 1).As<int*>() = _DiamondCasinoHeistCut2.GetState();
@@ -38,7 +39,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
auto base = ScriptGlobal(1977594);
auto base = ScriptGlobal(1978125);
for (int i = 0; i <= 3; i++)
{
@@ -302,7 +303,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
*ScriptLocal(thread, 20395).At(2686).As<int*>() = _DiamondCasinoHeistActualTake.GetState();
*ScriptLocal(thread, 20412).At(2686).As<int*>() = _DiamondCasinoHeistActualTake.GetState();
}
};
@@ -314,8 +315,8 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
{
*ScriptLocal(thread, 54042).As<int*>() = 5;
*ScriptLocal(thread, 55108).As<int*>() = 5;
*ScriptLocal(thread, 55028).As<int*>() = 5;
*ScriptLocal(thread, 56098).As<int*>() = 5;
}
}
};
@@ -327,7 +328,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
*ScriptLocal(thread, 10551).At(7).As<int*>() = *ScriptLocal(thread, 10551).At(37).As<int*>();
*ScriptLocal(thread, 10567).At(7).As<int*>() = *ScriptLocal(thread, 10567).At(37).As<int*>();
}
};
@@ -339,7 +340,7 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
{
*ScriptLocal(thread, 32616).As<int*>() = 8;
*ScriptLocal(thread, 32785).At(Self::GetPlayer().GetId(), 294).At(143).As<int*>() = 8;
*ScriptLocal(thread, 63640).As<int*>() = 5;
}
}
@@ -356,12 +357,12 @@ namespace YimMenu::Features
Scripts::ForceScriptHost(thread);
ScriptMgr::Yield(500ms);
*ScriptLocal(thread, 20395).At(1740).At(0, 1).As<int*>() = 80;
*ScriptLocal(thread, 20395).At(2686).As<int*>() = 4443220;
*ScriptLocal(thread, 20395).At(1062).As<int*>() = 5;
*ScriptLocal(thread, 20395).As<int*>() = 12;
*ScriptLocal(thread, 29016).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32472).At(0, 294).At(68).As<int*>() = 99999;
*ScriptLocal(thread, 20412).At(1740).At(0, 1).As<int*>() = 80;
*ScriptLocal(thread, 20412).At(2686).As<int*>() = 4443220;
*ScriptLocal(thread, 20412).At(1062).As<int*>() = 5;
*ScriptLocal(thread, 20412).As<int*>() = 12;
*ScriptLocal(thread, 29326).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32785).At(0, 294).At(68).As<int*>() = 99999;
}
}
};
@@ -22,7 +22,7 @@ namespace YimMenu::Features
virtual void OnCall() override
{
auto base = ScriptGlobal(1968543).At(812).At(50);
auto base = ScriptGlobal(1969071).At(812).At(50);
*base.At(0, 1).As<int*>() = _DoomsdayHeistCut1.GetState();
*base.At(1, 1).As<int*>() = _DoomsdayHeistCut2.GetState();
@@ -83,7 +83,7 @@ namespace YimMenu::Features
ScriptMgr::Yield(500ms);
if (auto thread = Scripts::FindScriptThread("gb_gang_ops_planning"_J))
*ScriptLocal(thread, 211).As<int*>() = 6;
*ScriptLocal(thread, 218).As<int*>() = 6;
}
};
@@ -95,9 +95,9 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
{
*ScriptLocal(thread, 1572).As<int*>() = 2;
*ScriptLocal(thread, 1541).As<int*>() = 3;
*ScriptLocal(thread, 1298).At(135).As<int*>() = 3;
*ScriptLocal(thread, 1588).As<int*>() = 2;
*ScriptLocal(thread, 1557).As<int*>() = 3;
*ScriptLocal(thread, 1314).At(135).As<int*>() = 3;
}
}
};
@@ -113,10 +113,10 @@ namespace YimMenu::Features
Scripts::ForceScriptHost(thread);
ScriptMgr::Yield(500ms);
*ScriptLocal(thread, 20395).At(1725).At(0, 1).As<int*>() = 80;
*ScriptLocal(thread, 20395).As<int*>() = 12;
*ScriptLocal(thread, 29016).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32472).At(0, 294).At(68).As<int*>() = 99999;
*ScriptLocal(thread, 20412).At(1725).At(0, 1).As<int*>() = 80;
*ScriptLocal(thread, 20412).As<int*>() = 12;
*ScriptLocal(thread, 29326).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32785).At(0, 294).At(68).As<int*>() = 99999;
}
// TODO: find a way of getting current heist info so that InstantFinishAct3 can be implemented here conditionally.
}
@@ -133,11 +133,11 @@ namespace YimMenu::Features
Scripts::ForceScriptHost(thread);
ScriptMgr::Yield(500ms);
*ScriptLocal(thread, 20395).As<int*>() = 12;
*ScriptLocal(thread, 20395).At(1740).At(0, 1).As<int*>() = 150;
*ScriptLocal(thread, 20395).At(1062).As<int*>() = 5;
*ScriptLocal(thread, 29016).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32472).At(0, 294).At(68).As<int*>() = 99999;
*ScriptLocal(thread, 20412).As<int*>() = 12;
*ScriptLocal(thread, 20412).At(1740).At(0, 1).As<int*>() = 150;
*ScriptLocal(thread, 20412).At(1062).As<int*>() = 5;
*ScriptLocal(thread, 29326).At(0, 1).As<int*>() = 99999;
*ScriptLocal(thread, 32785).At(0, 294).At(68).As<int*>() = 99999;
}
}
};
+2 -2
View File
@@ -18,8 +18,8 @@ namespace YimMenu::Features
virtual void OnTick() override
{
*Pointers.HasGTAPlus = true;
*ScriptGlobal(1970058).As<bool*>() = true;
*ScriptGlobal(1970058).At(3).As<int*>() = (1 << 3) | (1 << 1);
*ScriptGlobal(1970586).As<bool*>() = true;
*ScriptGlobal(1970586).At(3).As<int*>() = (1 << 3) | (1 << 1);
}
virtual void OnDisable() override
+5
View File
@@ -1,6 +1,8 @@
#include "core/commands/LoopedCommand.hpp"
#include "game/backend/Self.hpp"
#include "game/gta/Scripts.hpp"
#include "game/gta/ScriptGlobal.hpp"
#include "game/pointers/Pointers.hpp"
#include "types/script/globals/GlobalPlayerBD.hpp"
namespace YimMenu::Features
@@ -12,7 +14,10 @@ namespace YimMenu::Features
virtual void OnTick() override
{
if (auto gpbd = GlobalPlayerBD::Get(); gpbd && Scripts::SafeToModifyFreemodeBroadcastGlobals())
{
*ScriptGlobal(2673276).At(58).As<int*>() = *Pointers.NetworkTime;
gpbd->Entries[Self::GetPlayer().GetId()].OffRadarActive = true;
}
}
virtual void OnDisable() override
+1 -1
View File
@@ -45,7 +45,7 @@ namespace YimMenu::Features
}
static ScriptFunction runGunLockerMenu("AM_MP_AUTO_SHOP"_J, ScriptPointer("RunGunLockerMenu", "2D 06 08 00 00 38 03 5D ? ? ? 57 03 00"));
auto gunLockerData = ScriptLocal(m_Thread, 294).At(584);
auto gunLockerData = ScriptLocal(m_Thread, 301).At(568);
int unused;
runGunLockerMenu.Call<void>(gunLockerData.As<void*>(), &unused, eSimpleInteriorIndex::SIMPLE_INTERIOR_AUTO_SHOP_MISSION_ROW, Self::GetPlayer().GetId(), false, true);
+2 -2
View File
@@ -70,7 +70,7 @@ namespace YimMenu::Features
if (!isItemLockedByStatPatch1)
{
isItemLockedByStatPatch1 = ScriptPatches::AddPatch("wardrobe_mp"_J, ScriptPointer("IsItemLockedByStatPatch1", "38 00 65 02 F7 B6 C6 31 09 00 31 46 A9 B0 28 04"), {0x71, 0x2E, 0x03, 0x01});
isItemLockedByStatPatch1 = ScriptPatches::AddPatch("wardrobe_mp"_J, ScriptPointer("IsItemLockedByStatPatch1", "38 00 65 02 F7"), {0x71, 0x2E, 0x03, 0x01});
}
isItemLockedByStatPatch1->Enable();
@@ -105,7 +105,7 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThread("wardrobe_mp"_J))
{
if (*ScriptLocal(thread, 191).At(46).At(9).As<int*>() == 4)
if (*ScriptLocal(thread, 198).At(46).At(9).As<int*>() == 4)
{
shouldCleanupWardrobePatch->Disable();
isWardrobeOpenedPatch->Disable();
+4 -4
View File
@@ -24,8 +24,8 @@ namespace YimMenu::Features
if (auto freemode = Scripts::FindScriptThread("freemode"_J))
{
auto data = ScriptLocal(freemode, 8819);
*data.At(3).As<int*>() = 230;
auto data = ScriptLocal(freemode, 8854);
*data.At(3).As<int*>() = 235;
*data.At(3).At(16).As<int*>() = Self::GetPlayer().GetId();
*data.At(3).At(1).As<int*>() = 89;
*data.At(2).As<int*>() = "AM_CONTACT_REQUESTS"_J;
@@ -35,8 +35,8 @@ namespace YimMenu::Features
{
if (auto thread = Scripts::FindScriptThreadByID(id))
{
*ScriptLocal(thread, 528).As<int*>() = 1;
ScriptGlobal(2686095).At(4357).At(260).At(7, 2).As<TIMER*>()->Destroy();
*ScriptLocal(thread, 535).As<int*>() = 1;
ScriptGlobal(2686124).At(4373).At(260).At(7, 2).As<TIMER*>()->Destroy();
}
}
else
@@ -59,7 +59,7 @@ namespace YimMenu::Features
if (auto VehicleRewardData = VEHICLE_REWARD_DATA::Get(m_Thread))
{
auto VehicleMenuData = ScriptLocal(m_Thread, 176).As<int*>(); // TO-DO: add struct for this?
auto VehicleMenuData = ScriptLocal(m_Thread, 195).As<int*>(); // TO-DO: add struct for this?
static ScriptFunction giveVehicleReward("AM_MP_VEHICLE_REWARD"_J, ScriptPointer("GiveVehicleReward", "2D 0C 1E 00 00"));
if (giveVehicleReward.Call<bool>(Self::GetVehicle().GetHandle(), VehicleMenuData, &VehicleRewardData->TransactionStatus, &VehicleRewardData->Garage, &VehicleRewardData->GarageOffset, &VehicleRewardData->ControlStatus, false, true, true, false, 0, -1))
{
@@ -93,8 +93,8 @@ namespace YimMenu::Submenus
{
if (event == ARMOURED_TRUCK) // It doesn't have tunables
{
setCooldown = *ScriptGlobal(262145).At(33807).As<int*>();
setAvailability = *ScriptGlobal(262145).At(33808).As<int*>();
setCooldown = *ScriptGlobal(262145).At(33808).As<int*>();
setAvailability = *ScriptGlobal(262145).At(33809).As<int*>();
}
else
{
+1 -1
View File
@@ -19,7 +19,7 @@ namespace YimMenu::Network
void LaunchJoinType(JoinType to_launch)
{
static ScriptFunction sendToClouds("shop_controller"_J, ScriptPointer("SendToClouds", "2D 00 02 00 00 72 5D ? ? ? 72"));
static ScriptGlobal join_type_global(1575044);
static ScriptGlobal join_type_global(1575048);
sendToClouds.Call<void>();
*join_type_global.As<JoinType*>() = to_launch;
+1 -1
View File
@@ -325,7 +325,7 @@ namespace YimMenu::Scripts
rand_int_2 ^= (random_int ^ -2024791401); // TODO: this is a pretty ghetto way to create random numbers
rand_int_2 ^= (random_int ^ 917391583);
auto bypass_global = ScriptGlobal(1990823); // this global will bypass the new checks added this update
auto bypass_global = ScriptGlobal(1991386); // this global will bypass the new checks added this update
auto old_val = *bypass_global.As<int*>();
*bypass_global.As<int*>() = rand_int_2 ^ rand() ^ time(0);
+6 -1
View File
@@ -230,6 +230,11 @@ namespace YimMenu
"fm_content_survival_grouping"_J,
"fm_content_valentine_cheater"_J,
"fm_content_survival"_J,
"fm_content_kortz_scoping"_J,
"fm_content_kortz_entry"_J,
"fm_content_kortz_equipment"_J,
"fm_content_kortz_disruption"_J,
"fm_content_kortz_task"_J,
"AM_BOAT_TAXI"_J,
"AM_HELI_TAXI"_J,
"fm_hold_up_tut"_J,
@@ -258,7 +263,7 @@ namespace YimMenu
"fm_Bj_race_controler"_J,
"fm_deathmatch_controler"_J,
"fm_hideout_controler"_J,
"fm_mission_controller_2020"_J, // Public_Mission_Controller, fm_mission_controller
"fm_mission_controller_v3"_J, // Public_Mission_Controller/fm_mission_controller/fm_mission_controller_2020
"FM_Race_Controler"_J,
"FM_Horde_Controler"_J, // FM_Survival_Controller
"dont_cross_the_line"_J,
+9
View File
@@ -403,6 +403,7 @@ namespace YimMenu
"csb_englishdave",
"csb_englishdave_02",
"csb_faber_02",
"csb_faber_03",
"csb_fos_rep",
"csb_g",
"csb_georginacheng",
@@ -456,7 +457,9 @@ namespace YimMenu
"csb_porndudes",
"csb_prologuedriver",
"csb_prolsec",
"csb_rae",
"csb_rafdeangelis",
"csb_rafdeangelis_02",
"csb_ramp_gang",
"csb_ramp_hic",
"csb_ramp_hipster",
@@ -564,6 +567,7 @@ namespace YimMenu
"ig_agent_02",
"ig_agent14_02",
"ig_ahronward",
"ig_alec",
"ig_amandatownley",
"ig_amandatownley_02",
"ig_andreas",
@@ -638,6 +642,7 @@ namespace YimMenu
"ig_entourage_a",
"ig_entourage_b",
"ig_faber_02",
"ig_faber_03",
"ig_fabien",
"ig_fbisuit_01",
"ig_fibleader_01",
@@ -752,12 +757,15 @@ namespace YimMenu
"ig_patricia",
"ig_patricia_02",
"ig_pernell_moss",
"ig_pernell_moss_02",
"ig_pilot",
"ig_pilot_02",
"ig_popov",
"ig_priest",
"ig_prolsec_02",
"ig_rae",
"ig_rafdeangelis",
"ig_rafdeangelis_02",
"ig_ramp_gang",
"ig_ramp_hic",
"ig_ramp_hipster",
@@ -927,6 +935,7 @@ namespace YimMenu
"s_m_m_highsec_05",
"s_m_m_highsec_06",
"s_m_m_janitor",
"s_m_m_kortzsecurity_01",
"s_m_m_lathandy_01",
"s_m_m_lifeinvad_01",
"s_m_m_linecook",
+11
View File
@@ -126,6 +126,7 @@ namespace YimMenu
"am_mp_island",
"am_mp_juggalo_hideout",
"am_mp_mansion",
"am_mp_mansion_art_workshop",
"am_mp_mansion_driveway",
"am_mp_mansion_garage",
"am_mp_multistorey_garage",
@@ -437,6 +438,7 @@ namespace YimMenu
"flow_help",
"flyunderbridges",
"fmmc_contentquicklauncher",
"fmmc_lasers",
"fmmc_launcher",
"fmmc_playlist_controller",
"fm_bj_race_controler",
@@ -493,6 +495,11 @@ namespace YimMenu
"fm_content_hsw_time_trial",
"fm_content_island_dj",
"fm_content_island_heist",
"fm_content_kortz_disruption",
"fm_content_kortz_entry",
"fm_content_kortz_equipment",
"fm_content_kortz_scoping",
"fm_content_kortz_task",
"fm_content_metal_detector",
"fm_content_movie_props",
"fm_content_mp_intro",
@@ -552,6 +559,7 @@ namespace YimMenu
"fm_main_menu",
"fm_mission_controller",
"fm_mission_controller_2020",
"fm_mission_controller_v3",
"fm_mission_creator",
"fm_race_controler",
"fm_race_creator",
@@ -716,6 +724,7 @@ namespace YimMenu
"josh4",
"juggalo_hideout_carmod",
"juggalo_hideout_seating",
"kortz_planning",
"lamar1",
"landing_pre_startup",
"laptop_trigger",
@@ -765,6 +774,7 @@ namespace YimMenu
"maintransition",
"main_install",
"main_persistent",
"mansion_art_workshop_seating",
"mansion_basement_seating",
"mansion_carmod",
"mansion_club_bar",
@@ -818,6 +828,7 @@ namespace YimMenu
"mp_registration",
"mp_save_game_global_block",
"mp_skycam_stuck_wiggler",
"mp_strand_f9",
"mp_unlocks",
"mp_weapons",
"mrsphilips1",
+1 -1
View File
@@ -29,7 +29,7 @@ namespace YimMenu
INGAMEHUD = 4600,
TRANSITION = 8032,
FMMC_LAUNCHER = 28000,
MULTIPLAYER_FREEMODE = 89500,
MULTIPLAYER_FREEMODE = 92500,
MISSION = 64500,
MP_LAUNCH_SCRIPT = 35250
};
+14
View File
@@ -161,6 +161,7 @@ namespace YimMenu
"camper"_J,
"caracara"_J,
"caracara2"_J,
"caracara3"_J,
"carbonizzare"_J,
"carbonrs"_J,
"cargobob"_J,
@@ -170,6 +171,7 @@ namespace YimMenu
"cargobob5"_J,
"cargoplane"_J,
"cargoplane2"_J,
"cartuccia"_J,
"casco"_J,
"castigator"_J,
"cavalcade"_J,
@@ -262,9 +264,12 @@ namespace YimMenu
"draugur"_J,
"driftchavosv6"_J,
"driftcheburek"_J,
"driftcoquette"_J,
"driftcypher"_J,
"driftdominator10"_J,
"driftdominator8"_J,
"driftdominator9"_J,
"driftelegy"_J,
"drifteuros"_J,
"driftfr36"_J,
"driftfuto"_J,
@@ -312,6 +317,7 @@ namespace YimMenu
"entityxf"_J,
"envisage"_J,
"esskey"_J,
"estride"_J,
"eudora"_J,
"euros"_J,
"eurosx32"_J,
@@ -400,6 +406,7 @@ namespace YimMenu
"hellion"_J,
"hermes"_J,
"hexer"_J,
"horus"_J,
"hotknife"_J,
"hotring"_J,
"howard"_J,
@@ -472,6 +479,7 @@ namespace YimMenu
"l352"_J,
"landstalker"_J,
"landstalker2"_J,
"laufer"_J,
"lazer"_J,
"le7b"_J,
"lectro"_J,
@@ -480,6 +488,7 @@ namespace YimMenu
"lm87"_J,
"locust"_J,
"longfin"_J,
"lrcgt"_J,
"luiva"_J,
"lurcher"_J,
"luxor"_J,
@@ -499,6 +508,7 @@ namespace YimMenu
"maverick"_J,
"maverick2"_J,
"menacer"_J,
"merula"_J,
"mesa"_J,
"mesa2"_J,
"mesa3"_J,
@@ -604,6 +614,7 @@ namespace YimMenu
"policeold2"_J,
"policet"_J,
"policet3"_J,
"polignus"_J,
"polimpaler5"_J,
"polimpaler6"_J,
"polmav"_J,
@@ -850,6 +861,7 @@ namespace YimMenu
"trash"_J,
"trash2"_J,
"trflat"_J,
"trflat2"_J,
"tribike"_J,
"tribike2"_J,
"tribike3"_J,
@@ -881,6 +893,7 @@ namespace YimMenu
"valkyrie2"_J,
"vamos"_J,
"vectre"_J,
"velenogt"_J,
"velum"_J,
"velum2"_J,
"verlierer2"_J,
@@ -911,6 +924,7 @@ namespace YimMenu
"vorschlaghammer"_J,
"vortex"_J,
"vstr"_J,
"warden"_J,
"warrener"_J,
"warrener2"_J,
"washington"_J,
+14 -12
View File
@@ -107,9 +107,9 @@ namespace YimMenu
ScriptGlobals = ptr.Add(7).Add(3).Rip().As<std::int64_t**>();
});
constexpr auto sendNetworkDamagePtrn = Pattern<"0F B6 41 28 04 FE 3C 03 0F 87 EA">("SendNetworkDamage");
scanner.Add(sendNetworkDamagePtrn, [this](PointerCalculator ptr) {
TriggerWeaponDamageEvent = ptr.Sub(0x51).As<Functions::TriggerWeaponDamageEvent>();
constexpr auto triggerWeaponDamageEventPtrn = Pattern<"E8 ? ? ? ? 66 90 FF C5">("TriggerWeaponDamageEvent");
scanner.Add(triggerWeaponDamageEventPtrn, [this](PointerCalculator ptr) {
TriggerWeaponDamageEvent = ptr.Add(1).Rip().As<Functions::TriggerWeaponDamageEvent>();
});
constexpr auto scriptProgramsPtrn = Pattern<"48 C7 84 C8 D8 00 00 00 00 00 00 00">("ScriptPrograms");
@@ -199,10 +199,10 @@ namespace YimMenu
NetEventMgr = ptr.Add(3).Rip().As<rage::netEventMgr**>();
});
constexpr auto sendEventAckPtrn = Pattern<"84 C0 75 ? 89 EE 49 8D AD">("SendEventAck");
constexpr auto sendEventAckPtrn = Pattern<"E8 ? ? ? ? 84 C0 75 ? 44 89 F5">("SendEventAck");
scanner.Add(sendEventAckPtrn, [this](PointerCalculator ptr) {
EventAck = ptr.Sub(4).Rip().As<Functions::EventAck>();
SendEventAck = ptr.Add(0x13).Add(1).Rip().As<Functions::SendEventAck>();
EventAck = ptr.Add(1).Rip().As<Functions::EventAck>();
SendEventAck = ptr.Add(0x1A).Add(1).Rip().As<Functions::SendEventAck>();
});
constexpr auto queueDependencyPtrn = Pattern<"0F 29 46 50 48 8D 05">("QueueDependency&SigScanMemory");
@@ -216,9 +216,9 @@ namespace YimMenu
ScriptVM = ptr.Sub(0x24).As<Functions::ScriptVM>();
});
constexpr auto prepareMetricForSendingPtrn = Pattern<"48 89 F9 FF 50 20 48 8D 15">("PrepareMetricForSending");
constexpr auto prepareMetricForSendingPtrn = Pattern<"41 56 56 57 55 53 48 83 EC ? 4C 89 CB 4C 89 C6">("PrepareMetricForSending");
scanner.Add(prepareMetricForSendingPtrn, [this](PointerCalculator ptr) {
PrepareMetricForSending = ptr.Sub(0x26).As<PVOID>();
PrepareMetricForSending = ptr.As<PVOID>();
});
constexpr auto beDataPtrn = Pattern<"48 C7 05 ? ? ? ? 00 00 00 00 E8 ? ? ? ? 48 89 C1 E8 ? ? ? ? E8 ? ? ? ? BD 0A 00 00 00">("BEData");
@@ -228,7 +228,8 @@ namespace YimMenu
IsBEBanned = ptr.Add(3).Rip().Add(8).Add(4).Add(8).Add(4).As<bool*>();
});
constexpr auto battlEyeStatusUpdatePatchPtrn = Pattern<"80 B9 92 0A 00 00 01">("BattlEyeStatusUpdatePatch");
#if 0
constexpr auto battlEyeStatusUpdatePatchPtrn = Pattern<"80 B9 92 0A 00 00 01 48 81 D1 90 0A 00 00">("BattlEyeStatusUpdatePatch");
scanner.Add(battlEyeStatusUpdatePatchPtrn, [this](PointerCalculator ptr) {
BattlEyeStatusUpdatePatch = BytePatches::Add(ptr.As<void*>(),
// since arxan obfuscated this subroutine, return mid-function instead
@@ -241,6 +242,7 @@ namespace YimMenu
})
);
});
#endif
constexpr auto writeNetArrayDataPtrn = Pattern<"0F 84 06 03 00 00 0F B6 83">("WriteNetArrayData");
scanner.Add(writeNetArrayDataPtrn, [this](PointerCalculator ptr) {
@@ -304,9 +306,9 @@ namespace YimMenu
NetworkSession = ptr.Add(0x17).Add(3).Rip().As<CNetworkSession**>();
});
constexpr auto joinSessionByInfoPtrn = Pattern<"B0 01 40 84 E9 0F 85 32 FD FF FF 48 89 F1">("JoinSessionByInfo");
constexpr auto joinSessionByInfoPtrn = Pattern<"E8 ? ? ? ? 0F 10 87 ? ? ? ? 0F 11 86 ? ? ? ? 88 86 ? ? ? ? 84 C0">("JoinSessionByInfo");
scanner.Add(joinSessionByInfoPtrn, [this](PointerCalculator ptr) {
JoinSessionByInfo = ptr.Sub(0x7).Add(1).Rip().As<Functions::JoinSessionByInfo>();
JoinSessionByInfo = ptr.Add(1).Rip().As<Functions::JoinSessionByInfo>();
});
constexpr auto getSessionByGamerHandle = Pattern<"48 C7 84 24 80 00 00 00 10 00 00 08">("GetSessionByGamerHandle");
@@ -370,7 +372,7 @@ namespace YimMenu
SetJoinRequestPoolTypePatch = BytePatches::Add(ptr.Sub(5).As<std::uint8_t*>(), std::to_array<std::uint8_t>({0xB8, 0x00, 0x00, 0x00, 0x00}));
});
constexpr auto handleJoinRequestIgnorePoolPatchPtrn = Pattern<"41 83 FF 05 74 ? 42 8B 84 F5">("HandleJoinRequestIgnorePoolPatch");
constexpr auto handleJoinRequestIgnorePoolPatchPtrn = Pattern<"41 83 FF ? 74 ? 41 83 FF ? 0F 84 ? ? ? ? 45 85 FF 75">("HandleJoinRequestIgnorePoolPatch");
scanner.Add(handleJoinRequestIgnorePoolPatchPtrn, [this](PointerCalculator ptr) {
HandleJoinRequestIgnorePoolPatch = BytePatches::Add(ptr.As<void*>(), std::to_array<std::uint8_t>({0x39, 0xC9, 0x90, 0x90}));
});
@@ -12,14 +12,14 @@ static_assert(sizeof(DeliveryPosData) == 6 * 8);
struct FreemodeDelivery
{
SCR_INT DeliveryFlags; // 0
SCR_ARRAY<DeliveryPosData, 1008> DeliveryPosData; // 1
SCR_BOOL DeliveryInVehicle; // 6050
SCR_BOOL DeliveryNotInVehicle; // 6051
TIMER DeliveryCooldown1; // 6052
SCR_INT CooldownFrameCount1; // 6054
TIMER DeliveryCooldown2; // 6055
SCR_INT CooldownFrameCount2; // 6057
SCR_ARRAY<DeliveryPosData, 1011> DeliveryPosData; // 1
SCR_BOOL DeliveryInVehicle; // 6068
SCR_BOOL DeliveryNotInVehicle; // 6069
TIMER DeliveryCooldown1; // 6070
SCR_INT CooldownFrameCount1; // 6072
TIMER DeliveryCooldown2; // 6073
SCR_INT CooldownFrameCount2; // 6075
static FreemodeDelivery* Get();
};
//static_assert(sizeof(FreemodeDelivery) == 6260 * 8);
//static_assert(sizeof(FreemodeDelivery) == 6278 * 8);
+3 -2
View File
@@ -70,8 +70,9 @@ struct FreemodeGeneral
STREET_DEALERS StreetDealers; // 5635
uint64_t PAD_5659[107];
DAILY_RESET_DATA DailyReset; // 5766
FREEMODE_DELIVERY_DATA DeliveryData; // 5770
uint64_t PAD_5670[4];
FREEMODE_DELIVERY_DATA DeliveryData; // 5774
static FreemodeGeneral* Get();
};
//static_assert(sizeof(FreemodeGeneral) == 6073 * 8);
//static_assert(sizeof(FreemodeGeneral) == 6077 * 8);
+3 -2
View File
@@ -687,8 +687,9 @@ struct GPBD_FM_Entry
// int64_t PAD_0861[2]; removed b889g9
SCR_INT ApartmentEnterFlags;
// SCR_VEC3 AvengerMissionStartPosition; removed b889g9
SCR_INT UnkCutsceneState; // added b1158.13g9, used in fmmc_launcher
};
static_assert(sizeof(GPBD_FM_Entry) == 883 * 8);
static_assert(sizeof(GPBD_FM_Entry) == 884 * 8);
struct GPBD_FM
{
@@ -696,4 +697,4 @@ struct GPBD_FM
static GPBD_FM* Get();
};
static_assert(sizeof(GPBD_FM) == 28257 * 8);
static_assert(sizeof(GPBD_FM) == 28289 * 8);
+6 -5
View File
@@ -85,9 +85,9 @@ struct SALVAGE_YARD_VEHICLE_SALE_DATA
{
uint64_t PAD_0000[27];
HOCW_DATA HOWCData; // 27
uint64_t PAD_0043[9];
uint64_t PAD_0043[115];
};
static_assert(sizeof(SALVAGE_YARD_VEHICLE_SALE_DATA) == 52 * 8);
static_assert(sizeof(SALVAGE_YARD_VEHICLE_SALE_DATA) == 158 * 8);
struct GPBD_FM_2_Entry
{
@@ -125,9 +125,10 @@ struct GPBD_FM_2_Entry
GANGOPS_DATA GangopsData; // 43
RANDOM_EVENTS_CLIENT_DATA RandomEventsClientData; // 82
SALVAGE_YARD_VEHICLE_SALE_DATA SYVehSaleData; // 158 added b889g9
uint64_t PAD_0210[105];
SCR_INT GangopsFlowMissionProg; // 316
SCR_ARRAY<uint64_t, 3> TrickOrTreatFlags; // 317 96-bit flag bitset for effects
};
static_assert(sizeof(GPBD_FM_2_Entry) == 315 * 8);
static_assert(sizeof(GPBD_FM_2_Entry) == 321 * 8);
struct GPBD_FM_2
{
@@ -135,4 +136,4 @@ struct GPBD_FM_2
static GPBD_FM_2* Get();
};
static_assert(sizeof(GPBD_FM_2) == 10081 * 8);
static_assert(sizeof(GPBD_FM_2) == 10273 * 8);
@@ -57,8 +57,9 @@ struct RANDOM_EVENTS_TARGET_DATA
{
PLAYER_INDEX PhantomCarTarget; // 0
PLAYER_INDEX XMASMuggerTarget; // 1
PLAYER_INDEX CommunityOutreachTarget; // 2
};
static_assert(sizeof(RANDOM_EVENTS_TARGET_DATA) == 2 * 8);
static_assert(sizeof(RANDOM_EVENTS_TARGET_DATA) == 3 * 8);
struct GSBD_RandomEvents
{
@@ -69,4 +70,4 @@ struct GSBD_RandomEvents
static GSBD_RandomEvents* Get();
};
static_assert(sizeof(GSBD_RandomEvents) == 366 * 8);
static_assert(sizeof(GSBD_RandomEvents) == 367 * 8);
+21 -21
View File
@@ -31,25 +31,25 @@
return glb.As<str*>(); \
}
DEFINE_GLOBAL_ACCESSOR(GlobalPlayerBD, 2658294);
DEFINE_GLOBAL_ACCESSOR(GPBD_FM, 1845299);
DEFINE_GLOBAL_ACCESSOR(GPBD_FM_2, 1882717);
DEFINE_GLOBAL_ACCESSOR(GPBD_FM_3, 1892798);
DEFINE_GLOBAL_ACCESSOR(GPBD_Flow, 1984461);
DEFINE_GLOBAL_ACCESSOR(GPBD_Kicking, 1874069);
DEFINE_GLOBAL_ACCESSOR(GPBD_MissionName, 1873556);
DEFINE_GLOBAL_ACCESSOR(GSBD, 2649162);
DEFINE_GLOBAL_ACCESSOR(GSBD_BlockB, 2650426);
DEFINE_GLOBAL_ACCESSOR(GSBD_FM, 1835559);
DEFINE_GLOBAL_ACCESSOR(GSBD_FM_Events, 1922750);
DEFINE_GLOBAL_ACCESSOR(GSBD_Kicking, 1877270);
DEFINE_GLOBAL_ACCESSOR(GSBD_PropertyInstances, 1943919);
DEFINE_GLOBAL_ACCESSOR(g_AMC_playerBD, 2700188);
DEFINE_GLOBAL_ACCESSOR(GSBD_RandomEvents, 1882265);
DEFINE_GLOBAL_ACCESSOR(MPSV, 1583772);
DEFINE_GLOBAL_ACCESSOR(GlobalPlayerBD, 2658296);
DEFINE_GLOBAL_ACCESSOR(GPBD_FM, 1845347);
DEFINE_GLOBAL_ACCESSOR(GPBD_FM_2, 1882797);
DEFINE_GLOBAL_ACCESSOR(GPBD_FM_3, 1893070);
DEFINE_GLOBAL_ACCESSOR(GPBD_Flow, 1985024);
DEFINE_GLOBAL_ACCESSOR(GPBD_Kicking, 1874149);
DEFINE_GLOBAL_ACCESSOR(GPBD_MissionName, 1873636);
DEFINE_GLOBAL_ACCESSOR(GSBD, 2649164);
DEFINE_GLOBAL_ACCESSOR(GSBD_BlockB, 2650428);
DEFINE_GLOBAL_ACCESSOR(GSBD_FM, 1835603);
DEFINE_GLOBAL_ACCESSOR(GSBD_FM_Events, 1923118);
DEFINE_GLOBAL_ACCESSOR(GSBD_Kicking, 1877350);
DEFINE_GLOBAL_ACCESSOR(GSBD_PropertyInstances, 1944313);
DEFINE_GLOBAL_ACCESSOR(g_AMC_playerBD, 2700299);
DEFINE_GLOBAL_ACCESSOR(GSBD_RandomEvents, 1882345);
DEFINE_GLOBAL_ACCESSOR(MPSV, 1583778);
DEFINE_GLOBAL_ACCESSOR(g_SavedMPGlobals, 2359296);
DEFINE_GLOBAL_ACCESSOR(FreemodeGeneral, 2733138);
DEFINE_GLOBAL_ACCESSOR(DailyObjectivesState, 1574745);
DEFINE_GLOBAL_ACCESSOR(WeeklyChallenge, 2732069);
DEFINE_GLOBAL_ACCESSOR(FreemodeDelivery, 1957402);
DEFINE_GLOBAL_ACCESSOR(LauncherServerData, 2700002);
DEFINE_GLOBAL_ACCESSOR(FreemodeGeneral, 2733326);
DEFINE_GLOBAL_ACCESSOR(DailyObjectivesState, 1574746);
DEFINE_GLOBAL_ACCESSOR(WeeklyChallenge, 2732247);
DEFINE_GLOBAL_ACCESSOR(FreemodeDelivery, 1957909);
DEFINE_GLOBAL_ACCESSOR(LauncherServerData, 2700113);
+7 -7
View File
@@ -16,12 +16,12 @@
return lcl.As<str*>(); \
}
DEFINE_LOCAL_ACCESSOR(VEHICLE_REWARD_DATA, 129);
DEFINE_LOCAL_ACCESSOR(RANDOM_EVENTS_FREEMODE_DATA, 16162);
DEFINE_LOCAL_ACCESSOR(StandardTimeTrialData, 14739);
DEFINE_LOCAL_ACCESSOR(RCBanditoTimeTrialData, 14789);
DEFINE_LOCAL_ACCESSOR(HSWTimeTrialData, 14833);
DEFINE_LOCAL_ACCESSOR(BikeTimeTrialData, 15630);
DEFINE_LOCAL_ACCESSOR(VEHICLE_REWARD_DATA, 148);
DEFINE_LOCAL_ACCESSOR(RANDOM_EVENTS_FREEMODE_DATA, 16199);
DEFINE_LOCAL_ACCESSOR(StandardTimeTrialData, 14774);
DEFINE_LOCAL_ACCESSOR(RCBanditoTimeTrialData, 14824);
DEFINE_LOCAL_ACCESSOR(HSWTimeTrialData, 14868);
DEFINE_LOCAL_ACCESSOR(BikeTimeTrialData, 15667);
// am_launcher
DEFINE_LOCAL_ACCESSOR(LauncherClientData, 247);
DEFINE_LOCAL_ACCESSOR(LauncherClientData, 270);