@infernus/core 0.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.eslintrc +3 -0
  2. package/LICENSE +21 -0
  3. package/README.md +5 -0
  4. package/dist/bundle.d.ts +1668 -0
  5. package/dist/bundle.js +1 -0
  6. package/package.json +37 -0
  7. package/rollup.config.mjs +29 -0
  8. package/src/controllers/command/index.ts +57 -0
  9. package/src/controllers/filterscript/index.ts +69 -0
  10. package/src/controllers/gamemode/index.ts +277 -0
  11. package/src/controllers/gamemode/settings.ts +3 -0
  12. package/src/controllers/gametext/index.ts +61 -0
  13. package/src/controllers/gangzone/baseGangZone.ts +284 -0
  14. package/src/controllers/gangzone/gangZoneBus.ts +8 -0
  15. package/src/controllers/gangzone/gangZoneEvent.ts +91 -0
  16. package/src/controllers/gangzone/index.ts +2 -0
  17. package/src/controllers/i18n/index.ts +81 -0
  18. package/src/controllers/index.ts +12 -0
  19. package/src/controllers/menu/baseMenu.ts +203 -0
  20. package/src/controllers/menu/index.ts +2 -0
  21. package/src/controllers/menu/menuBus.ts +8 -0
  22. package/src/controllers/menu/menuEvent.ts +76 -0
  23. package/src/controllers/netstats/index.ts +43 -0
  24. package/src/controllers/npc/index.ts +2 -0
  25. package/src/controllers/npc/npcEvent.ts +26 -0
  26. package/src/controllers/npc/npcFunc.ts +64 -0
  27. package/src/controllers/player/basePlayer.ts +980 -0
  28. package/src/controllers/player/index.ts +3 -0
  29. package/src/controllers/player/pauseChecker.ts +39 -0
  30. package/src/controllers/player/playerBus.ts +9 -0
  31. package/src/controllers/player/playerEvent.ts +468 -0
  32. package/src/controllers/promise/client/index.ts +31 -0
  33. package/src/controllers/promise/dialog/index.ts +143 -0
  34. package/src/controllers/textdraw/baseTextDraw.ts +416 -0
  35. package/src/controllers/textdraw/index.ts +2 -0
  36. package/src/controllers/textdraw/textdrawBus.ts +8 -0
  37. package/src/controllers/textdraw/textdrawEvent.ts +61 -0
  38. package/src/controllers/vehicle/baseVehicle.ts +503 -0
  39. package/src/controllers/vehicle/index.ts +2 -0
  40. package/src/controllers/vehicle/vehicleBus.ts +8 -0
  41. package/src/controllers/vehicle/vehicleEvent.ts +201 -0
  42. package/src/enums/artwork.ts +5 -0
  43. package/src/enums/clickSources.ts +3 -0
  44. package/src/enums/dialogStyles.ts +8 -0
  45. package/src/enums/editResponseTypes.ts +5 -0
  46. package/src/enums/index.ts +18 -0
  47. package/src/enums/invalid.ts +13 -0
  48. package/src/enums/keys.ts +25 -0
  49. package/src/enums/limits.ts +18 -0
  50. package/src/enums/marker.ts +5 -0
  51. package/src/enums/netstat.ts +11 -0
  52. package/src/enums/npc.ts +11 -0
  53. package/src/enums/object.ts +25 -0
  54. package/src/enums/player.ts +92 -0
  55. package/src/enums/record.ts +5 -0
  56. package/src/enums/specialActions.ts +22 -0
  57. package/src/enums/streamer.ts +10 -0
  58. package/src/enums/textdrawFonts.ts +23 -0
  59. package/src/enums/vehicle.ts +32 -0
  60. package/src/enums/weapon.ts +82 -0
  61. package/src/interfaces/index.ts +233 -0
  62. package/src/logger/index.ts +24 -0
  63. package/src/main.ts +6 -0
  64. package/src/types/index.ts +48 -0
  65. package/src/utils/EventBus.ts +60 -0
  66. package/src/utils/animateUtils.ts +2504 -0
  67. package/src/utils/colorUtils.ts +43 -0
  68. package/src/utils/helperUtils.ts +403 -0
  69. package/src/utils/vehicleUtils.ts +321 -0
  70. package/src/wrapper/native/callbacks/index.ts +395 -0
  71. package/src/wrapper/native/functions/index.ts +3131 -0
  72. package/src/wrapper/streamer/3dtext/3dTextBus.ts +8 -0
  73. package/src/wrapper/streamer/3dtext/3dTextEvent.ts +70 -0
  74. package/src/wrapper/streamer/3dtext/base3DText.ts +184 -0
  75. package/src/wrapper/streamer/3dtext/index.ts +2 -0
  76. package/src/wrapper/streamer/actor/actorBus.ts +8 -0
  77. package/src/wrapper/streamer/actor/actorEvent.ts +95 -0
  78. package/src/wrapper/streamer/actor/baseActor.ts +278 -0
  79. package/src/wrapper/streamer/actor/index.ts +2 -0
  80. package/src/wrapper/streamer/area/areaBus.ts +8 -0
  81. package/src/wrapper/streamer/area/areaEvent.ts +99 -0
  82. package/src/wrapper/streamer/area/baseArea.ts +450 -0
  83. package/src/wrapper/streamer/area/index.ts +2 -0
  84. package/src/wrapper/streamer/checkpoint/baseCheckpoint.ts +136 -0
  85. package/src/wrapper/streamer/checkpoint/checkPointBus.ts +8 -0
  86. package/src/wrapper/streamer/checkpoint/checkPointEvent.ts +100 -0
  87. package/src/wrapper/streamer/checkpoint/index.ts +2 -0
  88. package/src/wrapper/streamer/common/index.ts +318 -0
  89. package/src/wrapper/streamer/index.ts +9 -0
  90. package/src/wrapper/streamer/mapIcon/baseMapIcon.ts +128 -0
  91. package/src/wrapper/streamer/mapIcon/index.ts +2 -0
  92. package/src/wrapper/streamer/mapIcon/mapIconBus.ts +8 -0
  93. package/src/wrapper/streamer/mapIcon/mapIconEvent.ts +67 -0
  94. package/src/wrapper/streamer/object/baseObject.ts +415 -0
  95. package/src/wrapper/streamer/object/index.ts +2 -0
  96. package/src/wrapper/streamer/object/objectBus.ts +8 -0
  97. package/src/wrapper/streamer/object/objectEvent.ts +177 -0
  98. package/src/wrapper/streamer/pickup/basePickup.ts +114 -0
  99. package/src/wrapper/streamer/pickup/index.ts +2 -0
  100. package/src/wrapper/streamer/pickup/pickupBus.ts +8 -0
  101. package/src/wrapper/streamer/pickup/pickupEvent.ts +84 -0
  102. package/src/wrapper/streamer/raceCP/baseRaceCP.ts +151 -0
  103. package/src/wrapper/streamer/raceCP/index.ts +2 -0
  104. package/src/wrapper/streamer/raceCP/raceCPBus.ts +8 -0
  105. package/src/wrapper/streamer/raceCP/raceCPEvent.ts +100 -0
  106. package/tsconfig.json +16 -0
@@ -0,0 +1,8 @@
1
+ import { EventBus } from "@/utils/eventBus";
2
+
3
+ export enum pickupHooks {
4
+ created = "OnPickupCreate",
5
+ destroyed = "OnPickupDestroy",
6
+ }
7
+
8
+ export const pickupBus = new EventBus();
@@ -0,0 +1,84 @@
1
+ import type { Player } from "@/controllers/player";
2
+ import type { TCommonCallback } from "@/types";
3
+ import { promisifyCallback } from "@/utils/helperUtils";
4
+ import { OnGameModeExit } from "@/wrapper/native/callbacks";
5
+ import {
6
+ OnPlayerPickUpDynamicPickup,
7
+ StreamerItemTypes,
8
+ } from "@infernus/streamer";
9
+ import { Streamer } from "../common";
10
+ import type { DynamicPickup } from "./basePickup";
11
+ import { pickupBus, pickupHooks } from "./pickupBus";
12
+
13
+ export class DynamicPickupEvent<P extends Player, K extends DynamicPickup> {
14
+ private readonly pickups = new Map<number, K>();
15
+ private readonly players;
16
+
17
+ constructor(playersMap: Map<number, P>, destroyOnExit = true) {
18
+ this.players = playersMap;
19
+ pickupBus.on(pickupHooks.created, (pickup: K) => {
20
+ this.pickups.set(pickup.id, pickup);
21
+ });
22
+ pickupBus.on(pickupHooks.destroyed, (pickup: K) => {
23
+ this.pickups.delete(pickup.id);
24
+ });
25
+ if (destroyOnExit) {
26
+ OnGameModeExit(() => {
27
+ this.pickups.forEach((p) => p.destroy());
28
+ this.pickups.clear();
29
+ });
30
+ }
31
+ OnPlayerPickUpDynamicPickup(
32
+ (playerid: number, pickupid: number): number => {
33
+ const k = this.pickups.get(pickupid);
34
+ if (!k) return 0;
35
+ const p = this.players.get(playerid);
36
+ if (!p) return 0;
37
+ const pFn = promisifyCallback(
38
+ this,
39
+ "onPlayerPickUp",
40
+ "OnPlayerPickUpDynamicPickup"
41
+ );
42
+ return pFn(p, k);
43
+ }
44
+ );
45
+ Streamer.onItemStreamIn((type, item, player) => {
46
+ if (type === StreamerItemTypes.PICKUP) {
47
+ const pk = this.pickups.get(item);
48
+ const p = this.players.get(player);
49
+ if (pk && p)
50
+ return promisifyCallback(
51
+ this,
52
+ "onStreamIn",
53
+ "Streamer_OnItemStreamIn"
54
+ )(pk, p);
55
+ }
56
+ return 1;
57
+ });
58
+ Streamer.onItemStreamOut((type, item, player) => {
59
+ if (type === StreamerItemTypes.PICKUP) {
60
+ const pk = this.pickups.get(item);
61
+ const p = this.players.get(player);
62
+ if (pk && p)
63
+ return promisifyCallback(
64
+ this,
65
+ "onStreamOut",
66
+ "Streamer_OnItemStreamOut"
67
+ )(pk, p);
68
+ }
69
+ return 1;
70
+ });
71
+ }
72
+
73
+ onPlayerPickUp?(player: P, pickup: K): TCommonCallback;
74
+ onStreamIn?(pickup: K, player: P): TCommonCallback;
75
+ onStreamOut?(pickup: K, player: P): TCommonCallback;
76
+
77
+ getPickupsArr(): Array<K> {
78
+ return [...this.pickups.values()];
79
+ }
80
+
81
+ getPickupsMap(): Map<number, K> {
82
+ return this.pickups;
83
+ }
84
+ }
@@ -0,0 +1,151 @@
1
+ import type { Player } from "@/controllers/player";
2
+ import type { IDynamicRaceCp } from "@/interfaces";
3
+
4
+ import { logger } from "@/logger";
5
+ import {
6
+ CreateDynamicRaceCP,
7
+ CreateDynamicRaceCPEx,
8
+ DestroyDynamicCP,
9
+ GetPlayerVisibleDynamicRaceCP,
10
+ IsPlayerInDynamicRaceCP,
11
+ IsValidDynamicCP,
12
+ StreamerDistances,
13
+ StreamerItemTypes,
14
+ TogglePlayerAllDynamicRaceCPs,
15
+ TogglePlayerDynamicRaceCP,
16
+ } from "@infernus/streamer";
17
+ import { Streamer } from "../common";
18
+
19
+ import { raceCPBus, raceCPHooks } from "./raceCPBus";
20
+
21
+ export class DynamicRaceCP {
22
+ private sourceInfo: IDynamicRaceCp;
23
+ private _id = -1;
24
+ get id(): number {
25
+ return this._id;
26
+ }
27
+ constructor(checkPoint: IDynamicRaceCp) {
28
+ this.sourceInfo = checkPoint;
29
+ }
30
+ create(): void | this {
31
+ if (this.id !== -1)
32
+ return logger.warn("[StreamerRaceCP]: Unable to create checkpoint again");
33
+ let { streamdistance, worldid, interiorid, playerid, areaid, priority } =
34
+ this.sourceInfo;
35
+ const { type, size, x, y, z, nextx, nexty, nextz, extended } =
36
+ this.sourceInfo;
37
+
38
+ if (type < 0 || type > 8)
39
+ return logger.error("[StreamerRaceCP]: Invalid type");
40
+
41
+ if (size < 0) return logger.error("[StreamerRaceCP]: Invalid size");
42
+
43
+ streamdistance ??= StreamerDistances.RACE_CP_SD;
44
+ priority ??= 0;
45
+
46
+ if (extended) {
47
+ if (typeof worldid === "number") worldid = [-1];
48
+ else worldid ??= [-1];
49
+ if (typeof interiorid === "number") interiorid = [-1];
50
+ else interiorid ??= [-1];
51
+ if (typeof playerid === "number") playerid = [-1];
52
+ else playerid ??= [-1];
53
+ if (typeof areaid === "number") areaid = [-1];
54
+ else areaid ??= [-1];
55
+
56
+ this._id = CreateDynamicRaceCPEx(
57
+ type,
58
+ x,
59
+ y,
60
+ z,
61
+ nextx,
62
+ nexty,
63
+ nextz,
64
+ size,
65
+ streamdistance,
66
+ worldid,
67
+ interiorid,
68
+ playerid,
69
+ areaid,
70
+ priority
71
+ );
72
+ } else {
73
+ if (Array.isArray(worldid)) worldid = -1;
74
+ else worldid ??= -1;
75
+ if (Array.isArray(interiorid)) interiorid = -1;
76
+ else interiorid ??= -1;
77
+ if (Array.isArray(playerid)) playerid = -1;
78
+ else playerid ??= -1;
79
+ if (Array.isArray(areaid)) areaid = -1;
80
+ else areaid ??= -1;
81
+
82
+ this._id = CreateDynamicRaceCP(
83
+ type,
84
+ x,
85
+ y,
86
+ z,
87
+ nextx,
88
+ nexty,
89
+ nextz,
90
+ size,
91
+ worldid,
92
+ interiorid,
93
+ playerid,
94
+ streamdistance,
95
+ areaid,
96
+ priority
97
+ );
98
+ }
99
+
100
+ raceCPBus.emit(raceCPHooks.created, this);
101
+ return this;
102
+ }
103
+ destroy(): void | this {
104
+ if (this.id === -1)
105
+ return logger.warn(
106
+ "[StreamerRaceCP]: Unable to destroy the checkpoint before create"
107
+ );
108
+ DestroyDynamicCP(this.id);
109
+ raceCPBus.emit(raceCPHooks.destroyed, this);
110
+ return this;
111
+ }
112
+ isValid(): boolean {
113
+ return IsValidDynamicCP(this.id);
114
+ }
115
+ togglePlayer<P extends Player>(player: P, toggle: boolean): void | this {
116
+ if (this.id === -1)
117
+ return logger.warn(
118
+ "[StreamerRaceCP]: Unable to toggle the player before create"
119
+ );
120
+ TogglePlayerDynamicRaceCP(player.id, this.id, toggle);
121
+ return this;
122
+ }
123
+ static togglePlayerAll<P extends Player>(player: P, toggle: boolean): number {
124
+ return TogglePlayerAllDynamicRaceCPs(player.id, toggle);
125
+ }
126
+ isPlayerIn<P extends Player>(player: P): boolean {
127
+ if (this.id === -1) return false;
128
+ return IsPlayerInDynamicRaceCP(player.id, this.id);
129
+ }
130
+ static getPlayerVisible<P extends Player, C extends DynamicRaceCP>(
131
+ player: P,
132
+ checkpoints: Map<number, C>
133
+ ): C | undefined {
134
+ return checkpoints.get(GetPlayerVisibleDynamicRaceCP(player.id));
135
+ }
136
+ toggleCallbacks(toggle = true): void | number {
137
+ if (this.id === -1)
138
+ return logger.warn(
139
+ "[StreamerRaceCP]: Unable to toggle callbacks before create"
140
+ );
141
+ return Streamer.toggleItemCallbacks(
142
+ StreamerItemTypes.RACE_CP,
143
+ this.id,
144
+ toggle
145
+ );
146
+ }
147
+ isToggleCallbacks(): boolean {
148
+ if (this.id === -1) false;
149
+ return Streamer.isToggleItemCallbacks(StreamerItemTypes.RACE_CP, this.id);
150
+ }
151
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./baseRaceCP";
2
+ export * from "./raceCPEvent";
@@ -0,0 +1,8 @@
1
+ import { EventBus } from "@/utils/eventBus";
2
+
3
+ export enum raceCPHooks {
4
+ created = "OnRaceCPCreate",
5
+ destroyed = "OnRaceCPDestroy",
6
+ }
7
+
8
+ export const raceCPBus = new EventBus();
@@ -0,0 +1,100 @@
1
+ import type { Player } from "@/controllers/player";
2
+ import type { TCommonCallback } from "@/types";
3
+ import { promisifyCallback } from "@/utils/helperUtils";
4
+ import { OnGameModeExit } from "@/wrapper/native/callbacks";
5
+ import {
6
+ OnPlayerEnterDynamicRaceCP,
7
+ OnPlayerLeaveDynamicRaceCP,
8
+ StreamerItemTypes,
9
+ } from "@infernus/streamer";
10
+ import { Streamer } from "../common";
11
+ import type { DynamicRaceCP } from "./baseRaceCP";
12
+ import { raceCPBus, raceCPHooks } from "./raceCPBus";
13
+
14
+ export class DynamicRaceCPEvent<P extends Player, R extends DynamicRaceCP> {
15
+ private readonly raceCPs = new Map<number, R>();
16
+ private readonly players;
17
+
18
+ constructor(playersMap: Map<number, P>, destroyOnExit = true) {
19
+ this.players = playersMap;
20
+ raceCPBus.on(raceCPHooks.created, (checkpoint: R) => {
21
+ this.raceCPs.set(checkpoint.id, checkpoint);
22
+ });
23
+ raceCPBus.on(raceCPHooks.destroyed, (checkpoint: R) => {
24
+ this.raceCPs.delete(checkpoint.id);
25
+ });
26
+ if (destroyOnExit) {
27
+ OnGameModeExit(() => {
28
+ this.raceCPs.forEach((r) => r.destroy());
29
+ this.raceCPs.clear();
30
+ });
31
+ }
32
+ OnPlayerEnterDynamicRaceCP(
33
+ (playerid: number, checkpointid: number): number => {
34
+ const cp = this.raceCPs.get(checkpointid);
35
+ if (!cp) return 0;
36
+ const p = this.players.get(playerid);
37
+ if (!p) return 0;
38
+ const pFn = promisifyCallback(
39
+ this,
40
+ "onPlayerEnter",
41
+ "OnPlayerEnterDynamicRaceCP"
42
+ );
43
+ return pFn(p, cp);
44
+ }
45
+ );
46
+ OnPlayerLeaveDynamicRaceCP(
47
+ (playerid: number, checkpointid: number): number => {
48
+ const cp = this.raceCPs.get(checkpointid);
49
+ if (!cp) return 0;
50
+ const p = this.players.get(playerid);
51
+ if (!p) return 0;
52
+ const pFn = promisifyCallback(
53
+ this,
54
+ "onPlayerLeave",
55
+ "OnPlayerLeaveDynamicRaceCP"
56
+ );
57
+ return pFn(p, cp);
58
+ }
59
+ );
60
+ Streamer.onItemStreamIn((type, item, player) => {
61
+ if (type === StreamerItemTypes.RACE_CP) {
62
+ const cp = this.raceCPs.get(item);
63
+ const p = this.players.get(player);
64
+ if (cp && p)
65
+ return promisifyCallback(
66
+ this,
67
+ "onStreamIn",
68
+ "Streamer_OnItemStreamIn"
69
+ )(cp, p);
70
+ }
71
+ return 1;
72
+ });
73
+ Streamer.onItemStreamOut((type, item, player) => {
74
+ if (type === StreamerItemTypes.RACE_CP) {
75
+ const cp = this.raceCPs.get(item);
76
+ const p = this.players.get(player);
77
+ if (cp && p)
78
+ return promisifyCallback(
79
+ this,
80
+ "onStreamOut",
81
+ "Streamer_OnItemStreamOut"
82
+ )(cp, p);
83
+ }
84
+ return 1;
85
+ });
86
+ }
87
+
88
+ onPlayerEnter?(player: P, checkpoint: R): TCommonCallback;
89
+ onPlayerLeave?(player: P, checkpoint: R): TCommonCallback;
90
+ onStreamIn?(checkpoint: R, player: P): TCommonCallback;
91
+ onStreamOut?(checkpoint: R, player: P): TCommonCallback;
92
+
93
+ getRaceCPsArr(): Array<R> {
94
+ return [...this.raceCPs.values()];
95
+ }
96
+
97
+ getRaceCPsMap(): Map<number, R> {
98
+ return this.raceCPs;
99
+ }
100
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "include": ["src/**/*.ts"],
3
+ "compilerOptions": {
4
+ "types": ["@sa-mp/node"],
5
+ "baseUrl": "./",
6
+ "paths": { "@/*": ["src/*"] },
7
+ "target": "ESNext",
8
+ "module": "ESNext",
9
+ "moduleResolution": "Node",
10
+ "esModuleInterop": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "strict": true,
13
+ "skipLibCheck": true,
14
+ "removeComments": true
15
+ }
16
+ }