@open-core/framework 1.0.1-beta.1 → 1.0.4-beta.1

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 (109) hide show
  1. package/README.md +12 -2
  2. package/dist/client/client-bootstrap.js +11 -14
  3. package/dist/client/client-core.d.ts +0 -17
  4. package/dist/client/client-core.js +0 -45
  5. package/dist/client/controllers/spawner.controller.d.ts +12 -0
  6. package/dist/client/controllers/spawner.controller.js +51 -0
  7. package/dist/client/index.d.ts +1 -0
  8. package/dist/client/index.js +1 -0
  9. package/dist/client/interfaces/appearance.interface.d.ts +19 -0
  10. package/dist/client/interfaces/appearance.interface.js +2 -0
  11. package/dist/client/services/appearance.service.d.ts +6 -0
  12. package/dist/client/services/appearance.service.js +89 -0
  13. package/dist/client/services/{world/blip.service.d.ts → blip.service.d.ts} +1 -1
  14. package/dist/client/services/index.d.ts +9 -4
  15. package/dist/client/services/index.js +9 -8
  16. package/dist/client/services/{world/marker.service.d.ts → marker.service.d.ts} +1 -1
  17. package/dist/client/services/{world/ped.service.d.ts → ped.service.d.ts} +1 -1
  18. package/dist/client/services/spawn.service.d.ts +73 -0
  19. package/dist/client/services/spawn.service.js +261 -0
  20. package/dist/client/services/{ui/textui.service.d.ts → textui.service.d.ts} +1 -1
  21. package/dist/client/services/{world/vehicle.service.d.ts → vehicle.service.d.ts} +1 -1
  22. package/dist/client/system/processors/export.processor.js +1 -1
  23. package/dist/index.d.ts +0 -2
  24. package/dist/index.js +1 -6
  25. package/dist/server/bootstrap.js +2 -2
  26. package/dist/server/controllers/command.controller.d.ts +1 -1
  27. package/dist/server/controllers/command.controller.js +6 -6
  28. package/dist/server/controllers/session.controller.d.ts +9 -0
  29. package/dist/server/controllers/session.controller.js +70 -0
  30. package/dist/server/database/adapters/oxmysql.adapter.js +1 -1
  31. package/dist/server/decorators/command.d.ts +34 -4
  32. package/dist/server/decorators/command.js +11 -6
  33. package/dist/server/decorators/controller.d.ts +22 -0
  34. package/dist/server/decorators/controller.js +22 -0
  35. package/dist/server/decorators/export.d.ts +38 -0
  36. package/dist/server/decorators/export.js +38 -0
  37. package/dist/server/decorators/guard.d.ts +51 -0
  38. package/dist/server/decorators/guard.js +43 -0
  39. package/dist/server/decorators/index.d.ts +4 -4
  40. package/dist/server/decorators/index.js +7 -4
  41. package/dist/server/decorators/onFiveMEvent.d.ts +6 -0
  42. package/dist/server/decorators/{coreEvent.js → onFiveMEvent.js} +8 -3
  43. package/dist/server/decorators/onFrameworkEvent.d.ts +22 -0
  44. package/dist/server/decorators/onFrameworkEvent.js +29 -0
  45. package/dist/server/decorators/onNet.d.ts +58 -0
  46. package/dist/server/decorators/onNet.js +57 -0
  47. package/dist/server/decorators/onTick.d.ts +31 -0
  48. package/dist/server/decorators/onTick.js +31 -0
  49. package/dist/server/decorators/public.d.ts +19 -8
  50. package/dist/server/decorators/public.js +19 -8
  51. package/dist/server/decorators/requiresState.d.ts +18 -17
  52. package/dist/server/decorators/requiresState.js +18 -17
  53. package/dist/server/decorators/throttle.d.ts +39 -0
  54. package/dist/server/decorators/throttle.js +27 -0
  55. package/dist/server/decorators/utils.d.ts +50 -0
  56. package/dist/server/decorators/utils.js +50 -0
  57. package/dist/server/entities/player.js +1 -1
  58. package/dist/server/error-handler.js +2 -2
  59. package/dist/server/helpers/resolve-method.d.ts +5 -0
  60. package/dist/server/helpers/resolve-method.js +18 -0
  61. package/dist/server/index.js +2 -0
  62. package/dist/server/loaders/playerSession.loader.js +13 -4
  63. package/dist/server/services/command.service.d.ts +1 -1
  64. package/dist/server/services/command.service.js +9 -6
  65. package/dist/server/system/metadata-server.keys.d.ts +1 -0
  66. package/dist/server/system/metadata-server.keys.js +1 -0
  67. package/dist/server/system/processors/command.processor.d.ts +2 -2
  68. package/dist/server/system/processors/command.processor.js +1 -2
  69. package/dist/server/system/processors/coreEvent.processor.d.ts +1 -1
  70. package/dist/server/system/processors/coreEvent.processor.js +6 -3
  71. package/dist/server/system/processors/export.processor.d.ts +1 -1
  72. package/dist/server/system/processors/export.processor.js +7 -3
  73. package/dist/server/system/processors/fivemEvent.processor.d.ts +7 -0
  74. package/dist/server/system/processors/fivemEvent.processor.js +40 -0
  75. package/dist/server/system/processors/netEvent.processor.d.ts +1 -1
  76. package/dist/server/system/processors/netEvent.processor.js +12 -9
  77. package/dist/server/system/processors.register.js +2 -0
  78. package/dist/server/system/schema-generator.d.ts +2 -0
  79. package/dist/server/system/schema-generator.js +34 -0
  80. package/dist/server/templates/admin/admin.controller-template.d.ts +7 -5
  81. package/dist/server/templates/auth/auth-provider.contract.d.ts +2 -2
  82. package/dist/server/types/core-events.d.ts +5 -0
  83. package/package.json +29 -1
  84. package/dist/client/loaders/exports.loader.d.ts +0 -1
  85. package/dist/client/loaders/exports.loader.js +0 -13
  86. package/dist/client/services/core/index.d.ts +0 -1
  87. package/dist/client/services/core/index.js +0 -17
  88. package/dist/client/services/core/spawn.service.d.ts +0 -20
  89. package/dist/client/services/core/spawn.service.js +0 -143
  90. package/dist/client/services/streaming/index.d.ts +0 -1
  91. package/dist/client/services/streaming/index.js +0 -17
  92. package/dist/client/services/ui/index.d.ts +0 -3
  93. package/dist/client/services/ui/index.js +0 -19
  94. package/dist/client/services/world/index.d.ts +0 -4
  95. package/dist/client/services/world/index.js +0 -20
  96. package/dist/server/decorators/coreEvent.d.ts +0 -2
  97. package/dist/server/decorators/netEvent.d.ts +0 -36
  98. package/dist/server/decorators/netEvent.js +0 -40
  99. /package/dist/client/services/{world/blip.service.js → blip.service.js} +0 -0
  100. /package/dist/client/services/{world/marker.service.js → marker.service.js} +0 -0
  101. /package/dist/client/services/{ui/notification.service.d.ts → notification.service.d.ts} +0 -0
  102. /package/dist/client/services/{ui/notification.service.js → notification.service.js} +0 -0
  103. /package/dist/client/services/{world/ped.service.js → ped.service.js} +0 -0
  104. /package/dist/client/services/{ui/progress.service.d.ts → progress.service.d.ts} +0 -0
  105. /package/dist/client/services/{ui/progress.service.js → progress.service.js} +0 -0
  106. /package/dist/client/services/{streaming/streaming.service.d.ts → streaming.service.d.ts} +0 -0
  107. /package/dist/client/services/{streaming/streaming.service.js → streaming.service.js} +0 -0
  108. /package/dist/client/services/{ui/textui.service.js → textui.service.js} +0 -0
  109. /package/dist/client/services/{world/vehicle.service.js → vehicle.service.js} +0 -0
@@ -10,8 +10,13 @@ export interface TransferCompletedPayload {
10
10
  amount: number;
11
11
  targetId: number;
12
12
  }
13
+ export interface PlayerFullyConnectedPayload {
14
+ clientId: number;
15
+ license: string;
16
+ }
13
17
  export type CoreEventMap = {
14
18
  'core:playerSessionCreated': PlayerSessionCreatedPayload;
15
19
  'core:playerSessionDestroyed': PlayerSessionDestroyedPayload;
16
20
  'core:transfer:completed': TransferCompletedPayload;
21
+ 'core:playerFullyConnected': PlayerFullyConnectedPayload;
17
22
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-core/framework",
3
- "version": "1.0.1-beta.1",
3
+ "version": "1.0.4-beta.1",
4
4
  "description": "Secure, Event-Driven, OOP Engine for FiveM. Stop scripting, start engineering.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,6 +18,34 @@
18
18
  "README.md",
19
19
  "LICENSE"
20
20
  ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js",
25
+ "require": "./dist/index.js"
26
+ },
27
+ "./server": {
28
+ "types": "./dist/server/index.d.ts",
29
+ "import": "./dist/server/index.js",
30
+ "require": "./dist/server/index.js"
31
+ },
32
+ "./client": {
33
+ "types": "./dist/client/index.d.ts",
34
+ "import": "./dist/client/index.js",
35
+ "require": "./dist/client/index.js"
36
+ },
37
+ "./shared": {
38
+ "types": "./dist/shared/index.d.ts",
39
+ "import": "./dist/shared/index.js",
40
+ "require": "./dist/shared/index.js"
41
+ },
42
+ "./utils": {
43
+ "types": "./dist/utils/index.d.ts",
44
+ "import": "./dist/utils/index.js",
45
+ "require": "./dist/utils/index.js"
46
+ },
47
+ "./package.json": "./package.json"
48
+ },
21
49
  "scripts": {
22
50
  "build": "tsc -p tsconfig.build.json",
23
51
  "watch": "tsc -p tsconfig.build.json --watch",
@@ -1 +0,0 @@
1
- export declare const loadClientExports: () => void;
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadClientExports = void 0;
4
- const logger_1 = require("../../shared/logger");
5
- const clientExports = logger_1.coreLogger.child('Exports', logger_1.LogDomain.CLIENT);
6
- const loadClientExports = () => {
7
- exports('core:sendcommand', (commandName, args = []) => {
8
- const rawCommand = `/${commandName} ${args.join(' ')}`;
9
- emitNet('core:internal:executeCommand', commandName, args, rawCommand);
10
- });
11
- clientExports.debug('Client exports loaded: SendCommand');
12
- };
13
- exports.loadClientExports = loadClientExports;
@@ -1 +0,0 @@
1
- export * from './spawn.service';
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./spawn.service"), exports);
@@ -1,20 +0,0 @@
1
- import { Vector3 } from '../../../utils';
2
- export declare class Spawner {
3
- private spawned;
4
- init(): Promise<void>;
5
- handleSpawn(data: {
6
- position: Vector3;
7
- model: string;
8
- }): Promise<void>;
9
- handleRespawn(position: Vector3, heading?: number): Promise<void>;
10
- handleTeleport(position: Vector3, heading?: number): Promise<void>;
11
- spawn(position: Vector3, model: string, heading?: number): Promise<void>;
12
- teleportTo(position: Vector3, heading?: number): Promise<void>;
13
- respawn(position: Vector3, heading?: number): Promise<void>;
14
- isSpawned(): boolean;
15
- private ensureNetworkReady;
16
- private closeLoadingScreens;
17
- private setPlayerModel;
18
- private ensurePed;
19
- private placePed;
20
- }
@@ -1,143 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Spawner = void 0;
13
- const tsyringe_1 = require("tsyringe");
14
- const onNet_1 = require("../../decorators/onNet");
15
- const logger_1 = require("../../../shared/logger");
16
- const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
17
- let Spawner = class Spawner {
18
- constructor() {
19
- this.spawned = false;
20
- }
21
- async init() {
22
- logger_1.loggers.spawn.debug('SpawnService initialized');
23
- }
24
- async handleSpawn(data) {
25
- await this.spawn(data.position, data.model);
26
- }
27
- async handleRespawn(position, heading = 0.0) {
28
- await this.respawn(position, heading);
29
- }
30
- async handleTeleport(position, heading) {
31
- await this.teleportTo(position, heading);
32
- }
33
- async spawn(position, model, heading = 0.0) {
34
- logger_1.loggers.spawn.info('First spawn requested', {
35
- position: { x: position.x, y: position.y, z: position.z },
36
- model,
37
- });
38
- await this.ensureNetworkReady();
39
- this.closeLoadingScreens();
40
- await this.setPlayerModel(model);
41
- const ped = await this.ensurePed();
42
- await this.placePed(ped, position, heading);
43
- this.spawned = true;
44
- logger_1.loggers.spawn.info('Player spawned successfully (first spawn)');
45
- }
46
- async teleportTo(position, heading) {
47
- const ped = await this.ensurePed();
48
- FreezeEntityPosition(ped, true);
49
- SetEntityCoordsNoOffset(ped, position.x, position.y, position.z, false, false, false);
50
- if (heading !== undefined) {
51
- SetEntityHeading(ped, heading);
52
- }
53
- FreezeEntityPosition(ped, false);
54
- logger_1.loggers.spawn.debug('Teleported', {
55
- position: { x: position.x, y: position.y, z: position.z },
56
- });
57
- }
58
- async respawn(position, heading = 0.0) {
59
- const ped = await this.ensurePed();
60
- ClearPedTasksImmediately(ped);
61
- SetEntityHealth(ped, GetEntityMaxHealth(ped));
62
- await this.teleportTo(position, heading);
63
- logger_1.loggers.spawn.info('Player respawned', {
64
- position: { x: position.x, y: position.y, z: position.z },
65
- });
66
- }
67
- isSpawned() {
68
- return this.spawned;
69
- }
70
- async ensureNetworkReady() {
71
- while (!NetworkIsSessionStarted()) {
72
- await delay(0);
73
- }
74
- }
75
- closeLoadingScreens() {
76
- try {
77
- ShutdownLoadingScreen();
78
- }
79
- catch (_a) { }
80
- try {
81
- ShutdownLoadingScreenNui();
82
- }
83
- catch (_b) { }
84
- }
85
- async setPlayerModel(model) {
86
- const modelHash = GetHashKey(model);
87
- if (!IsModelInCdimage(modelHash) || !IsModelValid(modelHash)) {
88
- logger_1.loggers.spawn.error(`Invalid model requested`, { model });
89
- throw new Error('MODEL_INVALID');
90
- }
91
- RequestModel(modelHash);
92
- while (!HasModelLoaded(modelHash)) {
93
- await delay(0);
94
- }
95
- SetPlayerModel(PlayerId(), modelHash);
96
- SetModelAsNoLongerNeeded(modelHash);
97
- }
98
- async ensurePed() {
99
- let ped = PlayerPedId();
100
- while (ped === 0) {
101
- await delay(0);
102
- ped = PlayerPedId();
103
- }
104
- return ped;
105
- }
106
- async placePed(ped, position, heading) {
107
- FreezeEntityPosition(ped, true);
108
- SetEntityCoordsNoOffset(ped, position.x, position.y, position.z, false, false, false);
109
- SetEntityHeading(ped, heading);
110
- ResetEntityAlpha(ped);
111
- SetEntityVisible(ped, true, false);
112
- SetEntityCollision(ped, true, true);
113
- SetEntityInvincible(ped, false);
114
- ClearPedTasksImmediately(ped);
115
- RemoveAllPedWeapons(ped, true);
116
- FreezeEntityPosition(ped, false);
117
- if (!IsScreenFadedIn() && !IsScreenFadingIn()) {
118
- DoScreenFadeIn(500);
119
- }
120
- }
121
- };
122
- exports.Spawner = Spawner;
123
- __decorate([
124
- (0, onNet_1.OnNet)('core:spawner:spawn'),
125
- __metadata("design:type", Function),
126
- __metadata("design:paramtypes", [Object]),
127
- __metadata("design:returntype", Promise)
128
- ], Spawner.prototype, "handleSpawn", null);
129
- __decorate([
130
- (0, onNet_1.OnNet)('core:spawner:respawn'),
131
- __metadata("design:type", Function),
132
- __metadata("design:paramtypes", [Object, Object]),
133
- __metadata("design:returntype", Promise)
134
- ], Spawner.prototype, "handleRespawn", null);
135
- __decorate([
136
- (0, onNet_1.OnNet)('core:spawner:teleport'),
137
- __metadata("design:type", Function),
138
- __metadata("design:paramtypes", [Object, Number]),
139
- __metadata("design:returntype", Promise)
140
- ], Spawner.prototype, "handleTeleport", null);
141
- exports.Spawner = Spawner = __decorate([
142
- (0, tsyringe_1.injectable)()
143
- ], Spawner);
@@ -1 +0,0 @@
1
- export * from './streaming.service';
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./streaming.service"), exports);
@@ -1,3 +0,0 @@
1
- export * from './notification.service';
2
- export * from './textui.service';
3
- export * from './progress.service';
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./notification.service"), exports);
18
- __exportStar(require("./textui.service"), exports);
19
- __exportStar(require("./progress.service"), exports);
@@ -1,4 +0,0 @@
1
- export * from './marker.service';
2
- export * from './blip.service';
3
- export * from './vehicle.service';
4
- export * from './ped.service';
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./marker.service"), exports);
18
- __exportStar(require("./blip.service"), exports);
19
- __exportStar(require("./vehicle.service"), exports);
20
- __exportStar(require("./ped.service"), exports);
@@ -1,2 +0,0 @@
1
- import type { CoreEventMap } from '../types/core-events';
2
- export declare function OnCoreEvent<K extends keyof CoreEventMap>(event: K): (target: any, propertyKey: string) => void;
@@ -1,36 +0,0 @@
1
- import type { z } from 'zod';
2
- export interface NetEventOptions {
3
- eventName: string;
4
- schema?: z.ZodType;
5
- }
6
- /**
7
- * Decorator used to register a server-side NetEvent handler.
8
- *
9
- * ## Player Injection
10
- * The handler method will **always receive a `ServerPlayer` instance as its
11
- * first argument**, automatically resolved by the Core based on the client
12
- * that triggered the event.
13
- *
14
- * This means you do NOT need to read `source`, `global.source` or call
15
- * `GetPlayerIdentifier()`: the Core resolves the player for you.
16
- *
17
- * ## Example
18
- * ```ts
19
- * export class AuthServerController {
20
- * @OnNet('auth:loginAttempt')
21
- * handleLogin(player: ServerPlayer, username: string, password: string) {
22
- * console.log(player.name, 'is trying to log in');
23
- * }
24
- * }
25
- * ```
26
- *
27
- * ## Event Arguments
28
- * Any arguments sent from the client will be passed **after** the `ServerPlayer`
29
- * instance:
30
- *
31
- * client → emitNet("auth:loginAttempt", username, password)
32
- * server → handler(player, username, password)
33
- *
34
- * @param eventName - The name of the network event to listen for.
35
- */
36
- export declare function OnNet(eventName: string, schema?: z.ZodType): (target: any, propertyKey: string) => void;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OnNet = OnNet;
4
- const metadata_server_keys_1 = require("../system/metadata-server.keys");
5
- /**
6
- * Decorator used to register a server-side NetEvent handler.
7
- *
8
- * ## Player Injection
9
- * The handler method will **always receive a `ServerPlayer` instance as its
10
- * first argument**, automatically resolved by the Core based on the client
11
- * that triggered the event.
12
- *
13
- * This means you do NOT need to read `source`, `global.source` or call
14
- * `GetPlayerIdentifier()`: the Core resolves the player for you.
15
- *
16
- * ## Example
17
- * ```ts
18
- * export class AuthServerController {
19
- * @OnNet('auth:loginAttempt')
20
- * handleLogin(player: ServerPlayer, username: string, password: string) {
21
- * console.log(player.name, 'is trying to log in');
22
- * }
23
- * }
24
- * ```
25
- *
26
- * ## Event Arguments
27
- * Any arguments sent from the client will be passed **after** the `ServerPlayer`
28
- * instance:
29
- *
30
- * client → emitNet("auth:loginAttempt", username, password)
31
- * server → handler(player, username, password)
32
- *
33
- * @param eventName - The name of the network event to listen for.
34
- */
35
- function OnNet(eventName, schema) {
36
- return (target, propertyKey) => {
37
- const metadata = { eventName, schema };
38
- Reflect.defineMetadata(metadata_server_keys_1.METADATA_KEYS.NET_EVENT, metadata, target, propertyKey);
39
- };
40
- }