import type { eExplosionTag } from '../enums/eExplosionTag'; import type { Entity } from '../classes/Entity'; import type { Ped } from '../classes/Ped'; import type { Volume } from '../classes/Volume'; import type { FireId } from '../types/NativeAliases'; 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 Fire { /** * @param entity * @returns */ static isEntityOnFire(entity: Entity): boolean { return !!inv('0x1BD7C371CE257C3E', entity.handle, rai()); } /** * @param pos * @param rot * @param scale */ static stopFireInBox(pos: Vector3, rot: Vector3, scale: Vector3): void { inv('0xB7C7BDC375AEA9A4', f(pos.x), f(pos.y), f(pos.z), f(rot.x), f(rot.y), f(rot.z), f(scale.x), f(scale.y), f(scale.z)); } /** * @param explosionType Refer to {@link eExplosionTag} * @param volume * @returns */ static isExplosionInVolume(explosionType: eExplosionTag, volume: Volume): boolean { return !!inv('0xE24822A4CFC9107A', explosionType, volume.handle, rai()); } /** * @param p0 * @param p1 */ static stopEntityFire(p0: any, p1: any): void { inv('0x8390751DC40C1E98', p0, p1); } /** * @param pos * @param radius */ static stopFireInRange(pos: Vector3, radius: float): void { inv('0xDB38F247BD421708', f(pos.x), f(pos.y), f(pos.z), f(radius)); } /** * @param p0 */ static N_0x754937C28271BC65(p0: any): void { inv('0x754937C28271BC65', p0); } /** * @param explosionType Refer to {@link eExplosionTag} * @param pos1 * @param pos2 * @returns */ static isExplosionInArea(explosionType: eExplosionTag, pos1: Vector3, pos2: Vector3): boolean { return !!inv('0x8391BA4313A25AD3', explosionType, f(pos1.x), f(pos1.y), f(pos1.z), f(pos2.x), f(pos2.y), f(pos2.z), rai()); } /** * explosionType: see ADD_EXPLOSION * * @param explosionType Refer to {@link eExplosionTag} * @param pos * @param radius * @returns */ static isExplosionInSphere(explosionType: eExplosionTag, pos: Vector3, radius: float): boolean { return !!inv('0xD62DD846D82CBB90', explosionType, f(pos.x), f(pos.y), f(pos.z), f(radius), rai()); } /** * @param entity * @returns */ static isEntityConsumedByFire(entity: Entity): boolean { return !!inv('0xCDC25355C0D65963', entity.handle, rai()); } /** * Add explosion with and assign an entity as damage causer. * explosionType: https://github.com/femga/rdr3_discoveries/blob/master/graphics/explosions/README.md * * @param entity * @param p1 * @param pos * @param explosionType Refer to {@link eExplosionTag} * @param damageScale * @param isAudible * @param isInvisible * @param cameraShake */ static addExplosionWithDamageCauser(entity: Entity, p1: int, pos: Vector3, explosionType: eExplosionTag, damageScale: float, isAudible: boolean, isInvisible: boolean, cameraShake: float): void { inv('0xB7DF150605EEDC9B', entity.handle, p1, f(pos.x), f(pos.y), f(pos.z), explosionType, f(damageScale), isAudible, isInvisible, f(cameraShake)); } /** * Add explosion with vfx and assign an entity as damage causer. * explosionType: https://github.com/femga/rdr3_discoveries/blob/master/graphics/explosions/README.md * explosionFx: https://github.com/femga/rdr3_discoveries/blob/master/graphics/explosions/explosion_vfxTags.lua * * @param entity * @param p1 * @param pos * @param explosionType Refer to {@link eExplosionTag} * @param explosionFx * @param damageScale * @param isAudible * @param isInvisible * @param cameraShake */ static addExplosionWithUserVfxAndDamageCauser(entity: Entity, p1: boolean, pos: Vector3, explosionType: eExplosionTag, explosionFx: string | number, damageScale: float, isAudible: boolean, isInvisible: boolean, cameraShake: float): void { inv('0x34AE85C7CA4857AA', entity.handle, p1, f(pos.x), f(pos.y), f(pos.z), explosionType, _h(explosionFx), f(damageScale), isAudible, isInvisible, f(cameraShake)); } /** * @param explosionType Refer to {@link eExplosionTag} * @param pos1 * @param pos2 * @returns */ static isExplosionActiveInArea(explosionType: eExplosionTag, pos1: Vector3, pos2: Vector3): boolean { return !!inv('0xD96E82AEBFFAAFF0', explosionType, f(pos1.x), f(pos1.y), f(pos1.z), f(pos2.x), f(pos2.y), f(pos2.z), rai()); } /** * this natives only returns true if entity is damaged by fire , once damaged caused to entity by fire (like burned appearance) has cleared (they clear over time) then returns false * * @param entity * @returns */ static isEntityDamagedByFire(entity: Entity): boolean { return !!inv('0xA4454592DCF7C992', entity.handle, rai()); } /** * @param ped * @param pos * @param explosionType Refer to {@link eExplosionTag} * @param damageScale * @param isAudible * @param isInvisible * @param cameraShake */ static addOwnedExplosion(ped: Ped, pos: Vector3, explosionType: eExplosionTag, damageScale: float, isAudible: boolean, isInvisible: boolean, cameraShake: float): void { inv('0xD84A917A64D4D016', ped.handle, f(pos.x), f(pos.y), f(pos.z), explosionType, f(damageScale), isAudible, isInvisible, f(cameraShake)); } /** * Only used in R* SP Related Camp Scripts * * @param p0 */ static N_0x24DB6B9F2B719043(p0: float): void { inv('0x24DB6B9F2B719043', f(p0)); } /** * https://github.com/femga/rdr3_discoveries/tree/master/graphics/explosions * * @param pos * @param explosionType Refer to {@link eExplosionTag} * @param damageScale * @param isAudible * @param isInvisible * @param cameraShake */ static addExplosion(pos: Vector3, explosionType: eExplosionTag, damageScale: float, isAudible: boolean, isInvisible: boolean, cameraShake: float): void { inv('0x7D6F58F69DA92530', f(pos.x), f(pos.y), f(pos.z), explosionType, f(damageScale), isAudible, isInvisible, f(cameraShake)); } /** * @param p0 * @param p1 * @param p2 * @param p3 * @param p4 * @param p5 * @param p6 * @param p7 * @param p8 * @param p9 * @returns */ static N_0x41B87A6495EE13DD(p0: any, p1: any, p2: any, p3: any, p4: any, p5: any, p6: any, p7: any, p8: any, p9: any): any { return inv('0x41B87A6495EE13DD', p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); } /** * explosionType: see ADD_EXPLOSION * Change explosionFx (Visual Effect) for specified explosionType * * @param pos * @param explosionType Refer to {@link eExplosionTag} * @param explosionFx * @param damageScale * @param isAudible * @param isInvisible * @param cameraShake */ static addExplosionWithUserVfx(pos: Vector3, explosionType: eExplosionTag, explosionFx: string | number, damageScale: float, isAudible: boolean, isInvisible: boolean, cameraShake: float): void { inv('0x53BA259F3A67A99E', f(pos.x), f(pos.y), f(pos.z), explosionType, _h(explosionFx), f(damageScale), isAudible, isInvisible, f(cameraShake)); } /** * Tested with fire & dynamite. Only returns true using value p1 = 1 and when the ped is affected by fire. * * @param ped * @param p1 * @returns */ static isPedShockingEventActive(ped: Ped, p1: int): boolean { return !!inv('0xAB7993BA61A4674F', ped.handle, p1, rai()); } /** * @param pos * @param p3 */ static N_0x68F6A75FDF5A70D6(pos: Vector3, p3: float): void { inv('0x68F6A75FDF5A70D6', f(pos.x), f(pos.y), f(pos.z), f(p3)); } /** * @param p0 * @param p1 * @param p2 * @param p3 */ static startEntityFire(p0: any, p1: any, p2: any, p3: any): void { inv('0xC4DC7418A44D6822', p0, p1, p2, p3); } /** * @param pos * @returns outPosition */ static getClosestFirePos(pos: Vector3): [boolean, Vector3] { const result = inv<[boolean, number[]]>('0xB646FB657F448261', pvv(), f(pos.x), f(pos.y), f(pos.z), rai()); return [!!result[0], Vector3.fromArray(result[1])]; } /** * explosionType: see ADD_EXPLOSION * * @param explosionType Refer to {@link eExplosionTag} * @param pos1 * @param pos2 * @param radius * @returns */ static getOwnerOfExplosionInAngledArea(explosionType: eExplosionTag, pos1: Vector3, pos2: Vector3, radius: float): Entity | null { return createFromHandle('Entity', inv('0x8002DDAB58594D78', explosionType, f(pos1.x), f(pos1.y), f(pos1.z), f(pos2.x), f(pos2.y), f(pos2.z), f(radius), rai())); } /** * @param pos * @param rot * @param scale * @returns outPosition */ static getClosestFirePosInVolume(pos: Vector3, rot: Vector3, scale: Vector3): [any, Vector3] { const result = inv<[number, number[]]>('0x559FC1D310813031', pvv(), f(pos.x), f(pos.y), f(pos.z), f(rot.x), f(rot.y), f(rot.z), f(scale.x), f(scale.y), f(scale.z)); return [result[0], Vector3.fromArray(result[1])]; } /** * @param pos * @param radius * @returns */ static getNumberOfFiresInRange(pos: Vector3, radius: float): int { return inv('0xF9617BC6FAE61E08', f(pos.x), f(pos.y), f(pos.z), f(radius), rai()); } /** * @param fireHandle */ static removeScriptFire(fireHandle: number): void { inv('0x790125C36E194069', fireHandle); } /** * @param explosionType Refer to {@link eExplosionTag} * @param pos1 * @param pos2 * @param angle * @returns */ static isExplosionInAngledArea(explosionType: eExplosionTag, pos1: Vector3, pos2: Vector3, angle: float): boolean { return !!inv('0x5AE661ECD18524C9', explosionType, f(pos1.x), f(pos1.y), f(pos1.z), f(pos2.x), f(pos2.y), f(pos2.z), f(angle), rai()); } /** * Starts a fire: xyz: Location of fire * maxChildren: The max amount of times a fire can spread to other objects. Must be 25 or less, or the function will do nothing. * isGasFire: Whether or not the fire is powered by gasoline. * * @param pos * @param p3 * @param p4 * @param p5 * @param soundsetName * @param p7 * @param p8 * @returns */ static startScriptFire(pos: Vector3, p3: int, p4: float, p5: boolean, soundsetName: string, p7: float, p8: int): number { return inv('0x6B83617E04503888', f(pos.x), f(pos.y), f(pos.z), p3, f(p4), p5, soundsetName, f(p7), p8, rai()); } }