diff --git a/server/src/index.ts b/server/src/index.ts
index 8b0293b..d2dd2d1 100644
--- a/server/src/index.ts
+++ b/server/src/index.ts
@@ -1,36 +1,93 @@
///
import rpc from 'rage-rpc'
-type ServerEvent = K extends keyof IServerEvents ? K : never
-type ServerEventCallback = K extends keyof IServerEvents
- ? ThisifyServerEvents[K]
+type RageFW_ServerEvent = K extends keyof RageFW_ICustomServerEvent
+ ? K
+ : K extends keyof IServerEvents
+ ? K
+ : never
+
+type RageFW_ServerEventCallback = K extends keyof RageFW_ICustomServerEvent
+ ? (
+ player: PlayerMp,
+ ...args: Parameters
+ ) => ReturnType
+ : K extends keyof IServerEvents
+ ? ThisifyServerEvents[K]
+ : never
+
+type RageFW_ClientEvent = K extends keyof RageFW_ICustomClientEvent
+ ? K
+ : K extends keyof IServerEvents
+ ? K
+ : never
+
+type RageFW_ClientEventArguments = K extends keyof RageFW_ICustomClientEvent
+ ? Parameters
+ : (K extends keyof IServerEvents ? ThisifyServerEvents[K] : never)[]
+
+type RageFW_ClientEventReturn = K extends keyof RageFW_ICustomClientEvent
+ ? ReturnType
: never
-declare class Server {
- public register>(
- eventName: K,
- callback: ServerEventCallback,
+interface RageFW_ICustomServerEvent {
+ customEvent(arg1: number, arg2: boolean): void
+}
+
+interface RageFW_ICustomClientEvent {
+ customClientEvent(arg1: number, arg2: boolean): boolean
+}
+
+class Server {
+ register(
+ eventName: RageFW_ServerEvent,
+ callback: RageFW_ServerEventCallback,
): void
- public registerMultiple(events: {
- [name: string]: (player: PlayerMp, ...args: any[]) => any
- }): void
-
- registerMultiple(events: { [name: string]: (...args: any[]) => any }) {
- Object.entries(events).forEach(([name, callback]) =>
- rpc.register(name, (data: any[]) => {
- return Array.isArray(data) ? callback(...data) : callback(data)
- }),
- )
+ public register(
+ eventName: string,
+ callback: (...args: unknown[]) => unknown,
+ ) {
+ rpc.register(eventName, callback)
}
- register() {}
+ // public registerMultiple(events: {
+ // [name: string]: (player: PlayerMp, ...args: any[]) => any
+ // }): void
+ //
+ // registerMultiple(events: { [name: string]: (...args: any[]) => any }) {
+ // Object.entries(events).forEach(([name, callback]) =>
+ // rpc.register(name, (data: any[]) => {
+ // return Array.isArray(data) ? callback(...data) : callback(data)
+ // }),
+ // )
+ // }
+ //
+ // register() {}
+}
+
+class Player {
+ triggerClient(
+ player: PlayerMp,
+ eventName: RageFW_ClientEvent,
+ ...args: RageFW_ClientEventArguments
+ ): RageFW_ClientEventReturn
+ public triggerClient(
+ player: PlayerMp,
+ eventName: string,
+ ...args: unknown[]
+ ) {
+ return rpc.callClient(player, eventName, ...args)
+ }
}
export const rage = {
event: new Server(),
+ player: new Player(),
}
-rage.event.register('customevent', vehicle => {})
+rage.event.register('customEvent', (player, arg1, arg2) => {
+ rage.player.triggerClient(player, 'customClientEvent', arg1, arg2)
+})
function test() {}
diff --git a/server/tsconfig.json b/server/tsconfig.json
index 5a57bcc..adf1a0d 100644
--- a/server/tsconfig.json
+++ b/server/tsconfig.json
@@ -3,6 +3,7 @@
"target": "ESNext",
"lib": ["ESNext", "ES5"],
"module": "ESNext",
+ "moduleResolution": "NodeNext",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,