import type { Entity } from '../classes/Entity'; import type { Ped } from '../classes/Ped'; import type { Prop } from '../classes/Prop'; import type { Volume } from '../classes/Volume'; import type { ScrHandle } 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 Event { /** * Only used in R* SP Script beat_rat_infestation and homeinvasion * * @param volume * @param p1 * @param p2 * @returns */ static N_0x18E93EBFC1FCFA48(volume: Volume, p1: boolean, p2: boolean): any { return inv('0x18E93EBFC1FCFA48', volume.handle, p1, p2); } /** * @param pos * @param radius * @param p4 */ static removeAllShockingEventsInArea(pos: Vector3, radius: float, p4: boolean): void { inv('0xB4C71BA9CAB097BD', f(pos.x), f(pos.y), f(pos.z), f(radius), p4); } /** * _S* (_SUPPRESS_EVENTS_NEXT_FRAME?) */ static N_0xB6F4825153920582(): void { inv('0xB6F4825153920582'); } static removeShockingEventSpawnBlockingAreas(): void { inv('0xDB249021652420C5'); } /** * Only used in R* SP Scripts * Hash only used in R* Script mob3.ysc: ROBBERY * _ADD_PED* * * @param ped1 * @param ped2 * @param p2 * @param p3 */ static N_0x7C511E91738A0828(ped1: Ped, ped2: Ped, p2: int, p3: string | number): void { inv('0x7C511E91738A0828', ped1.handle, ped2.handle, p2, _h(p3)); } /** * Returns eventType * * @param entity * @param p1 * @param p2 * @returns */ static getRecentEvent(entity: Entity, p1: int, p2: int): number { return (inv('0x796EECFF0C6D39BE', entity.handle, p1, p2, rai())) & 0xFFFFFFFF; } /** * HAS_ACTOR_RECEIVED_TRACKED_EVENT_THAT_SHOULD_ALERT - iTimeSinceEvent >= iTimeLimitMS * * @param entity * @param eventType * @param p2 */ static N_0xE28D7FC9FD32ABEB(entity: Entity, eventType: string | number, p2: int): void { inv('0xE28D7FC9FD32ABEB', entity.handle, _h(eventType), p2); } /** * @param eventName * @param shockingEvent * @returns */ static isEventTrackerActive(eventName: string, shockingEvent: string | number): boolean { return !!inv('0x797B3D4D92E56094', eventName, _h(shockingEvent), rai()); } /** * @param object */ static N_0xA86B0EE9B39D15D6(object: Prop): void { inv('0xA86B0EE9B39D15D6', object.handle); } /** * @param ped */ static flushAllEventTrackers(ped: Ped): void { inv('0xAD8F2424C6E1E3A8', ped.handle); } /** * @param object * @param p1 * @param p2 * @returns */ static N_0x2DD42FAD06E6F19E(object: Prop, p1: boolean, p2: boolean): any { return inv('0x2DD42FAD06E6F19E', object.handle, p1, p2); } /** * @param event * @returns */ static removeShockingEvent(event: number): boolean { return !!inv('0xE8BB3CC253A34559', event, rai()); } /** * @param entity * @param eventType * @param p2 * @param p3 * @returns */ static getSourceEntityFromEvent(entity: Entity, eventType: string | number, p2: int, p3: int): Entity | null { return createFromHandle('Entity', inv('0x822A001BCEA5BD81', entity.handle, _h(eventType), p2, p3, rai())); } /** * Models used in the scripts: P_REGISTER05X, P_REGISTER06X, P_REGISTER03X, PLAYER_ZERO, PLAYER_THREE, A_C_HORSE_MORGAN_FLAXENCHESTNUT * * @param model * @param p1 * @param p2 */ static addModelToEventMonitor(model: string | number, p1: boolean, p2: boolean): void { inv('0x608AD36A644A97FE', _h(model), p1, p2); } /** * Might return time since some (?) event. * * @param entity * @param p1 * @param p2 * @returns */ static N_0xAD17A18215DD23D6(entity: Entity, p1: int, p2: int): int { return inv('0xAD17A18215DD23D6', entity.handle, p1, p2, rai()); } /** * @param ped * @param name */ static setDecisionMaker(ped: Ped, name: string | number): void { inv('0x8AE2F981CDDB8FA4', ped.handle, _h(name)); } /** * _GET* * * @param entity * @param p1 * @returns */ static N_0x83D43F0FD5276E4D(entity: Entity, p1: int): any { return inv('0x83D43F0FD5276E4D', entity.handle, p1); } /** * Only used in R* SP Script coachrobberies * _SET_S* * * @param p0 */ static N_0x4B2B1A891D437CA7(p0: float): void { inv('0x4B2B1A891D437CA7', f(p0)); } /** * @returns args */ static createShockingEvent(): [number, number] { const result = inv<[number, number]>('0xCA1315C33B9A2847', pvi(), rai()); return [result[0], result[1]]; } /** * _SET_P* * * @param ped * @param p1 */ static N_0x9520175B35E2268D(ped: Ped, p1: boolean): void { inv('0x9520175B35E2268D', ped.handle, p1); } /** * Only used in R* SP Script beat_rat_infestation * Params: p0 = value returned by 0x18E93EBFC1FCFA48 * * @param p0 */ static N_0x56B3410626A473E7(p0: any): void { inv('0x56B3410626A473E7', p0); } /** * @param ped * @param eventName * @param p2 */ static setEventTrackerForPed(ped: Ped, eventName: string, p2: int): void { inv('0xBB1E41DD3D3C6250', ped.handle, eventName, p2); } static N_0xE2C2FBB7825FFC66(): void { inv('0xE2C2FBB7825FFC66'); } /** * @param entity * @param eventType * @param p2 * @param p3 * @returns */ static getTargetEntityFromEvent(entity: Entity, eventType: string | number, p2: int, p3: int): Entity | null { return createFromHandle('Entity', inv('0x38497F139981C5C9', entity.handle, _h(eventType), p2, p3, rai())); } /** * eventType: https://alloc8or.re/rdr3/doc/enums/eEventType.txt * * @param eventType * @param pos * @param radius * @param p5 */ static removeAllShockingEventsOfTypeInArea(eventType: string | number, pos: Vector3, radius: float, p5: boolean): void { inv('0x6A648D42BF271DC7', _h(eventType), f(pos.x), f(pos.y), f(pos.z), f(radius), p5); } /** * @param object * @returns */ static N_0x26054EB81AC0893B(object: Prop): boolean { return !!inv('0x26054EB81AC0893B', object.handle, rai()); } /** * eventType: https://alloc8or.re/rdr3/doc/enums/eEventType.txt * https://github.com/femga/rdr3_discoveries/blob/master/AI/EVENTS * * @param eventType * @param pos * @param p4 * @param p5 * @param p6 * @param p7 * @param p8 * @param p9 * @param p10 * @returns */ static addShockingEventAtPosition(eventType: string | number, pos: Vector3, p4: float, p5: float, p6: float, p7: float, p8: float, p9: int, p10: int): number { return inv('0xD9F8455409B525E9', _h(eventType), f(pos.x), f(pos.y), f(pos.z), f(p4), f(p5), f(p6), f(p7), f(p8), p9, p10, rai()); } /** * @param entity * @param eventType * @param p2 * @param p3 * @returns */ static getTimeSinceEvent(entity: Entity, eventType: string | number, p2: int, p3: int): int { return inv('0xC6A7DC546E94FED5', entity.handle, _h(eventType), p2, p3, rai()); } /** * @param p0 */ static removeAllShockingEvents(p0: boolean): void { inv('0xD47A168C2AB90DC4', p0); } /** * @param ped */ static setDecisionMakerToDefault(ped: Ped): void { inv('0x6B9C5C38838FB6E6', ped.handle); } /** * eventType: https://alloc8or.re/rdr3/doc/enums/eEventType.txt * * @param eventType * @param pos * @param radius * @returns */ static isShockingEventInSphere(eventType: string | number, pos: Vector3, radius: float): boolean { return !!inv('0x9DB47E16060D6354', _h(eventType), f(pos.x), f(pos.y), f(pos.z), f(radius), rai()); } /** * eventType: https://alloc8or.re/rdr3/doc/enums/eEventType.txt * * @param eventType * @param scriptCreatedOnly */ static removeAllShockingEventsOfType(eventType: string | number, scriptCreatedOnly: boolean): void { inv('0x118873DD538490B4', _h(eventType), scriptCreatedOnly); } /** * eventType: https://alloc8or.re/rdr3/doc/enums/eEventType.txt * * @param eventType * @param entity * @param p2 * @param p3 * @param p4 * @param p5 * @param p6 * @param p7 * @param p8 * @param p9 * @param p10 * @param p11 * @returns */ static addShockingEventForEntity(eventType: string | number, entity: Entity, p2: float, p3: float, p4: float, p5: float, p6: float, p7: float, p8: boolean, p9: boolean, p10: int, p11: int): number { return inv('0x7FD8F3BE76F89422', _h(eventType), entity.handle, f(p2), f(p3), f(p4), f(p5), f(p6), f(p7), p8, p9, p10, p11, rai()); } /** * AGGRO_CHECK_PROPERTY_DAMAGE: Property damage found with event * * @param ped * @param p1 */ static N_0x1A5C5D350068A673(ped: Ped, p1: int): void { inv('0x1A5C5D350068A673', ped.handle, p1); } /** * @param model */ static N_0x4465C3D1475BD3FD(model: string | number): void { inv('0x4465C3D1475BD3FD', _h(model)); } /** * _ADD* (*ADD_SHOCKING_EVENT** ?) * * @param entity * @param p1 * @returns */ static N_0x36D0F2BA2C0D9BDE(entity: Entity, p1: int): any { return inv('0x36D0F2BA2C0D9BDE', entity.handle, p1); } /** * _GET* * * @param ped * @returns */ static N_0x1D1B448D719415AB(ped: Ped): any { return inv('0x1D1B448D719415AB', ped.handle); } static suppressShockingEventsNextFrame(): void { inv('0x84994FAD4E4E4E69'); } }