rock-mod 0.19.0 → 0.21.0

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 (177) hide show
  1. package/dist/client/RockMod.d.ts +1 -1
  2. package/dist/client/RockMod.js +4 -0
  3. package/dist/client/entities/ccmp/camera/CCMPCamera.d.ts +24 -0
  4. package/dist/client/entities/ccmp/camera/CCMPCamera.js +58 -0
  5. package/dist/client/entities/ccmp/camera/CCMPCameraManager.d.ts +16 -0
  6. package/dist/client/entities/ccmp/camera/CCMPCameraManager.js +50 -0
  7. package/dist/client/entities/ccmp/ped/CCMPPed.d.ts +65 -0
  8. package/dist/client/entities/ccmp/ped/CCMPPed.js +185 -0
  9. package/dist/client/entities/ccmp/ped/CCMPPedsManager.d.ts +20 -0
  10. package/dist/client/entities/ccmp/ped/CCMPPedsManager.js +105 -0
  11. package/dist/client/entities/ccmp/player/CCMPPlayer.d.ts +112 -0
  12. package/dist/client/entities/ccmp/player/CCMPPlayer.js +332 -0
  13. package/dist/client/entities/ccmp/player/CCMPPlayersManager.d.ts +84 -0
  14. package/dist/client/entities/ccmp/player/CCMPPlayersManager.js +318 -0
  15. package/dist/client/entities/ccmp/vehicle/CCMPVehiclesManager.d.ts +64 -0
  16. package/dist/client/entities/ccmp/vehicle/CCMPVehiclesManager.js +105 -0
  17. package/dist/client/entities/common/entity/IEntity.d.ts +3 -0
  18. package/dist/client/entities/common/ped/IPed.d.ts +5 -0
  19. package/dist/client/entities/common/player/IPlayer.d.ts +1 -0
  20. package/dist/client/entities/common/vehicle/IVehicle.d.ts +11 -0
  21. package/dist/client/entities/ragemp/entity/RageEntity.d.ts +3 -0
  22. package/dist/client/entities/ragemp/entity/RageEntity.js +16 -2
  23. package/dist/client/entities/ragemp/ped/RagePed.d.ts +5 -0
  24. package/dist/client/entities/ragemp/ped/RagePed.js +16 -0
  25. package/dist/client/entities/ragemp/player/RagePlayer.d.ts +1 -0
  26. package/dist/client/entities/ragemp/player/RagePlayer.js +3 -0
  27. package/dist/client/entities/ragemp/vehicle/RageVehicle.d.ts +11 -0
  28. package/dist/client/entities/ragemp/vehicle/RageVehicle.js +36 -0
  29. package/dist/client/factories/ccmp/CCMPManagersFactory.d.ts +46 -0
  30. package/dist/client/factories/ccmp/CCMPManagersFactory.js +149 -0
  31. package/dist/client/factories/ccmp/createNotImplementedProxy.d.ts +1 -0
  32. package/dist/client/factories/ccmp/createNotImplementedProxy.js +24 -0
  33. package/dist/client/game/ccmp/browser/CCMPBrowserManager.d.ts +22 -0
  34. package/dist/client/game/ccmp/browser/CCMPBrowserManager.js +66 -0
  35. package/dist/client/game/ccmp/chat/CCMPChatManager.d.ts +26 -0
  36. package/dist/client/game/ccmp/chat/CCMPChatManager.js +41 -0
  37. package/dist/client/game/ccmp/controls/CCMPControlsManager.d.ts +33 -0
  38. package/dist/client/game/ccmp/controls/CCMPControlsManager.js +47 -0
  39. package/dist/client/game/ccmp/cursor/CCMPCursorManager.d.ts +6 -0
  40. package/dist/client/game/ccmp/cursor/CCMPCursorManager.js +15 -0
  41. package/dist/client/game/ccmp/gameplay/CCMPGameplayManager.d.ts +6 -0
  42. package/dist/client/game/ccmp/gameplay/CCMPGameplayManager.js +10 -0
  43. package/dist/client/game/ccmp/graphics/CCMPGraphicsManager.d.ts +58 -0
  44. package/dist/client/game/ccmp/graphics/CCMPGraphicsManager.js +112 -0
  45. package/dist/client/game/ccmp/gui/CCMPGuiManager.d.ts +5 -0
  46. package/dist/client/game/ccmp/gui/CCMPGuiManager.js +17 -0
  47. package/dist/client/game/ccmp/keys/CCMPKeysManager.d.ts +41 -0
  48. package/dist/client/game/ccmp/keys/CCMPKeysManager.js +94 -0
  49. package/dist/client/game/ccmp/nametags/CCMPNametagsManager.d.ts +4 -0
  50. package/dist/client/game/ccmp/nametags/CCMPNametagsManager.js +6 -0
  51. package/dist/client/game/ccmp/native/CCMPNativeCallerManager.d.ts +74 -0
  52. package/dist/client/game/ccmp/native/CCMPNativeCallerManager.js +129 -0
  53. package/dist/client/game/ccmp/native/_generated/nativeDispatch.d.ts +5 -0
  54. package/dist/client/game/ccmp/native/_generated/nativeDispatch.js +8123 -0
  55. package/dist/client/game/ccmp/object/CCMPGameObjectManager.d.ts +4 -0
  56. package/dist/client/game/ccmp/object/CCMPGameObjectManager.js +6 -0
  57. package/dist/client/game/ccmp/pathfind/CCMPPathfindManager.d.ts +26 -0
  58. package/dist/client/game/ccmp/pathfind/CCMPPathfindManager.js +31 -0
  59. package/dist/client/game/ccmp/raycasting/CCMPRaycastingManager.d.ts +10 -0
  60. package/dist/client/game/ccmp/raycasting/CCMPRaycastingManager.js +46 -0
  61. package/dist/client/game/ccmp/storage/CCMPStorageManager.d.ts +25 -0
  62. package/dist/client/game/ccmp/storage/CCMPStorageManager.js +46 -0
  63. package/dist/client/game/ccmp/streaming/CCMPStreamingManager.d.ts +17 -0
  64. package/dist/client/game/ccmp/streaming/CCMPStreamingManager.js +41 -0
  65. package/dist/client/game/ccmp/ui/CCMPUiManager.d.ts +41 -0
  66. package/dist/client/game/ccmp/ui/CCMPUiManager.js +69 -0
  67. package/dist/client/game/ccmp/zone/CCMPZoneManager.d.ts +19 -0
  68. package/dist/client/game/ccmp/zone/CCMPZoneManager.js +20 -0
  69. package/dist/client/game/common/browser/IBrowserManager.d.ts +7 -0
  70. package/dist/client/game/common/chat/IChatManager.d.ts +1 -0
  71. package/dist/client/game/common/controls/IControlsManager.d.ts +3 -0
  72. package/dist/client/game/common/graphics/IGraphicsManager.d.ts +19 -0
  73. package/dist/client/game/common/streaming/IStreamingManager.d.ts +4 -0
  74. package/dist/client/game/ragemp/browser/RageBrowserManager.d.ts +2 -1
  75. package/dist/client/game/ragemp/browser/RageBrowserManager.js +30 -1
  76. package/dist/client/game/ragemp/chat/RageChatManager.d.ts +1 -0
  77. package/dist/client/game/ragemp/chat/RageChatManager.js +3 -0
  78. package/dist/client/game/ragemp/controls/RageControlsManager.d.ts +3 -0
  79. package/dist/client/game/ragemp/controls/RageControlsManager.js +9 -0
  80. package/dist/client/game/ragemp/graphics/RageGraphicsManager.d.ts +7 -1
  81. package/dist/client/game/ragemp/graphics/RageGraphicsManager.js +19 -0
  82. package/dist/client/game/ragemp/streaming/RageStreamingManager.d.ts +4 -0
  83. package/dist/client/game/ragemp/streaming/RageStreamingManager.js +12 -0
  84. package/dist/client/net/ccmp/CCMPConsoleForwarder.d.ts +11 -0
  85. package/dist/client/net/ccmp/CCMPConsoleForwarder.js +153 -0
  86. package/dist/client/net/ccmp/CCMPNetManager.d.ts +23 -0
  87. package/dist/client/net/ccmp/CCMPNetManager.js +55 -0
  88. package/dist/client/net/ccmp/dataHandler/CCMPDataHandler.d.ts +23 -0
  89. package/dist/client/net/ccmp/dataHandler/CCMPDataHandler.js +43 -0
  90. package/dist/client/net/ccmp/events/CCMPEventsBridge.d.ts +14 -0
  91. package/dist/client/net/ccmp/events/CCMPEventsBridge.js +19 -0
  92. package/dist/client/net/ccmp/events/CCMPEventsManager.d.ts +72 -0
  93. package/dist/client/net/ccmp/events/CCMPEventsManager.js +177 -0
  94. package/dist/client/net/ccmp/events/CCMPInProcessEmitter.d.ts +45 -0
  95. package/dist/client/net/ccmp/events/CCMPInProcessEmitter.js +133 -0
  96. package/dist/client/net/ccmp/events/CCMPRenderTicker.d.ts +18 -0
  97. package/dist/client/net/ccmp/events/CCMPRenderTicker.js +74 -0
  98. package/dist/client/net/ccmp/events/CCMPSyncedMetaBridge.d.ts +24 -0
  99. package/dist/client/net/ccmp/events/CCMPSyncedMetaBridge.js +35 -0
  100. package/dist/client/net/ccmp/rpc/CCMPRPCManager.d.ts +22 -0
  101. package/dist/client/net/ccmp/rpc/CCMPRPCManager.js +31 -0
  102. package/dist/client/net/common/events/types.d.ts +3 -1
  103. package/dist/client/net/common/events/types.js +1 -0
  104. package/dist/client/utils/ccmp/CCMPUtilsManager.d.ts +18 -0
  105. package/dist/client/utils/ccmp/CCMPUtilsManager.js +20 -0
  106. package/dist/server/RockMod.d.ts +1 -1
  107. package/dist/server/RockMod.js +4 -0
  108. package/dist/server/entities/ccmp/baseObject/CCMPBaseObject.d.ts +8 -0
  109. package/dist/server/entities/ccmp/baseObject/CCMPBaseObject.js +21 -0
  110. package/dist/server/entities/ccmp/baseObject/CCMPBaseObjectsIterator.d.ts +8 -0
  111. package/dist/server/entities/ccmp/baseObject/CCMPBaseObjectsIterator.js +16 -0
  112. package/dist/server/entities/ccmp/baseObject/CCMPBaseObjectsManager.d.ts +19 -0
  113. package/dist/server/entities/ccmp/baseObject/CCMPBaseObjectsManager.js +49 -0
  114. package/dist/server/entities/ccmp/blip/CCMPBlip.d.ts +34 -0
  115. package/dist/server/entities/ccmp/blip/CCMPBlip.js +80 -0
  116. package/dist/server/entities/ccmp/blip/CCMPBlipsManager.d.ts +9 -0
  117. package/dist/server/entities/ccmp/blip/CCMPBlipsManager.js +33 -0
  118. package/dist/server/entities/ccmp/colshape/CCMPCircleColshape.d.ts +7 -0
  119. package/dist/server/entities/ccmp/colshape/CCMPCircleColshape.js +10 -0
  120. package/dist/server/entities/ccmp/colshape/CCMPColshape.d.ts +23 -0
  121. package/dist/server/entities/ccmp/colshape/CCMPColshape.js +47 -0
  122. package/dist/server/entities/ccmp/colshape/CCMPColshapesManager.d.ts +28 -0
  123. package/dist/server/entities/ccmp/colshape/CCMPColshapesManager.js +108 -0
  124. package/dist/server/entities/ccmp/colshape/CCMPCuboidColshape.d.ts +7 -0
  125. package/dist/server/entities/ccmp/colshape/CCMPCuboidColshape.js +10 -0
  126. package/dist/server/entities/ccmp/colshape/CCMPCylinderColshape.d.ts +7 -0
  127. package/dist/server/entities/ccmp/colshape/CCMPCylinderColshape.js +10 -0
  128. package/dist/server/entities/ccmp/colshape/CCMPRectangleColshape.d.ts +7 -0
  129. package/dist/server/entities/ccmp/colshape/CCMPRectangleColshape.js +10 -0
  130. package/dist/server/entities/ccmp/colshape/CCMPSphereColshape.d.ts +7 -0
  131. package/dist/server/entities/ccmp/colshape/CCMPSphereColshape.js +10 -0
  132. package/dist/server/entities/ccmp/entity/CCMPEntitiesManager.d.ts +8 -0
  133. package/dist/server/entities/ccmp/entity/CCMPEntitiesManager.js +10 -0
  134. package/dist/server/entities/ccmp/entity/CCMPEntity.d.ts +13 -0
  135. package/dist/server/entities/ccmp/entity/CCMPEntity.js +28 -0
  136. package/dist/server/entities/ccmp/marker/CCMPMarker.d.ts +32 -0
  137. package/dist/server/entities/ccmp/marker/CCMPMarker.js +79 -0
  138. package/dist/server/entities/ccmp/marker/CCMPMarkersManager.d.ts +9 -0
  139. package/dist/server/entities/ccmp/marker/CCMPMarkersManager.js +30 -0
  140. package/dist/server/entities/ccmp/object/CCMPObject.d.ts +48 -0
  141. package/dist/server/entities/ccmp/object/CCMPObject.js +70 -0
  142. package/dist/server/entities/ccmp/object/CCMPObjectsManager.d.ts +9 -0
  143. package/dist/server/entities/ccmp/object/CCMPObjectsManager.js +28 -0
  144. package/dist/server/entities/ccmp/ped/CCMPPed.d.ts +33 -0
  145. package/dist/server/entities/ccmp/ped/CCMPPed.js +82 -0
  146. package/dist/server/entities/ccmp/ped/CCMPPedsManager.d.ts +9 -0
  147. package/dist/server/entities/ccmp/ped/CCMPPedsManager.js +28 -0
  148. package/dist/server/entities/ccmp/player/CCMPPlayer.d.ts +65 -0
  149. package/dist/server/entities/ccmp/player/CCMPPlayer.js +180 -0
  150. package/dist/server/entities/ccmp/player/CCMPPlayersManager.d.ts +12 -0
  151. package/dist/server/entities/ccmp/player/CCMPPlayersManager.js +66 -0
  152. package/dist/server/entities/ccmp/vehicle/CCMPVehicle.d.ts +58 -0
  153. package/dist/server/entities/ccmp/vehicle/CCMPVehicle.js +161 -0
  154. package/dist/server/entities/ccmp/vehicle/CCMPVehiclesManager.d.ts +9 -0
  155. package/dist/server/entities/ccmp/vehicle/CCMPVehiclesManager.js +31 -0
  156. package/dist/server/entities/ccmp/worldObject/CCMPWorldObject.d.ts +9 -0
  157. package/dist/server/entities/ccmp/worldObject/CCMPWorldObject.js +7 -0
  158. package/dist/server/entities/ccmp/worldObject/CCMPWorldObjectsIterator.d.ts +10 -0
  159. package/dist/server/entities/ccmp/worldObject/CCMPWorldObjectsIterator.js +40 -0
  160. package/dist/server/entities/ccmp/worldObject/CCMPWorldObjectsManager.d.ts +11 -0
  161. package/dist/server/entities/ccmp/worldObject/CCMPWorldObjectsManager.js +16 -0
  162. package/dist/server/entities/mock/player/MockPlayersManager.js +2 -1
  163. package/dist/server/factories/ccmp/CCMPManagersFactory.d.ts +23 -0
  164. package/dist/server/factories/ccmp/CCMPManagersFactory.js +46 -0
  165. package/dist/server/net/ccmp/CCMPNetManager.d.ts +19 -0
  166. package/dist/server/net/ccmp/CCMPNetManager.js +112 -0
  167. package/dist/server/net/ccmp/events/CCMPEventsManager.d.ts +17 -0
  168. package/dist/server/net/ccmp/events/CCMPEventsManager.js +54 -0
  169. package/dist/server/net/ccmp/rpc/CCMPRPCManager.d.ts +8 -0
  170. package/dist/server/net/ccmp/rpc/CCMPRPCManager.js +18 -0
  171. package/dist/server/net/common/events/types.d.ts +2 -0
  172. package/dist/server/net/common/events/types.js +1 -0
  173. package/dist/server/utils/ccmp/CCMPUtilsManager.d.ts +4 -0
  174. package/dist/server/utils/ccmp/CCMPUtilsManager.js +9 -0
  175. package/dist/server/world/ccmp/CCMPWorldManager.d.ts +10 -0
  176. package/dist/server/world/ccmp/CCMPWorldManager.js +24 -0
  177. package/package.json +6 -1
@@ -0,0 +1,58 @@
1
+ import { CCMPEntity } from "../entity/CCMPEntity";
2
+ import { type IVehicle } from "../../common/vehicle/IVehicle";
3
+ import { type IRGBA } from "../../../../shared/common/utils";
4
+ import { type IVector3D } from "../../../../shared/common/utils/math/Vectors";
5
+ import { BaseObjectType } from "../../../../shared";
6
+ import { type CCMPPlayer } from "../player/CCMPPlayer";
7
+ import type { Vehicle as CcmpVehicle } from "@classic-mp/types/server";
8
+ export interface ICCMPVehicleOptions {
9
+ ccmpVehicle: CcmpVehicle;
10
+ onDestroy: (vehicle: CCMPVehicle) => void;
11
+ }
12
+ export declare class CCMPVehicle extends CCMPEntity implements IVehicle {
13
+ private readonly _ccmpVehicle;
14
+ private readonly _onDestroy;
15
+ get id(): number;
16
+ get type(): BaseObjectType;
17
+ get isExists(): boolean;
18
+ get position(): IVector3D;
19
+ get dimension(): number;
20
+ get model(): number;
21
+ get rotation(): IVector3D;
22
+ get bodyHealth(): number;
23
+ get engineHealth(): number;
24
+ get numberPlate(): string;
25
+ get isLocked(): boolean;
26
+ get isDead(): boolean;
27
+ get primaryColor(): number;
28
+ get secondaryColor(): number;
29
+ get customPrimaryColor(): IRGBA;
30
+ get customSecondaryColor(): IRGBA;
31
+ get driver(): CCMPPlayer | null;
32
+ get passengers(): Set<CCMPPlayer>;
33
+ protected get ccmpMeta(): CcmpVehicle;
34
+ constructor(options: ICCMPVehicleOptions);
35
+ destroy(): void;
36
+ setPosition(value: IVector3D): void;
37
+ setDimension(value: number): void;
38
+ setModel(value: string): void;
39
+ setRotation(value: IVector3D): void;
40
+ setBodyHealth(_value: number): void;
41
+ setEngineHealth(_value: number): void;
42
+ setEngineOn(value: boolean): void;
43
+ setNumberPlate(_value: string): void;
44
+ setLocked(_value: boolean): void;
45
+ setPrimaryColor(_value: number): void;
46
+ setSecondaryColor(_value: number): void;
47
+ setCustomPrimaryColor(_value: IRGBA): void;
48
+ setCustomSecondaryColor(_value: IRGBA): void;
49
+ setMod(_modType: number, _modIndex: number): void;
50
+ getMod(_modType: number): number;
51
+ setNeonEnabled(_enabled: boolean): void;
52
+ setNeonColor(_r: number, _g: number, _b: number): void;
53
+ setWindowTint(_tintType: number): void;
54
+ setWheelType(_wheelType: number): void;
55
+ setPlateType(_plateType: number): void;
56
+ explode(): void;
57
+ repair(): void;
58
+ }
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPVehicle = void 0;
4
+ const CCMPEntity_1 = require("../entity/CCMPEntity");
5
+ const Vectors_1 = require("../../../../shared/common/utils/math/Vectors");
6
+ const shared_1 = require("../../../../shared");
7
+ const RockMod_1 = require("../../../RockMod");
8
+ const notImplemented = (name) => {
9
+ throw new Error(`Not implemented yet: ${name}`);
10
+ };
11
+ class CCMPVehicle extends CCMPEntity_1.CCMPEntity {
12
+ _ccmpVehicle;
13
+ _onDestroy;
14
+ get id() {
15
+ return this._ccmpVehicle.id;
16
+ }
17
+ get type() {
18
+ return shared_1.BaseObjectType.Vehicle;
19
+ }
20
+ get isExists() {
21
+ return this._ccmpVehicle.isExists;
22
+ }
23
+ get position() {
24
+ const p = this._ccmpVehicle.position;
25
+ return new Vectors_1.Vector3D(p.x, p.y, p.z);
26
+ }
27
+ get dimension() {
28
+ return this._ccmpVehicle.dimension;
29
+ }
30
+ get model() {
31
+ return this._ccmpVehicle.model;
32
+ }
33
+ get rotation() {
34
+ const r = this._ccmpVehicle.rotation;
35
+ return new Vectors_1.Vector3D(r.x, r.y, r.z);
36
+ }
37
+ get bodyHealth() {
38
+ return notImplemented("CCMPVehicle.bodyHealth");
39
+ }
40
+ get engineHealth() {
41
+ return notImplemented("CCMPVehicle.engineHealth");
42
+ }
43
+ get numberPlate() {
44
+ return notImplemented("CCMPVehicle.numberPlate");
45
+ }
46
+ get isLocked() {
47
+ return notImplemented("CCMPVehicle.isLocked");
48
+ }
49
+ get isDead() {
50
+ return notImplemented("CCMPVehicle.isDead");
51
+ }
52
+ get primaryColor() {
53
+ return notImplemented("CCMPVehicle.primaryColor");
54
+ }
55
+ get secondaryColor() {
56
+ return notImplemented("CCMPVehicle.secondaryColor");
57
+ }
58
+ get customPrimaryColor() {
59
+ return notImplemented("CCMPVehicle.customPrimaryColor");
60
+ }
61
+ get customSecondaryColor() {
62
+ return notImplemented("CCMPVehicle.customSecondaryColor");
63
+ }
64
+ get driver() {
65
+ const ccmpDriver = this._ccmpVehicle.driver;
66
+ if (!ccmpDriver)
67
+ return null;
68
+ return RockMod_1.RockMod.instance.players.findByID(ccmpDriver.id);
69
+ }
70
+ get passengers() {
71
+ const passengers = new Set();
72
+ for (const ccmpPassenger of this._ccmpVehicle.passengers) {
73
+ const player = RockMod_1.RockMod.instance.players.findByID(ccmpPassenger.id);
74
+ if (player) {
75
+ passengers.add(player);
76
+ }
77
+ }
78
+ return passengers;
79
+ }
80
+ get ccmpMeta() {
81
+ return this._ccmpVehicle;
82
+ }
83
+ constructor(options) {
84
+ super();
85
+ this._ccmpVehicle = options.ccmpVehicle;
86
+ this._onDestroy = options.onDestroy;
87
+ }
88
+ destroy() {
89
+ if (!this._ccmpVehicle.isExists)
90
+ return;
91
+ this._ccmpVehicle.destroy();
92
+ this._onDestroy(this);
93
+ }
94
+ setPosition(value) {
95
+ this._ccmpVehicle.position = { x: value.x, y: value.y, z: value.z };
96
+ }
97
+ setDimension(value) {
98
+ this._ccmpVehicle.dimension = value;
99
+ }
100
+ setModel(value) {
101
+ this._ccmpVehicle.model = RockMod_1.RockMod.instance.utils.hash(value);
102
+ }
103
+ setRotation(value) {
104
+ this._ccmpVehicle.rotation = { x: value.x, y: value.y, z: value.z };
105
+ }
106
+ setBodyHealth(_value) {
107
+ notImplemented("CCMPVehicle.setBodyHealth");
108
+ }
109
+ setEngineHealth(_value) {
110
+ notImplemented("CCMPVehicle.setEngineHealth");
111
+ }
112
+ setEngineOn(value) {
113
+ this._ccmpVehicle.engineOn = value;
114
+ }
115
+ setNumberPlate(_value) {
116
+ notImplemented("CCMPVehicle.setNumberPlate");
117
+ }
118
+ setLocked(_value) {
119
+ notImplemented("CCMPVehicle.setLocked");
120
+ }
121
+ setPrimaryColor(_value) {
122
+ notImplemented("CCMPVehicle.setPrimaryColor");
123
+ }
124
+ setSecondaryColor(_value) {
125
+ notImplemented("CCMPVehicle.setSecondaryColor");
126
+ }
127
+ setCustomPrimaryColor(_value) {
128
+ notImplemented("CCMPVehicle.setCustomPrimaryColor");
129
+ }
130
+ setCustomSecondaryColor(_value) {
131
+ notImplemented("CCMPVehicle.setCustomSecondaryColor");
132
+ }
133
+ setMod(_modType, _modIndex) {
134
+ notImplemented("CCMPVehicle.setMod");
135
+ }
136
+ getMod(_modType) {
137
+ return notImplemented("CCMPVehicle.getMod");
138
+ }
139
+ setNeonEnabled(_enabled) {
140
+ notImplemented("CCMPVehicle.setNeonEnabled");
141
+ }
142
+ setNeonColor(_r, _g, _b) {
143
+ notImplemented("CCMPVehicle.setNeonColor");
144
+ }
145
+ setWindowTint(_tintType) {
146
+ notImplemented("CCMPVehicle.setWindowTint");
147
+ }
148
+ setWheelType(_wheelType) {
149
+ notImplemented("CCMPVehicle.setWheelType");
150
+ }
151
+ setPlateType(_plateType) {
152
+ notImplemented("CCMPVehicle.setPlateType");
153
+ }
154
+ explode() {
155
+ notImplemented("CCMPVehicle.explode");
156
+ }
157
+ repair() {
158
+ notImplemented("CCMPVehicle.repair");
159
+ }
160
+ }
161
+ exports.CCMPVehicle = CCMPVehicle;
@@ -0,0 +1,9 @@
1
+ import { type IVehicleCreateOptions, type IVehiclesManager } from "../../common/vehicle/IVehiclesManager";
2
+ import { CCMPEntitiesManager } from "../entity/CCMPEntitiesManager";
3
+ import { CCMPVehicle } from "./CCMPVehicle";
4
+ export interface ICCMPVehicleCreateOptions extends IVehicleCreateOptions {
5
+ }
6
+ export declare class CCMPVehiclesManager extends CCMPEntitiesManager<CCMPVehicle> implements IVehiclesManager {
7
+ constructor();
8
+ create(options: ICCMPVehicleCreateOptions): CCMPVehicle;
9
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPVehiclesManager = void 0;
4
+ const CCMPEntitiesManager_1 = require("../entity/CCMPEntitiesManager");
5
+ const CCMPVehicle_1 = require("./CCMPVehicle");
6
+ class CCMPVehiclesManager extends CCMPEntitiesManager_1.CCMPEntitiesManager {
7
+ constructor() {
8
+ super({
9
+ baseObjectsType: "vehicle",
10
+ });
11
+ }
12
+ create(options) {
13
+ const { model, position, rotation, engine, dimension } = options;
14
+ // CCMP vehicles API has no `locked` field yet — it is silently ignored.
15
+ const ccmpVehicle = ccmp.vehicles.create(ccmp.hash(model), position.x, position.y, position.z, rotation.z);
16
+ if (!ccmpVehicle) {
17
+ throw new Error("CCMPVehiclesManager.create: ccmp.vehicles.create failed (server full?)");
18
+ }
19
+ ccmpVehicle.dimension = dimension;
20
+ if (engine) {
21
+ ccmpVehicle.engineOn = true;
22
+ }
23
+ const vehicle = new CCMPVehicle_1.CCMPVehicle({
24
+ ccmpVehicle,
25
+ onDestroy: (v) => this.unregisterBaseObject(v),
26
+ });
27
+ this.registerBaseObject(vehicle);
28
+ return vehicle;
29
+ }
30
+ }
31
+ exports.CCMPVehiclesManager = CCMPVehiclesManager;
@@ -0,0 +1,9 @@
1
+ import { type IWorldObject } from "../../common/worldObject/IWorldObject";
2
+ import { CCMPBaseObject } from "../baseObject/CCMPBaseObject";
3
+ import { type IVector3D } from "../../../../shared/common/utils/math/Vectors";
4
+ export declare abstract class CCMPWorldObject extends CCMPBaseObject implements IWorldObject {
5
+ abstract get position(): IVector3D;
6
+ abstract get dimension(): number;
7
+ abstract setPosition(value: IVector3D): void;
8
+ abstract setDimension(value: number): void;
9
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPWorldObject = void 0;
4
+ const CCMPBaseObject_1 = require("../baseObject/CCMPBaseObject");
5
+ class CCMPWorldObject extends CCMPBaseObject_1.CCMPBaseObject {
6
+ }
7
+ exports.CCMPWorldObject = CCMPWorldObject;
@@ -0,0 +1,10 @@
1
+ import { type IWorldObjectsIterator } from "../../common/worldObject/IWorldObjectsIterator";
2
+ import { type CCMPWorldObject } from "./CCMPWorldObject";
3
+ import { CCMPBaseObjectsIterator } from "../baseObject/CCMPBaseObjectsIterator";
4
+ import { type Vector2D, type Vector3D } from "../../../../shared/common/utils/math/Vectors";
5
+ export declare class CCMPWorldObjectsIterator<T extends CCMPWorldObject> extends CCMPBaseObjectsIterator<T> implements IWorldObjectsIterator<T> {
6
+ constructor(baseObjects: ReadonlyMap<number, T>);
7
+ dimension(value: number): IterableIterator<T>;
8
+ range2D(center: Vector2D, range: number): IterableIterator<T>;
9
+ range3D(center: Vector3D, range: number): IterableIterator<T>;
10
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPWorldObjectsIterator = void 0;
4
+ const CCMPBaseObjectsIterator_1 = require("../baseObject/CCMPBaseObjectsIterator");
5
+ class CCMPWorldObjectsIterator extends CCMPBaseObjectsIterator_1.CCMPBaseObjectsIterator {
6
+ constructor(baseObjects) {
7
+ super(baseObjects);
8
+ }
9
+ *dimension(value) {
10
+ for (const worldObject of this.all()) {
11
+ if (worldObject.dimension === value) {
12
+ yield worldObject;
13
+ }
14
+ }
15
+ }
16
+ *range2D(center, range) {
17
+ const rangeSquared = range * range;
18
+ for (const worldObject of this.all()) {
19
+ const { x, y } = worldObject.position;
20
+ const dx = center.x - x;
21
+ const dy = center.y - y;
22
+ if (dx * dx + dy * dy <= rangeSquared) {
23
+ yield worldObject;
24
+ }
25
+ }
26
+ }
27
+ *range3D(center, range) {
28
+ const rangeSquared = range * range;
29
+ for (const worldObject of this.all()) {
30
+ const { x, y, z } = worldObject.position;
31
+ const dx = center.x - x;
32
+ const dy = center.y - y;
33
+ const dz = center.z - z;
34
+ if (dx * dx + dy * dy + dz * dz <= rangeSquared) {
35
+ yield worldObject;
36
+ }
37
+ }
38
+ }
39
+ }
40
+ exports.CCMPWorldObjectsIterator = CCMPWorldObjectsIterator;
@@ -0,0 +1,11 @@
1
+ import { type IWorldObjectsManager } from "../../common/worldObject/IWorldObjectsManager";
2
+ import { type ICCMPBaseObjectsManagerOptions, CCMPBaseObjectsManager } from "../baseObject/CCMPBaseObjectsManager";
3
+ import { type CCMPWorldObject } from "./CCMPWorldObject";
4
+ import { CCMPWorldObjectsIterator } from "./CCMPWorldObjectsIterator";
5
+ export interface ICCMPWorldObjectsManagerOptions extends ICCMPBaseObjectsManagerOptions {
6
+ }
7
+ export declare abstract class CCMPWorldObjectsManager<T extends CCMPWorldObject> extends CCMPBaseObjectsManager<T> implements IWorldObjectsManager<T> {
8
+ protected readonly _iterator: CCMPWorldObjectsIterator<T>;
9
+ get iterator(): CCMPWorldObjectsIterator<T>;
10
+ protected constructor(options: ICCMPWorldObjectsManagerOptions);
11
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPWorldObjectsManager = void 0;
4
+ const CCMPBaseObjectsManager_1 = require("../baseObject/CCMPBaseObjectsManager");
5
+ const CCMPWorldObjectsIterator_1 = require("./CCMPWorldObjectsIterator");
6
+ class CCMPWorldObjectsManager extends CCMPBaseObjectsManager_1.CCMPBaseObjectsManager {
7
+ _iterator;
8
+ get iterator() {
9
+ return this._iterator;
10
+ }
11
+ constructor(options) {
12
+ super(options);
13
+ this._iterator = new CCMPWorldObjectsIterator_1.CCMPWorldObjectsIterator(this.baseObjects);
14
+ }
15
+ }
16
+ exports.CCMPWorldObjectsManager = CCMPWorldObjectsManager;
@@ -73,8 +73,9 @@ class MockPlayersManager extends MockEntitiesManager_1.MockEntitiesManager {
73
73
  if (!this._baseObjects.has(player.id)) {
74
74
  throw new Error(`Player with id ${player.id} not found`);
75
75
  }
76
- RockMod_1.RockMod.instance.net.events.emitInternal(types_1.ServerInternalEventName.PlayerDisconnected, player);
76
+ RockMod_1.RockMod.instance.net.events.emitInternal(types_1.ServerInternalEventName.PlayerQuit, player, "disconnect", "");
77
77
  this.unregisterBaseObject(player);
78
+ RockMod_1.RockMod.instance.net.events.emitInternal(types_1.ServerInternalEventName.PlayerDisconnected, player);
78
79
  }
79
80
  }
80
81
  exports.MockPlayersManager = MockPlayersManager;
@@ -0,0 +1,23 @@
1
+ import { type IManagersFactory } from "../common/IManagersFactory";
2
+ import { CCMPNetManager } from "../../net/ccmp/CCMPNetManager";
3
+ import { CCMPBlipsManager } from "../../entities/ccmp/blip/CCMPBlipsManager";
4
+ import { CCMPColshapesManager } from "../../entities/ccmp/colshape/CCMPColshapesManager";
5
+ import { CCMPMarkersManager } from "../../entities/ccmp/marker/CCMPMarkersManager";
6
+ import { CCMPObjectsManager } from "../../entities/ccmp/object/CCMPObjectsManager";
7
+ import { CCMPPedsManager } from "../../entities/ccmp/ped/CCMPPedsManager";
8
+ import { CCMPPlayersManager } from "../../entities/ccmp/player/CCMPPlayersManager";
9
+ import { CCMPUtilsManager } from "../../utils/ccmp/CCMPUtilsManager";
10
+ import { CCMPVehiclesManager } from "../../entities/ccmp/vehicle/CCMPVehiclesManager";
11
+ import { CCMPWorldManager } from "../../world/ccmp/CCMPWorldManager";
12
+ export declare class CCMPManagersFactory implements IManagersFactory {
13
+ createNetManager(): CCMPNetManager;
14
+ createBlipsManager(): CCMPBlipsManager;
15
+ createColshapesManager(): CCMPColshapesManager;
16
+ createMarkersManager(): CCMPMarkersManager;
17
+ createObjectsManager(): CCMPObjectsManager;
18
+ createPedsManager(): CCMPPedsManager;
19
+ createPlayersManager(net: CCMPNetManager): CCMPPlayersManager;
20
+ createUtilsManager(): CCMPUtilsManager;
21
+ createVehiclesManager(): CCMPVehiclesManager;
22
+ createWorldManager(): CCMPWorldManager;
23
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPManagersFactory = void 0;
4
+ const CCMPNetManager_1 = require("../../net/ccmp/CCMPNetManager");
5
+ const CCMPBlipsManager_1 = require("../../entities/ccmp/blip/CCMPBlipsManager");
6
+ const CCMPColshapesManager_1 = require("../../entities/ccmp/colshape/CCMPColshapesManager");
7
+ const CCMPMarkersManager_1 = require("../../entities/ccmp/marker/CCMPMarkersManager");
8
+ const CCMPObjectsManager_1 = require("../../entities/ccmp/object/CCMPObjectsManager");
9
+ const CCMPPedsManager_1 = require("../../entities/ccmp/ped/CCMPPedsManager");
10
+ const CCMPPlayersManager_1 = require("../../entities/ccmp/player/CCMPPlayersManager");
11
+ const CCMPUtilsManager_1 = require("../../utils/ccmp/CCMPUtilsManager");
12
+ const CCMPVehiclesManager_1 = require("../../entities/ccmp/vehicle/CCMPVehiclesManager");
13
+ const CCMPWorldManager_1 = require("../../world/ccmp/CCMPWorldManager");
14
+ class CCMPManagersFactory {
15
+ createNetManager() {
16
+ return new CCMPNetManager_1.CCMPNetManager();
17
+ }
18
+ createBlipsManager() {
19
+ return new CCMPBlipsManager_1.CCMPBlipsManager();
20
+ }
21
+ createColshapesManager() {
22
+ return new CCMPColshapesManager_1.CCMPColshapesManager();
23
+ }
24
+ createMarkersManager() {
25
+ return new CCMPMarkersManager_1.CCMPMarkersManager();
26
+ }
27
+ createObjectsManager() {
28
+ return new CCMPObjectsManager_1.CCMPObjectsManager();
29
+ }
30
+ createPedsManager() {
31
+ return new CCMPPedsManager_1.CCMPPedsManager();
32
+ }
33
+ createPlayersManager(net) {
34
+ return new CCMPPlayersManager_1.CCMPPlayersManager(net);
35
+ }
36
+ createUtilsManager() {
37
+ return new CCMPUtilsManager_1.CCMPUtilsManager();
38
+ }
39
+ createVehiclesManager() {
40
+ return new CCMPVehiclesManager_1.CCMPVehiclesManager();
41
+ }
42
+ createWorldManager() {
43
+ return new CCMPWorldManager_1.CCMPWorldManager();
44
+ }
45
+ }
46
+ exports.CCMPManagersFactory = CCMPManagersFactory;
@@ -0,0 +1,19 @@
1
+ import { type INetManager } from "../common/INetManager";
2
+ import { CCMPEventsManager } from "./events/CCMPEventsManager";
3
+ import { CCMPRPCManager } from "./rpc/CCMPRPCManager";
4
+ export declare class CCMPNetManager implements INetManager {
5
+ private readonly _eventsManager;
6
+ private readonly _rpcManager;
7
+ get events(): CCMPEventsManager;
8
+ get rpc(): CCMPRPCManager;
9
+ constructor();
10
+ private _registerClientReadyCooperation;
11
+ /**
12
+ * Принимает зеркалированные клиентские `console.*` вызовы и печатает в
13
+ * серверный stdout. Необходимо для отладки CCMP-клиента: иначе ошибки
14
+ * boot'а уходят в игровую консоль (F8), не видны разработчику.
15
+ *
16
+ * Парный клиент — `CCMPConsoleForwarder`.
17
+ */
18
+ private _registerClientLogForwarder;
19
+ }
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPNetManager = void 0;
4
+ const CCMPEventsManager_1 = require("./events/CCMPEventsManager");
5
+ const CCMPRPCManager_1 = require("./rpc/CCMPRPCManager");
6
+ /**
7
+ * Имя cooperation-события для синтеза `rm::playerReady` на клиенте.
8
+ *
9
+ * Клиент шлёт это сразу после `connectionStateChanged.connected = true`;
10
+ * сервер отвечает тому же игроку этим же именем с `{ remoteId }`. Клиентский
11
+ * `CCMPEventsBridge` ловит ответ и эмитит `rm::playerReady`.
12
+ */
13
+ const CLIENT_READY_EVENT = "rm::clientReady";
14
+ /**
15
+ * Имя приватного события для зеркалирования клиентских `console.*` вызовов
16
+ * в серверный stdout. Реализация клиента — `CCMPConsoleForwarder`.
17
+ */
18
+ const CLIENT_LOG_EVENT = "rm::clientLog";
19
+ function isSerializedError(value) {
20
+ return typeof value === "object" && value !== null && value.__error === true;
21
+ }
22
+ function isSerializedToString(value) {
23
+ return (typeof value === "object" && value !== null && typeof value.__toString === "string");
24
+ }
25
+ function rehydrateArg(value) {
26
+ if (isSerializedError(value)) {
27
+ // Приоритет: stack -> name+message -> toString-репрезентация.
28
+ if (value.stack) {
29
+ return value.stack;
30
+ }
31
+ if (value.name && value.message) {
32
+ return `${value.name}: ${value.message}`;
33
+ }
34
+ if (value.message) {
35
+ return value.message;
36
+ }
37
+ if (value.toString) {
38
+ return value.toString;
39
+ }
40
+ return "<unknown error>";
41
+ }
42
+ if (isSerializedToString(value)) {
43
+ return value.__toString;
44
+ }
45
+ return value;
46
+ }
47
+ function pickConsoleSink(level) {
48
+ switch (level) {
49
+ case "error":
50
+ return console.error.bind(console);
51
+ case "warn":
52
+ return console.warn.bind(console);
53
+ case "info":
54
+ return console.info ? console.info.bind(console) : console.log.bind(console);
55
+ case "debug":
56
+ return console.debug ? console.debug.bind(console) : console.log.bind(console);
57
+ case "log":
58
+ default:
59
+ return console.log.bind(console);
60
+ }
61
+ }
62
+ class CCMPNetManager {
63
+ _eventsManager;
64
+ _rpcManager;
65
+ get events() {
66
+ return this._eventsManager;
67
+ }
68
+ get rpc() {
69
+ return this._rpcManager;
70
+ }
71
+ constructor() {
72
+ this._eventsManager = new CCMPEventsManager_1.CCMPEventsManager();
73
+ this._rpcManager = new CCMPRPCManager_1.CCMPRPCManager();
74
+ this._registerClientReadyCooperation();
75
+ this._registerClientLogForwarder();
76
+ // Маркер успешной загрузки актуального rock-mod на серверной стороне.
77
+ // Если эта строка не появилась в stdout при старте ccmp-server.exe —
78
+ // значит сервер всё ещё держит в памяти старую сборку rock-mod (не
79
+ // забыт перезапуск процесса).
80
+ console.log("[rock-mod] CCMP server net manager initialized");
81
+ }
82
+ _registerClientReadyCooperation() {
83
+ // Регистрируем напрямую через `ccmp.on` (а не через events.onClient),
84
+ // потому что событие не входит в `IClientToServerEvents` — это
85
+ // приватный rock-mod протокол.
86
+ ccmp.on(CLIENT_READY_EVENT, (player) => {
87
+ const ccmpPlayer = ccmp.players.getById(player.id);
88
+ if (!ccmpPlayer) {
89
+ return;
90
+ }
91
+ // Зеркалит контракт client-side `CCMPEventsManager`: payload всегда
92
+ // массивом, на клиенте развернётся обратно в позиционные аргументы.
93
+ ccmpPlayer.emit(CLIENT_READY_EVENT, [{ remoteId: player.id }]);
94
+ });
95
+ }
96
+ /**
97
+ * Принимает зеркалированные клиентские `console.*` вызовы и печатает в
98
+ * серверный stdout. Необходимо для отладки CCMP-клиента: иначе ошибки
99
+ * boot'а уходят в игровую консоль (F8), не видны разработчику.
100
+ *
101
+ * Парный клиент — `CCMPConsoleForwarder`.
102
+ */
103
+ _registerClientLogForwarder() {
104
+ ccmp.on(CLIENT_LOG_EVENT, (player, payload) => {
105
+ const level = payload?.level ?? "log";
106
+ const args = Array.isArray(payload?.args) ? payload.args : [];
107
+ const sink = pickConsoleSink(level);
108
+ sink(`[client:${player.id}]`, ...args.map(rehydrateArg));
109
+ });
110
+ }
111
+ }
112
+ exports.CCMPNetManager = CCMPNetManager;
@@ -0,0 +1,17 @@
1
+ import { type CcmpServerBuiltinEvents } from "@classic-mp/types/server";
2
+ import { type IEventsManager } from "../../common/events/IEventsManager";
3
+ import { type IServerInternalEvents } from "../../common/events/types";
4
+ import { type IClientToServerEvents, type IServerToClientEvents } from "../../../../shared";
5
+ import { type CCMPPlayer } from "../../../entities/ccmp/player/CCMPPlayer";
6
+ export interface ICCMPServerInternalEvents extends IServerInternalEvents, CcmpServerBuiltinEvents {
7
+ }
8
+ export declare class CCMPEventsManager implements IEventsManager {
9
+ onInternal(events: Partial<ICCMPServerInternalEvents>): void;
10
+ offInternal<K extends keyof IServerInternalEvents>(eventName: K, listener: IServerInternalEvents[K]): void;
11
+ emitInternal<K extends keyof IServerInternalEvents>(eventName: K, ...args: Parameters<IServerInternalEvents[K]>): void;
12
+ onClient(events: Partial<IClientToServerEvents>): void;
13
+ offClient<K extends keyof IClientToServerEvents>(eventName: K, listener: IClientToServerEvents[K]): void;
14
+ emitClient<K extends keyof IServerToClientEvents>(player: CCMPPlayer, eventName: K, ...args: Parameters<IServerToClientEvents[K]>): void;
15
+ emitAllClients<K extends keyof IServerToClientEvents>(eventName: K, ...args: Parameters<IServerToClientEvents[K]>): void;
16
+ private _getRockModPlayer;
17
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CCMPEventsManager = void 0;
4
+ const RockMod_1 = require("../../../RockMod");
5
+ class CCMPEventsManager {
6
+ onInternal(events) {
7
+ for (const eventName of Object.keys(events)) {
8
+ // @ts-expect-error mixed CCMP built-in + rm:: keys typing
9
+ ccmp.on(eventName, events[eventName]);
10
+ }
11
+ }
12
+ offInternal(eventName, listener) {
13
+ ccmp.off(eventName, listener);
14
+ }
15
+ emitInternal(eventName, ...args) {
16
+ ccmp.emit(eventName, ...args);
17
+ }
18
+ onClient(events) {
19
+ for (const eventName of Object.keys(events)) {
20
+ // @ts-expect-error generic event typing
21
+ const handler = events[eventName];
22
+ // Клиент шлёт variadic args упакованными в массив через
23
+ // `ccmp.emitServer(name, args)` (см. client CCMPEventsManager.emitServer).
24
+ // Разворачиваем массив обратно в позиционные аргументы. Скалярные/объектные
25
+ // payload'ы прокидываем как единственный аргумент.
26
+ ccmp.on(eventName, (player, data) => {
27
+ const rockModPlayer = this._getRockModPlayer(player);
28
+ const args = Array.isArray(data) ? data : [data];
29
+ handler(rockModPlayer, ...args);
30
+ });
31
+ }
32
+ }
33
+ offClient(eventName, listener) {
34
+ ccmp.off(eventName, listener);
35
+ }
36
+ emitClient(player, eventName, ...args) {
37
+ const ccmpPlayer = ccmp.players.getById(player.id);
38
+ if (!ccmpPlayer) {
39
+ throw new Error(`Player with id ${player.id} not found`);
40
+ }
41
+ ccmpPlayer.emit(eventName, args);
42
+ }
43
+ emitAllClients(eventName, ...args) {
44
+ ccmp.emitAllClients(eventName, args);
45
+ }
46
+ _getRockModPlayer(player) {
47
+ const playerId = player?.id;
48
+ if (typeof playerId !== "number") {
49
+ throw new Error("CCMPEventsManager.onClient: event sender does not contain numeric player id");
50
+ }
51
+ return RockMod_1.RockMod.instance.players.getByID(playerId);
52
+ }
53
+ }
54
+ exports.CCMPEventsManager = CCMPEventsManager;
@@ -0,0 +1,8 @@
1
+ import { type IRPCManager } from "../../common/rpc/IRPCManager";
2
+ import { type CCMPPlayer } from "../../../entities/ccmp/player/CCMPPlayer";
3
+ import { type IClientRPCList, type IServerRPCList } from "../../../../shared/net/common/rpc/types";
4
+ export declare class CCMPRPCManager implements IRPCManager {
5
+ register<K extends keyof IServerRPCList>(_rpcName: K, _handler: (player: CCMPPlayer, ...args: Parameters<IServerRPCList[K]>) => ReturnType<IServerRPCList[K]>): void;
6
+ unregister<K extends keyof IServerRPCList>(_rpcName: K): void;
7
+ emitClient<K extends keyof IClientRPCList>(_player: CCMPPlayer, _rpcName: K, ..._args: Parameters<IClientRPCList[K]>): Promise<ReturnType<IClientRPCList[K]>>;
8
+ }