Update for b1013.17 (#771)

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