mirror of
https://github.com/YimMenu/YimMenuV2.git
synced 2026-10-10 03:43:15 +08:00
Update for b1013.17 (#771)
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
#include "types/script/globals/FreemodeGeneral.hpp"
|
||||
#include "types/script/globals/g_SavedMPGlobals.hpp"
|
||||
|
||||
#define MAX_GARAGE_NUM 33
|
||||
#define MAX_GARAGE_NUM 36
|
||||
|
||||
namespace YimMenu
|
||||
{
|
||||
@@ -56,6 +56,9 @@ namespace YimMenu
|
||||
case 30: return 415; // The Vinewood Club Garage
|
||||
case 31: return 515;
|
||||
case 32: return 537;
|
||||
case 33: return 547;
|
||||
case 34: return 567;
|
||||
case 35: return 587;
|
||||
case MAX_GARAGE_NUM + 0: return 156; // Mobile Operations Center
|
||||
case MAX_GARAGE_NUM + 1: return 224; // Nightclub B1
|
||||
case MAX_GARAGE_NUM + 2: return 223; // Terrorbyte
|
||||
@@ -105,6 +108,10 @@ namespace YimMenu
|
||||
case 26: return 20;
|
||||
case 29: return 50;
|
||||
case 30: return 100; // The Vinewood Club Garage
|
||||
// mansions
|
||||
case 33:
|
||||
case 34:
|
||||
case 35: return 20;
|
||||
}
|
||||
|
||||
return -1;
|
||||
@@ -147,6 +154,9 @@ namespace YimMenu
|
||||
case 29: stat = "MPX_MULTSTOREY_GAR_OWNED"; break;
|
||||
case 31: stat = "MPX_PROP_BAIL_OFFICE"; break;
|
||||
case 32: stat = "MPX_PROP_HACKER_DEN"; break;
|
||||
case 33: stat = "MPX_MANSION_TH_OWNED"; break;
|
||||
case 34: stat = "MPX_MANSION_AJ_OWNED"; break;
|
||||
case 35: stat = "MPX_MANSION_MD_OWNED"; break;
|
||||
case 30:
|
||||
case MAX_GARAGE_NUM + 0:
|
||||
case MAX_GARAGE_NUM + 1:
|
||||
@@ -229,6 +239,9 @@ namespace YimMenu
|
||||
}
|
||||
case 31: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("BO_GARNAME"); // Bail Office
|
||||
case 32: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("HD_GARNAME"); // Garment Factory
|
||||
case 33: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("MG1_GARNAME"); // The Tongva Estate
|
||||
case 34: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("MG2_GARNAME"); // Richman Villa
|
||||
case 35: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("MG3_GARNAME"); // The Vinewood Residence
|
||||
case MAX_GARAGE_NUM + 0: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("GRTRUCK"); // Mobile Operations Center
|
||||
case MAX_GARAGE_NUM + 1: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("MP_BHUB_GAR0"); // Nightclub B1
|
||||
case MAX_GARAGE_NUM + 2: return HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION("MP_BHUB_CLUBT"); // Terrorbyte
|
||||
@@ -290,13 +303,13 @@ namespace YimMenu
|
||||
auto garageOffset = GetPropertyGarageOffset(propertyIterator);
|
||||
for (int garageSlotIterator = 1; garageSlotIterator <= garageSize; garageSlotIterator++)
|
||||
{
|
||||
auto itemInSlot = *ScriptGlobal(1940530).At(garageOffset).At(garageSlotIterator).As<int*>() - 1;
|
||||
auto itemInSlot = *ScriptGlobal(1944744).At(garageOffset).At(garageSlotIterator).As<int*>() - 1;
|
||||
if (itemInSlot == m_Id)
|
||||
{
|
||||
auto staticPropertyString = GetStaticPropertyName(propertyIterator, garageSlotIterator);
|
||||
if (staticPropertyString.empty())
|
||||
{
|
||||
m_Garage = HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION(ScriptGlobal(1312335).At(propertyStatState, 1951).At(16).As<const char*>());
|
||||
m_Garage = HUD::GET_FILENAME_FOR_AUDIO_CONVERSATION(ScriptGlobal(1312440).At(propertyStatState, 1951).At(16).As<const char*>());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -365,7 +378,7 @@ namespace YimMenu
|
||||
|
||||
ScriptMgr::Yield(100ms);
|
||||
|
||||
*ScriptLocal("freemode"_J, 19447).At(176).As<int*>() = 0;
|
||||
*ScriptLocal("freemode"_J, 19633).At(176).As<int*>() = 0;
|
||||
|
||||
if (bring)
|
||||
{
|
||||
|
||||
@@ -10,10 +10,10 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnTick() override
|
||||
{
|
||||
constexpr auto is_incoming_call = ScriptGlobal(22612);
|
||||
constexpr auto is_phone_call_in_progress = ScriptGlobal(22608);
|
||||
constexpr auto phone_call_state = ScriptGlobal(22602);
|
||||
constexpr auto calling_character = ScriptGlobal(8391);
|
||||
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);
|
||||
|
||||
if (*Pointers.IsSessionStarted)
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace YimMenu::Features
|
||||
{
|
||||
using LoopedCommand::LoopedCommand;
|
||||
|
||||
int slots_random_results_table = 1348;
|
||||
int slots_random_results_table = 1374;
|
||||
std::set<int> slots_blacklist = {9, 21, 22, 87, 152};
|
||||
|
||||
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(2708201).As<BOOL*>() = TRUE;
|
||||
*ScriptGlobal(2708832).As<BOOL*>() = TRUE;
|
||||
break;
|
||||
}
|
||||
case eAppVinewoodMenuSafe::ARCADE:
|
||||
{
|
||||
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.ArcadeData.SafeCashValue > 0)
|
||||
*ScriptGlobal(2708210).As<BOOL*>() = TRUE;
|
||||
*ScriptGlobal(2708841).As<BOOL*>() = TRUE;
|
||||
break;
|
||||
}
|
||||
case eAppVinewoodMenuSafe::AGENCY:
|
||||
{
|
||||
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.FixerHQData.SafeCashValue > 0)
|
||||
*ScriptGlobal(2708219).As<BOOL*>() = TRUE;
|
||||
*ScriptGlobal(2708850).As<BOOL*>() = TRUE;
|
||||
break;
|
||||
}
|
||||
case eAppVinewoodMenuSafe::SALVAGE_YARD:
|
||||
{
|
||||
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.SalvageYardData.TotalEarnings > 0)
|
||||
*ScriptGlobal(2708228).As<BOOL*>() = TRUE;
|
||||
*ScriptGlobal(2708859).As<BOOL*>() = TRUE;
|
||||
break;
|
||||
}
|
||||
case eAppVinewoodMenuSafe::BAIL_OFFICE:
|
||||
{
|
||||
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.BailShopData.SafeCashValue > 0)
|
||||
*ScriptGlobal(2708237).As<BOOL*>() = TRUE;
|
||||
*ScriptGlobal(2708868).As<BOOL*>() = TRUE;
|
||||
break;
|
||||
}
|
||||
case eAppVinewoodMenuSafe::GARMENT_FACTORY:
|
||||
{
|
||||
if (GPBD_FM::Get()->Entries[Self::GetPlayer().GetId()].PropertyData.HackerDenData.SafeCashValue > 0)
|
||||
*ScriptGlobal(2708252).As<BOOL*>() = TRUE;
|
||||
*ScriptGlobal(2708883).As<BOOL*>() = TRUE;
|
||||
break;
|
||||
}
|
||||
case eAppVinewoodMenuSafe::HANDS_ON_CAR_WASH:
|
||||
{
|
||||
if (GPBD_FM_2::Get()->Entries[Self::GetPlayer().GetId()].SYVehSaleData.HOWCData.SafeCashValue > 0)
|
||||
*ScriptGlobal(2708259).As<BOOL*>() = TRUE;
|
||||
*ScriptGlobal(2708890).As<BOOL*>() = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,6 +89,7 @@ namespace YimMenu::Features
|
||||
Stats::SetPackedBool(54679, completed); // Smoke on the Water Product 8
|
||||
Stats::SetPackedBool(54680, completed); // Smoke on the Water Product 9
|
||||
Stats::SetPackedBool(54681, completed); // Smoke on the Water Product 10
|
||||
Stats::SetPackedBool(54735, completed); // Golden Clover
|
||||
// Street Dealers
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
@@ -165,13 +166,13 @@ namespace YimMenu::Features
|
||||
|
||||
static joaat_t GetNextExoticExportsVehicleHash()
|
||||
{
|
||||
constexpr ScriptGlobal order(1946095);
|
||||
constexpr ScriptGlobal order(1950369);
|
||||
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(1946084 + (offset + 1)).As<joaat_t*>();
|
||||
auto hash = *ScriptGlobal(1950358 + (offset + 1)).As<joaat_t*>();
|
||||
return hash;
|
||||
}
|
||||
}
|
||||
@@ -204,7 +205,7 @@ namespace YimMenu::Features
|
||||
}
|
||||
}
|
||||
|
||||
auto streetDealerData = ScriptLocal(m_Thread, 256).At(12);
|
||||
auto streetDealerData = ScriptLocal(m_Thread, 258).At(12);
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
@@ -527,13 +528,13 @@ namespace YimMenu::Features
|
||||
bool partime = Stats::GetPackedInt(34838 + (index * 4)) == location;
|
||||
bool landing = Stats::GetPackedInt(34839 + (index * 4)) == location;
|
||||
|
||||
*ScriptGlobal(1975726).As<int*>() = 1;
|
||||
*ScriptGlobal(1975726).At(1).As<int*>() = 1;
|
||||
*ScriptGlobal(1975726).At(3).As<int*>() = 5;
|
||||
*ScriptGlobal(1975726).At(4).As<int*>() = location + 1;
|
||||
*ScriptGlobal(1975726).At(8).At(1).As<int*>() = checkpointReward.Get<int>() / (1 + (checkpoints * 9));
|
||||
*ScriptGlobal(1975726).At(8).At(2).As<int*>() = parTimeReward.Get<int>() / (1 + (partime * 9));
|
||||
*ScriptGlobal(1975726).At(8).At(3).As<int*>() = landingReward.Get<int>() / (1 + (landing * 9));
|
||||
*ScriptGlobal(1979960).As<int*>() = 1;
|
||||
*ScriptGlobal(1979960).At(1).As<int*>() = 1;
|
||||
*ScriptGlobal(1979960).At(3).As<int*>() = 5;
|
||||
*ScriptGlobal(1979960).At(4).As<int*>() = location + 1;
|
||||
*ScriptGlobal(1979960).At(8).At(1).As<int*>() = checkpointReward.Get<int>() / (1 + (checkpoints * 9));
|
||||
*ScriptGlobal(1979960).At(8).At(2).As<int*>() = parTimeReward.Get<int>() / (1 + (partime * 9));
|
||||
*ScriptGlobal(1979960).At(8).At(3).As<int*>() = landingReward.Get<int>() / (1 + (landing * 9));
|
||||
|
||||
SET_SKYDIVE_COMPLETED data;
|
||||
data.SkydiveIndex = index;
|
||||
@@ -543,7 +544,7 @@ namespace YimMenu::Features
|
||||
data.AccurateLanding = TRUE;
|
||||
data.Send();
|
||||
|
||||
ScriptGlobal(1979681).At(4).As<SCR_BITSET<uint64_t>*>()->Clear(3);
|
||||
ScriptGlobal(1983929).At(4).As<SCR_BITSET<uint64_t>*>()->Clear(3);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -655,8 +656,8 @@ namespace YimMenu::Features
|
||||
{
|
||||
thread->m_Context.m_State = rage::scrThread::State::PAUSED;
|
||||
|
||||
*ScriptLocal(thread, 3088).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, 144).At(4).As<int*>() = 0;
|
||||
*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;
|
||||
static ScriptFunction onBTTEnd("fm_content_bicycle_time_trial"_J,
|
||||
ScriptPointer("OnBTTEnd", "64 ? ? ? 5D ? ? ? 75 77").Add(1).Rip());
|
||||
onBTTEnd.Call<void>();
|
||||
@@ -795,8 +796,8 @@ namespace YimMenu::Features
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
int combination = *ScriptLocal(thread, 144).At(22).At(i, 2).At(1).As<int*>();
|
||||
*ScriptLocal(thread, 144).At(22).At(i, 2).As<float*>() = combination;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -812,7 +813,7 @@ namespace YimMenu::Features
|
||||
return;
|
||||
|
||||
static ScriptFunction getStreetDealerCoords("freemode"_J,
|
||||
ScriptPointer("GetStreetDealerCoords", "5D ? ? ? 5D ? ? ? 5D ? ? ? 18").Add(1).Rip());
|
||||
ScriptPointer("GetStreetDealerCoords", "5D ? ? ? 5D ? ? ? 5D ? ? ? 18 1F").Add(1).Rip());
|
||||
if (auto coords = getStreetDealerCoords.Call<Vector3>(
|
||||
FreemodeGeneral::Get()->StreetDealers.Dealers[streetDealerIndex.GetState()].Location))
|
||||
Self::GetPed().TeleportTo(coords);
|
||||
@@ -914,7 +915,7 @@ namespace YimMenu::Features
|
||||
|
||||
if (auto thread = Scripts::FindScriptThread("fm_content_daily_bounty"_J))
|
||||
{
|
||||
if (auto coords = *ScriptLocal(thread, 241).At(434).At(1).At(0, 4).As<Vector3*>())
|
||||
if (auto coords = *ScriptLocal(thread, 243).At(434).At(1).At(0, 4).As<Vector3*>())
|
||||
{
|
||||
Self::GetPed().TeleportTo(coords);
|
||||
}
|
||||
@@ -961,9 +962,9 @@ namespace YimMenu::Features
|
||||
if (index < 0 || index >= wildlifePhotographyAnimalHashes.size())
|
||||
return;
|
||||
|
||||
ScriptGlobal(2708777).At(544).As<SCR_BITSET<uint64_t>*>()->Set(6);
|
||||
*ScriptGlobal(2708777).At(548).As<joaat_t*>() = wildlifePhotographyAnimalHashes[index];
|
||||
*ScriptGlobal(2708777).At(549).As<int*>() = *Pointers.GameTimer - 1; // bypass 2 sec delay
|
||||
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
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1024,6 +1025,46 @@ namespace YimMenu::Features
|
||||
}
|
||||
};
|
||||
|
||||
class TeleportToGoldenClover : public Command
|
||||
{
|
||||
using Command::Command;
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
if (!*Pointers.IsSessionStarted)
|
||||
return;
|
||||
|
||||
if (!Stats::GetPackedBool(54735))
|
||||
{
|
||||
TeleportToCollectable(SCRIPT_EVENT_COLLECT_COLLECTABLE::eCollectables::GoldenClover, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Notifications::Show("Golden Clover", "Golden Clover has already been collected.", NotificationType::Error);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class CollectGoldenClover : public Command
|
||||
{
|
||||
using Command::Command;
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
if (!*Pointers.IsSessionStarted)
|
||||
return;
|
||||
|
||||
if (!Stats::GetPackedBool(54735))
|
||||
{
|
||||
CollectCollectable(SCRIPT_EVENT_COLLECT_COLLECTABLE::eCollectables::GoldenClover, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Notifications::Show("Golden Clover", "Golden Clover has already been collected.", NotificationType::Error);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static SetAllActivitiesCompleted _SetAllActivitiesCompleted{"setallactivitiescompleted", "Set All Activities Completed", "Switch session to apply the changes."};
|
||||
static ResetAllActivities _ResetAllActivities{"resetallactivities", "Reset All Activities", "Switch session to apply the changes."};
|
||||
|
||||
@@ -1072,4 +1113,7 @@ namespace YimMenu::Features
|
||||
|
||||
static TeleportToProduct _TeleportToProduct{"tptoproduct", "Teleport to Product", "Teleports to the selected product."};
|
||||
static CollectProduct _CollectProduct{"collectproduct", "Collect Product", "Collects the selected product."};
|
||||
|
||||
static TeleportToGoldenClover _TeleportToGoldenClover{"tptogoldenclover", "Teleport to Golden Clover", "Teleports to the Golden Clover."};
|
||||
static CollectGoldenClover _CollectGoldenClover{"collectgoldenclover", "Collect Golden Clover", "Collects the Golden Clover."};
|
||||
}
|
||||
@@ -22,8 +22,8 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
auto base1 = ScriptGlobal(1931800).At(1);
|
||||
auto base2 = ScriptGlobal(1933768).At(3008);
|
||||
auto base1 = ScriptGlobal(1936013).At(1);
|
||||
auto base2 = ScriptGlobal(1937981).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 +75,8 @@ namespace YimMenu::Features
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
|
||||
{
|
||||
*ScriptLocal(thread, 12220).At(24).As<int*>() = 7;
|
||||
*ScriptLocal(thread, 10215).As<int*>() = *ScriptLocal(thread, 10215).As<int*>() | (1 << 9);
|
||||
*ScriptLocal(thread, 12223).At(24).As<int*>() = 7;
|
||||
*ScriptLocal(thread, 10217).As<int*>() = *ScriptLocal(thread, 10217).As<int*>() | (1 << 9);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -89,7 +89,7 @@ namespace YimMenu::Features
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
|
||||
{
|
||||
*ScriptLocal(thread, 10509).At(11).As<float*>() = 100.0f;
|
||||
*ScriptLocal(thread, 10511).At(11).As<float*>() = 100.0f;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -105,10 +105,10 @@ namespace YimMenu::Features
|
||||
Scripts::ForceScriptHost(thread);
|
||||
ScriptMgr::Yield(500ms);
|
||||
|
||||
*ScriptLocal(thread, 20391).At(1725).At(0, 1).As<int*>() = 80;
|
||||
*ScriptLocal(thread, 20391).As<int*>() = 12;
|
||||
*ScriptLocal(thread, 29011).At(0, 1).As<int*>() = 99999;
|
||||
*ScriptLocal(thread, 32467).At(0, 294).At(68).As<int*>() = 99999;
|
||||
*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;
|
||||
}
|
||||
// TODO: find a way of getting current heist info so that InstantFinishPacific can be implemented here conditionally.
|
||||
}
|
||||
@@ -125,11 +125,11 @@ namespace YimMenu::Features
|
||||
Scripts::ForceScriptHost(thread);
|
||||
ScriptMgr::Yield(500ms);
|
||||
|
||||
*ScriptLocal(thread, 20391).At(2686).As<int*>() = 1875000;
|
||||
*ScriptLocal(thread, 20391).At(1062).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 20391).As<int*>() = 12;
|
||||
*ScriptLocal(thread, 29011).At(0, 1).As<int*>() = 99999;
|
||||
*ScriptLocal(thread, 32467).At(0, 294).At(68).As<int*>() = 99999;
|
||||
*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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
auto base = ScriptGlobal(1975799).At(831).At(56);
|
||||
auto base = ScriptGlobal(1980034).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(1976911);
|
||||
auto base = ScriptGlobal(1981146);
|
||||
|
||||
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, 1568).As<int*>() = 2;
|
||||
*ScriptLocal(thread, 1570).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, 58222).At(1357).At(53).As<int*>() = _CayoPericoHeistSecondaryTakeValue.GetState();
|
||||
*ScriptLocal(thread, 59705).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, 25460).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 26486).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, 30285).As<int*>() = 6;
|
||||
*ScriptLocal(thread, 31349).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, 31525).At(3).As<float*>() = 100.0f;
|
||||
*ScriptLocal(thread, 32589).At(3).As<float*>() = 100.0f;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -258,12 +258,12 @@ namespace YimMenu::Features
|
||||
case 1:
|
||||
case 3:
|
||||
case 5:
|
||||
*ScriptLocal(thread, 31524).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 31525).As<int*>() = 3;
|
||||
*ScriptLocal(thread, 32588).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 32589).As<int*>() = 3;
|
||||
break;
|
||||
case 2:
|
||||
case 4:
|
||||
*ScriptLocal(thread, 31499).As<int*>() = 7;
|
||||
*ScriptLocal(thread, 32563).As<int*>() = 7;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
@@ -287,8 +287,8 @@ namespace YimMenu::Features
|
||||
Scripts::ForceScriptHost(thread);
|
||||
ScriptMgr::Yield(500ms);
|
||||
|
||||
*ScriptLocal(thread, 54763).As<int*>() = 9;
|
||||
*ScriptLocal(thread, 54763).At(1776).At(0, 1).As<int*>() = 50;
|
||||
*ScriptLocal(thread, 56223).As<int*>() = 9;
|
||||
*ScriptLocal(thread, 56223).At(1776).At(0, 1).As<int*>() = 50;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
auto base = ScriptGlobal(1968996).At(1497).At(736).At(92);
|
||||
auto base = ScriptGlobal(1973230).At(1497).At(736).At(92);
|
||||
|
||||
*base.At(0, 1).As<int*>() = _DiamondCasinoHeistCut1.GetState();
|
||||
*base.At(1, 1).As<int*>() = _DiamondCasinoHeistCut2.GetState();
|
||||
@@ -38,7 +38,7 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
auto base = ScriptGlobal(1973359);
|
||||
auto base = ScriptGlobal(1977593);
|
||||
|
||||
for (int i = 0; i <= 3; i++)
|
||||
{
|
||||
@@ -302,7 +302,7 @@ namespace YimMenu::Features
|
||||
virtual void OnCall() override
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
|
||||
*ScriptLocal(thread, 20391).At(2686).As<int*>() = _DiamondCasinoHeistActualTake.GetState();
|
||||
*ScriptLocal(thread, 20395).At(2686).As<int*>() = _DiamondCasinoHeistActualTake.GetState();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -314,8 +314,8 @@ namespace YimMenu::Features
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
|
||||
{
|
||||
*ScriptLocal(thread, 54037).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 55103).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 54042).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 55108).As<int*>() = 5;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -327,7 +327,7 @@ namespace YimMenu::Features
|
||||
virtual void OnCall() override
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
|
||||
*ScriptLocal(thread, 10549).At(7).As<int*>() = *ScriptLocal(thread, 10549).At(37).As<int*>();
|
||||
*ScriptLocal(thread, 10551).At(7).As<int*>() = *ScriptLocal(thread, 10551).At(37).As<int*>();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -342,12 +342,12 @@ namespace YimMenu::Features
|
||||
Scripts::ForceScriptHost(thread);
|
||||
ScriptMgr::Yield(500ms);
|
||||
|
||||
*ScriptLocal(thread, 20391).At(1740).At(0, 1).As<int*>() = 80;
|
||||
*ScriptLocal(thread, 20391).At(2686).As<int*>() = 4443220;
|
||||
*ScriptLocal(thread, 20391).At(1062).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 20391).As<int*>() = 12;
|
||||
*ScriptLocal(thread, 29011).At(0, 1).As<int*>() = 99999;
|
||||
*ScriptLocal(thread, 32467).At(0, 294).At(68).As<int*>() = 99999;
|
||||
*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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "game/gta/ScriptGlobal.hpp"
|
||||
#include "game/gta/ScriptLocal.hpp"
|
||||
#include "core/backend/ScriptMgr.hpp"
|
||||
#include "types/script/globals/GPBD_FM_2.hpp"
|
||||
|
||||
namespace YimMenu::Features
|
||||
{
|
||||
@@ -21,7 +22,7 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
auto base = ScriptGlobal(1964170).At(812).At(50);
|
||||
auto base = ScriptGlobal(1968543).At(812).At(50);
|
||||
|
||||
*base.At(0, 1).As<int*>() = _DoomsdayHeistCut1.GetState();
|
||||
*base.At(1, 1).As<int*>() = _DoomsdayHeistCut2.GetState();
|
||||
@@ -36,11 +37,12 @@ namespace YimMenu::Features
|
||||
|
||||
virtual void OnCall() override
|
||||
{
|
||||
auto base = ScriptGlobal(1882449);
|
||||
|
||||
for (int i = 0; i <= 3; i++)
|
||||
if (auto gpbd_fm_2 = GPBD_FM_2::Get())
|
||||
{
|
||||
*base.At(i, 201).At(43).At(11).At(i, 1).As<int*>() = 1;
|
||||
gpbd_fm_2->Entries[0].GangopsData.ArePlayersReady[0] = TRUE;
|
||||
gpbd_fm_2->Entries[1].GangopsData.ArePlayersReady[1] = TRUE;
|
||||
gpbd_fm_2->Entries[2].GangopsData.ArePlayersReady[2] = TRUE;
|
||||
gpbd_fm_2->Entries[3].GangopsData.ArePlayersReady[3] = TRUE;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -81,7 +83,7 @@ namespace YimMenu::Features
|
||||
ScriptMgr::Yield(500ms);
|
||||
|
||||
if (auto thread = Scripts::FindScriptThread("gb_gang_ops_planning"_J))
|
||||
*ScriptLocal(thread, 209).As<int*>() = 6;
|
||||
*ScriptLocal(thread, 211).As<int*>() = 6;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -93,9 +95,9 @@ namespace YimMenu::Features
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThread("fm_mission_controller"_J))
|
||||
{
|
||||
*ScriptLocal(thread, 1570).As<int*>() = 2;
|
||||
*ScriptLocal(thread, 1539).As<int*>() = 3;
|
||||
*ScriptLocal(thread, 1296).At(135).As<int*>() = 3;
|
||||
*ScriptLocal(thread, 1572).As<int*>() = 2;
|
||||
*ScriptLocal(thread, 1541).As<int*>() = 3;
|
||||
*ScriptLocal(thread, 1298).At(135).As<int*>() = 3;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -111,10 +113,10 @@ namespace YimMenu::Features
|
||||
Scripts::ForceScriptHost(thread);
|
||||
ScriptMgr::Yield(500ms);
|
||||
|
||||
*ScriptLocal(thread, 20391).At(1725).At(0, 1).As<int*>() = 80;
|
||||
*ScriptLocal(thread, 20391).As<int*>() = 12;
|
||||
*ScriptLocal(thread, 29011).At(0, 1).As<int*>() = 99999;
|
||||
*ScriptLocal(thread, 32467).At(0, 294).At(68).As<int*>() = 99999;
|
||||
*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;
|
||||
}
|
||||
// TODO: find a way of getting current heist info so that InstantFinishAct3 can be implemented here conditionally.
|
||||
}
|
||||
@@ -131,11 +133,11 @@ namespace YimMenu::Features
|
||||
Scripts::ForceScriptHost(thread);
|
||||
ScriptMgr::Yield(500ms);
|
||||
|
||||
*ScriptLocal(thread, 20391).As<int*>() = 12;
|
||||
*ScriptLocal(thread, 20391).At(1740).At(0, 1).As<int*>() = 150;
|
||||
*ScriptLocal(thread, 20391).At(1062).As<int*>() = 5;
|
||||
*ScriptLocal(thread, 29011).At(0, 1).As<int*>() = 99999;
|
||||
*ScriptLocal(thread, 32467).At(0, 294).At(68).As<int*>() = 99999;
|
||||
*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;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -18,8 +18,8 @@ namespace YimMenu::Features
|
||||
virtual void OnTick() override
|
||||
{
|
||||
*Pointers.HasGTAPlus = true;
|
||||
*ScriptGlobal(1965683).As<bool*>() = true;
|
||||
*ScriptGlobal(1965683).At(3).As<int*>() = (1 << 3) | (1 << 1);
|
||||
*ScriptGlobal(1970056).As<bool*>() = true;
|
||||
*ScriptGlobal(1970056).At(3).As<int*>() = (1 << 3) | (1 << 1);
|
||||
}
|
||||
|
||||
virtual void OnDisable() override
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace YimMenu::Features
|
||||
{
|
||||
if (auto thread = Scripts::FindScriptThread("wardrobe_mp"_J))
|
||||
{
|
||||
if (*ScriptLocal(thread, 189).At(46).At(9).As<int*>() == 4)
|
||||
if (*ScriptLocal(thread, 191).At(46).At(9).As<int*>() == 4)
|
||||
{
|
||||
shouldCleanupWardrobePatch->Disable();
|
||||
isWardrobeOpenedPatch->Disable();
|
||||
|
||||
@@ -24,8 +24,8 @@ namespace YimMenu::Features
|
||||
|
||||
if (auto freemode = Scripts::FindScriptThread("freemode"_J))
|
||||
{
|
||||
auto data = ScriptLocal(freemode, 8748);
|
||||
*data.At(3).As<int*>() = 223;
|
||||
auto data = ScriptLocal(freemode, 8819);
|
||||
*data.At(3).As<int*>() = 230;
|
||||
*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, 521).As<int*>() = 1;
|
||||
ScriptGlobal(2685690).At(4347).At(254).At(7, 2).As<TIMER*>()->Destroy();
|
||||
*ScriptLocal(thread, 528).As<int*>() = 1;
|
||||
ScriptGlobal(2686095).At(4357).At(260).At(7, 2).As<TIMER*>()->Destroy();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -41,6 +41,9 @@ namespace YimMenu::Submenus
|
||||
GHOSTHUNT,
|
||||
XMAS_TRUCK,
|
||||
COMMUNITY_OUTREACH,
|
||||
GETAWAY_DRIVER,
|
||||
SURVIVAL_GROUPING,
|
||||
VALENTINE_CHEATER,
|
||||
|
||||
MAX_EVENTS
|
||||
};
|
||||
@@ -90,8 +93,8 @@ namespace YimMenu::Submenus
|
||||
{
|
||||
if (event == ARMOURED_TRUCK) // It doesn't have tunables
|
||||
{
|
||||
setCooldown = *ScriptGlobal(262145).At(33719).As<int*>();
|
||||
setAvailability = *ScriptGlobal(262145).At(33720).As<int*>();
|
||||
setCooldown = *ScriptGlobal(262145).At(33807).As<int*>();
|
||||
setAvailability = *ScriptGlobal(262145).At(33808).As<int*>();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace YimMenu::Submenus
|
||||
auto madrazoHitsTab = std::make_shared<CollapsingHeaderItem>("Madrazo Hits");
|
||||
auto wildlifePhotography = std::make_shared<CollapsingHeaderItem>("Shoot Animals Photography");
|
||||
auto smokeOnTheWater = std::make_shared<CollapsingHeaderItem>("Smoke on the Water");
|
||||
auto goldenClover = std::make_shared<CollapsingHeaderItem>("Golden Clover");
|
||||
|
||||
dailyActivities->AddItem(std::make_shared<CommandItem>("setallactivitiescompleted"_J));
|
||||
dailyActivities->AddItem(std::make_shared<CommandItem>("resetallactivities"_J));
|
||||
@@ -81,6 +82,9 @@ namespace YimMenu::Submenus
|
||||
smokeOnTheWater->AddItem(std::make_shared<CommandItem>("tptoproduct"_J));
|
||||
smokeOnTheWater->AddItem(std::make_shared<CommandItem>("collectproduct"_J));
|
||||
|
||||
goldenClover->AddItem(std::make_shared<CommandItem>("tptogoldenclover"_J));
|
||||
goldenClover->AddItem(std::make_shared<CommandItem>("collectgoldenclover"_J));
|
||||
|
||||
dailyActivities->AddItem(std::move(challengesTab));
|
||||
dailyActivities->AddItem(std::move(hiddenCacheTab));
|
||||
dailyActivities->AddItem(std::move(treasureChestTab));
|
||||
@@ -96,6 +100,7 @@ namespace YimMenu::Submenus
|
||||
dailyActivities->AddItem(std::move(madrazoHitsTab));
|
||||
dailyActivities->AddItem(std::move(wildlifePhotography));
|
||||
dailyActivities->AddItem(std::move(smokeOnTheWater));
|
||||
dailyActivities->AddItem(std::move(goldenClover));
|
||||
return dailyActivities;
|
||||
}
|
||||
}
|
||||
@@ -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(1575040);
|
||||
static ScriptGlobal join_type_global(1575044);
|
||||
|
||||
sendToClouds.Call<void>();
|
||||
*join_type_global.As<JoinType*>() = to_launch;
|
||||
|
||||
@@ -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(1986361); // this global will bypass the new checks added this update
|
||||
auto bypass_global = ScriptGlobal(1990822); // 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);
|
||||
|
||||
|
||||
@@ -223,6 +223,13 @@ namespace YimMenu
|
||||
"fm_content_weed_shop_delivery"_J,
|
||||
"fm_content_tycoon_odd_jobs"_J,
|
||||
"fm_content_cutscene"_J,
|
||||
"fm_content_firefighter"_J,
|
||||
"fm_content_forklift_operator"_J,
|
||||
"fm_content_postal_worker"_J,
|
||||
"fm_content_getaway_driver"_J,
|
||||
"fm_content_survival_grouping"_J,
|
||||
"fm_content_valentine_cheater"_J,
|
||||
"fm_content_survival"_J,
|
||||
"AM_BOAT_TAXI"_J,
|
||||
"AM_HELI_TAXI"_J,
|
||||
"fm_hold_up_tut"_J,
|
||||
@@ -251,9 +258,9 @@ namespace YimMenu
|
||||
"fm_Bj_race_controler"_J,
|
||||
"fm_deathmatch_controler"_J,
|
||||
"fm_hideout_controler"_J,
|
||||
"fm_mission_controller"_J,
|
||||
"fm_mission_controller_2020"_J, // Public_Mission_Controller, fm_mission_controller
|
||||
"FM_Race_Controler"_J,
|
||||
"FM_Horde_Controler"_J,
|
||||
"FM_Horde_Controler"_J, // FM_Survival_Controller
|
||||
"dont_cross_the_line"_J,
|
||||
"am_darts_apartment"_J,
|
||||
"AM_Armwrestling_Apartment"_J,
|
||||
@@ -264,11 +271,13 @@ namespace YimMenu
|
||||
"gunslinger_arcade"_J,
|
||||
"wizard_arcade"_J,
|
||||
"AM_CASINO_LIMO"_J,
|
||||
"AM_MANSION_LIMO"_J,
|
||||
"AM_CASINO_LUXURY_CAR"_J,
|
||||
"AM_MANSION_LUXURY_CAR"_J,
|
||||
"Degenatron Games"_J,
|
||||
"ggsm_arcade"_J,
|
||||
"puzzle"_J,
|
||||
"camhedz_arcade"_J,
|
||||
"SCTV"_J,
|
||||
"SCTV"_J
|
||||
});
|
||||
}
|
||||
@@ -3,9 +3,10 @@
|
||||
namespace YimMenu
|
||||
{
|
||||
constexpr auto g_PedModels = std::to_array({
|
||||
"a_c_boar",
|
||||
"a_c_boar",
|
||||
"a_c_boar_02",
|
||||
"a_c_cat_01",
|
||||
"a_c_cat_02",
|
||||
"a_c_chickenhawk",
|
||||
"a_c_chimp",
|
||||
"a_c_chimp_02",
|
||||
@@ -269,6 +270,7 @@ namespace YimMenu
|
||||
"a_m_y_vinewood_04",
|
||||
"a_m_y_yoga_01",
|
||||
"cs_amandatownley",
|
||||
"cs_amandatownley_02",
|
||||
"cs_andreas",
|
||||
"cs_ashley",
|
||||
"cs_bankman",
|
||||
@@ -368,6 +370,7 @@ namespace YimMenu
|
||||
"csb_ary",
|
||||
"csb_ary_02",
|
||||
"csb_avery",
|
||||
"csb_avi_04",
|
||||
"csb_avischwartzman_02",
|
||||
"csb_avischwartzman_03",
|
||||
"csb_avon",
|
||||
@@ -386,8 +389,8 @@ namespace YimMenu
|
||||
"csb_celeb_01",
|
||||
"csb_charlie_reed",
|
||||
"csb_chef",
|
||||
"csb_chef2",
|
||||
"csb_chef_03",
|
||||
"csb_chef2",
|
||||
"csb_chin_goon",
|
||||
"csb_cletus",
|
||||
"csb_cop",
|
||||
@@ -399,6 +402,7 @@ namespace YimMenu
|
||||
"csb_drugdealer",
|
||||
"csb_englishdave",
|
||||
"csb_englishdave_02",
|
||||
"csb_faber_02",
|
||||
"csb_fos_rep",
|
||||
"csb_g",
|
||||
"csb_georginacheng",
|
||||
@@ -512,6 +516,7 @@ namespace YimMenu
|
||||
"g_m_m_friedlandergoons_01",
|
||||
"g_m_m_genthug_01",
|
||||
"g_m_m_goons_01",
|
||||
"g_m_m_knoway_01",
|
||||
"g_m_m_korboss_01",
|
||||
"g_m_m_maragrande_01",
|
||||
"g_m_m_mexboss_01",
|
||||
@@ -556,16 +561,18 @@ namespace YimMenu
|
||||
"ig_acidlabcook",
|
||||
"ig_agatha",
|
||||
"ig_agent",
|
||||
"ig_agent14_02",
|
||||
"ig_agent_02",
|
||||
"ig_agent14_02",
|
||||
"ig_ahronward",
|
||||
"ig_amandatownley",
|
||||
"ig_amandatownley_02",
|
||||
"ig_andreas",
|
||||
"ig_armsmanufac_01",
|
||||
"ig_ary",
|
||||
"ig_ary_02",
|
||||
"ig_ashley",
|
||||
"ig_avery",
|
||||
"ig_avi_04",
|
||||
"ig_avischwartzman_02",
|
||||
"ig_avischwartzman_03",
|
||||
"ig_avon",
|
||||
@@ -595,8 +602,8 @@ namespace YimMenu
|
||||
"ig_celeb_01",
|
||||
"ig_charlie_reed",
|
||||
"ig_chef",
|
||||
"ig_chef2",
|
||||
"ig_chef_03",
|
||||
"ig_chef2",
|
||||
"ig_chengsr",
|
||||
"ig_chrisformage",
|
||||
"ig_clay",
|
||||
@@ -630,8 +637,10 @@ namespace YimMenu
|
||||
"ig_englishdave_02",
|
||||
"ig_entourage_a",
|
||||
"ig_entourage_b",
|
||||
"ig_faber_02",
|
||||
"ig_fabien",
|
||||
"ig_fbisuit_01",
|
||||
"ig_fibleader_01",
|
||||
"ig_floyd",
|
||||
"ig_fooliganz_01",
|
||||
"ig_fooliganz_02",
|
||||
@@ -792,6 +801,7 @@ namespace YimMenu
|
||||
"ig_tylerdix_02",
|
||||
"ig_vagos_leader",
|
||||
"ig_vagspeak",
|
||||
"ig_valencheat",
|
||||
"ig_valentina",
|
||||
"ig_vernon",
|
||||
"ig_vincent",
|
||||
@@ -847,6 +857,7 @@ namespace YimMenu
|
||||
"mp_m_weed_01",
|
||||
"mp_s_m_armoured_01",
|
||||
"p_franklin_02",
|
||||
"p_michael_02",
|
||||
"player_one",
|
||||
"player_two",
|
||||
"player_zero",
|
||||
@@ -914,6 +925,7 @@ namespace YimMenu
|
||||
"s_m_m_highsec_03",
|
||||
"s_m_m_highsec_04",
|
||||
"s_m_m_highsec_05",
|
||||
"s_m_m_highsec_06",
|
||||
"s_m_m_janitor",
|
||||
"s_m_m_lathandy_01",
|
||||
"s_m_m_lifeinvad_01",
|
||||
@@ -1001,9 +1013,9 @@ namespace YimMenu
|
||||
"s_m_y_xmech_01",
|
||||
"s_m_y_xmech_02",
|
||||
"s_m_y_xmech_02_mp",
|
||||
// "slod_human", you don't want to spawn these
|
||||
// "slod_large_quadped",
|
||||
// "slod_small_quadped",
|
||||
// "slod_human", you don't want to spawn these
|
||||
// "slod_large_quadped",
|
||||
// "slod_small_quadped",
|
||||
"u_f_m_casinocash_01",
|
||||
"u_f_m_casinoshop_01",
|
||||
"u_f_m_corpse_01",
|
||||
@@ -1099,6 +1111,6 @@ namespace YimMenu
|
||||
"u_m_y_staggrm_01",
|
||||
"u_m_y_tattoo_01",
|
||||
"u_m_y_ushi",
|
||||
"u_m_y_zombie_01",
|
||||
});
|
||||
"u_m_y_zombie_01"
|
||||
});
|
||||
}
|
||||
@@ -23,7 +23,11 @@ namespace YimMenu
|
||||
"Possessed Animals",
|
||||
"Ghosts Exposed",
|
||||
"Happy Holidays Hauler",
|
||||
"Community Outreach"});
|
||||
"Community Outreach",
|
||||
"Getaway Driver",
|
||||
"Stoner Survival",
|
||||
"Valentine Cheater",
|
||||
});
|
||||
|
||||
static constexpr auto randomEventScripts = std::to_array({"fm_content_drug_vehicle"_J,
|
||||
"fm_content_movie_props"_J,
|
||||
@@ -45,7 +49,11 @@ namespace YimMenu
|
||||
"fm_content_possessed_animals"_J,
|
||||
"fm_content_ghosthunt"_J,
|
||||
"fm_content_xmas_truck"_J,
|
||||
"fm_content_community_outreach"_J});
|
||||
"fm_content_community_outreach"_J,
|
||||
"fm_content_getaway_driver"_J,
|
||||
"fm_content_survival_grouping"_J,
|
||||
"fm_content_valentine_cheater"_J,
|
||||
});
|
||||
|
||||
static constexpr auto randomEventCooldowns = std::to_array({
|
||||
"SUM22_RE_DRUG_VEHICLE_INACTIVE_TIME"_J,
|
||||
@@ -54,7 +62,7 @@ namespace YimMenu
|
||||
"SUM22_RE_VEHICLE_LIST_INACTIVE_TIME"_J,
|
||||
"STANDARDCONTROLLERVOLUME_COOLDOWN"_J,
|
||||
"STANDARDTARGETTINGTIME_COOLDOWN"_J,
|
||||
"SSP2_COOLDOWN"_J
|
||||
"SSP2_COOLDOWN"_J,
|
||||
"SUM22_RE_SMUGGLER_TRAIL_INACTIVE_TIME"_J,
|
||||
"NC_SOURCE_TRUCK_COOLDOWN"_J,
|
||||
"SUM22_RE_SMUGGLER_PLANE_INACTIVE_TIME"_J,
|
||||
@@ -69,6 +77,9 @@ namespace YimMenu
|
||||
"SUM23_RE_GHOSTHUNT_INACTIVE_TIME"_J,
|
||||
"XMAS_TRUCK_INACTIVE_TIME"_J,
|
||||
"RE_COMMUNITY_OUTREACH_INACTIVE_TIME"_J,
|
||||
"RE_GETAWAY_DRIVER_INACTIVE_TIME"_J,
|
||||
"RE_SURVIVAL_GROUPING_INACTIVE_TIME"_J,
|
||||
"RE_VALENTINES_CHEATER_INACTIVE_TIME"_J,
|
||||
});
|
||||
|
||||
static constexpr auto randomEventAvailabilities = std::to_array({
|
||||
@@ -93,5 +104,8 @@ namespace YimMenu
|
||||
"SUM23_RE_GHOSTHUNT_AVAILABLE_TIME"_J,
|
||||
"XMAS_TRUCK_AVAILABLE_TIME"_J,
|
||||
"RE_COMMUNITY_OUTREACH_AVAILABLE_TIME"_J,
|
||||
"RE_GETAWAY_DRIVER_AVAILABLE_TIME"_J,
|
||||
"RE_SURVIVAL_GROUPING_AVAILABLE_TIME"_J,
|
||||
"RE_VALENTINES_CHEATER_AVAILABLE_TIME"_J,
|
||||
});
|
||||
}
|
||||
@@ -83,6 +83,8 @@ namespace YimMenu
|
||||
"am_lowrider_int",
|
||||
"am_lsia_take_off_cinematic",
|
||||
"am_luxury_showroom",
|
||||
"am_mansion_limo",
|
||||
"am_mansion_luxury_car",
|
||||
"am_mission_launch",
|
||||
"am_mp_acid_lab",
|
||||
"am_mp_arcade",
|
||||
@@ -123,6 +125,9 @@ namespace YimMenu
|
||||
"am_mp_ie_warehouse",
|
||||
"am_mp_island",
|
||||
"am_mp_juggalo_hideout",
|
||||
"am_mp_mansion",
|
||||
"am_mp_mansion_driveway",
|
||||
"am_mp_mansion_garage",
|
||||
"am_mp_multistorey_garage",
|
||||
"am_mp_music_studio",
|
||||
"am_mp_nightclub",
|
||||
@@ -468,6 +473,9 @@ namespace YimMenu
|
||||
"fm_content_drug_lab_work",
|
||||
"fm_content_drug_vehicle",
|
||||
"fm_content_export_cargo",
|
||||
"fm_content_firefighter",
|
||||
"fm_content_forklift_operator",
|
||||
"fm_content_getaway_driver",
|
||||
"fm_content_ghosthunt",
|
||||
"fm_content_golden_gun",
|
||||
"fm_content_gunrunning",
|
||||
@@ -493,6 +501,7 @@ namespace YimMenu
|
||||
"fm_content_phantom_car",
|
||||
"fm_content_pizza_delivery",
|
||||
"fm_content_possessed_animals",
|
||||
"fm_content_postal_worker",
|
||||
"fm_content_robbery",
|
||||
"fm_content_security_contract",
|
||||
"fm_content_sightseeing",
|
||||
@@ -505,12 +514,15 @@ namespace YimMenu
|
||||
"fm_content_smuggler_trail",
|
||||
"fm_content_source_research",
|
||||
"fm_content_stash_house",
|
||||
"fm_content_survival",
|
||||
"fm_content_survival_grouping",
|
||||
"fm_content_taxi_driver",
|
||||
"fm_content_test",
|
||||
"fm_content_tow_truck_work",
|
||||
"fm_content_tuner_robbery",
|
||||
"fm_content_tycoon_odd_jobs",
|
||||
"fm_content_ufo_abduction",
|
||||
"fm_content_valentine_cheater",
|
||||
"fm_content_vehicle_list",
|
||||
"fm_content_vehrob_arena",
|
||||
"fm_content_vehrob_cargo_ship",
|
||||
@@ -753,6 +765,19 @@ namespace YimMenu
|
||||
"maintransition",
|
||||
"main_install",
|
||||
"main_persistent",
|
||||
"mansion_basement_seating",
|
||||
"mansion_carmod",
|
||||
"mansion_club_bar",
|
||||
"mansion_club_seating",
|
||||
"mansion_guest_bedroom_seating",
|
||||
"mansion_lobby_seating",
|
||||
"mansion_lower_basement_seating",
|
||||
"mansion_lower_east_wing_seating",
|
||||
"mansion_outside_seating",
|
||||
"mansion_seating",
|
||||
"mansion_upper_balcony_seating",
|
||||
"mansion_upper_floor_seating",
|
||||
"mansion_water_seating",
|
||||
"martin1",
|
||||
"maude1",
|
||||
"maude_postbailbond",
|
||||
@@ -814,7 +839,7 @@ namespace YimMenu
|
||||
"net_freemode_debug_2023",
|
||||
"net_freemode_debug_stat_2023",
|
||||
"net_jacking_soaktest",
|
||||
"net_rank_tunable_loader",
|
||||
"net_mansion_yoga",
|
||||
"net_session_soaktest",
|
||||
"net_test_drive",
|
||||
"net_tunable_check",
|
||||
@@ -923,6 +948,7 @@ namespace YimMenu
|
||||
"profiler_registration",
|
||||
"prologue1",
|
||||
"prop_drop",
|
||||
"public_mission_controller",
|
||||
"public_mission_creator",
|
||||
"puzzle",
|
||||
"racetest",
|
||||
@@ -1017,6 +1043,7 @@ namespace YimMenu
|
||||
"sh_intro_f_hills",
|
||||
"sh_intro_m_home",
|
||||
"simeon_showroom_seating",
|
||||
"si_dancing_activity",
|
||||
"smoketest",
|
||||
"social_controller",
|
||||
"solomon1",
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace YimMenu
|
||||
SPECIAL_ABILITY = 1828,
|
||||
FRIEND = 2050,
|
||||
SHOP = 2324,
|
||||
CELLPHONE = 2552,
|
||||
CELLPHONE = 2600,
|
||||
VEHICLE_SPAWN = 3568,
|
||||
CAR_MOD_SHOP = 3750,
|
||||
PAUSE_MENU_SCRIPT = 3076,
|
||||
@@ -28,9 +28,9 @@ namespace YimMenu
|
||||
AM_MP_YACHT = 5000,
|
||||
INGAMEHUD = 4600,
|
||||
TRANSITION = 8032,
|
||||
FMMC_LAUNCHER = 27000,
|
||||
MULTIPLAYER_FREEMODE = 87500,
|
||||
MISSION = 63500,
|
||||
MP_LAUNCH_SCRIPT = 34750
|
||||
FMMC_LAUNCHER = 28000,
|
||||
MULTIPLAYER_FREEMODE = 89500,
|
||||
MISSION = 64500,
|
||||
MP_LAUNCH_SCRIPT = 35250
|
||||
};
|
||||
}
|
||||
@@ -26,10 +26,10 @@ namespace YimMenu
|
||||
"Military",
|
||||
"Commercial",
|
||||
"Rail",
|
||||
"Open Wheel"});
|
||||
"Open Wheel"
|
||||
});
|
||||
|
||||
static constexpr auto g_VehicleHashes = std::to_array({
|
||||
"adder"_J,
|
||||
static constexpr auto g_VehicleHashes = std::to_array({"adder"_J,
|
||||
"airbus"_J,
|
||||
"airtug"_J,
|
||||
"akula"_J,
|
||||
@@ -52,6 +52,7 @@ namespace YimMenu
|
||||
"asea2"_J,
|
||||
"asterope"_J,
|
||||
"asterope2"_J,
|
||||
"astrale"_J,
|
||||
"astron"_J,
|
||||
"astron2"_J,
|
||||
"autarch"_J,
|
||||
@@ -182,6 +183,7 @@ namespace YimMenu
|
||||
"cheburek"_J,
|
||||
"cheetah"_J,
|
||||
"cheetah2"_J,
|
||||
"cheetah3"_J,
|
||||
"chernobog"_J,
|
||||
"chimera"_J,
|
||||
"chino"_J,
|
||||
@@ -258,17 +260,26 @@ namespace YimMenu
|
||||
"double"_J,
|
||||
"drafter"_J,
|
||||
"draugur"_J,
|
||||
"driftchavosv6"_J,
|
||||
"driftcheburek"_J,
|
||||
"driftcypher"_J,
|
||||
"driftdominator10"_J,
|
||||
"driftdominator9"_J,
|
||||
"drifteuros"_J,
|
||||
"driftfr36"_J,
|
||||
"driftfuto"_J,
|
||||
"driftfuto2"_J,
|
||||
"driftgauntlet4"_J,
|
||||
"drifthardy"_J,
|
||||
"driftjester"_J,
|
||||
"driftjester3"_J,
|
||||
"driftkeitora"_J,
|
||||
"driftl352"_J,
|
||||
"driftnebula"_J,
|
||||
"driftremus"_J,
|
||||
"driftrt3000"_J,
|
||||
"driftsentinel"_J,
|
||||
"driftsentinel2"_J,
|
||||
"drifttampa"_J,
|
||||
"driftvorschlag"_J,
|
||||
"driftyosemite"_J,
|
||||
@@ -306,6 +317,7 @@ namespace YimMenu
|
||||
"eurosx32"_J,
|
||||
"everon"_J,
|
||||
"everon2"_J,
|
||||
"everon3"_J,
|
||||
"exemplar"_J,
|
||||
"f620"_J,
|
||||
"faction"_J,
|
||||
@@ -328,7 +340,9 @@ namespace YimMenu
|
||||
"fixter"_J,
|
||||
"flashgt"_J,
|
||||
"flatbed"_J,
|
||||
"flatbed2"_J,
|
||||
"fmj"_J,
|
||||
"fmj2"_J,
|
||||
"forklift"_J,
|
||||
"formula"_J,
|
||||
"formula2"_J,
|
||||
@@ -372,12 +386,14 @@ namespace YimMenu
|
||||
"gresley"_J,
|
||||
"growler"_J,
|
||||
"gt500"_J,
|
||||
"gt750"_J,
|
||||
"guardian"_J,
|
||||
"habanero"_J,
|
||||
"hakuchou"_J,
|
||||
"hakuchou2"_J,
|
||||
"halftrack"_J,
|
||||
"handler"_J,
|
||||
"hardy"_J,
|
||||
"hauler"_J,
|
||||
"hauler2"_J,
|
||||
"havok"_J,
|
||||
@@ -420,6 +436,7 @@ namespace YimMenu
|
||||
"issi6"_J,
|
||||
"issi7"_J,
|
||||
"issi8"_J,
|
||||
"itali2"_J,
|
||||
"italigtb"_J,
|
||||
"italigtb2"_J,
|
||||
"italigto"_J,
|
||||
@@ -443,6 +460,7 @@ namespace YimMenu
|
||||
"kamacho"_J,
|
||||
"kanjo"_J,
|
||||
"kanjosj"_J,
|
||||
"keitora"_J,
|
||||
"khamelion"_J,
|
||||
"khanjali"_J,
|
||||
"komoda"_J,
|
||||
@@ -451,6 +469,7 @@ namespace YimMenu
|
||||
"kuruma"_J,
|
||||
"kuruma2"_J,
|
||||
"l35"_J,
|
||||
"l352"_J,
|
||||
"landstalker"_J,
|
||||
"landstalker2"_J,
|
||||
"lazer"_J,
|
||||
@@ -461,6 +480,7 @@ namespace YimMenu
|
||||
"lm87"_J,
|
||||
"locust"_J,
|
||||
"longfin"_J,
|
||||
"luiva"_J,
|
||||
"lurcher"_J,
|
||||
"luxor"_J,
|
||||
"luxor2"_J,
|
||||
@@ -477,6 +497,7 @@ namespace YimMenu
|
||||
"massacro"_J,
|
||||
"massacro2"_J,
|
||||
"maverick"_J,
|
||||
"maverick2"_J,
|
||||
"menacer"_J,
|
||||
"mesa"_J,
|
||||
"mesa2"_J,
|
||||
@@ -485,6 +506,7 @@ namespace YimMenu
|
||||
"michelli"_J,
|
||||
"microlight"_J,
|
||||
"miljet"_J,
|
||||
"minimus"_J,
|
||||
"minitank"_J,
|
||||
"minivan"_J,
|
||||
"minivan2"_J,
|
||||
@@ -562,6 +584,8 @@ namespace YimMenu
|
||||
"pigalle"_J,
|
||||
"pipistrello"_J,
|
||||
"pizzaboy"_J,
|
||||
"polbuffalo"_J,
|
||||
"polbuffalo6"_J,
|
||||
"polcaracara"_J,
|
||||
"polcoquette4"_J,
|
||||
"poldominator10"_J,
|
||||
@@ -575,6 +599,7 @@ namespace YimMenu
|
||||
"police4"_J,
|
||||
"police5"_J,
|
||||
"policeb"_J,
|
||||
"policeb2"_J,
|
||||
"policeold1"_J,
|
||||
"policeold2"_J,
|
||||
"policet"_J,
|
||||
@@ -610,6 +635,7 @@ namespace YimMenu
|
||||
"rapidgt"_J,
|
||||
"rapidgt2"_J,
|
||||
"rapidgt3"_J,
|
||||
"rapidgt4"_J,
|
||||
"raptor"_J,
|
||||
"ratbike"_J,
|
||||
"ratel"_J,
|
||||
@@ -689,6 +715,8 @@ namespace YimMenu
|
||||
"sentinel2"_J,
|
||||
"sentinel3"_J,
|
||||
"sentinel4"_J,
|
||||
"sentinel5"_J,
|
||||
"sentinel6"_J,
|
||||
"serrano"_J,
|
||||
"seven70"_J,
|
||||
"shamal"_J,
|
||||
@@ -727,6 +755,7 @@ namespace YimMenu
|
||||
"stingertt"_J,
|
||||
"stockade"_J,
|
||||
"stockade3"_J,
|
||||
"stockade4"_J,
|
||||
"stratum"_J,
|
||||
"streamer216"_J,
|
||||
"streiter"_J,
|
||||
@@ -751,6 +780,7 @@ namespace YimMenu
|
||||
"surfer2"_J,
|
||||
"surfer3"_J,
|
||||
"surge"_J,
|
||||
"suzume"_J,
|
||||
"swift"_J,
|
||||
"swift2"_J,
|
||||
"swinger"_J,
|
||||
@@ -763,6 +793,7 @@ namespace YimMenu
|
||||
"tampa"_J,
|
||||
"tampa2"_J,
|
||||
"tampa3"_J,
|
||||
"tampa4"_J,
|
||||
"tanker"_J,
|
||||
"tanker2"_J,
|
||||
"tankercar"_J,
|
||||
@@ -870,6 +901,7 @@ namespace YimMenu
|
||||
"viseris"_J,
|
||||
"visione"_J,
|
||||
"vivanite"_J,
|
||||
"vivanite2"_J,
|
||||
"volatol"_J,
|
||||
"volatus"_J,
|
||||
"voltic"_J,
|
||||
@@ -889,9 +921,11 @@ namespace YimMenu
|
||||
"windsor2"_J,
|
||||
"winky"_J,
|
||||
"wolfsbane"_J,
|
||||
"woodlander"_J,
|
||||
"xa21"_J,
|
||||
"xls"_J,
|
||||
"xls2"_J,
|
||||
"xtreme"_J,
|
||||
"yosemite"_J,
|
||||
"yosemite1500"_J,
|
||||
"yosemite2"_J,
|
||||
@@ -915,26 +949,6 @@ namespace YimMenu
|
||||
"zr380"_J,
|
||||
"zr3802"_J,
|
||||
"zr3803"_J,
|
||||
"ztype"_J,
|
||||
"cheetah3"_J,
|
||||
"driftchavos6"_J,
|
||||
"driftdominator10"_J,
|
||||
"driftgauntlet4"_J,
|
||||
"drifthardy"_J,
|
||||
"driftl352"_J,
|
||||
"everon3"_J,
|
||||
"flatbed2"_J,
|
||||
"hardy"_J,
|
||||
"l352"_J,
|
||||
"maverick2"_J,
|
||||
"minimus"_J,
|
||||
"policeb2"_J,
|
||||
"rapidgt4"_J,
|
||||
"sentinel5"_J,
|
||||
"stockade4"_J,
|
||||
"suzume"_J,
|
||||
"tampa4"_J,
|
||||
"woodlander"_J,
|
||||
});
|
||||
|
||||
"ztype"_J
|
||||
});
|
||||
}
|
||||
@@ -119,5 +119,6 @@ namespace YimMenu
|
||||
"WEAPON_STUNROD"_J,
|
||||
"WEAPON_STRICKLER"_J,
|
||||
"WEAPON_BRIEFCASE_03"_J,
|
||||
"WEAPON_NEWSPAPER"_J
|
||||
});
|
||||
}
|
||||
|
||||
@@ -173,7 +173,7 @@ namespace YimMenu
|
||||
RequestControl = ptr.Add(5).Add(1).Rip().As<Functions::RequestControl>();
|
||||
});
|
||||
|
||||
constexpr auto spectatePatchPtrn = Pattern<"74 26 66 83 FF 0D 77 20 0F B7 C7">("SpectatePatch");
|
||||
constexpr auto spectatePatchPtrn = Pattern<"74 ? 66 83 FF 0D">("SpectatePatch");
|
||||
scanner.Add(spectatePatchPtrn, [this](PointerCalculator ptr) {
|
||||
SpectatePatch = BytePatches::Add(ptr.As<std::uint8_t*>(), 0xEB);
|
||||
});
|
||||
@@ -369,9 +369,9 @@ 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<"83 FD 05 ? ? ? 00 00 00 48 8B">("HandleJoinRequestIgnorePoolPatch");
|
||||
constexpr auto handleJoinRequestIgnorePoolPatchPtrn = Pattern<"41 83 FF 05 74 ? 42 8B 84 F5">("HandleJoinRequestIgnorePoolPatch");
|
||||
scanner.Add(handleJoinRequestIgnorePoolPatchPtrn, [this](PointerCalculator ptr) {
|
||||
HandleJoinRequestIgnorePoolPatch = BytePatches::Add(ptr.As<void*>(), std::to_array<std::uint8_t>({0x39, 0xC9, 0x90}));
|
||||
HandleJoinRequestIgnorePoolPatch = BytePatches::Add(ptr.As<void*>(), std::to_array<std::uint8_t>({0x39, 0xC9, 0x90, 0x90}));
|
||||
});
|
||||
|
||||
constexpr auto statsMpCharacterMappingDataPtrn = Pattern<"48 8D 0D ? ? ? ? 89 F2 0F 28 74 24 ? 48 83 C4 38">("CStatsMpCharacterMappingData");
|
||||
|
||||
@@ -238,7 +238,9 @@ struct SCRIPT_EVENT_COLLECT_COLLECTABLE : public SCRIPT_EVENT
|
||||
Tagging = 19,
|
||||
SprayCans = 20,
|
||||
Yuanbao = 21,
|
||||
SmokeOnTheWater = 22
|
||||
SmokeOnTheWater = 22,
|
||||
GoldenClover = 23, // this is the first collectible to be daily but in-game time
|
||||
LuckyClover = 24
|
||||
};
|
||||
|
||||
REGISTER_SCRIPT_EVENT(SCRIPT_EVENT_COLLECT_COLLECTABLE, CollectCollectable);
|
||||
|
||||
@@ -12,14 +12,14 @@ static_assert(sizeof(DeliveryPosData) == 6 * 8);
|
||||
struct FreemodeDelivery
|
||||
{
|
||||
SCR_INT DeliveryFlags; // 0
|
||||
SCR_ARRAY<DeliveryPosData, 1004> DeliveryPosData; // 1
|
||||
SCR_BOOL DeliveryInVehicle; // 6026
|
||||
SCR_BOOL DeliveryNotInVehicle; // 6027
|
||||
TIMER DeliveryCooldown1; // 6028
|
||||
SCR_INT CooldownFrameCount1; // 6030
|
||||
TIMER DeliveryCooldown2; // 6031
|
||||
SCR_INT CooldownFrameCount2; // 6033
|
||||
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
|
||||
|
||||
static FreemodeDelivery* Get();
|
||||
};
|
||||
//static_assert(sizeof(FreemodeDelivery) == 6237 * 8);
|
||||
//static_assert(sizeof(FreemodeDelivery) == 6260 * 8);
|
||||
@@ -58,20 +58,20 @@ struct FreemodeGeneral
|
||||
{
|
||||
uint64_t PAD_0000[301];
|
||||
VEHICLE_INDEX PersonalVehicleIndex; // 301
|
||||
uint64_t PAD_0302[653];
|
||||
SCR_BOOL PersonalVehicleRequested; // 955
|
||||
uint64_t PAD_0956[13];
|
||||
SCR_BOOL NodeDistanceCheck; // 969
|
||||
uint64_t PAD_0970[48];
|
||||
SCR_INT RequestedPersonalVehicleId; // 1018
|
||||
uint64_t PAD_1019[2];
|
||||
SCR_BOOL Exec1Impound; // 1021
|
||||
uint64_t PAD_1022[5833];
|
||||
STREET_DEALERS StreetDealers; // 6855
|
||||
uint64_t PAD_6879[71];
|
||||
DAILY_RESET_DATA DailyReset; // 6950
|
||||
FREEMODE_DELIVERY_DATA DeliveryData; // 6954
|
||||
uint64_t PAD_0302[273];
|
||||
SCR_BOOL PersonalVehicleRequested; // 575
|
||||
uint64_t PAD_0576[14];
|
||||
SCR_BOOL NodeDistanceCheck; // 590
|
||||
uint64_t PAD_0591[48];
|
||||
SCR_INT RequestedPersonalVehicleId; // 639
|
||||
uint64_t PAD_0640[2];
|
||||
SCR_BOOL Exec1Impound; // 642
|
||||
uint64_t PAD_0643[4992];
|
||||
STREET_DEALERS StreetDealers; // 5635
|
||||
uint64_t PAD_5659[107];
|
||||
DAILY_RESET_DATA DailyReset; // 5766
|
||||
FREEMODE_DELIVERY_DATA DeliveryData; // 5770
|
||||
|
||||
static FreemodeGeneral* Get();
|
||||
};
|
||||
//static_assert(sizeof(FreemodeGeneral) == 7240 * 8);
|
||||
//static_assert(sizeof(FreemodeGeneral) == 6073 * 8);
|
||||
@@ -480,10 +480,10 @@ struct FIELD_HANGAR_DATA
|
||||
};
|
||||
static_assert(sizeof(FIELD_HANGAR_DATA) == 2 * 8);
|
||||
|
||||
#define NUM_PROPERTY_INTERIORS \
|
||||
33 // (30 -> 31) b3095 \
|
||||
// (31 -> 32) b3258 \
|
||||
// (32 -> 33) b3407
|
||||
#define NUM_PROPERTY_INTERIORS 36 // (30 -> 31) b3095 \
|
||||
// (31 -> 32) b3258 \
|
||||
// (32 -> 33) b3407 \
|
||||
// (33 -> 36) b3717
|
||||
|
||||
struct PROPERTY_DATA
|
||||
{
|
||||
@@ -574,7 +574,7 @@ struct PROPERTY_DATA
|
||||
HACKER_DEN_DATA HackerDenData;
|
||||
FIELD_HANGAR_DATA FieldHangarData;
|
||||
};
|
||||
static_assert(sizeof(PROPERTY_DATA) == 543 * 8);
|
||||
static_assert(sizeof(PROPERTY_DATA) == 549 * 8);
|
||||
|
||||
struct BIKER_CONTRACTS
|
||||
{
|
||||
@@ -688,7 +688,7 @@ struct GPBD_FM_Entry
|
||||
SCR_INT ApartmentEnterFlags;
|
||||
// SCR_VEC3 AvengerMissionStartPosition; removed b889g9
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM_Entry) == 877 * 8);
|
||||
static_assert(sizeof(GPBD_FM_Entry) == 883 * 8);
|
||||
|
||||
struct GPBD_FM
|
||||
{
|
||||
@@ -696,4 +696,4 @@ struct GPBD_FM
|
||||
|
||||
static GPBD_FM* Get();
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM) == 28065 * 8);
|
||||
static_assert(sizeof(GPBD_FM) == 28257 * 8);
|
||||
@@ -67,11 +67,11 @@ static_assert(sizeof(RANDOM_EVENTS_CLIENT_EVENT_DATA) == 3 * 8);
|
||||
struct RANDOM_EVENTS_CLIENT_DATA
|
||||
{
|
||||
alignas(8) eRandomEventClientInitState InitState; // 0
|
||||
SCR_ARRAY<RANDOM_EVENTS_CLIENT_EVENT_DATA, 21> EventData; // 1
|
||||
SCR_BITSET<uint64_t> IsParticipantInEventFlags; // 65
|
||||
SCR_INT UNK_0066; // 66 (unused)
|
||||
SCR_ARRAY<RANDOM_EVENTS_CLIENT_EVENT_DATA, 24> EventData; // 1
|
||||
SCR_BITSET<uint64_t> IsParticipantInEventFlags; // 75
|
||||
SCR_INT UNK_0076; // 76 (unused)
|
||||
};
|
||||
static_assert(sizeof(RANDOM_EVENTS_CLIENT_DATA) == 67 * 8);
|
||||
static_assert(sizeof(RANDOM_EVENTS_CLIENT_DATA) == 76 * 8);
|
||||
|
||||
struct HOCW_DATA
|
||||
{
|
||||
@@ -124,9 +124,10 @@ struct GPBD_FM_2_Entry
|
||||
SCR_VEC3 CoronaPosition; // 40
|
||||
GANGOPS_DATA GangopsData; // 43
|
||||
RANDOM_EVENTS_CLIENT_DATA RandomEventsClientData; // 82
|
||||
SALVAGE_YARD_VEHICLE_SALE_DATA SYVehSaleData; // 149 added b889g9
|
||||
SALVAGE_YARD_VEHICLE_SALE_DATA SYVehSaleData; // 158 added b889g9
|
||||
uint64_t PAD_0210[105];
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM_2_Entry) == 201 * 8);
|
||||
static_assert(sizeof(GPBD_FM_2_Entry) == 315 * 8);
|
||||
|
||||
struct GPBD_FM_2
|
||||
{
|
||||
@@ -134,4 +135,4 @@ struct GPBD_FM_2
|
||||
|
||||
static GPBD_FM_2* Get();
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM_2) == 6433 * 8);
|
||||
static_assert(sizeof(GPBD_FM_2) == 10081 * 8);
|
||||
@@ -158,6 +158,7 @@ struct BOSS_GOON
|
||||
SCR_BITSET<eBossGoonFlags> Flags;
|
||||
SCR_INT Flags2; // TODO
|
||||
SCR_INT Flags3; // TODO
|
||||
SCR_INT Flags4; // added b3717
|
||||
SCR_INT TotalBossGoonTime;
|
||||
SCR_ARRAY<uint64_t, 2> BossGoonUUID;
|
||||
SCR_ARRAY<uint64_t, 8> Goons;
|
||||
@@ -222,6 +223,7 @@ struct BOSS_GOON
|
||||
SCR_BOOL CasinoLimoActive;
|
||||
SCR_BOOL CasinoLuxuryCarActive;
|
||||
SCR_HASH CasinoLuxuryCarModel;
|
||||
SCR_INT PAD_0309; // added b3717
|
||||
CASINO_HEIST_PREP CasinoHeistPrep;
|
||||
SCR_INT CayoPrepIndex;
|
||||
SCR_INT CompanySUVDestination;
|
||||
@@ -279,9 +281,11 @@ struct BOSS_GOON
|
||||
SCR_INT NightclubMissionIndex;
|
||||
SCR_INT NightclubDefendMissionIndex;
|
||||
uint64_t PAD_0478[18]; // TODO
|
||||
SCR_HASH PAD_0501; // added b3717
|
||||
SCR_INT PAD_0502; // added b3717
|
||||
SCR_BOOL DoubleActionCacheLocationRevealed;
|
||||
};
|
||||
static_assert(sizeof(BOSS_GOON) == 500 * 8);
|
||||
static_assert(sizeof(BOSS_GOON) == 504 * 8);
|
||||
|
||||
struct MC_STATS
|
||||
{
|
||||
@@ -348,7 +352,7 @@ struct GBPD_FM_3_Entry
|
||||
SCR_INT CasinoFlowProgress;
|
||||
SCR_ARRAY<uint64_t, 1> DailyObjectiveFlags; // @607 as of 1.67
|
||||
};
|
||||
static_assert(sizeof(GBPD_FM_3_Entry) == 611 * 8);
|
||||
static_assert(sizeof(GBPD_FM_3_Entry) == 615 * 8);
|
||||
|
||||
struct GPBD_FM_3
|
||||
{
|
||||
@@ -356,4 +360,4 @@ struct GPBD_FM_3
|
||||
|
||||
static GPBD_FM_3* Get();
|
||||
};
|
||||
static_assert(sizeof(GPBD_FM_3) == 19553 * 8);
|
||||
static_assert(sizeof(GPBD_FM_3) == 19681 * 8);
|
||||
@@ -76,11 +76,11 @@ struct SALV23FlowData
|
||||
SCR_INT PackedInt42102; // 3
|
||||
SCR_INT SALV23ScopeFlags; // 4
|
||||
SCR_ARRAY<uint64_t, 7> SALV23CFRCounts; // 5
|
||||
SCR_ARRAY<uint64_t, 7> SALV23CFRCounts2; // 13, added b889g9
|
||||
SALV23VehicleData SALV23Vehicles; // 13
|
||||
SCR_ARRAY<uint64_t, 3> SALV23VehRobStatus; // 23
|
||||
SCR_INT SALV23Flags; // 27
|
||||
SCR_BOOL UNK_28; // 28
|
||||
SCR_ARRAY<uint64_t, 7> SALV23CFRCrewCounts2; // 13, added b889g9
|
||||
SALV23VehicleData SALV23Vehicles; // 21
|
||||
SCR_ARRAY<uint64_t, 3> SALV23VehRobStatus; // 31
|
||||
SCR_INT SALV23Flags; // 35
|
||||
SCR_BOOL UNK_28; // 36
|
||||
};
|
||||
static_assert(sizeof(SALV23FlowData) == 37 * 8);
|
||||
|
||||
@@ -117,11 +117,19 @@ static_assert(sizeof(Hacker24FlowData) == 17 * 8);
|
||||
struct Drug25FlowData
|
||||
{
|
||||
SCR_INT PAD_0000; // unused
|
||||
SCR_ARRAY<uint64_t, 3> DrugMissions;
|
||||
SCR_INT LastMissionCompleted;
|
||||
SCR_ARRAY<uint64_t, 3> DrugMissions; // 1
|
||||
SCR_INT LastMissionCompleted; // 6
|
||||
};
|
||||
static_assert(sizeof(Drug25FlowData) == 6 * 8);
|
||||
|
||||
struct M25FlowData
|
||||
{
|
||||
SCR_INT M25GeneralBs; // 0
|
||||
SCR_INT M25Flags; // 1
|
||||
SCR_INT M25AviMissionCurrent; // 2
|
||||
};
|
||||
static_assert(sizeof(M25FlowData) == 3 * 8);
|
||||
|
||||
struct GPBD_Flow_Entry
|
||||
{
|
||||
SCR_INT TunerFlowFlags; // 0
|
||||
@@ -141,16 +149,19 @@ struct GPBD_Flow_Entry
|
||||
SCR_BITSET<uint64_t> TunerCBVDeliveredFlags; // 25
|
||||
SCR_INT TunerCBVState; // 26
|
||||
FixerFlowData FixerFlow; // 27
|
||||
SCR_BOOL HasFixerUsbCollected; // 54
|
||||
ULPFlowData ULPFlow; // 55
|
||||
XM22FlowData XM22Flow; // 57
|
||||
SUM23AvopFlowData SUM23AvopFlow; // 60
|
||||
SALV23FlowData SALV23Flow; // 71
|
||||
Bounty24FlowData Bounty24Flow; // 100
|
||||
Hacker24FlowData Hacker24Flow; // 111
|
||||
Drug25FlowData Drug25Flow; // added b889g9
|
||||
SCR_BOOL HasFixerUsbCollected; // 56
|
||||
ULPFlowData ULPFlow; // 57
|
||||
XM22FlowData XM22Flow; // 59
|
||||
SUM23AvopFlowData SUM23AvopFlow; // 62
|
||||
SALV23FlowData SALV23Flow; // 73
|
||||
Bounty24FlowData Bounty24Flow; // 110
|
||||
Hacker24FlowData Hacker24Flow; // 121
|
||||
Drug25FlowData Drug25Flow; // 138, added b889g9
|
||||
M25FlowData M25Flow; // 145, added b1013.17g9
|
||||
SCR_INT HeistFlags; // 148, added b1013.17g9
|
||||
SCR_INT UNK_149; // unused, added b1013.17g9
|
||||
};
|
||||
static_assert(sizeof(GPBD_Flow_Entry) == 144 * 8);
|
||||
static_assert(sizeof(GPBD_Flow_Entry) == 149 * 8);
|
||||
|
||||
struct GPBD_Flow
|
||||
{
|
||||
@@ -158,4 +169,4 @@ struct GPBD_Flow
|
||||
|
||||
static GPBD_Flow* Get();
|
||||
};
|
||||
static_assert(sizeof(GPBD_Flow) == 4609 * 8);
|
||||
static_assert(sizeof(GPBD_Flow) == 4769 * 8);
|
||||
@@ -85,7 +85,7 @@ struct GSBD
|
||||
SCR_BOOL PAD_0816; // always set to FALSE
|
||||
SCR_INT PAD_0817; // unused
|
||||
CEO_COLORS CeoColors;
|
||||
SMPL_INTERIOR_DATA_SERVER SimpleInteriorData;
|
||||
//SMPL_INTERIOR_DATA_SERVER SimpleInteriorData;
|
||||
LEAVE_CLUBHOUSE_SERVER LeaveClubhouse;
|
||||
SCR_ARRAY<IE_DELIVERY_INFO, 32> IEDeliveryInfos;
|
||||
SCR_INT PAD_1397;
|
||||
@@ -95,4 +95,4 @@ struct GSBD
|
||||
|
||||
static GSBD* Get();
|
||||
};
|
||||
static_assert(sizeof(GSBD) == 1499 * 8);
|
||||
static_assert(sizeof(GSBD) == 1264 * 8);
|
||||
@@ -24,13 +24,12 @@ struct WEAPON_PICKUPS
|
||||
SCR_INT LastMeleeWeaponPickupTime;
|
||||
SCR_INT LastProjectilePickupTime;
|
||||
SCR_INT LastGunPickupTime;
|
||||
SCR_ARRAY<uint64_t, 96> Indices; // size increased in b3095 (62 -> 95)
|
||||
// and in b3407 (95 -> 96)
|
||||
SCR_ARRAY<uint64_t, 96> Owners;
|
||||
SCR_ARRAY<uint64_t, 95> Indices; // size increased in b3095 (62 -> 95) // and in b3407 (95 -> 96) // one of PICKUP_WEAPON_VINTAGEPISTOL removed in b1013.17g9
|
||||
SCR_ARRAY<uint64_t, 95> Owners;
|
||||
SCR_INT SpawnCounter;
|
||||
SCR_INT AmmoCount;
|
||||
};
|
||||
static_assert(sizeof(WEAPON_PICKUPS) == 200 * 8);
|
||||
static_assert(sizeof(WEAPON_PICKUPS) == 198 * 8);
|
||||
|
||||
struct BIKER_CONTRACTS_SERVER
|
||||
{
|
||||
@@ -43,14 +42,14 @@ static_assert(sizeof(BIKER_CONTRACTS_SERVER) == 10 * 8);
|
||||
|
||||
struct GSBD_FM
|
||||
{
|
||||
SCR_ARRAY<uint64_t, 2> ModelSwapBits;
|
||||
SCR_ARRAY<uint64_t, 2> ModelSwapBits; // 0
|
||||
SCR_INT PAD_0003; // unused
|
||||
SCR_ARRAY<PLAYER_BOUNTY, 32> PlayerBounties;
|
||||
SCR_ARRAY<PLAYER_BOUNTY, 32> PlayerBounties; // 4
|
||||
uint64_t PAD_0101[5]; // unused
|
||||
SCR_ARRAY<uint64_t, 2> MuggingPlayers; // 0 = mugger, 1 = merryweather mercs
|
||||
SCR_ARRAY<uint64_t, 2> MuggedPlayers;
|
||||
uint64_t PAD_0112[4]; // unused
|
||||
SCR_ARRAY<uint64_t, 62> PAD_0116; // TODO b3407 (61 -> 62)
|
||||
SCR_ARRAY<uint64_t, 65> PAD_0116; // TODO b3407 (61 -> 62), 62 -> 65
|
||||
SCR_INT ShopProcessingBitset;
|
||||
SCR_ARRAY<uint64_t, NUM_CONTACTS> ActiveContactServiceBitsets;
|
||||
SCR_ARRAY<ACTIVE_CONTACT_SERVICE, 32> ActiveContactServices;
|
||||
@@ -67,4 +66,4 @@ struct GSBD_FM
|
||||
|
||||
static GSBD_FM* Get();
|
||||
};
|
||||
static_assert(sizeof(GSBD_FM) == 650 * 8);
|
||||
static_assert(sizeof(GSBD_FM) == 653 * 8);
|
||||
@@ -63,10 +63,10 @@ static_assert(sizeof(RANDOM_EVENTS_TARGET_DATA) == 2 * 8);
|
||||
struct GSBD_RandomEvents
|
||||
{
|
||||
alignas(8) eRandomEventInitState InitState; // 0
|
||||
SCR_ARRAY<RANDOM_EVENTS_DATA, 21> EventData; // 1
|
||||
RANDOM_EVENTS_VEHICLE_LIST_DATA VehicleListData; // 317
|
||||
RANDOM_EVENTS_TARGET_DATA TargetData; // 319
|
||||
SCR_ARRAY<RANDOM_EVENTS_DATA, 24> EventData; // 1
|
||||
RANDOM_EVENTS_VEHICLE_LIST_DATA VehicleListData; // 362
|
||||
RANDOM_EVENTS_TARGET_DATA TargetData; // 364
|
||||
|
||||
static GSBD_RandomEvents* Get();
|
||||
};
|
||||
static_assert(sizeof(GSBD_RandomEvents) == 321 * 8);
|
||||
static_assert(sizeof(GSBD_RandomEvents) == 366 * 8);
|
||||
@@ -569,6 +569,7 @@ struct GlobalPlayerBDEntry
|
||||
NETWORK_INDEX DeliveryBikeNetId;
|
||||
NETWORK_INDEX BountyTransporterNetId; // added b3258
|
||||
NETWORK_INDEX FieldDusterNetId; // added b3407
|
||||
NETWORK_INDEX MansionHeliNetId; // added b3407
|
||||
SCR_BOOL PAD_0057; // (@59 as of b3407)
|
||||
uint64_t PAD_0058[15]; // confirmed these are not used by PC scripts
|
||||
PLAYER_BLIP PlayerBlip;
|
||||
@@ -684,7 +685,7 @@ struct GlobalPlayerBDEntry
|
||||
SCR_BOOL CanSpawnGunVan;
|
||||
};
|
||||
|
||||
static_assert(sizeof(GlobalPlayerBDEntry) == 467 * 8);
|
||||
static_assert(sizeof(GlobalPlayerBDEntry) == 468 * 8);
|
||||
|
||||
struct GlobalPlayerBD
|
||||
{
|
||||
@@ -692,4 +693,4 @@ struct GlobalPlayerBD
|
||||
|
||||
static GlobalPlayerBD* Get();
|
||||
};
|
||||
static_assert(sizeof(GlobalPlayerBD) == 14945 * 8);
|
||||
static_assert(sizeof(GlobalPlayerBD) == 14977 * 8);
|
||||
@@ -31,25 +31,25 @@
|
||||
return glb.As<str*>(); \
|
||||
}
|
||||
|
||||
DEFINE_GLOBAL_ACCESSOR(GlobalPlayerBD, 2658019);
|
||||
DEFINE_GLOBAL_ACCESSOR(GPBD_FM, 1845274);
|
||||
DEFINE_GLOBAL_ACCESSOR(GPBD_FM_2, 1882449);
|
||||
DEFINE_GLOBAL_ACCESSOR(GPBD_FM_3, 1888882);
|
||||
DEFINE_GLOBAL_ACCESSOR(GPBD_Flow, 1980192);
|
||||
DEFINE_GLOBAL_ACCESSOR(GPBD_Kicking, 1873852);
|
||||
DEFINE_GLOBAL_ACCESSOR(GPBD_MissionName, 1873339);
|
||||
DEFINE_GLOBAL_ACCESSOR(GSBD, 2648932);
|
||||
DEFINE_GLOBAL_ACCESSOR(GSBD_BlockB, 2650431);
|
||||
DEFINE_GLOBAL_ACCESSOR(GSBD_FM, 1845274);
|
||||
DEFINE_GLOBAL_ACCESSOR(GSBD_FM_Events, 1918514);
|
||||
DEFINE_GLOBAL_ACCESSOR(GSBD_Kicking, 1877053);
|
||||
DEFINE_GLOBAL_ACCESSOR(GSBD_PropertyInstances, 1939705);
|
||||
DEFINE_GLOBAL_ACCESSOR(g_AMC_playerBD, 2699749);
|
||||
DEFINE_GLOBAL_ACCESSOR(GSBD_RandomEvents, 1882048);
|
||||
DEFINE_GLOBAL_ACCESSOR(MPSV, 1586547);
|
||||
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, 1984460);
|
||||
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(g_SavedMPGlobals, 2359296);
|
||||
DEFINE_GLOBAL_ACCESSOR(FreemodeGeneral, 2740191);
|
||||
DEFINE_GLOBAL_ACCESSOR(FreemodeGeneral, 2733138);
|
||||
DEFINE_GLOBAL_ACCESSOR(DailyObjectivesState, 1574745);
|
||||
DEFINE_GLOBAL_ACCESSOR(WeeklyChallenge, 2739243);
|
||||
DEFINE_GLOBAL_ACCESSOR(FreemodeDelivery, 1953035);
|
||||
DEFINE_GLOBAL_ACCESSOR(LauncherServerData, 2699563);
|
||||
DEFINE_GLOBAL_ACCESSOR(WeeklyChallenge, 2732069);
|
||||
DEFINE_GLOBAL_ACCESSOR(FreemodeDelivery, 1957402);
|
||||
DEFINE_GLOBAL_ACCESSOR(LauncherServerData, 2700002);
|
||||
@@ -67,8 +67,8 @@ static_assert(sizeof(MPSV_Entry) == 143 * 8);
|
||||
|
||||
struct MPSV
|
||||
{
|
||||
SCR_ARRAY<MPSV_Entry, 547> Entries;
|
||||
SCR_ARRAY<MPSV_Entry, 607> Entries;
|
||||
|
||||
static MPSV* Get();
|
||||
};
|
||||
static_assert(sizeof(MPSV) == 78222 * 8);
|
||||
static_assert(sizeof(MPSV) == 86802 * 8);
|
||||
@@ -7,7 +7,7 @@ struct g_AMC_playerBD_Entry
|
||||
SCR_ARRAY<TIMER, NUM_CONTACTS> UsedContactServicesTimer; // only index 2 (mugger) is actually used by the scripts. the rest is just a waste of bandwidth
|
||||
SCR_ARRAY<uint64_t, NUM_CONTACTS> ContactServiceCooldowns; // same as above
|
||||
};
|
||||
static_assert(sizeof(g_AMC_playerBD_Entry) == 254 * 8); // -> 251 in b812g9
|
||||
static_assert(sizeof(g_AMC_playerBD_Entry) == 260 * 8); // -> 251 in b812g9
|
||||
|
||||
struct g_AMC_playerBD
|
||||
{
|
||||
@@ -15,4 +15,4 @@ struct g_AMC_playerBD
|
||||
|
||||
static g_AMC_playerBD* Get();
|
||||
};
|
||||
static_assert(sizeof(g_AMC_playerBD) == 8129 * 8);
|
||||
static_assert(sizeof(g_AMC_playerBD) == 8321 * 8);
|
||||
@@ -166,7 +166,7 @@ struct MP_GENERAL_SAVED
|
||||
SCR_INT ReceiveLJCashTime; // 1302
|
||||
SCR_INT LastAccProp; // 1303
|
||||
SCR_INT Multi1PropVal; // 1304
|
||||
SCR_ARRAY<uint64_t, 31> PropAryVal; // 1305
|
||||
SCR_ARRAY<uint64_t, 34> PropAryVal; // 1305
|
||||
SCR_INT LastAccSmplInt; // 1337
|
||||
SCR_INT KrPatchUpdate; // 1338
|
||||
SCR_ARRAY<uint64_t, 273> OutfitCompDraw; // 1339
|
||||
@@ -199,7 +199,7 @@ struct MP_GENERAL_SAVED
|
||||
SCR_ARRAY<GAMER_HANDLE, 3> LastGOJobGamer; // 4383
|
||||
SCR_ARRAY<TEXT_LABEL_63, 3> LastGOJobGamerName; // 4423
|
||||
};
|
||||
static_assert(sizeof(MP_GENERAL_SAVED) == 4472 * 8);
|
||||
static_assert(sizeof(MP_GENERAL_SAVED) == 4475 * 8);
|
||||
|
||||
struct MP_BOUNTY_SAVED
|
||||
{
|
||||
@@ -241,11 +241,11 @@ struct g_SavedMPGlobalsEntry
|
||||
MP_PROPERTY_SAVED PropertySaved; // 7
|
||||
CAR_APP_ORDER CarAppOrder; // 593
|
||||
MP_GENERAL_SAVED GeneralSaved; // 681
|
||||
MP_BOUNTY_SAVED BountySaved; // 5153
|
||||
MP_ATM_SAVED ATMSaved; // 5394
|
||||
MP_SCRIPT_SAVES_DATA ScriptSavesData; // 5544
|
||||
MP_BOUNTY_SAVED BountySaved; // 5156
|
||||
MP_ATM_SAVED ATMSaved; // 5397
|
||||
MP_SCRIPT_SAVES_DATA ScriptSavesData; // 5547
|
||||
};
|
||||
static_assert(sizeof(g_SavedMPGlobalsEntry) == 5571 * 8);
|
||||
static_assert(sizeof(g_SavedMPGlobalsEntry) == 5574 * 8);
|
||||
|
||||
struct g_SavedMPGlobals
|
||||
{
|
||||
@@ -253,4 +253,4 @@ struct g_SavedMPGlobals
|
||||
|
||||
static g_SavedMPGlobals* Get();
|
||||
};
|
||||
static_assert(sizeof(g_SavedMPGlobals) == 5572 * 8);
|
||||
static_assert(sizeof(g_SavedMPGlobals) == 5575 * 8);
|
||||
@@ -37,15 +37,15 @@ static_assert(sizeof(RANDOM_EVENTS_FMMC_DATA) == 1 * 8);
|
||||
struct RANDOM_EVENTS_MISSION_DATA
|
||||
{
|
||||
SCR_INT EventsCount; // 0
|
||||
SCR_ARRAY<RANDOM_EVENTS_FMMC_DATA, 21> FMMCData; // 1
|
||||
SCR_ARRAY<RANDOM_EVENTS_FMMC_DATA, 24> FMMCData; // 1
|
||||
};
|
||||
static_assert(sizeof(RANDOM_EVENTS_MISSION_DATA) == 23 * 8);
|
||||
static_assert(sizeof(RANDOM_EVENTS_MISSION_DATA) == 26 * 8);
|
||||
|
||||
struct RANDOM_EVENTS_FREEMODE_DATA
|
||||
{
|
||||
SCR_ARRAY<RANDOM_EVENTS_LOCAL_DATA, 21> EventData; // 0
|
||||
RANDOM_EVENTS_MISSION_DATA MissionData; // 253
|
||||
SCR_ARRAY<RANDOM_EVENTS_LOCAL_DATA, 24> EventData; // 0
|
||||
RANDOM_EVENTS_MISSION_DATA MissionData; // 289
|
||||
|
||||
static RANDOM_EVENTS_FREEMODE_DATA* Get(rage::scrThread* thread);
|
||||
};
|
||||
static_assert(sizeof(RANDOM_EVENTS_FREEMODE_DATA) == 276 * 8);
|
||||
static_assert(sizeof(RANDOM_EVENTS_FREEMODE_DATA) == 315 * 8);
|
||||
@@ -17,11 +17,11 @@
|
||||
}
|
||||
|
||||
DEFINE_LOCAL_ACCESSOR(VEHICLE_REWARD_DATA, 129);
|
||||
DEFINE_LOCAL_ACCESSOR(RANDOM_EVENTS_FREEMODE_DATA, 16019);
|
||||
DEFINE_LOCAL_ACCESSOR(StandardTimeTrialData, 14640);
|
||||
DEFINE_LOCAL_ACCESSOR(RCBanditoTimeTrialData, 14690);
|
||||
DEFINE_LOCAL_ACCESSOR(HSWTimeTrialData, 14734);
|
||||
DEFINE_LOCAL_ACCESSOR(BikeTimeTrialData, 15529);
|
||||
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);
|
||||
|
||||
// am_launcher
|
||||
DEFINE_LOCAL_ACCESSOR(LauncherClientData, 245);
|
||||
DEFINE_LOCAL_ACCESSOR(LauncherClientData, 247);
|
||||
@@ -116,4 +116,4 @@ private:
|
||||
};
|
||||
static_assert(sizeof(GAMER_HANDLE) == 13 * 8);
|
||||
|
||||
#define NUM_CONTACTS 84
|
||||
#define NUM_CONTACTS 86
|
||||
Reference in New Issue
Block a user