// CFX runtime globals - these are provided by the FiveM/RedM runtime declare const Citizen: { invokeNative(hash: string, ...args: any[]): T; resultAsInteger(): any; resultAsFloat(): any; resultAsString(): any; resultAsVector(): any; pointerValueInt(): any; pointerValueFloat(): any; pointerValueVector(): any; pointerValueIntInitialized(value: number): any; pointerValueFloatInitialized(value: number): any; }; // GetHashKey accepts string|number since hashes can be pre-computed declare function GetHashKey(str: string | number): number; // Native invoke wrapper - can be overridden for logging/debugging type InvokeFn = (hash: string, ...args: any[]) => T; let _inv: InvokeFn = Citizen.invokeNative; export const inv = (hash: string, ...args: any[]): T => _inv(hash, ...args); export const setInvokeNative = (fn: InvokeFn) => { _inv = fn; }; export const rai = Citizen.resultAsInteger; export const raf = Citizen.resultAsFloat; export const ras = Citizen.resultAsString; export const rav = Citizen.resultAsVector; export const pvi = Citizen.pointerValueInt; export const pvf = Citizen.pointerValueFloat; export const pvv = Citizen.pointerValueVector; export const pvii = Citizen.pointerValueIntInitialized; export const pvfi = Citizen.pointerValueFloatInitialized; export const _h = typeof GetHashKey !== 'undefined' ? GetHashKey : (s: string | number) => typeof s === 'number' ? s : 0; export const f = (n: number) => n + 0.00000001; // Primitive type aliases - all are numbers at runtime but help document expected types export type int = number; export type uint = number; export type float = number; export type Hash = string | number; export type u8 = number; export type u16 = number; export type u32 = number; export type u64 = number; export type i8 = number; export type i16 = number; export type i32 = number; export type i64 = number; // Non-class handle type aliases (these are just numbers at runtime) export type ScrHandle = number; export type Prompt = number; export type FireId = number; export type Blip = number; export type PopZone = number; export type PedGroup = number;