Created
July 22, 2021 18:05
-
-
Save alexguirre/b9ca4f50ac79409034eeb3e34e04832b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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