@overextended/ox_lib
Advanced tools
@@ -17,2 +17,3 @@ import { __name } from "../../_virtual/_rolldown/runtime.js"; | ||
| defaultKey?: string; | ||
| allowInPauseMenu?: boolean; | ||
| disabled?: boolean; | ||
@@ -19,0 +20,0 @@ disable?(this: CKeybind, toggle: boolean): void; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../../client/addKeybind/index.ts"],"mappings":";;;UAAU,QAAA,SAAiB,YAAY;EACrC,UAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;EACA,aAAA;EACA,gBAAA;AAAA;AAAA,UAGQ,YAAA;EACR,IAAA;EACA,WAAA;EACA,aAAA;EACA,UAAA;EACA,QAAA;EACA,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAA;EACzB,SAAA,EAAW,IAAA,EAAM,QAAA;EACjB,UAAA,EAAY,IAAA,EAAM,QAAA;EAAA,CACjB,GAAA;AAAA;AAAA,iBAqDa,UAAA,CAAW,IAAA,EAAM,YAAA,GAAe,QAAQ;AAAA,iBA4CxC,UAAA,CAAW,IAAA,WAAe,QAAQ;AAAA,iBAIlC,cAAA,CAAA,GAAkB,QAAA,CAAS,MAAA,SAAe,QAAA"} | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../../client/addKeybind/index.ts"],"mappings":";;;UAAU,QAAA,SAAiB,YAAY;EACrC,UAAA;EACA,QAAA;EACA,SAAA;EACA,IAAA;EACA,aAAA;EACA,gBAAA;AAAA;AAAA,UAGQ,YAAA;EACR,IAAA;EACA,WAAA;EACA,aAAA;EACA,UAAA;EACA,gBAAA;EACA,QAAA;EACA,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAA;EACzB,SAAA,EAAW,IAAA,EAAM,QAAA;EACjB,UAAA,EAAY,IAAA,EAAM,QAAA;EAAA,CACjB,GAAA;AAAA;AAAA,iBAwDa,UAAA,CAAW,IAAA,EAAM,YAAA,GAAe,QAAQ;AAAA,iBA4CxC,UAAA,CAAW,IAAA,WAAe,QAAQ;AAAA,iBAIlC,cAAA,CAAA,GAAkB,QAAA,CAAS,MAAA,SAAe,QAAA"} |
@@ -13,2 +13,3 @@ import "../../_virtual/_rolldown/runtime.js"; | ||
| secondaryMapper; | ||
| allowInPauseMenu; | ||
| disabled = false; | ||
@@ -24,2 +25,3 @@ isPressed = false; | ||
| this.secondaryMapper = data.secondaryMapper; | ||
| this.allowInPauseMenu = data.allowInPauseMenu; | ||
| if (typeof data.disabled === "boolean") this.disabled = data.disabled; | ||
@@ -41,2 +43,3 @@ this.onPressed = data.onPressed; | ||
| this.disabled = toggle; | ||
| this.isPressed = false; | ||
| } | ||
@@ -48,3 +51,3 @@ }; | ||
| RegisterCommand("+" + kb.name, () => { | ||
| if (kb.disabled || IsPauseMenuActive()) return; | ||
| if (kb.disabled || !kb.allowInPauseMenu && IsPauseMenuActive()) return; | ||
| kb.isPressed = true; | ||
@@ -54,3 +57,3 @@ kb.onPressed?.call(kb); | ||
| RegisterCommand("-" + kb.name, () => { | ||
| if (kb.disabled || IsPauseMenuActive()) return; | ||
| if (kb.disabled || !kb.allowInPauseMenu && IsPauseMenuActive()) return; | ||
| kb.isPressed = false; | ||
@@ -57,0 +60,0 @@ kb.onReleased?.call(kb); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../client/addKeybind/index.ts"],"sourcesContent":["interface CKeybind extends KeybindProps {\n currentKey: string;\n disabled: boolean;\n isPressed: boolean;\n hash: number;\n getCurrentKey(): string;\n isControlPressed(): boolean;\n}\n\ninterface KeybindProps {\n name: string;\n description: string;\n defaultMapper?: string;\n defaultKey?: string;\n disabled?: boolean;\n disable?(this: CKeybind, toggle: boolean): void;\n onPressed?(this: CKeybind): void;\n onReleased?(this: CKeybind): void;\n [key: string]: any;\n}\n\nconst keybinds: Record<string, CKeybind> = {};\n\nclass Keybind implements CKeybind {\n name: string;\n description: string;\n defaultMapper?: string;\n defaultKey?: string;\n onPressed?: (this: CKeybind) => void;\n onReleased?: (this: CKeybind) => void;\n secondaryKey?: string;\n secondaryMapper?: string;\n [key: string]: any;\n\n disabled: boolean = false;\n isPressed: boolean = false;\n hash: number;\n\n constructor(data: KeybindProps) {\n this.name = data.name;\n this.description = data.description;\n this.defaultMapper = data.defaultMapper ?? 'keyboard';\n this.defaultKey = data.defaultKey ?? '';\n this.secondaryKey = data.secondaryKey;\n this.secondaryMapper = data.secondaryMapper;\n\n if (typeof data.disabled === 'boolean') this.disabled = data.disabled;\n this.onPressed = data.onPressed;\n this.onReleased = data.onReleased;\n\n this.hash = GetHashKey('+' + this.name) | 0x80000000;\n }\n\n get currentKey(): string {\n return this.getCurrentKey();\n }\n\n getCurrentKey(): string {\n const label = GetControlInstructionalButton(0, this.hash, true);\n return label.substring(2);\n }\n\n isControlPressed(): boolean {\n return this.isPressed;\n }\n\n disable(toggle: boolean): void {\n this.disabled = toggle;\n }\n}\n\nexport function addKeybind(data: KeybindProps): CKeybind {\n const kb = new Keybind(data);\n\n keybinds[kb.name] = kb;\n\n RegisterCommand(\n '+' + kb.name,\n () => {\n if (kb.disabled || IsPauseMenuActive()) return;\n kb.isPressed = true;\n kb.onPressed?.call(kb);\n },\n false,\n );\n\n RegisterCommand(\n '-' + kb.name,\n () => {\n if (kb.disabled || IsPauseMenuActive()) return;\n kb.isPressed = false;\n kb.onReleased?.call(kb);\n },\n false,\n );\n\n RegisterKeyMapping('+' + kb.name, kb.description, kb.defaultMapper ?? 'keyboard', kb.defaultKey ?? '');\n\n if (kb.secondaryKey) {\n RegisterKeyMapping(\n '~!+' + kb.name,\n kb.description,\n kb.secondaryMapper ?? kb.defaultMapper ?? 'keyboard',\n kb.secondaryKey,\n );\n }\n\n setTimeout(() => {\n emit('chat:removeSuggestion', `/+${kb.name}`);\n emit('chat:removeSuggestion', `/-${kb.name}`);\n }, 500);\n\n return kb;\n}\n\nexport function getKeybind(name: string): CKeybind | undefined {\n return keybinds[name];\n}\n\nexport function getAllKeybinds(): Readonly<Record<string, CKeybind>> {\n return keybinds;\n}\n"],"mappings":";;AAqBA,MAAM,WAAqC,CAAC;AAE5C,IAAM,UAAN,MAAkC;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA,WAAoB;CACpB,YAAqB;CACrB;CAEA,YAAY,MAAoB;EAC9B,KAAK,OAAO,KAAK;EACjB,KAAK,cAAc,KAAK;EACxB,KAAK,gBAAgB,KAAK,iBAAiB;EAC3C,KAAK,aAAa,KAAK,cAAc;EACrC,KAAK,eAAe,KAAK;EACzB,KAAK,kBAAkB,KAAK;EAE5B,IAAI,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW,KAAK;EAC7D,KAAK,YAAY,KAAK;EACtB,KAAK,aAAa,KAAK;EAEvB,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;CAC5C;CAEA,IAAI,aAAqB;EACvB,OAAO,KAAK,cAAc;CAC5B;CAEA,gBAAwB;EAEtB,OADc,8BAA8B,GAAG,KAAK,MAAM,IAC/C,EAAE,UAAU,CAAC;CAC1B;CAEA,mBAA4B;EAC1B,OAAO,KAAK;CACd;CAEA,QAAQ,QAAuB;EAC7B,KAAK,WAAW;CAClB;AACF;AAEA,SAAgB,WAAW,MAA8B;CACvD,MAAM,KAAK,IAAI,QAAQ,IAAI;CAE3B,SAAS,GAAG,QAAQ;CAEpB,gBACE,MAAM,GAAG,YACH;EACJ,IAAI,GAAG,YAAY,kBAAkB,GAAG;EACxC,GAAG,YAAY;EACf,GAAG,WAAW,KAAK,EAAE;CACvB,GACA,KACF;CAEA,gBACE,MAAM,GAAG,YACH;EACJ,IAAI,GAAG,YAAY,kBAAkB,GAAG;EACxC,GAAG,YAAY;EACf,GAAG,YAAY,KAAK,EAAE;CACxB,GACA,KACF;CAEA,mBAAmB,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,iBAAiB,YAAY,GAAG,cAAc,EAAE;CAErG,IAAI,GAAG,cACL,mBACE,QAAQ,GAAG,MACX,GAAG,aACH,GAAG,mBAAmB,GAAG,iBAAiB,YAC1C,GAAG,YACL;CAGF,iBAAiB;EACf,KAAK,yBAAyB,KAAK,GAAG,MAAM;EAC5C,KAAK,yBAAyB,KAAK,GAAG,MAAM;CAC9C,GAAG,GAAG;CAEN,OAAO;AACT;AAEA,SAAgB,WAAW,MAAoC;CAC7D,OAAO,SAAS;AAClB;AAEA,SAAgB,iBAAqD;CACnE,OAAO;AACT"} | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../client/addKeybind/index.ts"],"sourcesContent":["interface CKeybind extends KeybindProps {\n currentKey: string;\n disabled: boolean;\n isPressed: boolean;\n hash: number;\n getCurrentKey(): string;\n isControlPressed(): boolean;\n}\n\ninterface KeybindProps {\n name: string;\n description: string;\n defaultMapper?: string;\n defaultKey?: string;\n allowInPauseMenu?: boolean;\n disabled?: boolean;\n disable?(this: CKeybind, toggle: boolean): void;\n onPressed?(this: CKeybind): void;\n onReleased?(this: CKeybind): void;\n [key: string]: any;\n}\n\nconst keybinds: Record<string, CKeybind> = {};\n\nclass Keybind implements CKeybind {\n name: string;\n description: string;\n defaultMapper?: string;\n defaultKey?: string;\n onPressed?: (this: CKeybind) => void;\n onReleased?: (this: CKeybind) => void;\n secondaryKey?: string;\n secondaryMapper?: string;\n allowInPauseMenu?: boolean;\n [key: string]: any;\n\n disabled: boolean = false;\n isPressed: boolean = false;\n hash: number;\n\n constructor(data: KeybindProps) {\n this.name = data.name;\n this.description = data.description;\n this.defaultMapper = data.defaultMapper ?? 'keyboard';\n this.defaultKey = data.defaultKey ?? '';\n this.secondaryKey = data.secondaryKey;\n this.secondaryMapper = data.secondaryMapper;\n this.allowInPauseMenu = data.allowInPauseMenu;\n\n if (typeof data.disabled === 'boolean') this.disabled = data.disabled;\n this.onPressed = data.onPressed;\n this.onReleased = data.onReleased;\n\n this.hash = GetHashKey('+' + this.name) | 0x80000000;\n }\n\n get currentKey(): string {\n return this.getCurrentKey();\n }\n\n getCurrentKey(): string {\n const label = GetControlInstructionalButton(0, this.hash, true);\n return label.substring(2);\n }\n\n isControlPressed(): boolean {\n return this.isPressed;\n }\n\n disable(toggle: boolean): void {\n this.disabled = toggle;\n this.isPressed = false;\n }\n}\n\nexport function addKeybind(data: KeybindProps): CKeybind {\n const kb = new Keybind(data);\n\n keybinds[kb.name] = kb;\n\n RegisterCommand(\n '+' + kb.name,\n () => {\n if (kb.disabled || (!kb.allowInPauseMenu && IsPauseMenuActive())) return;\n kb.isPressed = true;\n kb.onPressed?.call(kb);\n },\n false,\n );\n\n RegisterCommand(\n '-' + kb.name,\n () => {\n if (kb.disabled || (!kb.allowInPauseMenu && IsPauseMenuActive())) return;\n kb.isPressed = false;\n kb.onReleased?.call(kb);\n },\n false,\n );\n\n RegisterKeyMapping('+' + kb.name, kb.description, kb.defaultMapper ?? 'keyboard', kb.defaultKey ?? '');\n\n if (kb.secondaryKey) {\n RegisterKeyMapping(\n '~!+' + kb.name,\n kb.description,\n kb.secondaryMapper ?? kb.defaultMapper ?? 'keyboard',\n kb.secondaryKey,\n );\n }\n\n setTimeout(() => {\n emit('chat:removeSuggestion', `/+${kb.name}`);\n emit('chat:removeSuggestion', `/-${kb.name}`);\n }, 500);\n\n return kb;\n}\n\nexport function getKeybind(name: string): CKeybind | undefined {\n return keybinds[name];\n}\n\nexport function getAllKeybinds(): Readonly<Record<string, CKeybind>> {\n return keybinds;\n}\n"],"mappings":";;AAsBA,MAAM,WAAqC,CAAC;AAE5C,IAAM,UAAN,MAAkC;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA,WAAoB;CACpB,YAAqB;CACrB;CAEA,YAAY,MAAoB;EAC9B,KAAK,OAAO,KAAK;EACjB,KAAK,cAAc,KAAK;EACxB,KAAK,gBAAgB,KAAK,iBAAiB;EAC3C,KAAK,aAAa,KAAK,cAAc;EACrC,KAAK,eAAe,KAAK;EACzB,KAAK,kBAAkB,KAAK;EAC5B,KAAK,mBAAmB,KAAK;EAE7B,IAAI,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW,KAAK;EAC7D,KAAK,YAAY,KAAK;EACtB,KAAK,aAAa,KAAK;EAEvB,KAAK,OAAO,WAAW,MAAM,KAAK,IAAI,IAAI;CAC5C;CAEA,IAAI,aAAqB;EACvB,OAAO,KAAK,cAAc;CAC5B;CAEA,gBAAwB;EAEtB,OADc,8BAA8B,GAAG,KAAK,MAAM,IAC/C,EAAE,UAAU,CAAC;CAC1B;CAEA,mBAA4B;EAC1B,OAAO,KAAK;CACd;CAEA,QAAQ,QAAuB;EAC7B,KAAK,WAAW;EAChB,KAAK,YAAY;CACnB;AACF;AAEA,SAAgB,WAAW,MAA8B;CACvD,MAAM,KAAK,IAAI,QAAQ,IAAI;CAE3B,SAAS,GAAG,QAAQ;CAEpB,gBACE,MAAM,GAAG,YACH;EACJ,IAAI,GAAG,YAAa,CAAC,GAAG,oBAAoB,kBAAkB,GAAI;EAClE,GAAG,YAAY;EACf,GAAG,WAAW,KAAK,EAAE;CACvB,GACA,KACF;CAEA,gBACE,MAAM,GAAG,YACH;EACJ,IAAI,GAAG,YAAa,CAAC,GAAG,oBAAoB,kBAAkB,GAAI;EAClE,GAAG,YAAY;EACf,GAAG,YAAY,KAAK,EAAE;CACxB,GACA,KACF;CAEA,mBAAmB,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,iBAAiB,YAAY,GAAG,cAAc,EAAE;CAErG,IAAI,GAAG,cACL,mBACE,QAAQ,GAAG,MACX,GAAG,aACH,GAAG,mBAAmB,GAAG,iBAAiB,YAC1C,GAAG,YACL;CAGF,iBAAiB;EACf,KAAK,yBAAyB,KAAK,GAAG,MAAM;EAC5C,KAAK,yBAAyB,KAAK,GAAG,MAAM;CAC9C,GAAG,GAAG;CAEN,OAAO;AACT;AAEA,SAAgB,WAAW,MAAoC;CAC7D,OAAO,SAAS;AAClB;AAEA,SAAgB,iBAAqD;CACnE,OAAO;AACT"} |
| import { cache, onCache } from "../common/cache/index.js"; | ||
| import { StateBag } from "../common/game/StateBag/index.js"; | ||
| import { GameEntity } from "../common/game/Entity/index.js"; | ||
@@ -34,6 +33,6 @@ import { Prop } from "../common/game/Prop/index.js"; | ||
| declare namespace index_d_exports { | ||
| export { Dui, FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Point, Prop, StateBag, Vehicle, VehicleProperties, VehicleType, Zone, addKeybind, addRadialItem, alertDialog, cache, cancelProgress, cancelSkillCheck, checkDependency, closeAlertDialog, closeInputDialog, context, createLocales, createObject, createPed, createVehicle, defaultNotify, disableRadial, eventTimer, getAllKeybinds, getCurrentRadialId, getKeybind, getLocale, getLocales, getNearbyVehicles, getOpenContextMenu, getOpenMenu, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getVehicleProperties, hideContext, hideMenu, hideRadial, hideTextUI, initLocale, inputDialog, isTextUIOpen, index_d_exports as lib, locale, notify, onCache, onServerCallback, progressActive, progressBar, progressCircle, registerContext, registerHook, registerMenu, registerRadial, removeRadialItem, requestAnimDict, requestAnimSet, requestModel, requestNamedPtfxAsset, requestScaleformMovie, requestStreamedTextureDict, requestWeaponAsset, setClipboard, setMenuOptions, setVehicleProperties, showContext, showMenu, showTextUI, skillCheck, skillCheckActive, sleep, triggerServerCallback, waitFor }; | ||
| export { Dui, FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Point, Prop, Vehicle, VehicleProperties, VehicleType, Zone, addKeybind, addRadialItem, alertDialog, cache, cancelProgress, cancelSkillCheck, checkDependency, closeAlertDialog, closeInputDialog, context, createLocales, createObject, createPed, createVehicle, defaultNotify, disableRadial, eventTimer, getAllKeybinds, getCurrentRadialId, getKeybind, getLocale, getLocales, getNearbyVehicles, getOpenContextMenu, getOpenMenu, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getVehicleProperties, hideContext, hideMenu, hideRadial, hideTextUI, initLocale, inputDialog, isTextUIOpen, index_d_exports as lib, locale, notify, onCache, onServerCallback, progressActive, progressBar, progressCircle, registerContext, registerHook, registerMenu, registerRadial, removeRadialItem, requestAnimDict, requestAnimSet, requestModel, requestNamedPtfxAsset, requestScaleformMovie, requestStreamedTextureDict, requestWeaponAsset, setClipboard, setMenuOptions, setVehicleProperties, showContext, showMenu, showTextUI, skillCheck, skillCheckActive, sleep, triggerServerCallback, waitFor }; | ||
| } | ||
| //#endregion | ||
| export { Dui, FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Point, Prop, StateBag, Vehicle, VehicleProperties, VehicleType, Zone, addKeybind, addRadialItem, alertDialog, cache, cancelProgress, cancelSkillCheck, checkDependency, closeAlertDialog, closeInputDialog, context, createLocales, createObject, createPed, createVehicle, defaultNotify, disableRadial, eventTimer, getAllKeybinds, getCurrentRadialId, getKeybind, getLocale, getLocales, getNearbyVehicles, getOpenContextMenu, getOpenMenu, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getVehicleProperties, hideContext, hideMenu, hideRadial, hideTextUI, initLocale, inputDialog, isTextUIOpen, index_d_exports as lib, locale, notify, onCache, onServerCallback, progressActive, progressBar, progressCircle, registerContext, registerHook, registerMenu, registerRadial, removeRadialItem, requestAnimDict, requestAnimSet, requestModel, requestNamedPtfxAsset, requestScaleformMovie, requestStreamedTextureDict, requestWeaponAsset, setClipboard, setMenuOptions, setVehicleProperties, showContext, showMenu, showTextUI, skillCheck, skillCheckActive, sleep, triggerServerCallback, waitFor }; | ||
| export { Dui, FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Point, Prop, Vehicle, VehicleProperties, VehicleType, Zone, addKeybind, addRadialItem, alertDialog, cache, cancelProgress, cancelSkillCheck, checkDependency, closeAlertDialog, closeInputDialog, context, createLocales, createObject, createPed, createVehicle, defaultNotify, disableRadial, eventTimer, getAllKeybinds, getCurrentRadialId, getKeybind, getLocale, getLocales, getNearbyVehicles, getOpenContextMenu, getOpenMenu, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getVehicleProperties, hideContext, hideMenu, hideRadial, hideTextUI, initLocale, inputDialog, isTextUIOpen, index_d_exports as lib, locale, notify, onCache, onServerCallback, progressActive, progressBar, progressCircle, registerContext, registerHook, registerMenu, registerRadial, removeRadialItem, requestAnimDict, requestAnimSet, requestModel, requestNamedPtfxAsset, requestScaleformMovie, requestStreamedTextureDict, requestWeaponAsset, setClipboard, setMenuOptions, setVehicleProperties, showContext, showMenu, showTextUI, skillCheck, skillCheckActive, sleep, triggerServerCallback, waitFor }; | ||
| //# sourceMappingURL=index.d.ts.map |
| import { __exportAll } from "../_virtual/_rolldown/runtime.js"; | ||
| import { cache, onCache } from "../common/cache/index.js"; | ||
| import { StateBag } from "../common/game/StateBag/index.js"; | ||
| import { GameEntity } from "../common/game/Entity/index.js"; | ||
@@ -43,3 +42,2 @@ import { Prop } from "../common/game/Prop/index.js"; | ||
| Prop: () => Prop, | ||
| StateBag: () => StateBag, | ||
| Vehicle: () => Vehicle, | ||
@@ -117,4 +115,4 @@ Zone: () => Zone, | ||
| //#endregion | ||
| export { Dui, GameEntity, HookPipeline, Ped, Player, Point, Prop, StateBag, Vehicle, Zone, addKeybind, addRadialItem, alertDialog, cache, cancelProgress, cancelSkillCheck, checkDependency, closeAlertDialog, closeInputDialog, context, createLocales, createObject, createPed, createVehicle, defaultNotify, disableRadial, eventTimer, getAllKeybinds, getCurrentRadialId, getKeybind, getLocale, getLocales, getNearbyVehicles, getOpenContextMenu, getOpenMenu, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getVehicleProperties, hideContext, hideMenu, hideRadial, hideTextUI, initLocale, inputDialog, isTextUIOpen, client_exports as lib, locale, notify, onCache, onServerCallback, progressActive, progressBar, progressCircle, registerContext, registerHook, registerMenu, registerRadial, removeRadialItem, requestAnimDict, requestAnimSet, requestModel, requestNamedPtfxAsset, requestScaleformMovie, requestStreamedTextureDict, requestWeaponAsset, setClipboard, setMenuOptions, setVehicleProperties, showContext, showMenu, showTextUI, skillCheck, skillCheckActive, sleep, triggerServerCallback, waitFor }; | ||
| export { Dui, GameEntity, HookPipeline, Ped, Player, Point, Prop, Vehicle, Zone, addKeybind, addRadialItem, alertDialog, cache, cancelProgress, cancelSkillCheck, checkDependency, closeAlertDialog, closeInputDialog, context, createLocales, createObject, createPed, createVehicle, defaultNotify, disableRadial, eventTimer, getAllKeybinds, getCurrentRadialId, getKeybind, getLocale, getLocales, getNearbyVehicles, getOpenContextMenu, getOpenMenu, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getVehicleProperties, hideContext, hideMenu, hideRadial, hideTextUI, initLocale, inputDialog, isTextUIOpen, client_exports as lib, locale, notify, onCache, onServerCallback, progressActive, progressBar, progressCircle, registerContext, registerHook, registerMenu, registerRadial, removeRadialItem, requestAnimDict, requestAnimSet, requestModel, requestNamedPtfxAsset, requestScaleformMovie, requestStreamedTextureDict, requestWeaponAsset, setClipboard, setMenuOptions, setVehicleProperties, showContext, showMenu, showTextUI, skillCheck, skillCheckActive, sleep, triggerServerCallback, waitFor }; | ||
| //# sourceMappingURL=index.js.map |
| import { __name } from "../../../_virtual/_rolldown/runtime.js"; | ||
| import { StateBag } from "../StateBag/index.js"; | ||
| import { Vector3 } from "@overextended/core/vector"; | ||
| //#region common/game/Entity/index.d.ts | ||
| declare abstract class GameEntity extends StateBag { | ||
| declare enum StateBagReplication { | ||
| /** The value is replicated to the server and all relevant clients. */ | ||
| REPLICATED = 1, | ||
| /** The value is synced between the server and entity owner. Player only. */ | ||
| SYNCED = 2 | ||
| } | ||
| declare abstract class GameEntity { | ||
| #private; | ||
| readonly type: string; | ||
| readonly netId: number; | ||
| protected statebag: string; | ||
| /** Writes a value to the entity's state. Replicated values are validated by the server. */ | ||
| set(key: string, value: unknown, mode?: StateBagReplication): Promise<boolean>; | ||
| /** Writes a replicated value to the entity's state. Client-set values are validated by the server. */ | ||
| setr(key: string, value: unknown): Promise<boolean>; | ||
| /** Writes a synced value to the entity's state. Client-set values are validated by the server. */ | ||
| sets(key: string, value: unknown): Promise<boolean>; | ||
| /** Returns a value from the entity's state. */ | ||
| get<T = unknown>(key: string): T | undefined; | ||
| /** Returns if a key exists in the entity's state. */ | ||
| has(key: string): boolean; | ||
| /** Returns an array of all keys in the entity's state. */ | ||
| keys(): string[]; | ||
| get handle(): number; | ||
@@ -11,0 +29,0 @@ protected setHandle(handle: number): void; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../common/game/Entity/index.ts"],"mappings":";;;;;uBAMsB,UAAA,SAAmB,QAAQ;EAAA;WAEtC,IAAA;EAAA,SACA,KAAA;EAAA,IAEE,MAAA,CAAA;EAAA,UAID,SAAA,CAAU,MAAA;EAab,SAAA,CAAA,GAAS,OAAA;EAIT,SAAA,CAAU,CAAA,UAAW,CAAA,UAAW,CAAA,UAAW,QAAA,YAAkB,WAAA,YAAqB,SAAA;EAIlF,QAAA,CAAA;EAIA,UAAA,CAAA;EAIA,UAAA,CAAW,OAAA;EAIX,gBAAA,CAAA;EAIA,gBAAA,CAAiB,MAAA;AAAA"} | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../common/game/Entity/index.ts"],"mappings":";;;;aAMK,mBAAA;;EAEH,UAAA;EAFG;EAIH,MAAM;AAAA;AAAA,uBAGc,UAAA;EAAA;WAEX,IAAA;EAAA,SACA,KAAA;EAAA,UACC,QAAA;EAG2C;EAAxC,GAAA,CAAI,GAAA,UAAa,KAAA,WAAgB,IAAA,GAAO,mBAAA,GAAmB,OAAA;EAwB3B;EAAhC,IAAA,CAAK,GAAA,UAAa,KAAA,YAAc,OAAA;EAUP;EALzB,IAAA,CAAK,GAAA,UAAa,KAAA,YAAc,OAAA;EAoC7B;EA/BT,GAAA,aAAA,CAAiB,GAAA,WAAc,CAAA;;EAK/B,GAAA,CAAI,GAAA;EA3CF;EAgDF,IAAA,CAAA;EAAA,IAII,MAAA,CAAA;EAAA,UAID,SAAA,CAAU,MAAA;EAab,SAAA,CAAA,GAAS,OAAA;EAIT,SAAA,CAAU,CAAA,UAAW,CAAA,UAAW,CAAA,UAAW,QAAA,YAAkB,WAAA,YAAqB,SAAA;EAIlF,QAAA,CAAA;EAIA,UAAA,CAAA;EAIA,UAAA,CAAW,OAAA;EAIX,gBAAA,CAAA;EAIA,gBAAA,CAAiB,MAAA;AAAA"} |
| import "../../../_virtual/_rolldown/runtime.js"; | ||
| import { StateBag } from "../StateBag/index.js"; | ||
| import { Player } from "../Player/index.js"; | ||
| import { context } from "../../misc.js"; | ||
@@ -7,6 +7,39 @@ import { Vector3 } from "@overextended/core/vector"; | ||
| const isServer = context === "server"; | ||
| var GameEntity = class extends StateBag { | ||
| const allowStateBagReplication = isServer || !GetConvarBool("sv_stateBagStrictMode", false); | ||
| var GameEntity = class { | ||
| #handle = 0; | ||
| type = ""; | ||
| netId = 0; | ||
| statebag = ""; | ||
| /** Writes a value to the entity's state. Replicated values are validated by the server. */ | ||
| async set(key, value, mode) { | ||
| if (mode === 1 && !allowStateBagReplication || mode === 2) { | ||
| if (mode === 2 && this instanceof Player) throw new Error("Setting synced-states is not supported for non-player entities."); | ||
| if (!isServer) return import("../../../client/callback/index.js").then((m) => m.triggerServerCallback("ox_lib:requestSetStateBag", null, this.statebag, key, value)); | ||
| emitNet("ox_lib:setStateBagValue", this.netId, key, value); | ||
| } | ||
| const packed = msgpack_pack(value); | ||
| SetStateBagValue(this.statebag, key, packed, packed.length, mode === 1); | ||
| return true; | ||
| } | ||
| /** Writes a replicated value to the entity's state. Client-set values are validated by the server. */ | ||
| async setr(key, value) { | ||
| return this.set(key, value, 1); | ||
| } | ||
| /** Writes a synced value to the entity's state. Client-set values are validated by the server. */ | ||
| async sets(key, value) { | ||
| return this.set(key, value, 2); | ||
| } | ||
| /** Returns a value from the entity's state. */ | ||
| get(key) { | ||
| return GetStateBagValue(this.statebag, key); | ||
| } | ||
| /** Returns if a key exists in the entity's state. */ | ||
| has(key) { | ||
| return !!StateBagHasKey(this.statebag, key); | ||
| } | ||
| /** Returns an array of all keys in the entity's state. */ | ||
| keys() { | ||
| return GetStateBagKeys(this.statebag); | ||
| } | ||
| get handle() { | ||
@@ -16,6 +49,7 @@ return this.#handle; | ||
| setHandle(handle) { | ||
| const isPlayer = this instanceof Player; | ||
| this.#handle = handle; | ||
| this.netId = NetworkGetNetworkIdFromEntity(handle); | ||
| this.statebag = this.netId ? `${this.type === "Player" ? "player" : "entity"}:${this.netId}` : `localEntity:${handle}`; | ||
| if ((!this.netId || isServer) && this.type !== "Player") EnsureEntityStateBag(handle); | ||
| this.statebag = this.netId ? `${isPlayer ? "player" : "entity"}:${this.netId}` : `localEntity:${handle}`; | ||
| if (!this.netId || isServer && !isPlayer) EnsureEntityStateBag(handle); | ||
| } | ||
@@ -43,3 +77,3 @@ getCoords() { | ||
| SetEntityRoutingBucket(this.handle, bucket); | ||
| this.set("bucket", bucket, true); | ||
| this.set("bucket", bucket, 1); | ||
| } | ||
@@ -46,0 +80,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":["#handle"],"sources":["../../../../common/game/Entity/index.ts"],"sourcesContent":["import { Vector3 } from '@overextended/core/vector';\nimport { StateBag } from '../StateBag';\nimport { context } from '../..';\n\nconst isServer = context === 'server';\n\nexport abstract class GameEntity extends StateBag {\n #handle: number = 0;\n readonly type: string = '';\n readonly netId: number = 0;\n\n public get handle() {\n return this.#handle;\n }\n\n protected setHandle(handle: number) {\n this.#handle = handle;\n // @ts-ignore\n this.netId = NetworkGetNetworkIdFromEntity(handle);\n this.statebag = this.netId\n ? `${this.type === 'Player' ? 'player' : 'entity'}:${this.netId}`\n : `localEntity:${handle}`;\n\n if ((!this.netId || isServer) && this.type !== 'Player') {\n EnsureEntityStateBag(handle);\n }\n }\n\n public getCoords() {\n return Vector3.fromArray(GetEntityCoords(this.handle));\n }\n\n public setCoords(x: number, y: number, z: number, deadFlag = false, ragdollFlag = false, clearArea = false) {\n SetEntityCoords(this.handle, x, y, z, true, deadFlag, ragdollFlag, clearArea);\n }\n\n public getModel() {\n return GetEntityModel(this.handle);\n }\n\n public getHeading() {\n return GetEntityHeading(this.handle);\n }\n\n public setHeading(heading: number) {\n SetEntityHeading(this.handle, heading);\n }\n\n public getRoutingBucket() {\n return isServer ? GetEntityRoutingBucket(this.handle) : (this.get('bucket') ?? 0);\n }\n\n public setRoutingBucket(bucket: number) {\n if (!isServer) return;\n\n SetEntityRoutingBucket(this.handle, bucket);\n this.set('bucket', bucket, true);\n }\n}\n"],"mappings":";;;;;AAIA,MAAM,WAAW,YAAY;AAE7B,IAAsB,aAAtB,cAAyC,SAAS;CAChD,UAAkB;CAClB,OAAwB;CACxB,QAAyB;CAEzB,IAAW,SAAS;EAClB,OAAO,KAAKA;CACd;CAEA,UAAoB,QAAgB;EAClC,KAAKA,UAAU;EAEf,KAAK,QAAQ,8BAA8B,MAAM;EACjD,KAAK,WAAW,KAAK,QACjB,GAAG,KAAK,SAAS,WAAW,WAAW,SAAS,GAAG,KAAK,UACxD,eAAe;EAEnB,KAAK,CAAC,KAAK,SAAS,aAAa,KAAK,SAAS,UAC7C,qBAAqB,MAAM;CAE/B;CAEA,YAAmB;EACjB,OAAO,QAAQ,UAAU,gBAAgB,KAAK,MAAM,CAAC;CACvD;CAEA,UAAiB,GAAW,GAAW,GAAW,WAAW,OAAO,cAAc,OAAO,YAAY,OAAO;EAC1G,gBAAgB,KAAK,QAAQ,GAAG,GAAG,GAAG,MAAM,UAAU,aAAa,SAAS;CAC9E;CAEA,WAAkB;EAChB,OAAO,eAAe,KAAK,MAAM;CACnC;CAEA,aAAoB;EAClB,OAAO,iBAAiB,KAAK,MAAM;CACrC;CAEA,WAAkB,SAAiB;EACjC,iBAAiB,KAAK,QAAQ,OAAO;CACvC;CAEA,mBAA0B;EACxB,OAAO,WAAW,uBAAuB,KAAK,MAAM,IAAK,KAAK,IAAI,QAAQ,KAAK;CACjF;CAEA,iBAAwB,QAAgB;EACtC,IAAI,CAAC,UAAU;EAEf,uBAAuB,KAAK,QAAQ,MAAM;EAC1C,KAAK,IAAI,UAAU,QAAQ,IAAI;CACjC;AACF"} | ||
| {"version":3,"file":"index.js","names":["#handle"],"sources":["../../../../common/game/Entity/index.ts"],"sourcesContent":["import { Vector3 } from '@overextended/core/vector';\nimport { context, Player } from '../..';\n\nconst isServer = context === 'server';\nconst allowStateBagReplication = isServer || !GetConvarBool('sv_stateBagStrictMode', false);\n\nenum StateBagReplication {\n /** The value is replicated to the server and all relevant clients. */\n REPLICATED = 1,\n /** The value is synced between the server and entity owner. Player only. */\n SYNCED = 2,\n}\n\nexport abstract class GameEntity {\n #handle: number = 0;\n readonly type: string = '';\n readonly netId: number = 0;\n protected statebag: string = '';\n\n /** Writes a value to the entity's state. Replicated values are validated by the server. */\n public async set(key: string, value: unknown, mode?: StateBagReplication) {\n if ((mode === 1 && !allowStateBagReplication) || mode === 2) {\n if (mode === 2 && this! instanceof Player) {\n throw new Error('Setting synced-states is not supported for non-player entities.');\n }\n\n if (!isServer) {\n return import('../../../client/callback').then(\n (m) =>\n m.triggerServerCallback('ox_lib:requestSetStateBag', null, this.statebag, key, value) as Promise<boolean>,\n );\n }\n\n emitNet('ox_lib:setStateBagValue', this.netId, key, value);\n }\n\n // @ts-ignore\n const packed = msgpack_pack(value);\n SetStateBagValue(this.statebag, key, packed, packed.length, mode === 1);\n\n return true;\n }\n\n /** Writes a replicated value to the entity's state. Client-set values are validated by the server. */\n public async setr(key: string, value: unknown) {\n return this.set(key, value, 1);\n }\n\n /** Writes a synced value to the entity's state. Client-set values are validated by the server. */\n public async sets(key: string, value: unknown) {\n return this.set(key, value, 2);\n }\n\n /** Returns a value from the entity's state. */\n public get<T = unknown>(key: string): T | undefined {\n return GetStateBagValue(this.statebag, key);\n }\n\n /** Returns if a key exists in the entity's state. */\n public has(key: string) {\n return !!StateBagHasKey(this.statebag, key);\n }\n\n /** Returns an array of all keys in the entity's state. */\n public keys(): string[] {\n return GetStateBagKeys(this.statebag);\n }\n\n public get handle() {\n return this.#handle;\n }\n\n protected setHandle(handle: number) {\n const isPlayer = this instanceof Player;\n\n this.#handle = handle;\n // @ts-ignore\n this.netId = NetworkGetNetworkIdFromEntity(handle);\n this.statebag = this.netId ? `${isPlayer ? 'player' : 'entity'}:${this.netId}` : `localEntity:${handle}`;\n\n if (!this.netId || (isServer && !isPlayer)) {\n EnsureEntityStateBag(handle);\n }\n }\n\n public getCoords() {\n return Vector3.fromArray(GetEntityCoords(this.handle));\n }\n\n public setCoords(x: number, y: number, z: number, deadFlag = false, ragdollFlag = false, clearArea = false) {\n SetEntityCoords(this.handle, x, y, z, true, deadFlag, ragdollFlag, clearArea);\n }\n\n public getModel() {\n return GetEntityModel(this.handle);\n }\n\n public getHeading() {\n return GetEntityHeading(this.handle);\n }\n\n public setHeading(heading: number) {\n SetEntityHeading(this.handle, heading);\n }\n\n public getRoutingBucket() {\n return isServer ? GetEntityRoutingBucket(this.handle) : (this.get('bucket') ?? 0);\n }\n\n public setRoutingBucket(bucket: number) {\n if (!isServer) return;\n\n SetEntityRoutingBucket(this.handle, bucket);\n this.set('bucket', bucket, 1);\n }\n}\n"],"mappings":";;;;;AAGA,MAAM,WAAW,YAAY;AAC7B,MAAM,2BAA2B,YAAY,CAAC,cAAc,yBAAyB,KAAK;AAS1F,IAAsB,aAAtB,MAAiC;CAC/B,UAAkB;CAClB,OAAwB;CACxB,QAAyB;CACzB,WAA6B;;CAG7B,MAAa,IAAI,KAAa,OAAgB,MAA4B;EACxE,IAAK,SAAS,KAAK,CAAC,4BAA6B,SAAS,GAAG;GAC3D,IAAI,SAAS,KAAK,gBAAiB,QACjC,MAAM,IAAI,MAAM,iEAAiE;GAGnF,IAAI,CAAC,UACH,OAAO,OAAO,qCAA4B,MACvC,MACC,EAAE,sBAAsB,6BAA6B,MAAM,KAAK,UAAU,KAAK,KAAK,CACxF;GAGF,QAAQ,2BAA2B,KAAK,OAAO,KAAK,KAAK;EAC3D;EAGA,MAAM,SAAS,aAAa,KAAK;EACjC,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAO,QAAQ,SAAS,CAAC;EAEtE,OAAO;CACT;;CAGA,MAAa,KAAK,KAAa,OAAgB;EAC7C,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC;CAC/B;;CAGA,MAAa,KAAK,KAAa,OAAgB;EAC7C,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC;CAC/B;;CAGA,IAAwB,KAA4B;EAClD,OAAO,iBAAiB,KAAK,UAAU,GAAG;CAC5C;;CAGA,IAAW,KAAa;EACtB,OAAO,CAAC,CAAC,eAAe,KAAK,UAAU,GAAG;CAC5C;;CAGA,OAAwB;EACtB,OAAO,gBAAgB,KAAK,QAAQ;CACtC;CAEA,IAAW,SAAS;EAClB,OAAO,KAAKA;CACd;CAEA,UAAoB,QAAgB;EAClC,MAAM,WAAW,gBAAgB;EAEjC,KAAKA,UAAU;EAEf,KAAK,QAAQ,8BAA8B,MAAM;EACjD,KAAK,WAAW,KAAK,QAAQ,GAAG,WAAW,WAAW,SAAS,GAAG,KAAK,UAAU,eAAe;EAEhG,IAAI,CAAC,KAAK,SAAU,YAAY,CAAC,UAC/B,qBAAqB,MAAM;CAE/B;CAEA,YAAmB;EACjB,OAAO,QAAQ,UAAU,gBAAgB,KAAK,MAAM,CAAC;CACvD;CAEA,UAAiB,GAAW,GAAW,GAAW,WAAW,OAAO,cAAc,OAAO,YAAY,OAAO;EAC1G,gBAAgB,KAAK,QAAQ,GAAG,GAAG,GAAG,MAAM,UAAU,aAAa,SAAS;CAC9E;CAEA,WAAkB;EAChB,OAAO,eAAe,KAAK,MAAM;CACnC;CAEA,aAAoB;EAClB,OAAO,iBAAiB,KAAK,MAAM;CACrC;CAEA,WAAkB,SAAiB;EACjC,iBAAiB,KAAK,QAAQ,OAAO;CACvC;CAEA,mBAA0B;EACxB,OAAO,WAAW,uBAAuB,KAAK,MAAM,IAAK,KAAK,IAAI,QAAQ,KAAK;CACjF;CAEA,iBAAwB,QAAgB;EACtC,IAAI,CAAC,UAAU;EAEf,uBAAuB,KAAK,QAAQ,MAAM;EAC1C,KAAK,IAAI,UAAU,QAAQ,CAAC;CAC9B;AACF"} |
@@ -27,3 +27,3 @@ import "../../../_virtual/_rolldown/runtime.js"; | ||
| SetPlayerRoutingBucket(this.playerId, bucket); | ||
| this.set("bucket", bucket, true); | ||
| this.set("bucket", bucket, 1); | ||
| } | ||
@@ -30,0 +30,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../../common/game/Player/index.ts"],"sourcesContent":["import { context } from '../..';\nimport { Ped } from '../Ped';\n\nconst isServer = context === 'server';\n\nexport class Player extends Ped {\n readonly type: string = 'Player';\n readonly playerId;\n\n constructor(netId: number) {\n if (netId === -1) netId = isServer ? Number(GetPlayerFromIndex(0)) : GetPlayerServerId(PlayerId());\n\n const playerId = isServer ? netId : GetPlayerFromServerId(netId);\n\n super(GetPlayerPed(playerId));\n\n this.playerId = playerId;\n }\n\n public get handle() {\n return isServer ? super.handle : GetPlayerPed(this.playerId);\n }\n\n public setModel(model: string | number) {\n SetPlayerModel(this.playerId, model);\n }\n\n public getRoutingBucket() {\n return isServer ? GetPlayerRoutingBucket(this.playerId as unknown as string) : (this.get('bucket') ?? 0);\n }\n\n public setRoutingBucket(bucket: number) {\n if (!isServer) return;\n\n SetPlayerRoutingBucket(this.playerId as unknown as string, bucket);\n this.set('bucket', bucket, true);\n }\n}\n"],"mappings":";;;;AAGA,MAAM,WAAW,YAAY;AAE7B,IAAa,SAAb,cAA4B,IAAI;CAC9B,OAAwB;CACxB;CAEA,YAAY,OAAe;EACzB,IAAI,UAAU,IAAI,QAAQ,WAAW,OAAO,mBAAmB,CAAC,CAAC,IAAI,kBAAkB,SAAS,CAAC;EAEjG,MAAM,WAAW,WAAW,QAAQ,sBAAsB,KAAK;EAE/D,MAAM,aAAa,QAAQ,CAAC;EAE5B,KAAK,WAAW;CAClB;CAEA,IAAW,SAAS;EAClB,OAAO,WAAW,MAAM,SAAS,aAAa,KAAK,QAAQ;CAC7D;CAEA,SAAgB,OAAwB;EACtC,eAAe,KAAK,UAAU,KAAK;CACrC;CAEA,mBAA0B;EACxB,OAAO,WAAW,uBAAuB,KAAK,QAA6B,IAAK,KAAK,IAAI,QAAQ,KAAK;CACxG;CAEA,iBAAwB,QAAgB;EACtC,IAAI,CAAC,UAAU;EAEf,uBAAuB,KAAK,UAA+B,MAAM;EACjE,KAAK,IAAI,UAAU,QAAQ,IAAI;CACjC;AACF"} | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../../common/game/Player/index.ts"],"sourcesContent":["import { context } from '../..';\nimport { Ped } from '../Ped';\n\nconst isServer = context === 'server';\n\nexport class Player extends Ped {\n readonly type: string = 'Player';\n readonly playerId;\n\n constructor(netId: number) {\n if (netId === -1) netId = isServer ? Number(GetPlayerFromIndex(0)) : GetPlayerServerId(PlayerId());\n\n const playerId = isServer ? netId : GetPlayerFromServerId(netId);\n\n super(GetPlayerPed(playerId));\n\n this.playerId = playerId;\n }\n\n public get handle() {\n return isServer ? super.handle : GetPlayerPed(this.playerId);\n }\n\n public setModel(model: string | number) {\n SetPlayerModel(this.playerId, model);\n }\n\n public getRoutingBucket() {\n return isServer ? GetPlayerRoutingBucket(this.playerId as unknown as string) : (this.get('bucket') ?? 0);\n }\n\n public setRoutingBucket(bucket: number) {\n if (!isServer) return;\n\n SetPlayerRoutingBucket(this.playerId as unknown as string, bucket);\n this.set('bucket', bucket, 1);\n }\n}\n"],"mappings":";;;;AAGA,MAAM,WAAW,YAAY;AAE7B,IAAa,SAAb,cAA4B,IAAI;CAC9B,OAAwB;CACxB;CAEA,YAAY,OAAe;EACzB,IAAI,UAAU,IAAI,QAAQ,WAAW,OAAO,mBAAmB,CAAC,CAAC,IAAI,kBAAkB,SAAS,CAAC;EAEjG,MAAM,WAAW,WAAW,QAAQ,sBAAsB,KAAK;EAE/D,MAAM,aAAa,QAAQ,CAAC;EAE5B,KAAK,WAAW;CAClB;CAEA,IAAW,SAAS;EAClB,OAAO,WAAW,MAAM,SAAS,aAAa,KAAK,QAAQ;CAC7D;CAEA,SAAgB,OAAwB;EACtC,eAAe,KAAK,UAAU,KAAK;CACrC;CAEA,mBAA0B;EACxB,OAAO,WAAW,uBAAuB,KAAK,QAA6B,IAAK,KAAK,IAAI,QAAQ,KAAK;CACxG;CAEA,iBAAwB,QAAgB;EACtC,IAAI,CAAC,UAAU;EAEf,uBAAuB,KAAK,UAA+B,MAAM;EACjE,KAAK,IAAI,UAAU,QAAQ,CAAC;CAC9B;AACF"} |
@@ -82,7 +82,8 @@ import "../../_virtual/_rolldown/runtime.js"; | ||
| const runHook = this.filter?.(hook, payload) !== false; | ||
| if (runHook && hook.cb?.(payload) === false) { | ||
| const rejected = runHook && hook.cb?.(payload) === false; | ||
| if (runHook) events.push(hook.hookId); | ||
| if (rejected) { | ||
| result.ok = false; | ||
| break; | ||
| } | ||
| if (runHook) events.push(hook.hookId); | ||
| } | ||
@@ -89,0 +90,0 @@ result.size = events.length; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../common/hooks/index.ts"],"sourcesContent":["import { cache } from '../cache';\n\nconst hooks: Set<HookPipeline> = new Set();\n\non('onResourceStop', (resource: string) => {\n for (let hook of hooks) hook.remove(resource);\n});\n\nexport interface Hook extends HookOptions {\n resource: string;\n hookId: string;\n cb: (payload: any) => boolean;\n}\n\ninterface HookOptions {\n [key: string]: any;\n}\n\nexport class HookPipeline<T = any> {\n private hooks: Hook[];\n\n readonly event;\n readonly filter;\n\n /**\n * Creates a hook pipeline for a specific event.\n * The pipeline manages a collection of registered hooks and controls execution\n * flow through filtering, rejection, and dispatching.\n *\n * It also exposes external resource hooks:\n * - `registerHook:<event>` adds a hook to the pipeline\n * - `removeHook:<event>` removes a hook from the pipeline\n */\n constructor(event: string, filter?: (hook: Hook, payload: T) => boolean) {\n this.hooks = [];\n this.event = event;\n this.filter = filter;\n\n hooks.add(this);\n\n exports(`registerHook:${event}`, (ref: Hook['cb'], options?: HookOptions) => this.registerHook(ref, options));\n\n exports(`removeHook:${event}`, (hookId: string) => {\n const resource = GetInvokingResource() || cache.resource;\n\n this.remove(resource, hookId);\n });\n }\n\n /**\n * Registers a hook into the pipeline for the current event.\n * @param options Optional metadata attached to the hook.\n */\n public registerHook(cb: Hook['cb'] | null, options?: HookOptions) {\n const idx = this.hooks.length;\n const resource = GetInvokingResource() || cache.resource;\n const hook = {} as Hook;\n\n if (options) Object.assign(hook, options);\n if (cb) hook.cb = cb;\n\n hook.resource = resource || cache.resource;\n hook.hookId = `${resource}:${this.event}:${idx}`;\n\n this.hooks.push(hook);\n\n return hook.hookId;\n }\n\n /**\n * Removes hooks from the pipeline.\n * - If `hookId` is provided, only the matching hook is removed.\n * - If omitted, all hooks belonging to the invoking resource are removed.\n */\n public remove(resource: string, hookId?: string) {\n for (let i = this.hooks.length - 1; i >= 0; i--) {\n const hook = this.hooks[i]!;\n\n if (hook.resource === resource && (!hookId || hook.hookId === hookId)) {\n this.hooks.splice(i, 1);\n }\n }\n }\n\n /**\n * Executes the hook pipeline for the payload.\n *\n * Each registered hook is evaluated in order of registration, checking the payload against a provided filter\\\n * using the hook options and executing the hook callback.\n *\n * A hook may block execution by returning `false` from the pipeline filter or its own callback.\n *\n * If any hook rejects the execution, dispatch is cancelled and `result.ok` is set to `false`.\n *\n * The returned object acts as a finalisation handle and emits results to registered handlers once closed.\n */\n public dispatch(payload: T) {\n const events: string[] = [];\n\n const result = {\n ok: true,\n size: 0,\n [Symbol.dispose]: () => {\n // @ts-expect-error\n const packed = msgpack_pack([result.ok, payload]);\n\n for (let event of events) TriggerEventInternal(event, packed, packed.length);\n },\n };\n\n for (let hook of this.hooks) {\n const runHook = this.filter?.(hook, payload) !== false;\n const rejected = runHook && hook.cb?.(payload) === false;\n\n if (rejected) {\n result.ok = false;\n break;\n }\n\n if (runHook) events.push(hook.hookId);\n }\n\n result.size = events.length;\n\n return result;\n }\n}\n\ntype PostHookEvent = (ok: boolean, payload: any) => void;\n\nclass EventHook {\n private handler?: PostHookEvent;\n /** Creates a new EventHook instance bound to a specific exported hook. */\n constructor(\n readonly hookId: string,\n readonly resource: string,\n readonly event: string,\n ) {}\n\n /**\n * ---Attaches a post-execution event handler for this hook.\n * The handler is triggered after the hooked event completes and receives:\n * - `ok` whether the original event execution succeeded\n * - `payload` the returned or processed event data\n *\n * If a handler is already registered, it will be replaced.\n */\n public on(handler: PostHookEvent) {\n this.off();\n this.handler = handler;\n\n on(this.hookId, this.handler);\n }\n\n /** Detaches the currently registered post-hook event handler, if one exists. */\n public off() {\n if (!this.handler) return;\n\n removeEventListener(this.hookId, this.handler);\n }\n\n /**\n * Fully removes this hook from both the local event system and the external\n * hook registry provided by the originating resource.\n *\n * This invalidates the hook instance; it should not be used afterward.\n */\n public remove() {\n this.off();\n exports[this.resource]![`removeHook:${this.event}`]!(this.hookId);\n }\n}\n\nexport function registerHook(eventName: string, handler?: Hook['cb'] | null, options?: HookOptions) {\n const [resource, event] = eventName.split(':', 2);\n\n if (!resource || !event) throw new Error(`Invalid event format: ${eventName} (expected \"resourceName:eventName\")`);\n\n if (handler && !options && typeof handler !== 'function') {\n options = handler;\n handler = null;\n }\n\n const hookId = exports[resource][`registerHook:${event}`](handler, options);\n\n return new EventHook(hookId, resource, event);\n}\n"],"mappings":";;;AAEA,MAAM,wBAA2B,IAAI,IAAI;AAEzC,GAAG,mBAAmB,aAAqB;CACzC,KAAK,IAAI,QAAQ,OAAO,KAAK,OAAO,QAAQ;AAC9C,CAAC;AAYD,IAAa,eAAb,MAAmC;CACjC;CAEA;CACA;;;;;;;;;;CAWA,YAAY,OAAe,QAA8C;EACvE,KAAK,QAAQ,CAAC;EACd,KAAK,QAAQ;EACb,KAAK,SAAS;EAEd,MAAM,IAAI,IAAI;EAEd,QAAQ,gBAAgB,UAAU,KAAiB,YAA0B,KAAK,aAAa,KAAK,OAAO,CAAC;EAE5G,QAAQ,cAAc,UAAU,WAAmB;GACjD,MAAM,WAAW,oBAAoB,KAAK,MAAM;GAEhD,KAAK,OAAO,UAAU,MAAM;EAC9B,CAAC;CACH;;;;;CAMA,aAAoB,IAAuB,SAAuB;EAChE,MAAM,MAAM,KAAK,MAAM;EACvB,MAAM,WAAW,oBAAoB,KAAK,MAAM;EAChD,MAAM,OAAO,CAAC;EAEd,IAAI,SAAS,OAAO,OAAO,MAAM,OAAO;EACxC,IAAI,IAAI,KAAK,KAAK;EAElB,KAAK,WAAW,YAAY,MAAM;EAClC,KAAK,SAAS,GAAG,SAAS,GAAG,KAAK,MAAM,GAAG;EAE3C,KAAK,MAAM,KAAK,IAAI;EAEpB,OAAO,KAAK;CACd;;;;;;CAOA,OAAc,UAAkB,QAAiB;EAC/C,KAAK,IAAI,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;GAC/C,MAAM,OAAO,KAAK,MAAM;GAExB,IAAI,KAAK,aAAa,aAAa,CAAC,UAAU,KAAK,WAAW,SAC5D,KAAK,MAAM,OAAO,GAAG,CAAC;EAE1B;CACF;;;;;;;;;;;;;CAcA,SAAgB,SAAY;EAC1B,MAAM,SAAmB,CAAC;EAE1B,MAAM,SAAS;GACb,IAAI;GACJ,MAAM;IACL,OAAO,gBAAgB;IAEtB,MAAM,SAAS,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC;IAEhD,KAAK,IAAI,SAAS,QAAQ,qBAAqB,OAAO,QAAQ,OAAO,MAAM;GAC7E;EACF;EAEA,KAAK,IAAI,QAAQ,KAAK,OAAO;GAC3B,MAAM,UAAU,KAAK,SAAS,MAAM,OAAO,MAAM;GAGjD,IAFiB,WAAW,KAAK,KAAK,OAAO,MAAM,OAErC;IACZ,OAAO,KAAK;IACZ;GACF;GAEA,IAAI,SAAS,OAAO,KAAK,KAAK,MAAM;EACtC;EAEA,OAAO,OAAO,OAAO;EAErB,OAAO;CACT;AACF;AAIA,IAAM,YAAN,MAAgB;CAIH;CACA;CACA;CALX;;CAEA,YACE,QACA,UACA,OACA;EAHS,KAAA,SAAA;EACA,KAAA,WAAA;EACA,KAAA,QAAA;CACR;;;;;;;;;CAUH,GAAU,SAAwB;EAChC,KAAK,IAAI;EACT,KAAK,UAAU;EAEf,GAAG,KAAK,QAAQ,KAAK,OAAO;CAC9B;;CAGA,MAAa;EACX,IAAI,CAAC,KAAK,SAAS;EAEnB,oBAAoB,KAAK,QAAQ,KAAK,OAAO;CAC/C;;;;;;;CAQA,SAAgB;EACd,KAAK,IAAI;EACT,QAAQ,KAAK,UAAW,cAAc,KAAK,SAAU,KAAK,MAAM;CAClE;AACF;AAEA,SAAgB,aAAa,WAAmB,SAA6B,SAAuB;CAClG,MAAM,CAAC,UAAU,SAAS,UAAU,MAAM,KAAK,CAAC;CAEhD,IAAI,CAAC,YAAY,CAAC,OAAO,MAAM,IAAI,MAAM,yBAAyB,UAAU,qCAAqC;CAEjH,IAAI,WAAW,CAAC,WAAW,OAAO,YAAY,YAAY;EACxD,UAAU;EACV,UAAU;CACZ;CAIA,OAAO,IAAI,UAFI,QAAQ,UAAU,gBAAgB,SAAS,SAAS,OAEzC,GAAG,UAAU,KAAK;AAC9C"} | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../common/hooks/index.ts"],"sourcesContent":["import { cache } from '../cache';\n\nconst hooks: Set<HookPipeline> = new Set();\n\non('onResourceStop', (resource: string) => {\n for (let hook of hooks) hook.remove(resource);\n});\n\nexport interface Hook extends HookOptions {\n resource: string;\n hookId: string;\n cb: (payload: any) => boolean;\n}\n\ninterface HookOptions {\n [key: string]: any;\n}\n\nexport class HookPipeline<T = any> {\n private hooks: Hook[];\n\n readonly event;\n readonly filter;\n\n /**\n * Creates a hook pipeline for a specific event.\n * The pipeline manages a collection of registered hooks and controls execution\n * flow through filtering, rejection, and dispatching.\n *\n * It also exposes external resource hooks:\n * - `registerHook:<event>` adds a hook to the pipeline\n * - `removeHook:<event>` removes a hook from the pipeline\n */\n constructor(event: string, filter?: (hook: Hook, payload: T) => boolean) {\n this.hooks = [];\n this.event = event;\n this.filter = filter;\n\n hooks.add(this);\n\n exports(`registerHook:${event}`, (ref: Hook['cb'], options?: HookOptions) => this.registerHook(ref, options));\n\n exports(`removeHook:${event}`, (hookId: string) => {\n const resource = GetInvokingResource() || cache.resource;\n\n this.remove(resource, hookId);\n });\n }\n\n /**\n * Registers a hook into the pipeline for the current event.\n * @param options Optional metadata attached to the hook.\n */\n public registerHook(cb: Hook['cb'] | null, options?: HookOptions) {\n const idx = this.hooks.length;\n const resource = GetInvokingResource() || cache.resource;\n const hook = {} as Hook;\n\n if (options) Object.assign(hook, options);\n if (cb) hook.cb = cb;\n\n hook.resource = resource || cache.resource;\n hook.hookId = `${resource}:${this.event}:${idx}`;\n\n this.hooks.push(hook);\n\n return hook.hookId;\n }\n\n /**\n * Removes hooks from the pipeline.\n * - If `hookId` is provided, only the matching hook is removed.\n * - If omitted, all hooks belonging to the invoking resource are removed.\n */\n public remove(resource: string, hookId?: string) {\n for (let i = this.hooks.length - 1; i >= 0; i--) {\n const hook = this.hooks[i]!;\n\n if (hook.resource === resource && (!hookId || hook.hookId === hookId)) {\n this.hooks.splice(i, 1);\n }\n }\n }\n\n /**\n * Executes the hook pipeline for the payload.\n *\n * Each registered hook is evaluated in order of registration, checking the payload against a provided filter\\\n * using the hook options and executing the hook callback.\n *\n * A hook may block execution by returning `false` from the pipeline filter or its own callback.\n *\n * If any hook rejects the execution, dispatch is cancelled and `result.ok` is set to `false`.\n *\n * The returned object acts as a finalisation handle and emits results to registered handlers once closed.\n */\n public dispatch(payload: T) {\n const events: string[] = [];\n\n const result = {\n ok: true,\n size: 0,\n [Symbol.dispose]: () => {\n // @ts-expect-error\n const packed = msgpack_pack([result.ok, payload]);\n\n for (let event of events) TriggerEventInternal(event, packed, packed.length);\n },\n };\n\n for (let hook of this.hooks) {\n const runHook = this.filter?.(hook, payload) !== false;\n const rejected = runHook && hook.cb?.(payload) === false;\n\n if (runHook) events.push(hook.hookId);\n\n if (rejected) {\n result.ok = false;\n break;\n }\n }\n\n result.size = events.length;\n\n return result;\n }\n}\n\ntype PostHookEvent = (ok: boolean, payload: any) => void;\n\nclass EventHook {\n private handler?: PostHookEvent;\n /** Creates a new EventHook instance bound to a specific exported hook. */\n constructor(\n readonly hookId: string,\n readonly resource: string,\n readonly event: string,\n ) {}\n\n /**\n * ---Attaches a post-execution event handler for this hook.\n * The handler is triggered after the hooked event completes and receives:\n * - `ok` whether the original event execution succeeded\n * - `payload` the returned or processed event data\n *\n * If a handler is already registered, it will be replaced.\n */\n public on(handler: PostHookEvent) {\n this.off();\n this.handler = handler;\n\n on(this.hookId, this.handler);\n }\n\n /** Detaches the currently registered post-hook event handler, if one exists. */\n public off() {\n if (!this.handler) return;\n\n removeEventListener(this.hookId, this.handler);\n }\n\n /**\n * Fully removes this hook from both the local event system and the external\n * hook registry provided by the originating resource.\n *\n * This invalidates the hook instance; it should not be used afterward.\n */\n public remove() {\n this.off();\n exports[this.resource]![`removeHook:${this.event}`]!(this.hookId);\n }\n}\n\nexport function registerHook(eventName: string, handler?: Hook['cb'] | null, options?: HookOptions) {\n const [resource, event] = eventName.split(':', 2);\n\n if (!resource || !event) throw new Error(`Invalid event format: ${eventName} (expected \"resourceName:eventName\")`);\n\n if (handler && !options && typeof handler !== 'function') {\n options = handler;\n handler = null;\n }\n\n const hookId = exports[resource][`registerHook:${event}`](handler, options);\n\n return new EventHook(hookId, resource, event);\n}\n"],"mappings":";;;AAEA,MAAM,wBAA2B,IAAI,IAAI;AAEzC,GAAG,mBAAmB,aAAqB;CACzC,KAAK,IAAI,QAAQ,OAAO,KAAK,OAAO,QAAQ;AAC9C,CAAC;AAYD,IAAa,eAAb,MAAmC;CACjC;CAEA;CACA;;;;;;;;;;CAWA,YAAY,OAAe,QAA8C;EACvE,KAAK,QAAQ,CAAC;EACd,KAAK,QAAQ;EACb,KAAK,SAAS;EAEd,MAAM,IAAI,IAAI;EAEd,QAAQ,gBAAgB,UAAU,KAAiB,YAA0B,KAAK,aAAa,KAAK,OAAO,CAAC;EAE5G,QAAQ,cAAc,UAAU,WAAmB;GACjD,MAAM,WAAW,oBAAoB,KAAK,MAAM;GAEhD,KAAK,OAAO,UAAU,MAAM;EAC9B,CAAC;CACH;;;;;CAMA,aAAoB,IAAuB,SAAuB;EAChE,MAAM,MAAM,KAAK,MAAM;EACvB,MAAM,WAAW,oBAAoB,KAAK,MAAM;EAChD,MAAM,OAAO,CAAC;EAEd,IAAI,SAAS,OAAO,OAAO,MAAM,OAAO;EACxC,IAAI,IAAI,KAAK,KAAK;EAElB,KAAK,WAAW,YAAY,MAAM;EAClC,KAAK,SAAS,GAAG,SAAS,GAAG,KAAK,MAAM,GAAG;EAE3C,KAAK,MAAM,KAAK,IAAI;EAEpB,OAAO,KAAK;CACd;;;;;;CAOA,OAAc,UAAkB,QAAiB;EAC/C,KAAK,IAAI,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;GAC/C,MAAM,OAAO,KAAK,MAAM;GAExB,IAAI,KAAK,aAAa,aAAa,CAAC,UAAU,KAAK,WAAW,SAC5D,KAAK,MAAM,OAAO,GAAG,CAAC;EAE1B;CACF;;;;;;;;;;;;;CAcA,SAAgB,SAAY;EAC1B,MAAM,SAAmB,CAAC;EAE1B,MAAM,SAAS;GACb,IAAI;GACJ,MAAM;IACL,OAAO,gBAAgB;IAEtB,MAAM,SAAS,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC;IAEhD,KAAK,IAAI,SAAS,QAAQ,qBAAqB,OAAO,QAAQ,OAAO,MAAM;GAC7E;EACF;EAEA,KAAK,IAAI,QAAQ,KAAK,OAAO;GAC3B,MAAM,UAAU,KAAK,SAAS,MAAM,OAAO,MAAM;GACjD,MAAM,WAAW,WAAW,KAAK,KAAK,OAAO,MAAM;GAEnD,IAAI,SAAS,OAAO,KAAK,KAAK,MAAM;GAEpC,IAAI,UAAU;IACZ,OAAO,KAAK;IACZ;GACF;EACF;EAEA,OAAO,OAAO,OAAO;EAErB,OAAO;CACT;AACF;AAIA,IAAM,YAAN,MAAgB;CAIH;CACA;CACA;CALX;;CAEA,YACE,QACA,UACA,OACA;EAHS,KAAA,SAAA;EACA,KAAA,WAAA;EACA,KAAA,QAAA;CACR;;;;;;;;;CAUH,GAAU,SAAwB;EAChC,KAAK,IAAI;EACT,KAAK,UAAU;EAEf,GAAG,KAAK,QAAQ,KAAK,OAAO;CAC9B;;CAGA,MAAa;EACX,IAAI,CAAC,KAAK,SAAS;EAEnB,oBAAoB,KAAK,QAAQ,KAAK,OAAO;CAC/C;;;;;;;CAQA,SAAgB;EACd,KAAK,IAAI;EACT,QAAQ,KAAK,UAAW,cAAc,KAAK,SAAU,KAAK,MAAM;CAClE;AACF;AAEA,SAAgB,aAAa,WAAmB,SAA6B,SAAuB;CAClG,MAAM,CAAC,UAAU,SAAS,UAAU,MAAM,KAAK,CAAC;CAEhD,IAAI,CAAC,YAAY,CAAC,OAAO,MAAM,IAAI,MAAM,yBAAyB,UAAU,qCAAqC;CAEjH,IAAI,WAAW,CAAC,WAAW,OAAO,YAAY,YAAY;EACxD,UAAU;EACV,UAAU;CACZ;CAIA,OAAO,IAAI,UAFI,QAAQ,UAAU,gBAAgB,SAAS,SAAS,OAEzC,GAAG,UAAU,KAAK;AAC9C"} |
| import { cache, onCache } from "./cache/index.js"; | ||
| import { StateBag } from "./game/StateBag/index.js"; | ||
| import { GameEntity } from "./game/Entity/index.js"; | ||
@@ -14,2 +13,2 @@ import { Prop } from "./game/Prop/index.js"; | ||
| import { Zone } from "./zones/index.js"; | ||
| export { FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Prop, StateBag, Vehicle, VehicleProperties, VehicleType, Zone, cache, checkDependency, context, createLocales, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, initLocale, locale, onCache, registerHook, sleep, waitFor }; | ||
| export { FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Prop, Vehicle, VehicleProperties, VehicleType, Zone, cache, checkDependency, context, createLocales, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, initLocale, locale, onCache, registerHook, sleep, waitFor }; |
| import { cache, onCache } from "./cache/index.js"; | ||
| import { StateBag } from "./game/StateBag/index.js"; | ||
| import { GameEntity } from "./game/Entity/index.js"; | ||
@@ -14,2 +13,2 @@ import { Prop } from "./game/Prop/index.js"; | ||
| import { context, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, sleep, waitFor } from "./misc.js"; | ||
| export { GameEntity, HookPipeline, Ped, Player, Prop, StateBag, Vehicle, Zone, cache, checkDependency, context, createLocales, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, initLocale, locale, onCache, registerHook, sleep, waitFor }; | ||
| export { GameEntity, HookPipeline, Ped, Player, Prop, Vehicle, Zone, cache, checkDependency, context, createLocales, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, initLocale, locale, onCache, registerHook, sleep, waitFor }; |
+88
-88
@@ -8,90 +8,90 @@ import { __name } from "../_virtual/_rolldown/runtime.js"; | ||
| interface VehicleProperties { | ||
| model: string; | ||
| plate: string; | ||
| plateIndex: number; | ||
| bodyHealth: number; | ||
| engineHealth: number; | ||
| tankHealth: number; | ||
| fuelLevel: number; | ||
| oilLevel: number; | ||
| dirtLevel: number; | ||
| paintType1: number; | ||
| paintType2: number; | ||
| color1: number | [number, number, number]; | ||
| color2: number | [number, number, number]; | ||
| pearlescentColor: number; | ||
| interiorColor: number; | ||
| dashboardColor: number; | ||
| wheelColor: number; | ||
| wheelWidth: number; | ||
| wheelSize: number; | ||
| wheels: number; | ||
| windowTint: number; | ||
| xenonColor: number; | ||
| neonEnabled: boolean[]; | ||
| neonColor: [number, number, number]; | ||
| extras: Record<number | string, 0 | 1>; | ||
| tyreSmokeColor: [number, number, number]; | ||
| modSpoilers: number; | ||
| modFrontBumper: number; | ||
| modRearBumper: number; | ||
| modSideSkirt: number; | ||
| modExhaust: number; | ||
| modFrame: number; | ||
| modGrille: number; | ||
| modHood: number; | ||
| modFender: number; | ||
| modRightFender: number; | ||
| modRoof: number; | ||
| modEngine: number; | ||
| modBrakes: number; | ||
| modTransmission: number; | ||
| modHorns: number; | ||
| modSuspension: number; | ||
| modArmor: number; | ||
| modNitrous: number; | ||
| modTurbo: boolean; | ||
| modSubwoofer: boolean; | ||
| modSmokeEnabled: boolean; | ||
| modHydraulics: boolean; | ||
| modXenon: boolean; | ||
| modFrontWheels: number; | ||
| modBackWheels: number; | ||
| modCustomTiresF: boolean; | ||
| modCustomTiresR: boolean; | ||
| modPlateHolder: number; | ||
| modVanityPlate: number; | ||
| modTrimA: number; | ||
| modOrnaments: number; | ||
| modDashboard: number; | ||
| modDial: number; | ||
| modDoorSpeaker: number; | ||
| modSeats: number; | ||
| modSteeringWheel: number; | ||
| modShifterLeavers: number; | ||
| modAPlate: number; | ||
| modSpeakers: number; | ||
| modTrunk: number; | ||
| modHydrolic: number; | ||
| modEngineBlock: number; | ||
| modAirFilter: number; | ||
| modStruts: number; | ||
| modArchCover: number; | ||
| modAerials: number; | ||
| modTrimB: number; | ||
| modTank: number; | ||
| modWindows: number; | ||
| modDoorR: number; | ||
| modLivery: number; | ||
| modRoofLivery: number; | ||
| modLightbar: number; | ||
| windows: number[]; | ||
| doors: number[]; | ||
| tyres: Record<number | string, 1 | 2>; | ||
| leftHeadlight: boolean; | ||
| rightHeadlight: boolean; | ||
| frontBumper: boolean; | ||
| rearBumper: boolean; | ||
| bulletProofTyres: boolean; | ||
| driftTyres: boolean; | ||
| model?: string; | ||
| plate?: string; | ||
| plateIndex?: number; | ||
| bodyHealth?: number; | ||
| engineHealth?: number; | ||
| tankHealth?: number; | ||
| fuelLevel?: number; | ||
| oilLevel?: number; | ||
| dirtLevel?: number; | ||
| paintType1?: number; | ||
| paintType2?: number; | ||
| color1?: number | [number, number, number]; | ||
| color2?: number | [number, number, number]; | ||
| pearlescentColor?: number; | ||
| interiorColor?: number; | ||
| dashboardColor?: number; | ||
| wheelColor?: number; | ||
| wheelWidth?: number; | ||
| wheelSize?: number; | ||
| wheels?: number; | ||
| windowTint?: number; | ||
| xenonColor?: number; | ||
| neonEnabled?: boolean[]; | ||
| neonColor?: [number, number, number]; | ||
| extras?: Record<number | string, 0 | 1>; | ||
| tyreSmokeColor?: [number, number, number]; | ||
| modSpoilers?: number; | ||
| modFrontBumper?: number; | ||
| modRearBumper?: number; | ||
| modSideSkirt?: number; | ||
| modExhaust?: number; | ||
| modFrame?: number; | ||
| modGrille?: number; | ||
| modHood?: number; | ||
| modFender?: number; | ||
| modRightFender?: number; | ||
| modRoof?: number; | ||
| modEngine?: number; | ||
| modBrakes?: number; | ||
| modTransmission?: number; | ||
| modHorns?: number; | ||
| modSuspension?: number; | ||
| modArmor?: number; | ||
| modNitrous?: number; | ||
| modTurbo?: boolean; | ||
| modSubwoofer?: boolean; | ||
| modSmokeEnabled?: boolean; | ||
| modHydraulics?: boolean; | ||
| modXenon?: boolean; | ||
| modFrontWheels?: number; | ||
| modBackWheels?: number; | ||
| modCustomTiresF?: boolean; | ||
| modCustomTiresR?: boolean; | ||
| modPlateHolder?: number; | ||
| modVanityPlate?: number; | ||
| modTrimA?: number; | ||
| modOrnaments?: number; | ||
| modDashboard?: number; | ||
| modDial?: number; | ||
| modDoorSpeaker?: number; | ||
| modSeats?: number; | ||
| modSteeringWheel?: number; | ||
| modShifterLeavers?: number; | ||
| modAPlate?: number; | ||
| modSpeakers?: number; | ||
| modTrunk?: number; | ||
| modHydrolic?: number; | ||
| modEngineBlock?: number; | ||
| modAirFilter?: number; | ||
| modStruts?: number; | ||
| modArchCover?: number; | ||
| modAerials?: number; | ||
| modTrimB?: number; | ||
| modTank?: number; | ||
| modWindows?: number; | ||
| modDoorR?: number; | ||
| modLivery?: number; | ||
| modRoofLivery?: number; | ||
| modLightbar?: number; | ||
| windows?: number[]; | ||
| doors?: number[]; | ||
| tyres?: Record<number | string, 1 | 2>; | ||
| leftHeadlight?: boolean; | ||
| rightHeadlight?: boolean; | ||
| frontBumper?: boolean; | ||
| rearBumper?: boolean; | ||
| bulletProofTyres?: boolean; | ||
| driftTyres?: boolean; | ||
| } | ||
@@ -98,0 +98,0 @@ /** |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"misc.d.ts","names":[],"sources":["../../common/misc.ts"],"mappings":";;;cAAa,OAAA;AAAA,KAED,iBAAA,oBACE,CAAA,YAAa,CAAA,CAAE,CAAA,UAAW,MAAA,gBAAsB,CAAA,MAAO,CAAA,IAAK,iBAAA,CAAkB,CAAA,CAAE,CAAA,OAAQ,CAAA,SAC9F,CAAA;AAAA,iBAEQ,KAAA,CAAM,EAAA,WAAU,OAAA;AAAA,UAIf,iBAAA;EACf,KAAA;EACA,KAAA;EACA,UAAA;EACA,UAAA;EACA,YAAA;EACA,UAAA;EACA,SAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,UAAA;EACA,MAAA;EACA,MAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,UAAA;EACA,SAAA;EACA,MAAA;EACA,UAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,MAAA,EAAQ,MAAA;EACR,cAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,SAAA;EACA,cAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;EACA,eAAA;EACA,QAAA;EACA,aAAA;EACA,QAAA;EACA,UAAA;EACA,QAAA;EACA,YAAA;EACA,eAAA;EACA,aAAA;EACA,QAAA;EACA,cAAA;EACA,aAAA;EACA,eAAA;EACA,eAAA;EACA,cAAA;EACA,cAAA;EACA,QAAA;EACA,YAAA;EACA,YAAA;EACA,OAAA;EACA,cAAA;EACA,QAAA;EACA,gBAAA;EACA,iBAAA;EACA,SAAA;EACA,WAAA;EACA,QAAA;EACA,WAAA;EACA,cAAA;EACA,YAAA;EACA,SAAA;EACA,YAAA;EACA,UAAA;EACA,QAAA;EACA,OAAA;EACA,UAAA;EACA,QAAA;EACA,SAAA;EACA,aAAA;EACA,WAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA,EAAO,MAAM;EACb,aAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;EACA,UAAA;AAAA;;;;;iBAOoB,OAAA,GAAA,CAAW,EAAA,QAAU,CAAA,EAAG,UAAA,WAAqB,OAAA,oBAA2B,OAAA,CAAQ,CAAA;AAAA,iBA6BtF,YAAA,CAAa,GAAA,WAAS,GAAO;AAAA,iBAM7B,aAAA,CAAc,SAAmB;AAAA,iBAKjC,qBAAA,CAAsB,SAAmB;AAAA,iBAWzC,eAAA,CAAgB,OAAA,UAAiB,MAAe"} | ||
| {"version":3,"file":"misc.d.ts","names":[],"sources":["../../common/misc.ts"],"mappings":";;;cAAa,OAAA;AAAA,KAED,iBAAA,oBACE,CAAA,YAAa,CAAA,CAAE,CAAA,UAAW,MAAA,gBAAsB,CAAA,MAAO,CAAA,IAAK,iBAAA,CAAkB,CAAA,CAAE,CAAA,OAAQ,CAAA,SAC9F,CAAA;AAAA,iBAEQ,KAAA,CAAM,EAAA,WAAU,OAAA;AAAA,UAIf,iBAAA;EACf,KAAA;EACA,KAAA;EACA,UAAA;EACA,UAAA;EACA,YAAA;EACA,UAAA;EACA,SAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,UAAA;EACA,MAAA;EACA,MAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,UAAA;EACA,SAAA;EACA,MAAA;EACA,UAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,MAAA,GAAS,MAAA;EACT,cAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,SAAA;EACA,cAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;EACA,eAAA;EACA,QAAA;EACA,aAAA;EACA,QAAA;EACA,UAAA;EACA,QAAA;EACA,YAAA;EACA,eAAA;EACA,aAAA;EACA,QAAA;EACA,cAAA;EACA,aAAA;EACA,eAAA;EACA,eAAA;EACA,cAAA;EACA,cAAA;EACA,QAAA;EACA,YAAA;EACA,YAAA;EACA,OAAA;EACA,cAAA;EACA,QAAA;EACA,gBAAA;EACA,iBAAA;EACA,SAAA;EACA,WAAA;EACA,QAAA;EACA,WAAA;EACA,cAAA;EACA,YAAA;EACA,SAAA;EACA,YAAA;EACA,UAAA;EACA,QAAA;EACA,OAAA;EACA,UAAA;EACA,QAAA;EACA,SAAA;EACA,aAAA;EACA,WAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA,GAAQ,MAAM;EACd,aAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,gBAAA;EACA,UAAA;AAAA;;;;;iBAOoB,OAAA,GAAA,CAAW,EAAA,QAAU,CAAA,EAAG,UAAA,WAAqB,OAAA,oBAA2B,OAAA,CAAQ,CAAA;AAAA,iBA6BtF,YAAA,CAAa,GAAA,WAAS,GAAO;AAAA,iBAM7B,aAAA,CAAc,SAAmB;AAAA,iBAKjC,qBAAA,CAAsB,SAAmB;AAAA,iBAWzC,eAAA,CAAgB,OAAA,UAAiB,MAAe"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"misc.js","names":[],"sources":["../../common/misc.ts"],"sourcesContent":["export const context = IsDuplicityVersion() ? 'server' : 'client';\n\nexport type FlattenObjectKeys<T> = {\n [K in keyof T & string]: T[K] extends Record<string, any> ? K | `${K}.${FlattenObjectKeys<T[K]>}` : K;\n}[keyof T & string];\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms, null));\n}\n\nexport interface VehicleProperties {\n model: string;\n plate: string;\n plateIndex: number;\n bodyHealth: number;\n engineHealth: number;\n tankHealth: number;\n fuelLevel: number;\n oilLevel: number;\n dirtLevel: number;\n paintType1: number;\n paintType2: number;\n color1: number | [number, number, number];\n color2: number | [number, number, number];\n pearlescentColor: number;\n interiorColor: number;\n dashboardColor: number;\n wheelColor: number;\n wheelWidth: number;\n wheelSize: number;\n wheels: number;\n windowTint: number;\n xenonColor: number;\n neonEnabled: boolean[];\n neonColor: [number, number, number];\n extras: Record<number | string, 0 | 1>;\n tyreSmokeColor: [number, number, number];\n modSpoilers: number;\n modFrontBumper: number;\n modRearBumper: number;\n modSideSkirt: number;\n modExhaust: number;\n modFrame: number;\n modGrille: number;\n modHood: number;\n modFender: number;\n modRightFender: number;\n modRoof: number;\n modEngine: number;\n modBrakes: number;\n modTransmission: number;\n modHorns: number;\n modSuspension: number;\n modArmor: number;\n modNitrous: number;\n modTurbo: boolean;\n modSubwoofer: boolean;\n modSmokeEnabled: boolean;\n modHydraulics: boolean;\n modXenon: boolean;\n modFrontWheels: number;\n modBackWheels: number;\n modCustomTiresF: boolean;\n modCustomTiresR: boolean;\n modPlateHolder: number;\n modVanityPlate: number;\n modTrimA: number;\n modOrnaments: number;\n modDashboard: number;\n modDial: number;\n modDoorSpeaker: number;\n modSeats: number;\n modSteeringWheel: number;\n modShifterLeavers: number;\n modAPlate: number;\n modSpeakers: number;\n modTrunk: number;\n modHydrolic: number;\n modEngineBlock: number;\n modAirFilter: number;\n modStruts: number;\n modArchCover: number;\n modAerials: number;\n modTrimB: number;\n modTank: number;\n modWindows: number;\n modDoorR: number;\n modLivery: number;\n modRoofLivery: number;\n modLightbar: number;\n windows: number[];\n doors: number[];\n tyres: Record<number | string, 1 | 2>;\n leftHeadlight: boolean;\n rightHeadlight: boolean;\n frontBumper: boolean;\n rearBumper: boolean;\n bulletProofTyres: boolean;\n driftTyres: boolean;\n}\n\n/**\n * Creates a promise that will be resolved once any value is returned by the function (including null).\n * @param {number?} timeout Error out after `~x` ms. Defaults to 1000, unless set to `false`.\n */\nexport async function waitFor<T>(cb: () => T, errMessage?: string, timeout?: number | false): Promise<T> {\n let value = await cb();\n\n if (value !== undefined) return value;\n\n if (timeout || timeout == null) {\n if (typeof timeout !== 'number') timeout = 1000;\n }\n\n const start = GetGameTimer();\n let id: number;\n\n const p = new Promise<T>((resolve, reject) => {\n id = setTick(async () => {\n const elapsed = timeout && GetGameTimer() - start;\n\n if (elapsed && elapsed > (timeout as number)) {\n return reject(`${errMessage || 'failed to resolve callback'} (waited ${elapsed}ms)`);\n }\n\n value = await cb();\n\n if (value !== undefined) resolve(value);\n });\n }).finally(() => clearTick(id));\n\n return p;\n}\n\nexport function getRandomInt(min = 0, max = 9) {\n if (min > max) [min, max] = [max, min];\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport function getRandomChar(lowercase?: boolean) {\n const str = String.fromCharCode(getRandomInt(65, 90));\n return lowercase ? str.toLowerCase() : str;\n}\n\nexport function getRandomAlphanumeric(lowercase?: boolean) {\n return Math.random() > 0.5 ? getRandomChar(lowercase) : getRandomInt();\n}\n\nconst formatChar: Record<string, (...args: any) => string | number> = {\n '1': getRandomInt,\n A: getRandomChar,\n '.': getRandomAlphanumeric,\n a: getRandomChar,\n};\n\nexport function getRandomString(pattern: string, length?: number): string {\n const len = length || pattern.replace(/\\^/g, '').length;\n const arr: Array<string | number> = Array(len).fill(0);\n let size = 0;\n let i = 0;\n\n while (size < len) {\n i += 1;\n let char: string | number = pattern.charAt(i - 1);\n\n if (char === '') {\n arr[size] = ' '.repeat(len - size);\n break;\n } else if (char === '^') {\n i += 1;\n char = pattern.charAt(i - 1);\n } else {\n const fn = formatChar[char];\n char = fn ? fn(char === 'a') : char;\n }\n\n size += 1;\n arr[size - 1] = char;\n }\n\n return arr.join('');\n}\n"],"mappings":";;AAAA,MAAa,UAAU,mBAAmB,IAAI,WAAW;AAMzD,SAAgB,MAAM,IAAY;CAChC,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,IAAI,CAAC;AAC/D;;;;;AAiGA,eAAsB,QAAW,IAAa,YAAqB,SAAsC;CACvG,IAAI,QAAQ,MAAM,GAAG;CAErB,IAAI,UAAU,KAAA,GAAW,OAAO;CAEhC,IAAI,WAAW,WAAW;MACpB,OAAO,YAAY,UAAU,UAAU;CAAA;CAG7C,MAAM,QAAQ,aAAa;CAC3B,IAAI;CAgBJ,OAdU,IAAI,SAAY,SAAS,WAAW;EAC5C,KAAK,QAAQ,YAAY;GACvB,MAAM,UAAU,WAAW,aAAa,IAAI;GAE5C,IAAI,WAAW,UAAW,SACxB,OAAO,OAAO,GAAG,cAAc,6BAA6B,WAAW,QAAQ,IAAI;GAGrF,QAAQ,MAAM,GAAG;GAEjB,IAAI,UAAU,KAAA,GAAW,QAAQ,KAAK;EACxC,CAAC;CACH,CAAC,EAAE,cAAc,UAAU,EAAE,CAEtB;AACT;AAEA,SAAgB,aAAa,MAAM,GAAG,MAAM,GAAG;CAC7C,IAAI,MAAM,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,GAAG;CAErC,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,MAAM,EAAE,IAAI;AACvD;AAEA,SAAgB,cAAc,WAAqB;CACjD,MAAM,MAAM,OAAO,aAAa,aAAa,IAAI,EAAE,CAAC;CACpD,OAAO,YAAY,IAAI,YAAY,IAAI;AACzC;AAEA,SAAgB,sBAAsB,WAAqB;CACzD,OAAO,KAAK,OAAO,IAAI,KAAM,cAAc,SAAS,IAAI,aAAa;AACvE;AAEA,MAAM,aAAgE;CACpE,KAAK;CACL,GAAG;CACH,KAAK;CACL,GAAG;AACL;AAEA,SAAgB,gBAAgB,SAAiB,QAAyB;CACxE,MAAM,MAAM,UAAU,QAAQ,QAAQ,OAAO,EAAE,EAAE;CACjD,MAAM,MAA8B,MAAM,GAAG,EAAE,KAAK,CAAC;CACrD,IAAI,OAAO;CACX,IAAI,IAAI;CAER,OAAO,OAAO,KAAK;EACjB,KAAK;EACL,IAAI,OAAwB,QAAQ,OAAO,IAAI,CAAC;EAEhD,IAAI,SAAS,IAAI;GACf,IAAI,QAAQ,IAAI,OAAO,MAAM,IAAI;GACjC;EACF,OAAO,IAAI,SAAS,KAAK;GACvB,KAAK;GACL,OAAO,QAAQ,OAAO,IAAI,CAAC;EAC7B,OAAO;GACL,MAAM,KAAK,WAAW;GACtB,OAAO,KAAK,GAAG,SAAS,GAAG,IAAI;EACjC;EAEA,QAAQ;EACR,IAAI,OAAO,KAAK;CAClB;CAEA,OAAO,IAAI,KAAK,EAAE;AACpB"} | ||
| {"version":3,"file":"misc.js","names":[],"sources":["../../common/misc.ts"],"sourcesContent":["export const context = IsDuplicityVersion() ? 'server' : 'client';\n\nexport type FlattenObjectKeys<T> = {\n [K in keyof T & string]: T[K] extends Record<string, any> ? K | `${K}.${FlattenObjectKeys<T[K]>}` : K;\n}[keyof T & string];\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms, null));\n}\n\nexport interface VehicleProperties {\n model?: string;\n plate?: string;\n plateIndex?: number;\n bodyHealth?: number;\n engineHealth?: number;\n tankHealth?: number;\n fuelLevel?: number;\n oilLevel?: number;\n dirtLevel?: number;\n paintType1?: number;\n paintType2?: number;\n color1?: number | [number, number, number];\n color2?: number | [number, number, number];\n pearlescentColor?: number;\n interiorColor?: number;\n dashboardColor?: number;\n wheelColor?: number;\n wheelWidth?: number;\n wheelSize?: number;\n wheels?: number;\n windowTint?: number;\n xenonColor?: number;\n neonEnabled?: boolean[];\n neonColor?: [number, number, number];\n extras?: Record<number | string, 0 | 1>;\n tyreSmokeColor?: [number, number, number];\n modSpoilers?: number;\n modFrontBumper?: number;\n modRearBumper?: number;\n modSideSkirt?: number;\n modExhaust?: number;\n modFrame?: number;\n modGrille?: number;\n modHood?: number;\n modFender?: number;\n modRightFender?: number;\n modRoof?: number;\n modEngine?: number;\n modBrakes?: number;\n modTransmission?: number;\n modHorns?: number;\n modSuspension?: number;\n modArmor?: number;\n modNitrous?: number;\n modTurbo?: boolean;\n modSubwoofer?: boolean;\n modSmokeEnabled?: boolean;\n modHydraulics?: boolean;\n modXenon?: boolean;\n modFrontWheels?: number;\n modBackWheels?: number;\n modCustomTiresF?: boolean;\n modCustomTiresR?: boolean;\n modPlateHolder?: number;\n modVanityPlate?: number;\n modTrimA?: number;\n modOrnaments?: number;\n modDashboard?: number;\n modDial?: number;\n modDoorSpeaker?: number;\n modSeats?: number;\n modSteeringWheel?: number;\n modShifterLeavers?: number;\n modAPlate?: number;\n modSpeakers?: number;\n modTrunk?: number;\n modHydrolic?: number;\n modEngineBlock?: number;\n modAirFilter?: number;\n modStruts?: number;\n modArchCover?: number;\n modAerials?: number;\n modTrimB?: number;\n modTank?: number;\n modWindows?: number;\n modDoorR?: number;\n modLivery?: number;\n modRoofLivery?: number;\n modLightbar?: number;\n windows?: number[];\n doors?: number[];\n tyres?: Record<number | string, 1 | 2>;\n leftHeadlight?: boolean;\n rightHeadlight?: boolean;\n frontBumper?: boolean;\n rearBumper?: boolean;\n bulletProofTyres?: boolean;\n driftTyres?: boolean;\n}\n\n/**\n * Creates a promise that will be resolved once any value is returned by the function (including null).\n * @param {number?} timeout Error out after `~x` ms. Defaults to 1000, unless set to `false`.\n */\nexport async function waitFor<T>(cb: () => T, errMessage?: string, timeout?: number | false): Promise<T> {\n let value = await cb();\n\n if (value !== undefined) return value;\n\n if (timeout || timeout == null) {\n if (typeof timeout !== 'number') timeout = 1000;\n }\n\n const start = GetGameTimer();\n let id: number;\n\n const p = new Promise<T>((resolve, reject) => {\n id = setTick(async () => {\n const elapsed = timeout && GetGameTimer() - start;\n\n if (elapsed && elapsed > (timeout as number)) {\n return reject(`${errMessage || 'failed to resolve callback'} (waited ${elapsed}ms)`);\n }\n\n value = await cb();\n\n if (value !== undefined) resolve(value);\n });\n }).finally(() => clearTick(id));\n\n return p;\n}\n\nexport function getRandomInt(min = 0, max = 9) {\n if (min > max) [min, max] = [max, min];\n\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport function getRandomChar(lowercase?: boolean) {\n const str = String.fromCharCode(getRandomInt(65, 90));\n return lowercase ? str.toLowerCase() : str;\n}\n\nexport function getRandomAlphanumeric(lowercase?: boolean) {\n return Math.random() > 0.5 ? getRandomChar(lowercase) : getRandomInt();\n}\n\nconst formatChar: Record<string, (...args: any) => string | number> = {\n '1': getRandomInt,\n A: getRandomChar,\n '.': getRandomAlphanumeric,\n a: getRandomChar,\n};\n\nexport function getRandomString(pattern: string, length?: number): string {\n const len = length || pattern.replace(/\\^/g, '').length;\n const arr: Array<string | number> = Array(len).fill(0);\n let size = 0;\n let i = 0;\n\n while (size < len) {\n i += 1;\n let char: string | number = pattern.charAt(i - 1);\n\n if (char === '') {\n arr[size] = ' '.repeat(len - size);\n break;\n } else if (char === '^') {\n i += 1;\n char = pattern.charAt(i - 1);\n } else {\n const fn = formatChar[char];\n char = fn ? fn(char === 'a') : char;\n }\n\n size += 1;\n arr[size - 1] = char;\n }\n\n return arr.join('');\n}\n"],"mappings":";;AAAA,MAAa,UAAU,mBAAmB,IAAI,WAAW;AAMzD,SAAgB,MAAM,IAAY;CAChC,OAAO,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,IAAI,CAAC;AAC/D;;;;;AAiGA,eAAsB,QAAW,IAAa,YAAqB,SAAsC;CACvG,IAAI,QAAQ,MAAM,GAAG;CAErB,IAAI,UAAU,KAAA,GAAW,OAAO;CAEhC,IAAI,WAAW,WAAW;MACpB,OAAO,YAAY,UAAU,UAAU;CAAA;CAG7C,MAAM,QAAQ,aAAa;CAC3B,IAAI;CAgBJ,OAdU,IAAI,SAAY,SAAS,WAAW;EAC5C,KAAK,QAAQ,YAAY;GACvB,MAAM,UAAU,WAAW,aAAa,IAAI;GAE5C,IAAI,WAAW,UAAW,SACxB,OAAO,OAAO,GAAG,cAAc,6BAA6B,WAAW,QAAQ,IAAI;GAGrF,QAAQ,MAAM,GAAG;GAEjB,IAAI,UAAU,KAAA,GAAW,QAAQ,KAAK;EACxC,CAAC;CACH,CAAC,EAAE,cAAc,UAAU,EAAE,CAEtB;AACT;AAEA,SAAgB,aAAa,MAAM,GAAG,MAAM,GAAG;CAC7C,IAAI,MAAM,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,GAAG;CAErC,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,MAAM,EAAE,IAAI;AACvD;AAEA,SAAgB,cAAc,WAAqB;CACjD,MAAM,MAAM,OAAO,aAAa,aAAa,IAAI,EAAE,CAAC;CACpD,OAAO,YAAY,IAAI,YAAY,IAAI;AACzC;AAEA,SAAgB,sBAAsB,WAAqB;CACzD,OAAO,KAAK,OAAO,IAAI,KAAM,cAAc,SAAS,IAAI,aAAa;AACvE;AAEA,MAAM,aAAgE;CACpE,KAAK;CACL,GAAG;CACH,KAAK;CACL,GAAG;AACL;AAEA,SAAgB,gBAAgB,SAAiB,QAAyB;CACxE,MAAM,MAAM,UAAU,QAAQ,QAAQ,OAAO,EAAE,EAAE;CACjD,MAAM,MAA8B,MAAM,GAAG,EAAE,KAAK,CAAC;CACrD,IAAI,OAAO;CACX,IAAI,IAAI;CAER,OAAO,OAAO,KAAK;EACjB,KAAK;EACL,IAAI,OAAwB,QAAQ,OAAO,IAAI,CAAC;EAEhD,IAAI,SAAS,IAAI;GACf,IAAI,QAAQ,IAAI,OAAO,MAAM,IAAI;GACjC;EACF,OAAO,IAAI,SAAS,KAAK;GACvB,KAAK;GACL,OAAO,QAAQ,OAAO,IAAI,CAAC;EAC7B,OAAO;GACL,MAAM,KAAK,WAAW;GACtB,OAAO,KAAK,GAAG,SAAS,GAAG,IAAI;EACjC;EAEA,QAAQ;EACR,IAAI,OAAO,KAAK;CAClB;CAEA,OAAO,IAAI,KAAK,EAAE;AACpB"} |
@@ -8,3 +8,3 @@ import { __name } from "../../_virtual/_rolldown/runtime.js"; | ||
| help?: string; | ||
| paramType?: 'number' | 'playerId' | 'string' | 'longString'; | ||
| type?: 'number' | 'playerId' | 'string' | 'longString'; | ||
| optional?: boolean; | ||
@@ -11,0 +11,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../../server/addCommand/index.ts"],"mappings":";;;KAEK,kBAAA,GAAqB,MAAM;AAAA,UAEtB,eAAA;EACR,IAAA;EACA,IAAA;EACA,SAAA;EACA,QAAA;AAAA;AAAA,UAGQ,mBAAA;EACR,IAAA;EACA,IAAA;EACA,MAAA,GAAS,eAAe;EACxB,UAAA;AAAA;AAAA,iBAoEc,UAAA,WAAqB,kBAAA,CAAA,CACnC,WAAA,qBACA,EAAA,GAAK,MAAA,UAAgB,IAAA,EAAM,CAAA,EAAG,GAAA,aAAgB,OAAA,OAC9C,UAAA,GAAa,mBAAA"} | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../../server/addCommand/index.ts"],"mappings":";;;KAEK,kBAAA,GAAqB,MAAM;AAAA,UAEtB,eAAA;EACR,IAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;AAAA;AAAA,UAGQ,mBAAA;EACR,IAAA;EACA,IAAA;EACA,MAAA,GAAS,eAAe;EACxB,UAAA;AAAA;AAAA,iBAyFc,UAAA,WAAqB,kBAAA,CAAA,CACnC,WAAA,qBACA,EAAA,GAAK,MAAA,UAAgB,IAAA,EAAM,CAAA,EAAG,GAAA,aAAgB,OAAA,OAC9C,UAAA,GAAa,mBAAA"} |
@@ -18,3 +18,3 @@ import "../../_virtual/_rolldown/runtime.js"; | ||
| let value; | ||
| switch (param.paramType) { | ||
| switch (param.type) { | ||
| case "number": | ||
@@ -37,3 +37,3 @@ value = +arg; | ||
| } | ||
| if (value === void 0 && (!param.optional || param.optional && arg)) return Citizen.trace(`^1command '${raw.split(" ")[0] || raw}' received an invalid ${param.paramType} for argument ${index + 1} (${param.name}), received '${arg}'^0`); | ||
| if (value === void 0 && (!param.optional || param.optional && arg)) return Citizen.trace(`^1command '${raw.split(" ")[0] || raw}' received an invalid ${param.type} for argument ${index + 1} (${param.name}), received '${arg}'^0`); | ||
| args[param.name] = value; | ||
@@ -44,10 +44,25 @@ delete args[index]; | ||
| } | ||
| function buildSuggestion(commandName, { params, help }) { | ||
| const hints = params ? params.map((param) => { | ||
| return { | ||
| name: param.name, | ||
| help: param.type ? param.help ? `${param.help} (type: ${param.type})` : `(type: ${param.type})` : param.help | ||
| }; | ||
| }) : void 0; | ||
| return { | ||
| name: `/${commandName}`, | ||
| help, | ||
| params: hints | ||
| }; | ||
| } | ||
| function addCommand(commandName, cb, properties) { | ||
| const restricted = properties?.restricted; | ||
| const params = properties?.params; | ||
| const commands = typeof commandName !== "object" ? [commandName] : commandName; | ||
| if (params) params.forEach((param) => { | ||
| if (param.paramType) param.help = param.help ? `${param.help} (type: ${param.paramType})` : `(type: ${param.paramType})`; | ||
| if ("argType" in param) { | ||
| param.type = param.argType; | ||
| delete param.argType; | ||
| } | ||
| }); | ||
| const commands = typeof commandName !== "object" ? [commandName] : commandName; | ||
| const numCommands = commands.length; | ||
| const commandHandler = (source, args, raw) => { | ||
@@ -58,9 +73,8 @@ const parsed = parseArguments(source, args, raw, params); | ||
| }; | ||
| commands.forEach((commandName, index) => { | ||
| commands.forEach((commandName) => { | ||
| RegisterCommand(commandName, commandHandler, restricted ? true : false); | ||
| if (restricted) { | ||
| const ace = `command.${commandName}`; | ||
| const restrictedType = typeof restricted; | ||
| if (restrictedType === "string" && !IsPrincipalAceAllowed(restricted, ace)) addAce(restricted, ace, true); | ||
| else if (restrictedType === "object") restricted.forEach((principal) => { | ||
| if (typeof restricted === "string" && !IsPrincipalAceAllowed(restricted, ace)) addAce(restricted, ace, true); | ||
| else if (Array.isArray(restricted)) restricted.forEach((principal) => { | ||
| if (!IsPrincipalAceAllowed(principal, ace)) addAce(principal, ace, true); | ||
@@ -70,7 +84,5 @@ }); | ||
| if (properties) { | ||
| properties.name = `/${commandName}`; | ||
| delete properties.restricted; | ||
| registeredCommmands.push(properties); | ||
| if (index !== numCommands && numCommands !== 1) properties = { ...properties }; | ||
| if (shouldSendCommands) emitNet("chat:addSuggestions", -1, properties); | ||
| const suggestion = buildSuggestion(commandName, properties); | ||
| registeredCommmands.push(suggestion); | ||
| if (shouldSendCommands) emitNet("chat:addSuggestions", -1, suggestion); | ||
| } | ||
@@ -77,0 +89,0 @@ }); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../server/addCommand/index.ts"],"sourcesContent":["import { addAce } from '../acl';\n\ntype OxCommandArguments = Record<string | number, string | number | boolean>;\n\ninterface OxCommandParams {\n name: string;\n help?: string;\n paramType?: 'number' | 'playerId' | 'string' | 'longString';\n optional?: boolean;\n}\n\ninterface OxCommandProperties {\n name?: string;\n help?: string;\n params?: OxCommandParams[];\n restricted?: boolean | string | string[];\n}\n\nconst registeredCommmands: OxCommandProperties[] = [];\nlet shouldSendCommands = false;\n\nsetTimeout(() => {\n shouldSendCommands = true;\n emitNet('chat:addSuggestions', -1, registeredCommmands);\n}, 1000);\n\non('playerJoining', () => {\n emitNet('chat:addSuggestions', source, registeredCommmands);\n});\n\nfunction parseArguments(\n source: number,\n args: OxCommandArguments,\n raw: string,\n params?: OxCommandParams[],\n): OxCommandArguments | undefined {\n if (!params) return args;\n\n const result = params.every((param, index) => {\n const arg = args[index];\n let value;\n\n switch (param.paramType) {\n case 'number':\n value = +arg;\n break;\n\n case 'string':\n value = !Number(arg) ? arg : false;\n break;\n\n case 'playerId':\n value = arg === 'me' ? source : +arg;\n if (!value || !DoesPlayerExist(value.toString())) value = false;\n\n break;\n\n case 'longString':\n value = raw.substring(raw.indexOf(arg as string));\n break;\n\n default:\n value = arg;\n break;\n }\n\n if (value === undefined && (!param.optional || (param.optional && arg))) {\n return Citizen.trace(\n `^1command '${raw.split(' ')[0] || raw}' received an invalid ${param.paramType} for argument ${index + 1} (${\n param.name\n }), received '${arg}'^0`,\n );\n }\n\n args[param.name] = value;\n delete args[index];\n\n return true;\n });\n\n return result ? args : undefined;\n}\n\nexport function addCommand<T extends OxCommandArguments>(\n commandName: string | string[],\n cb: (source: number, args: T, raw: string) => Promise<any>,\n properties?: OxCommandProperties,\n) {\n const restricted = properties?.restricted;\n const params = properties?.params;\n\n if (params) {\n params.forEach((param) => {\n if (param.paramType)\n param.help = param.help ? `${param.help} (type: ${param.paramType})` : `(type: ${param.paramType})`;\n });\n }\n\n const commands = typeof commandName !== 'object' ? [commandName] : commandName;\n const numCommands = commands.length;\n\n const commandHandler = (source: number, args: OxCommandArguments, raw: string) => {\n const parsed = parseArguments(source, args, raw, params) as T | undefined;\n\n if (!parsed) return;\n\n cb(source, parsed, raw).catch((e) =>\n Citizen.trace(`^1command '${raw.split(' ')[0] || raw}' failed to execute!^0\\n${e.message}`),\n );\n };\n\n commands.forEach((commandName, index) => {\n RegisterCommand(commandName, commandHandler, restricted ? true : false);\n\n if (restricted) {\n const ace = `command.${commandName}`;\n const restrictedType = typeof restricted;\n\n if (restrictedType === 'string' && !IsPrincipalAceAllowed(restricted as string, ace)) {\n addAce(restricted as string, ace, true);\n } else if (restrictedType === 'object') {\n const _restricted = restricted as string[];\n _restricted.forEach((principal) => {\n if (!IsPrincipalAceAllowed(principal, ace)) addAce(principal as string, ace, true);\n });\n }\n }\n\n if (properties) {\n properties.name = `/${commandName}`;\n delete properties.restricted;\n registeredCommmands.push(properties);\n\n if (index !== numCommands && numCommands !== 1) properties = { ...properties };\n\n if (shouldSendCommands) emitNet('chat:addSuggestions', -1, properties);\n }\n });\n}\n"],"mappings":";;;AAkBA,MAAM,sBAA6C,CAAC;AACpD,IAAI,qBAAqB;AAEzB,iBAAiB;CACf,qBAAqB;CACrB,QAAQ,uBAAuB,IAAI,mBAAmB;AACxD,GAAG,GAAI;AAEP,GAAG,uBAAuB;CACxB,QAAQ,uBAAuB,QAAQ,mBAAmB;AAC5D,CAAC;AAED,SAAS,eACP,QACA,MACA,KACA,QACgC;CAChC,IAAI,CAAC,QAAQ,OAAO;CA4CpB,OA1Ce,OAAO,OAAO,OAAO,UAAU;EAC5C,MAAM,MAAM,KAAK;EACjB,IAAI;EAEJ,QAAQ,MAAM,WAAd;GACE,KAAK;IACH,QAAQ,CAAC;IACT;GAEF,KAAK;IACH,QAAQ,CAAC,OAAO,GAAG,IAAI,MAAM;IAC7B;GAEF,KAAK;IACH,QAAQ,QAAQ,OAAO,SAAS,CAAC;IACjC,IAAI,CAAC,SAAS,CAAC,gBAAgB,MAAM,SAAS,CAAC,GAAG,QAAQ;IAE1D;GAEF,KAAK;IACH,QAAQ,IAAI,UAAU,IAAI,QAAQ,GAAa,CAAC;IAChD;GAEF;IACE,QAAQ;IACR;EACJ;EAEA,IAAI,UAAU,KAAA,MAAc,CAAC,MAAM,YAAa,MAAM,YAAY,MAChE,OAAO,QAAQ,MACb,cAAc,IAAI,MAAM,GAAG,EAAE,MAAM,IAAI,wBAAwB,MAAM,UAAU,gBAAgB,QAAQ,EAAE,IACvG,MAAM,KACP,eAAe,IAAI,IACtB;EAGF,KAAK,MAAM,QAAQ;EACnB,OAAO,KAAK;EAEZ,OAAO;CACT,CAEY,IAAI,OAAO,KAAA;AACzB;AAEA,SAAgB,WACd,aACA,IACA,YACA;CACA,MAAM,aAAa,YAAY;CAC/B,MAAM,SAAS,YAAY;CAE3B,IAAI,QACF,OAAO,SAAS,UAAU;EACxB,IAAI,MAAM,WACR,MAAM,OAAO,MAAM,OAAO,GAAG,MAAM,KAAK,UAAU,MAAM,UAAU,KAAK,UAAU,MAAM,UAAU;CACrG,CAAC;CAGH,MAAM,WAAW,OAAO,gBAAgB,WAAW,CAAC,WAAW,IAAI;CACnE,MAAM,cAAc,SAAS;CAE7B,MAAM,kBAAkB,QAAgB,MAA0B,QAAgB;EAChF,MAAM,SAAS,eAAe,QAAQ,MAAM,KAAK,MAAM;EAEvD,IAAI,CAAC,QAAQ;EAEb,GAAG,QAAQ,QAAQ,GAAG,EAAE,OAAO,MAC7B,QAAQ,MAAM,cAAc,IAAI,MAAM,GAAG,EAAE,MAAM,IAAI,0BAA0B,EAAE,SAAS,CAC5F;CACF;CAEA,SAAS,SAAS,aAAa,UAAU;EACvC,gBAAgB,aAAa,gBAAgB,aAAa,OAAO,KAAK;EAEtE,IAAI,YAAY;GACd,MAAM,MAAM,WAAW;GACvB,MAAM,iBAAiB,OAAO;GAE9B,IAAI,mBAAmB,YAAY,CAAC,sBAAsB,YAAsB,GAAG,GACjF,OAAO,YAAsB,KAAK,IAAI;QACjC,IAAI,mBAAmB,UAE5B,WAAY,SAAS,cAAc;IACjC,IAAI,CAAC,sBAAsB,WAAW,GAAG,GAAG,OAAO,WAAqB,KAAK,IAAI;GACnF,CAAC;EAEL;EAEA,IAAI,YAAY;GACd,WAAW,OAAO,IAAI;GACtB,OAAO,WAAW;GAClB,oBAAoB,KAAK,UAAU;GAEnC,IAAI,UAAU,eAAe,gBAAgB,GAAG,aAAa,EAAE,GAAG,WAAW;GAE7E,IAAI,oBAAoB,QAAQ,uBAAuB,IAAI,UAAU;EACvE;CACF,CAAC;AACH"} | ||
| {"version":3,"file":"index.js","names":[],"sources":["../../../server/addCommand/index.ts"],"sourcesContent":["import { addAce } from '../acl';\n\ntype OxCommandArguments = Record<string | number, string | number | boolean>;\n\ninterface OxCommandParams {\n name: string;\n help?: string;\n type?: 'number' | 'playerId' | 'string' | 'longString';\n optional?: boolean;\n}\n\ninterface OxCommandProperties {\n name?: string;\n help?: string;\n params?: OxCommandParams[];\n restricted?: boolean | string | string[];\n}\n\nconst registeredCommmands: OxCommandProperties[] = [];\nlet shouldSendCommands = false;\n\nsetTimeout(() => {\n shouldSendCommands = true;\n emitNet('chat:addSuggestions', -1, registeredCommmands);\n}, 1000);\n\non('playerJoining', () => {\n emitNet('chat:addSuggestions', source, registeredCommmands);\n});\n\nfunction parseArguments(\n source: number,\n args: OxCommandArguments,\n raw: string,\n params?: OxCommandParams[],\n): OxCommandArguments | undefined {\n if (!params) return args;\n\n const result = params.every((param, index) => {\n const arg = args[index];\n let value;\n\n switch (param.type) {\n case 'number':\n value = +arg;\n break;\n\n case 'string':\n value = !Number(arg) ? arg : false;\n break;\n\n case 'playerId':\n value = arg === 'me' ? source : +arg;\n if (!value || !DoesPlayerExist(value.toString())) value = false;\n\n break;\n\n case 'longString':\n value = raw.substring(raw.indexOf(arg as string));\n break;\n\n default:\n value = arg;\n break;\n }\n\n if (value === undefined && (!param.optional || (param.optional && arg))) {\n return Citizen.trace(\n `^1command '${raw.split(' ')[0] || raw}' received an invalid ${param.type} for argument ${index + 1} (${\n param.name\n }), received '${arg}'^0`,\n );\n }\n\n args[param.name] = value;\n delete args[index];\n\n return true;\n });\n\n return result ? args : undefined;\n}\n\nfunction buildSuggestion(commandName: string, { params, help }: OxCommandProperties) {\n const hints = params\n ? params.map((param) => {\n return {\n name: param.name,\n help: param.type\n ? param.help\n ? `${param.help} (type: ${param.type})`\n : `(type: ${param.type})`\n : param.help,\n };\n })\n : undefined;\n\n return {\n name: `/${commandName}`,\n help: help,\n params: hints,\n };\n}\n\nexport function addCommand<T extends OxCommandArguments>(\n commandName: string | string[],\n cb: (source: number, args: T, raw: string) => Promise<any>,\n properties?: OxCommandProperties,\n) {\n const restricted = properties?.restricted;\n const params = properties?.params;\n const commands = typeof commandName !== 'object' ? [commandName] : commandName;\n\n if (params) {\n params.forEach((param) => {\n if ('argType' in param) {\n param.type = param.argType as OxCommandParams['type'];\n delete param.argType;\n }\n });\n }\n\n const commandHandler = (source: number, args: OxCommandArguments, raw: string) => {\n const parsed = parseArguments(source, args, raw, params) as T | undefined;\n\n if (!parsed) return;\n\n cb(source, parsed, raw).catch((e) =>\n Citizen.trace(`^1command '${raw.split(' ')[0] || raw}' failed to execute!^0\\n${e.message}`),\n );\n };\n\n commands.forEach((commandName) => {\n RegisterCommand(commandName, commandHandler, restricted ? true : false);\n\n if (restricted) {\n const ace = `command.${commandName}`;\n\n if (typeof restricted === 'string' && !IsPrincipalAceAllowed(restricted as string, ace)) {\n addAce(restricted as string, ace, true);\n } else if (Array.isArray(restricted)) {\n restricted.forEach((principal) => {\n if (!IsPrincipalAceAllowed(principal, ace)) addAce(principal as string, ace, true);\n });\n }\n }\n\n if (properties) {\n const suggestion = buildSuggestion(commandName, properties);\n registeredCommmands.push(suggestion);\n\n if (shouldSendCommands) emitNet('chat:addSuggestions', -1, suggestion);\n }\n });\n}\n"],"mappings":";;;AAkBA,MAAM,sBAA6C,CAAC;AACpD,IAAI,qBAAqB;AAEzB,iBAAiB;CACf,qBAAqB;CACrB,QAAQ,uBAAuB,IAAI,mBAAmB;AACxD,GAAG,GAAI;AAEP,GAAG,uBAAuB;CACxB,QAAQ,uBAAuB,QAAQ,mBAAmB;AAC5D,CAAC;AAED,SAAS,eACP,QACA,MACA,KACA,QACgC;CAChC,IAAI,CAAC,QAAQ,OAAO;CA4CpB,OA1Ce,OAAO,OAAO,OAAO,UAAU;EAC5C,MAAM,MAAM,KAAK;EACjB,IAAI;EAEJ,QAAQ,MAAM,MAAd;GACE,KAAK;IACH,QAAQ,CAAC;IACT;GAEF,KAAK;IACH,QAAQ,CAAC,OAAO,GAAG,IAAI,MAAM;IAC7B;GAEF,KAAK;IACH,QAAQ,QAAQ,OAAO,SAAS,CAAC;IACjC,IAAI,CAAC,SAAS,CAAC,gBAAgB,MAAM,SAAS,CAAC,GAAG,QAAQ;IAE1D;GAEF,KAAK;IACH,QAAQ,IAAI,UAAU,IAAI,QAAQ,GAAa,CAAC;IAChD;GAEF;IACE,QAAQ;IACR;EACJ;EAEA,IAAI,UAAU,KAAA,MAAc,CAAC,MAAM,YAAa,MAAM,YAAY,MAChE,OAAO,QAAQ,MACb,cAAc,IAAI,MAAM,GAAG,EAAE,MAAM,IAAI,wBAAwB,MAAM,KAAK,gBAAgB,QAAQ,EAAE,IAClG,MAAM,KACP,eAAe,IAAI,IACtB;EAGF,KAAK,MAAM,QAAQ;EACnB,OAAO,KAAK;EAEZ,OAAO;CACT,CAEY,IAAI,OAAO,KAAA;AACzB;AAEA,SAAS,gBAAgB,aAAqB,EAAE,QAAQ,QAA6B;CACnF,MAAM,QAAQ,SACV,OAAO,KAAK,UAAU;EACpB,OAAO;GACL,MAAM,MAAM;GACZ,MAAM,MAAM,OACR,MAAM,OACJ,GAAG,MAAM,KAAK,UAAU,MAAM,KAAK,KACnC,UAAU,MAAM,KAAK,KACvB,MAAM;EACZ;CACF,CAAC,IACD,KAAA;CAEJ,OAAO;EACL,MAAM,IAAI;EACJ;EACN,QAAQ;CACV;AACF;AAEA,SAAgB,WACd,aACA,IACA,YACA;CACA,MAAM,aAAa,YAAY;CAC/B,MAAM,SAAS,YAAY;CAC3B,MAAM,WAAW,OAAO,gBAAgB,WAAW,CAAC,WAAW,IAAI;CAEnE,IAAI,QACF,OAAO,SAAS,UAAU;EACxB,IAAI,aAAa,OAAO;GACtB,MAAM,OAAO,MAAM;GACnB,OAAO,MAAM;EACf;CACF,CAAC;CAGH,MAAM,kBAAkB,QAAgB,MAA0B,QAAgB;EAChF,MAAM,SAAS,eAAe,QAAQ,MAAM,KAAK,MAAM;EAEvD,IAAI,CAAC,QAAQ;EAEb,GAAG,QAAQ,QAAQ,GAAG,EAAE,OAAO,MAC7B,QAAQ,MAAM,cAAc,IAAI,MAAM,GAAG,EAAE,MAAM,IAAI,0BAA0B,EAAE,SAAS,CAC5F;CACF;CAEA,SAAS,SAAS,gBAAgB;EAChC,gBAAgB,aAAa,gBAAgB,aAAa,OAAO,KAAK;EAEtE,IAAI,YAAY;GACd,MAAM,MAAM,WAAW;GAEvB,IAAI,OAAO,eAAe,YAAY,CAAC,sBAAsB,YAAsB,GAAG,GACpF,OAAO,YAAsB,KAAK,IAAI;QACjC,IAAI,MAAM,QAAQ,UAAU,GACjC,WAAW,SAAS,cAAc;IAChC,IAAI,CAAC,sBAAsB,WAAW,GAAG,GAAG,OAAO,WAAqB,KAAK,IAAI;GACnF,CAAC;EAEL;EAEA,IAAI,YAAY;GACd,MAAM,aAAa,gBAAgB,aAAa,UAAU;GAC1D,oBAAoB,KAAK,UAAU;GAEnC,IAAI,oBAAoB,QAAQ,uBAAuB,IAAI,UAAU;EACvE;CACF,CAAC;AACH"} |
| import { cache, onCache } from "../common/cache/index.js"; | ||
| import { StateBag } from "../common/game/StateBag/index.js"; | ||
| import { GameEntity } from "../common/game/Entity/index.js"; | ||
@@ -24,6 +23,6 @@ import { Prop } from "../common/game/Prop/index.js"; | ||
| declare namespace index_d_exports { | ||
| export { FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Prop, StateBag, Vehicle, VehicleProperties, VehicleType, Zone, addAce, addCommand, addPrincipal, cache, checkDependency, context, createLocales, createObject, createPed, createVehicle, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getServerLocale, initLocale, index_d_exports as lib, locale, onCache, onClientCallback, registerHook, removeAce, removePrincipal, setVehicleProperties, sleep, triggerClientCallback, versionCheck, waitFor }; | ||
| export { FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Prop, Vehicle, VehicleProperties, VehicleType, Zone, addAce, addCommand, addPrincipal, cache, checkDependency, context, createLocales, createObject, createPed, createVehicle, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getServerLocale, initLocale, index_d_exports as lib, locale, onCache, onClientCallback, registerHook, removeAce, removePrincipal, setVehicleProperties, sleep, triggerClientCallback, versionCheck, waitFor }; | ||
| } | ||
| //#endregion | ||
| export { FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Prop, StateBag, Vehicle, VehicleProperties, VehicleType, Zone, addAce, addCommand, addPrincipal, cache, checkDependency, context, createLocales, createObject, createPed, createVehicle, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getServerLocale, initLocale, index_d_exports as lib, locale, onCache, onClientCallback, registerHook, removeAce, removePrincipal, setVehicleProperties, sleep, triggerClientCallback, versionCheck, waitFor }; | ||
| export { FlattenObjectKeys, GameEntity, Hook, HookPipeline, Ped, Player, Prop, Vehicle, VehicleProperties, VehicleType, Zone, addAce, addCommand, addPrincipal, cache, checkDependency, context, createLocales, createObject, createPed, createVehicle, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getServerLocale, initLocale, index_d_exports as lib, locale, onCache, onClientCallback, registerHook, removeAce, removePrincipal, setVehicleProperties, sleep, triggerClientCallback, versionCheck, waitFor }; | ||
| //# sourceMappingURL=index.d.ts.map |
| import { __exportAll } from "../_virtual/_rolldown/runtime.js"; | ||
| import { cache, onCache } from "../common/cache/index.js"; | ||
| import { StateBag } from "../common/game/StateBag/index.js"; | ||
| import { GameEntity } from "../common/game/Entity/index.js"; | ||
@@ -31,3 +30,2 @@ import { Prop } from "../common/game/Prop/index.js"; | ||
| Prop: () => Prop, | ||
| StateBag: () => StateBag, | ||
| Vehicle: () => Vehicle, | ||
@@ -68,4 +66,4 @@ Zone: () => Zone, | ||
| //#endregion | ||
| export { GameEntity, HookPipeline, Ped, Player, Prop, StateBag, Vehicle, Zone, addAce, addCommand, addPrincipal, cache, checkDependency, context, createLocales, createObject, createPed, createVehicle, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getServerLocale, initLocale, server_exports as lib, locale, onCache, onClientCallback, registerHook, removeAce, removePrincipal, setVehicleProperties, sleep, triggerClientCallback, versionCheck, waitFor }; | ||
| export { GameEntity, HookPipeline, Ped, Player, Prop, Vehicle, Zone, addAce, addCommand, addPrincipal, cache, checkDependency, context, createLocales, createObject, createPed, createVehicle, getLocale, getLocales, getNearbyVehicles, getRandomAlphanumeric, getRandomChar, getRandomInt, getRandomString, getServerLocale, initLocale, server_exports as lib, locale, onCache, onClientCallback, registerHook, removeAce, removePrincipal, setVehicleProperties, sleep, triggerClientCallback, versionCheck, waitFor }; | ||
| //# sourceMappingURL=index.js.map |
+1
-1
| { | ||
| "name": "@overextended/ox_lib", | ||
| "version": "3.35.0", | ||
| "version": "3.36.0", | ||
| "description": "JS/TS wrapper for ox_lib exports", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
| import { __name } from "../../../_virtual/_rolldown/runtime.js"; | ||
| //#region common/game/StateBag/index.d.ts | ||
| declare class StateBag { | ||
| protected statebag: string; | ||
| constructor(statebag?: string); | ||
| /** Writes a value to the statebag. Replicated values set from the client are send to the server for validation. */ | ||
| set(key: string, value: unknown, replicated?: boolean): Promise<boolean>; | ||
| /** Returns a value from the statebag. */ | ||
| get<T = unknown>(key: string): T | undefined; | ||
| /** Returns if a key exists on the statebag. */ | ||
| has(key: string): boolean; | ||
| /** Returns an array of all keys on the statebag. */ | ||
| keys(): string[]; | ||
| } | ||
| //#endregion | ||
| export { StateBag }; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../common/game/StateBag/index.ts"],"mappings":";;;cAIa,QAAA;EAAA,UACW,QAAA;cAAA,QAAA;EADX;EAIE,GAAA,CAAI,GAAA,UAAa,KAAA,WAAgB,UAAA,aAAkB,OAAA;EAJ7C;EAoBZ,GAAA,aAAA,CAAiB,GAAA,WAAc,CAAC;EAnBjB;EAwBf,GAAA,CAAI,GAAA;EAxBW;EA6Bf,IAAA,CAAA;AAAA"} |
| import "../../../_virtual/_rolldown/runtime.js"; | ||
| import { cache } from "../../cache/index.js"; | ||
| //#region common/game/StateBag/index.ts | ||
| const allowStateBagReplication = cache.game === "fxserver" || !GetConvarBool("sv_stateBagStrictMode", false); | ||
| var StateBag = class { | ||
| statebag; | ||
| constructor(statebag = "") { | ||
| this.statebag = statebag; | ||
| } | ||
| /** Writes a value to the statebag. Replicated values set from the client are send to the server for validation. */ | ||
| async set(key, value, replicated = false) { | ||
| if (replicated && !allowStateBagReplication) return import("../../../client/callback/index.js").then((m) => m.triggerServerCallback("ox_lib:requestSetStateBag", null, this.statebag, key, value)); | ||
| const packed = msgpack_pack(value); | ||
| SetStateBagValue(this.statebag, key, packed, packed.length, replicated); | ||
| return true; | ||
| } | ||
| /** Returns a value from the statebag. */ | ||
| get(key) { | ||
| return GetStateBagValue(this.statebag, key); | ||
| } | ||
| /** Returns if a key exists on the statebag. */ | ||
| has(key) { | ||
| return !!StateBagHasKey(this.statebag, key); | ||
| } | ||
| /** Returns an array of all keys on the statebag. */ | ||
| keys() { | ||
| return GetStateBagKeys(this.statebag); | ||
| } | ||
| }; | ||
| //#endregion | ||
| export { StateBag }; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","names":[],"sources":["../../../../common/game/StateBag/index.ts"],"sourcesContent":["import { cache } from '../../cache';\n\nconst allowStateBagReplication = cache.game === 'fxserver' || !GetConvarBool('sv_stateBagStrictMode', false);\n\nexport class StateBag {\n constructor(protected statebag: string = '') {}\n\n /** Writes a value to the statebag. Replicated values set from the client are send to the server for validation. */\n public async set(key: string, value: unknown, replicated = false) {\n if (replicated && !allowStateBagReplication) {\n return import('../../../client/callback').then(\n (m) =>\n m.triggerServerCallback('ox_lib:requestSetStateBag', null, this.statebag, key, value) as Promise<boolean>,\n );\n }\n\n // @ts-ignore\n const packed = msgpack_pack(value);\n SetStateBagValue(this.statebag, key, packed, packed.length, replicated);\n\n return true;\n }\n\n /** Returns a value from the statebag. */\n public get<T = unknown>(key: string): T | undefined {\n return GetStateBagValue(this.statebag, key);\n }\n\n /** Returns if a key exists on the statebag. */\n public has(key: string) {\n return !!StateBagHasKey(this.statebag, key);\n }\n\n /** Returns an array of all keys on the statebag. */\n public keys(): string[] {\n return GetStateBagKeys(this.statebag);\n }\n}\n"],"mappings":";;;AAEA,MAAM,2BAA2B,MAAM,SAAS,cAAc,CAAC,cAAc,yBAAyB,KAAK;AAE3G,IAAa,WAAb,MAAsB;CACE;CAAtB,YAAY,WAA6B,IAAI;EAAvB,KAAA,WAAA;CAAwB;;CAG9C,MAAa,IAAI,KAAa,OAAgB,aAAa,OAAO;EAChE,IAAI,cAAc,CAAC,0BACjB,OAAO,OAAO,qCAA4B,MACvC,MACC,EAAE,sBAAsB,6BAA6B,MAAM,KAAK,UAAU,KAAK,KAAK,CACxF;EAIF,MAAM,SAAS,aAAa,KAAK;EACjC,iBAAiB,KAAK,UAAU,KAAK,QAAQ,OAAO,QAAQ,UAAU;EAEtE,OAAO;CACT;;CAGA,IAAwB,KAA4B;EAClD,OAAO,iBAAiB,KAAK,UAAU,GAAG;CAC5C;;CAGA,IAAW,KAAa;EACtB,OAAO,CAAC,CAAC,eAAe,KAAK,UAAU,GAAG;CAC5C;;CAGA,OAAwB;EACtB,OAAO,gBAAgB,KAAK,QAAQ;CACtC;AACF"} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
362749
0.54%2871
0.49%0
-100%185
-2.12%