import type { Entity } from '../classes/Entity'; import type { PropSet } from '../classes/PropSet'; import type { Vehicle } from '../classes/Vehicle'; import { Vector2 } from '../types/Vector2'; import { Vector3 } from '../types/Vector3'; import { Vector4 } from '../types/Vector4'; import { Color } from '../types/Color'; import { createFromHandle } from '../types/HandleRegistry'; import { inv, rai, raf, ras, rav, pvi, pvf, pvv, pvii, pvfi, _h, f, int, uint, float, Hash, u8, u16, u32, u64, i8, i16, i32, i64 } from '../types/NativeAliases'; export class Propset { /** * @param vehicle * @returns */ static doesVehicleHaveAnyLightPropSet(vehicle: Vehicle): boolean { return !!inv('0xC9B4B3A36F81FD75', vehicle.handle, rai()); } /** * Same as _CREATE_PROP_SET * * @param propsetType * @param pos * @param placementType * @param heading * @param zProbe * @param p7 * @param useVegMod * @returns */ static createPropSet2(propsetType: string | number, pos: Vector3, placementType: int, heading: float, zProbe: float, p7: boolean, useVegMod: boolean): PropSet | null { return createFromHandle('PropSet', inv('0x899C97A1CCE7D483', _h(propsetType), f(pos.x), f(pos.y), f(pos.z), placementType, f(heading), f(zProbe), p7, useVegMod, rai())); } /** * @param vehicle * @returns */ static isVehiclePropSetLoadedAdditional(vehicle: Vehicle): boolean { return !!inv('0x7264F9CA87A9830B', vehicle.handle, rai()); } /** * @param propSet * @param coords * @param onGroundProperly * @param heading */ static modifyPropsetCoordsAndHeading(propSet: int, coords: Vector3, onGroundProperly: boolean, heading: float): void { inv('0xC4B67EF3FD65622D', propSet, f(coords.x), f(coords.y), f(coords.z), onGroundProperly, f(heading)); } /** * https://github.com/femga/rdr3_discoveries/blob/master/vehicles/vehicle_modding/vehicle_propsets.lua * * @param vehicle * @param propset */ static addAdditionalPropSetForVehicle(vehicle: Vehicle, propset: string | number): void { inv('0x75F90E4051CC084C', vehicle.handle, _h(propset)); } /** * @param vehicle * @returns */ static getVehiclePropSet(vehicle: Vehicle): PropSet | null { return createFromHandle('PropSet', inv('0xCE2ACD6F602803E5', vehicle.handle, rai())); } /** * @param p0 */ static N_0x58E0B01D45CA7357(p0: any): void { inv('0x58E0B01D45CA7357', p0); } /** * @param hash * @returns */ static hasPropSetLoaded(hash: string | number): any { return inv('0x48A88FC684C55FDC', _h(hash)); } /** * @param vehicle * @returns */ static doesVehicleHaveAnyPropSet(vehicle: Vehicle): boolean { return !!inv('0x53784CEA0159439B', vehicle.handle, rai()); } /** * Example before/after deleting a train carriage's propset: https://imgur.com/a/qRNrIrK * * @param trainCarriage * @returns */ static getTrainCarriagePropSet(trainCarriage: Entity): PropSet | null { return createFromHandle('PropSet', inv('0xCFC0BD09BB1B73FF', trainCarriage.handle, rai())); } /** * @param vehicle * @returns */ static getVehiclePropSetHash(vehicle: Vehicle): number { return (inv('0x36F69E7A22655653', vehicle.handle, rai())) & 0xFFFFFFFF; } /** * @param vehicle * @returns */ static isVehicleLightPropSetLoaded(vehicle: Vehicle): boolean { return !!inv('0x0790473EEE1977D3', vehicle.handle, rai()); } /** * @param hash * @returns */ static releasePropSet(hash: string | number): any { return inv('0xB1964A83B345B4AB', _h(hash)); } /** * @param propsetHash * @param pos * @returns */ static getPropSetAtCoords(propsetHash: string | number, pos: Vector3): PropSet | null { return createFromHandle('PropSet', inv('0xC061E50F8D299F95', _h(propsetHash), f(pos.x), f(pos.y), f(pos.z), rai())); } /** * @param vehicle * @returns */ static isVehiclePropSetLoaded(vehicle: Vehicle): boolean { return !!inv('0x155B2FBE72D7D1D0', vehicle.handle, rai()); } /** * @param vehicle * @param wagonIndex * @returns */ static hasVehicleTrailerPropSetLoaded(vehicle: Vehicle, wagonIndex: int): any { return inv('0x8F3333F0A6900B3C', vehicle.handle, wagonIndex); } /** * Returns PropSet handle to be used with _GET_PROP_SET_MODEL * * @param vehicle * @returns */ static getVehicleLightPropSet(vehicle: Vehicle): PropSet | null { return createFromHandle('PropSet', inv('0xA079300AF757FB1A', vehicle.handle, rai())); } /** * List of vehicle propsets (wagons & trains): https://pastebin.com/1CsnvGLu / https://pastebin.com/v7TtqTgE * * @param vehicle * @param propset */ static addPropSetForVehicle(vehicle: Vehicle, propset: string | number): void { inv('0xD80FAF919A2E56EA', vehicle.handle, _h(propset)); } /** * Same as _REQUEST_PROP_SET * * @param hash * @returns */ static requestPropSet2(hash: string | number): any { return inv('0xE72F591958F3ACAB', _h(hash)); } /** * To remove propsets either parse a zero as hash or call 0xE31C0CB1C3186D40 * 0xA6A9712955F53D9C returns lightPropset Hashes * https://github.com/femga/rdr3_discoveries/blob/master/vehicles/vehicle_modding/vehicle_lantern_propsets.lua * * @param vehicle * @param lightPropset */ static addLightPropSetToVehicle(vehicle: Vehicle, lightPropset: string | number): void { inv('0xC0F0417A90402742', vehicle.handle, _h(lightPropset)); } /** * @param propsetHash * @param pos * @returns */ static doesPropSetOfTypeExistNearCoords(propsetHash: string | number, pos: Vector3): boolean { return !!inv('0x72068021F498E6E3', _h(propsetHash), f(pos.x), f(pos.y), f(pos.z), rai()); } /** * Same as _HAS_PROP_SET_LOADED * * @param hash * @returns */ static hasPropSetLoaded2(hash: string | number): any { return inv('0xD090ABEF4D6A7D96', _h(hash)); } /** * Same as CREATE_PROP_SET_INSTANCE_ATTACHED_TO_ENTITY * * @param hash * @param pos * @param entity * @param p5 * @param p6 * @param p7 * @param p8 * @returns */ static createPropSetInstanceAttachedToEntity2(hash: string | number, pos: Vector3, entity: Entity, p5: float, p6: boolean, p7: int, p8: boolean): PropSet | null { return createFromHandle('PropSet', inv('0xACA7FB30269096D4', _h(hash), f(pos.x), f(pos.y), f(pos.z), entity.handle, f(p5), p6, p7, p8, rai())); } /** * propsetType: https://github.com/femga/rdr3_discoveries/blob/master/objects/propsets_list.lua * placementType: https://github.com/Halen84/RDR3-Native-Flags-And-Enums/tree/main/PlacementType * * @param propsetType * @param pos * @param placementType * @param heading * @param zProbe * @param p7 * @param useVegMod * @returns */ static createPropSet(propsetType: string | number, pos: Vector3, placementType: int, heading: float, zProbe: float, p7: boolean, useVegMod: boolean): PropSet | null { return createFromHandle('PropSet', inv('0xE65C5CBA95F0E510', _h(propsetType), f(pos.x), f(pos.y), f(pos.z), placementType, f(heading), f(zProbe), p7, useVegMod, rai())); } /** * @param vehicle */ static removeVehicleLightPropSets(vehicle: Vehicle): void { inv('0xE31C0CB1C3186D40', vehicle.handle); } /** * @param vehicle */ static removeVehiclePropSets(vehicle: Vehicle): void { inv('0x3BCF32FF37EA9F1D', vehicle.handle); } /** * @param hash * @returns */ static requestPropSet(hash: string | number): any { return inv('0xF3DE57A46D5585E9', _h(hash)); } /** * @param hash * @param pos * @param entity * @param p5 * @param p6 * @param p7 * @param p8 * @returns */ static createPropSetInstanceAttachedToEntity(hash: string | number, pos: Vector3, entity: Entity, p5: float, p6: boolean, p7: int, p8: boolean): PropSet | null { return createFromHandle('PropSet', inv('0x9609DBDDE18FAD8C', _h(hash), f(pos.x), f(pos.y), f(pos.z), entity.handle, f(p5), p6, p7, p8, rai())); } }