Skip to content

Instantly share code, notes, and snippets.

@alexguirre
Created July 22, 2021 18:05
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexguirre/b9ca4f50ac79409034eeb3e34e04832b to your computer and use it in GitHub Desktop.
Save alexguirre/b9ca4f50ac79409034eeb3e34e04832b to your computer and use it in GitHub Desktop.
public static CVehicleModelInfoVarGlobal** gVehicleModelInfoVarGlobal = null;
public static void TestVehicleKits()
{
var kitIndex = NativeFunction.Natives.GET_VEHICLE_MOD_KIT<int>(Game.LocalPlayer.Character.CurrentVehicle);
if (gVehicleModelInfoVarGlobal == null)
{
var addr = Game.FindPattern("48 8B 0D ?? ?? ?? ?? 44 8B C6 8B D5 8B D8");
gVehicleModelInfoVarGlobal = (CVehicleModelInfoVarGlobal**)(addr + *(int*)(addr + 3) + 7);
}
var varGlobal = *gVehicleModelInfoVarGlobal;
if (varGlobal == null)
{
Game.LogTrivial("CVehicleModelInfoVarGlobal is null");
return;
}
if (kitIndex == 0xFFFF)
{
Game.LogTrivial($"No mod kit set");
return;
}
if (kitIndex < 0 || kitIndex >= varGlobal->Kits.Count)
{
Game.LogTrivial($"Kit index #{kitIndex} out of bounds");
return;
}
var kit = &varGlobal->Kits.Items[kitIndex];
Game.LogTrivial("kit name: " + kit->kitName);
Game.LogTrivial("kit id: " + kit->id);
Game.LogTrivial("kit index: " + kitIndex);
for (int k = 0; k < kit->visibleMods.Count; k++)
{
var mod = &kit->visibleMods.Items[k];
Game.LogTrivial("visible mod #" + k);
Game.LogTrivial(" modelName: " + mod->modelName);
Game.LogTrivial(" type: " + mod->type);
Game.LogTrivial(" bone: " + mod->bone);
Game.LogTrivial(" collisionBone: " + mod->collisionBone);
}
for (int k = 0; k < kit->linkMods.Count; k++)
{
var mod = &kit->linkMods.Items[k];
Game.LogTrivial("link mod #" + k);
Game.LogTrivial(" modelName: " + mod->modelName);
Game.LogTrivial(" bone: " + mod->bone);
}
}
[StructLayout(LayoutKind.Sequential, Size = 0x10)]
public struct atArray<T> where T : unmanaged
{
public T* Items;
public ushort Count;
public ushort Size;
}
[StructLayout(LayoutKind.Explicit)]
public struct CVehicleModelInfoVarGlobal
{
[FieldOffset(0x58)] public atArray<CVehicleKit> Kits;
}
[StructLayout(LayoutKind.Explicit, Size = 0x70)]
public struct CVehicleKit
{
[FieldOffset(0x00)] public uint kitName;
[FieldOffset(0x04)] public ushort id;
[FieldOffset(0x08)] public eModKitType kitType;
[FieldOffset(0x10)] public atArray<CVehicleModVisible> visibleMods;
[FieldOffset(0x20)] public atArray<CVehicleModLink> linkMods;
// ...
}
[StructLayout(LayoutKind.Explicit, Size = 0x68)]
public struct CVehicleModVisible
{
[FieldOffset(0x10)] public uint modelName;
[FieldOffset(0x18)] public nint modShopLabel; // const char*
[FieldOffset(0x20)] public atArray<uint> linkedModels;
[FieldOffset(0x30)] public eVehicleModType type;
[FieldOffset(0x34)] public eVehicleModBone bone;
[FieldOffset(0x38)] public eVehicleModBone collisionBone;
[FieldOffset(0x40)] public atArray<eVehicleModBone> turnOffBones;
// ...
public enum eVehicleModBone : uint
{
none = 4294967295,
chassis = 0,
bodyshell = 48,
bumper_f = 49,
bumper_r = 50,
wing_rf = 51,
wing_lf = 52,
bonnet = 53,
boot = 54,
exhaust = 56,
exhaust_2 = 57,
exhaust_3 = 58,
exhaust_4 = 59,
exhaust_5 = 60,
exhaust_6 = 61,
exhaust_7 = 62,
exhaust_8 = 63,
exhaust_9 = 64,
exhaust_10 = 65,
exhaust_11 = 66,
exhaust_12 = 67,
exhaust_13 = 68,
exhaust_14 = 69,
exhaust_15 = 70,
exhaust_16 = 71,
exhaust_17 = 72,
exhaust_18 = 73,
exhaust_19 = 74,
exhaust_20 = 75,
exhaust_21 = 76,
exhaust_22 = 77,
exhaust_23 = 78,
exhaust_24 = 79,
exhaust_25 = 80,
exhaust_26 = 81,
exhaust_27 = 82,
exhaust_28 = 83,
exhaust_29 = 84,
exhaust_30 = 85,
exhaust_31 = 86,
exhaust_32 = 87,
extra_1 = 420,
extra_2 = 421,
extra_3 = 422,
extra_4 = 423,
extra_5 = 424,
extra_6 = 425,
extra_7 = 426,
extra_8 = 427,
extra_9 = 428,
extra_10 = 429,
extra_11 = 430,
extra_12 = 431,
extra_13 = 432,
extra_14 = 433,
break_extra_1 = 436,
break_extra_2 = 437,
break_extra_3 = 438,
break_extra_4 = 439,
break_extra_5 = 440,
break_extra_6 = 441,
break_extra_7 = 442,
break_extra_8 = 443,
break_extra_9 = 444,
break_extra_10 = 445,
mod_col_1 = 446,
mod_col_2 = 447,
mod_col_3 = 448,
mod_col_4 = 449,
mod_col_5 = 450,
mod_col_6 = 451,
mod_col_7 = 452,
mod_col_8 = 453,
mod_col_9 = 454,
mod_col_10 = 455,
mod_col_11 = 456,
mod_col_12 = 457,
mod_col_13 = 458,
mod_col_14 = 459,
mod_col_15 = 460,
mod_col_16 = 461,
misc_a = 385,
misc_b = 386,
misc_c = 387,
misc_d = 388,
misc_e = 389,
misc_f = 390,
misc_g = 391,
misc_h = 392,
misc_i = 393,
misc_j = 394,
misc_k = 395,
misc_l = 396,
misc_m = 397,
misc_n = 398,
misc_o = 399,
misc_p = 400,
misc_q = 401,
misc_r = 402,
misc_s = 403,
misc_t = 404,
misc_u = 405,
misc_v = 406,
misc_w = 407,
misc_x = 408,
misc_y = 409,
misc_z = 410,
misc_1 = 411,
misc_2 = 412,
handlebars = 95,
steeringwheel = 96,
swingarm = 29,
forks_u = 21,
forks_l = 22,
headlight_l = 107,
headlight_r = 108,
indicator_lr = 113,
indicator_lf = 111,
indicator_rr = 114,
indicator_rf = 112,
taillight_l = 109,
taillight_r = 110,
window_lf = 42,
window_rf = 43,
window_rr = 45,
window_lr = 44,
window_lm = 46,
window_rm = 47,
hub_lf = 30,
hub_rf = 31,
windscreen_r = 41,
neon_l = 120,
neon_r = 121,
neon_f = 122,
neon_b = 123,
door_dside_f = 3,
door_dside_r = 4,
door_pside_f = 5,
door_pside_r = 6,
bobble_head = 377,
bobble_base = 378,
bobble_hand = 379,
engineblock = 380,
spoiler = 381,
mod_a = 493,
mod_b = 494,
mod_c = 495,
mod_d = 496,
mod_e = 497,
mod_f = 498,
mod_g = 499,
mod_h = 500,
mod_i = 501,
mod_j = 502,
mod_k = 503,
mod_l = 504,
mod_m = 505,
mod_n = 506,
mod_o = 507,
mod_p = 508,
mod_q = 509,
mod_r = 510,
mod_s = 511,
mod_t = 512,
mod_u = 513,
mod_v = 514,
mod_w = 515,
mod_x = 516,
mod_y = 517,
mod_z = 518,
mod_aa = 519,
mod_ab = 520,
mod_ac = 521,
mod_ad = 522,
mod_ae = 523,
mod_af = 524,
mod_ag = 525,
mod_ah = 526,
mod_ai = 527,
mod_aj = 528,
mod_ak = 529,
turret_a1 = 530,
turret_a2 = 531,
turret_a3 = 532,
turret_a4 = 533,
turret_b1 = 543,
turret_b2 = 544,
turret_b3 = 545,
turret_b4 = 546,
rblade_1mod = 579,
rblade_1fast = 580,
rblade_2mod = 581,
rblade_2fast = 582,
rblade_3mod = 583,
rblade_3fast = 584,
fblade_1mod = 585,
fblade_1fast = 586,
fblade_2mod = 587,
fblade_2fast = 588,
fblade_3mod = 589,
fblade_3fast = 590,
sblade_1mod = 591,
sblade_1_lfast = 592,
sblade_1_rfast = 593,
sblade_2mod = 594,
sblade_2_1fast = 595,
sblade_2_1fast_ = 596,
sblade_3mod = 597,
sblade_3_lfast = 598,
sblade_3_rfast = 599,
spike_1mod = 600,
spike_1ped_col = 601,
spike1car_col = 602,
spike_2mod = 603,
spike_2ped_col = 604,
spike_2car_col = 605,
spike_3mod = 606,
spike_3ped_col = 607,
spike_3car_col = 608,
scoop_1mod = 609,
scoop_2mod = 610,
scoop_3mod = 611,
ramp_1mod = 612,
ramp_2mod = 613,
ramp_3mod = 614,
spike_1modf = 615,
spike_2modf = 616,
spike_3modf = 617,
ram_1modf = 618,
ram_2modf = 619,
ram_3modf = 620,
ram_4modf = 621,
miscwobble_1 = 622,
miscwobble_2 = 623,
miscwobble_3 = 624,
miscwobble_4 = 625,
miscwobble_5 = 626,
miscwobble_6 = 627,
miscwobble_7 = 628,
miscwobble_8 = 629,
supercharger_1 = 630,
supercharger_2 = 631,
supercharger_3 = 632,
reversinglight_l = 118,
reversinglight_r = 119,
}
}
[StructLayout(LayoutKind.Explicit, Size = 0x20)]
public struct CVehicleModLink
{
[FieldOffset(0x10)] public uint modelName;
[FieldOffset(0x14)] public CVehicleModVisible.eVehicleModBone bone;
[FieldOffset(0x18), MarshalAs(UnmanagedType.I1)] public bool turnOffExtra;
}
public enum eModKitType : int
{
MKT_STANDARD = 0,
MKT_SPORT = 1,
MKT_SUV = 2,
MKT_SPECIAL = 3,
}
public enum eVehicleModType
{
VMT_SPOILER = 0,
VMT_BUMPER_F = 1,
VMT_BUMPER_R = 2,
VMT_SKIRT = 3,
VMT_EXHAUST = 4,
VMT_CHASSIS = 5,
VMT_GRILL = 6,
VMT_BONNET = 7,
VMT_WING_L = 8,
VMT_WING_R = 9,
VMT_ROOF = 10,
VMT_PLTHOLDER = 11,
VMT_PLTVANITY = 12,
VMT_INTERIOR1 = 13,
VMT_INTERIOR2 = 14,
VMT_INTERIOR3 = 15,
VMT_INTERIOR4 = 16,
VMT_INTERIOR5 = 17,
VMT_SEATS = 18,
VMT_STEERING = 19,
VMT_KNOB = 20,
VMT_PLAQUE = 21,
VMT_ICE = 22,
VMT_TRUNK = 23,
VMT_HYDRO = 24,
VMT_ENGINEBAY1 = 25,
VMT_ENGINEBAY2 = 26,
VMT_ENGINEBAY3 = 27,
VMT_CHASSIS2 = 28,
VMT_CHASSIS3 = 29,
VMT_CHASSIS4 = 30,
VMT_CHASSIS5 = 31,
VMT_DOOR_L = 32,
VMT_DOOR_R = 33,
VMT_LIVERY_MOD = 34,
VMT_LIGHTBAR = 35,
VMT_ENGINE = 36,
VMT_BRAKES = 37,
VMT_GEARBOX = 38,
VMT_HORN = 39,
VMT_SUSPENSION = 40,
VMT_ARMOUR = 41,
VMT_NITROUS = 42,
VMT_TURBO = 43,
VMT_SUBWOOFER = 44,
VMT_TYRE_SMOKE = 45,
VMT_HYDRAULICS = 46,
VMT_XENON_LIGHTS = 47,
VMT_WHEELS = 48,
VMT_WHEELS_REAR_OR_HYDRAULICS = 49,
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment