import type { eVehicleSeat } from '../enums/eVehicleSeat'; import type { Entity } from '../classes/Entity'; import type { Ped } from '../classes/Ped'; 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 Aitransport { /** * @param ped * @param transportEntity * @returns Returns `true` if the `ped` is sitting in a seat of `transportEntity` */ static isPedOnTransportEntity(ped: Ped, transportEntity: Entity): boolean { return !!inv('0x159EF5B6EDCE00E8', ped.handle, transportEntity.handle, rai()); } /** * flagId: * enum eTransportConfigFlags * { * TCF_NotConsideredForEntryByLocalPlayer, * TCF_0xB78D6624, * TCF_0xA9700425, * TCF_0x8D7E4641, * TCF_0xF24BAA1F, * TCF_0x63B77935, * TCF_NotConsideredForEntryByAllPlayers, * TCF_0xD17A2AFD, * TCF_0xD4E4FDD5, * TCF_0x8227C929, * TCF_0x812C1070, * TCF_0x0E1AB26F, * TCF_0xBF4EC863, * TCF_0x75660C36, * TCF_0xA2539E20, * TCF_0x9162C633, * TCF_DisableHonorModifiers, * TCF_0xF9E71CB6, * TCF_0x933ECD3F, * TCF_0x18513A34 * }; * https://github.com/femga/rdr3_discoveries/tree/master/AI/TRANSPORT_CONFIG_FLAGS * * @param transportEntity * @param flagId * @param value */ static setTransportConfigFlag(transportEntity: Entity, flagId: int, value: boolean): void { inv('0xBA8818212633500A', transportEntity.handle, flagId, value); } /** * Called together with IS_VEHICLE_SEAT_FREE * * @param transportEntity * @param seatIndex Refer to {@link eVehicleSeat} * @returns */ static isTransportSeatFree(transportEntity: Entity, seatIndex: eVehicleSeat): boolean { return !!inv('0x43FF27FC1829C202', transportEntity.handle, seatIndex, rai()); } /** * _CLEAR_A* * * @param transportEntity */ static N_0x5639FBEA922788DA(transportEntity: Entity): void { inv('0x5639FBEA922788DA', transportEntity.handle); } /** * @param transportEntity * @param seatIndex Refer to {@link eVehicleSeat} */ static setTransportPrioritySeat(transportEntity: Entity, seatIndex: eVehicleSeat): void { inv('0x13F138225C202F66', transportEntity.handle, seatIndex); } /** * @param ped * @param p1 * @returns */ static isPedOnTransportSeat(ped: Ped, p1: boolean): boolean { return !!inv('0xDC44F405A6B98D03', ped.handle, p1, rai()); } /** * *SET_TRANSPORT** * * @param transportEntity * @param ped * @param p2 */ static N_0x4248AB2EEB3C75AD(transportEntity: Entity, ped: Ped, p2: boolean): void { inv('0x4248AB2EEB3C75AD', transportEntity.handle, ped.handle, p2); } /** * @param ped * @param transportEntity * @param p2 * @returns */ static isPedEnteringTransport(ped: Ped, transportEntity: Entity, p2: boolean): boolean { return !!inv('0x619E63980BFC0096', ped.handle, transportEntity.handle, p2, rai()); } /** * @param ped * @param flags */ static setPedOffTransportSeat(ped: Ped, flags: int): void { inv('0x8886D83A430537FD', ped.handle, flags); } /** * @param transportEntity * @param seatIndex Refer to {@link eVehicleSeat} * @returns */ static getPedInTransportSeat(transportEntity: Entity, seatIndex: eVehicleSeat): Ped | null { return createFromHandle('Ped', inv('0xFFEC4B0A1A3ED515', transportEntity.handle, seatIndex, rai())); } /** * enum eTransportUsageFlags * { * TUF_INVALID = 0, * TUF_ALLOW_DRIVER_ME = (1 << 0), * TUF_ALLOW_DRIVER_GANG = (1 << 1), * TUF_ALLOW_DRIVER_CREW = (1 << 2), * TUF_ALLOW_DRIVER_FRIENDS = (1 << 3), * TUF_ALLOW_DRIVER_ANYONE = (1 << 4), * TUF_ALLOW_PASSENGER_ME = (1 << 5), * TUF_ALLOW_PASSENGER_GANG = (1 << 6), * TUF_ALLOW_PASSENGER_CREW = (1 << 7), * TUF_ALLOW_PASSENGER_FRIENDS = (1 << 8), * TUF_ALLOW_PASSENGER_ANYONE = (1 << 9), * TUF_ALLOW_ACCESS_AI = (1 << 10) * }; * * @param transportEntity * @param flags */ static setTransportUsageFlags(transportEntity: Entity, flags: int): void { inv('0xE2487779957FE897', transportEntity.handle, flags); } /** * flagId: see SET_TRANSPORT_CONFIG_FLAG * * @param transportEntity * @param flagId * @param p2 * @returns */ static getTransportConfigFlag(transportEntity: Entity, flagId: int, p2: boolean): any { return inv('0xF382C92CCC1CCDBC', transportEntity.handle, flagId, p2); } /** * *SET_TRANSPORT** * * @param ped * @param p1 */ static N_0x8C8371EDFAF014A0(ped: Ped, p1: float): void { inv('0x8C8371EDFAF014A0', ped.handle, f(p1)); } /** * @param ped * @param transportEntity * @param seatIndex Refer to {@link eVehicleSeat} * @param flags */ static setPedOnTransportSeat(ped: Ped, transportEntity: Entity, seatIndex: eVehicleSeat, flags: int): void { inv('0xE588B5A8A005CB5E', ped.handle, transportEntity.handle, seatIndex, flags); } /** * @param transportEntity * @param flags */ static setTransportAccessibleSeatFlags(transportEntity: Entity, flags: int): void { inv('0xDD0660C997DE94FD', transportEntity.handle, flags); } /** * @param transportEntity * @param state */ static setAiCanUseTransport(transportEntity: Entity, state: boolean): void { inv('0x67F7CEAC2391E114', transportEntity.handle, state); } /** * *SET_TRANSPORT** * * @param ped */ static N_0xF8C20282B237E3F7(ped: Ped): void { inv('0xF8C20282B237E3F7', ped.handle); } /** * @param ped * @param transportEntity * @param preferenceSlot * @param p3 * @param seatIndex Refer to {@link eVehicleSeat} */ static setPedUseTransportSeatPreference(ped: Ped, transportEntity: Entity, preferenceSlot: int, p3: int, seatIndex: eVehicleSeat): void { inv('0xB7079F4C72896756', ped.handle, transportEntity.handle, preferenceSlot, p3, seatIndex); } /** * @param transportEntity * @param seatIndex Refer to {@link eVehicleSeat} * @returns Returns `true` if there is an entity is in `seatIndex` */ static isTransportSeatOccupied(transportEntity: Entity, seatIndex: eVehicleSeat): boolean { return !!inv('0x2E2E06023D07631E', transportEntity.handle, seatIndex, rai()); } /** * @returns args */ static taskExitTransport(): number { const result = inv('0xC273A5B8488F7838', pvi()); return result; } /** * @returns args */ static taskEnterTransport(): number { const result = inv('0xAEE3ADD08829CB6F', pvi()); return result; } /** * @param ped * @param transportEntity * @returns */ static isPedExitingTransport(ped: Ped, transportEntity: Entity): boolean { return !!inv('0x660639BC60157048', ped.handle, transportEntity.handle, rai()); } /** * @param p0 * @param p1 */ static N_0x4B6C9A43F7D9109B(p0: any, p1: any): void { inv('0x4B6C9A43F7D9109B', p0, p1); } /** * See _SET_TRANSPORT_USAGE_FLAGS * * @param transportEntity * @returns flags */ static getTransportUsageFlags(transportEntity: Entity): [any, number] { const result = inv<[number, number]>('0xE195C5A82156321D', transportEntity.handle, pvi()); return [result[0], result[1]]; } }