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,332 @@
1
+ import { BaseObjectType } from "../../../../shared/entities";
2
+ import { Vector3D } from "../../../../shared/common/utils";
3
+ const ZERO_VECTOR = new Vector3D(0, 0, 0);
4
+ /**
5
+ * CCMP implementation of the Rock-Mod player facade.
6
+ *
7
+ * Identity and synced meta are tracked by id. Runtime entity operations are
8
+ * delegated to `ccmp.players.getById(id)`, whose `handle` is live for the
9
+ * local player and for streamed remote players. Missing remote handles degrade
10
+ * to safe defaults/no-ops, matching RageMP-style best-effort client behavior.
11
+ */
12
+ export class CCMPPlayer {
13
+ constructor(options) {
14
+ this._id = options.id;
15
+ this._name = options.name;
16
+ this._isLocal = options.isLocal;
17
+ this._isExists = true;
18
+ }
19
+ /** Помечает игрока как удалённого — вызывается из `CCMPPlayersManager`. */
20
+ markRemoved() {
21
+ this._isExists = false;
22
+ }
23
+ /** Обновляет name (полезно если name приехал позже первого создания). */
24
+ setNameInternal(name) {
25
+ if (name) {
26
+ this._name = name;
27
+ }
28
+ }
29
+ // -- IBaseObject ----------------------------------------------------------
30
+ get id() {
31
+ return this._id;
32
+ }
33
+ get remoteId() {
34
+ return this._id;
35
+ }
36
+ get type() {
37
+ return BaseObjectType.Player;
38
+ }
39
+ get isExists() {
40
+ return this._isExists;
41
+ }
42
+ get handle() {
43
+ var _a, _b;
44
+ return (_b = (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.handle) !== null && _b !== void 0 ? _b : 0;
45
+ }
46
+ destroy() {
47
+ this._warnOnce("destroy");
48
+ }
49
+ // -- IWorldObject ---------------------------------------------------------
50
+ get position() {
51
+ var _a;
52
+ const position = (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.position;
53
+ return position ? new Vector3D(position.x, position.y, position.z) : ZERO_VECTOR;
54
+ }
55
+ get dimension() {
56
+ return 0;
57
+ }
58
+ setPosition(value) {
59
+ var _a;
60
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.setPosition(value);
61
+ }
62
+ setDimension(_value) {
63
+ this._warnOnce("setDimension");
64
+ }
65
+ setCoords(xPos, yPos, zPos, xAxis, yAxis, zAxis, clearArea) {
66
+ var _a;
67
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.setCoords(xPos, yPos, zPos, xAxis, yAxis, zAxis, clearArea);
68
+ }
69
+ // -- IEntity --------------------------------------------------------------
70
+ get model() {
71
+ return this._withHandle(0, (handle) => ccmp.natives.entity.getEntityModel(handle));
72
+ }
73
+ get heading() {
74
+ var _a, _b;
75
+ return (_b = (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.heading) !== null && _b !== void 0 ? _b : 0;
76
+ }
77
+ setHeading(heading) {
78
+ var _a;
79
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.setHeading(heading);
80
+ }
81
+ setModel(_value) {
82
+ this._warnOnce("setModel");
83
+ }
84
+ get rotation() {
85
+ return this._withHandle(ZERO_VECTOR, (handle) => {
86
+ const rotation = ccmp.natives.entity.getEntityRotation(handle, 2);
87
+ return new Vector3D(rotation.x, rotation.y, rotation.z);
88
+ });
89
+ }
90
+ setRotation(value) {
91
+ this._withHandleVoid((handle) => {
92
+ ccmp.natives.entity.setEntityRotation(handle, value.x, value.y, value.z, 2, true);
93
+ });
94
+ }
95
+ get forwardVector() {
96
+ return this._withHandle(ZERO_VECTOR, (handle) => {
97
+ const vector = ccmp.natives.entity.getEntityForwardVector(handle);
98
+ return new Vector3D(vector.x, vector.y, vector.z);
99
+ });
100
+ }
101
+ freezePosition(freeze) {
102
+ var _a;
103
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.freezePosition(freeze);
104
+ }
105
+ setCollision(collision, keepPhysics) {
106
+ var _a;
107
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.setCollision(collision, keepPhysics);
108
+ }
109
+ setInvincible(invincible) {
110
+ var _a;
111
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.setInvincible(invincible);
112
+ }
113
+ setVisible(visible) {
114
+ var _a;
115
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.setVisible(visible);
116
+ }
117
+ setAlpha(alpha) {
118
+ var _a;
119
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.setAlpha(alpha);
120
+ }
121
+ get alpha() {
122
+ var _a, _b;
123
+ return (_b = (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.alpha) !== null && _b !== void 0 ? _b : 255;
124
+ }
125
+ resetAlpha() {
126
+ var _a;
127
+ (_a = this._getNativePlayer()) === null || _a === void 0 ? void 0 : _a.resetAlpha();
128
+ }
129
+ getOffsetFromInWorldCoords(offsetX, offsetY, offsetZ) {
130
+ return this._withHandle(ZERO_VECTOR, (handle) => {
131
+ const position = ccmp.natives.entity.getOffsetFromEntityInWorldCoords(handle, offsetX, offsetY, offsetZ);
132
+ return new Vector3D(position.x, position.y, position.z);
133
+ });
134
+ }
135
+ getBoneIndexByName(boneName) {
136
+ return this._withHandle(-1, (handle) => ccmp.natives.entity.getEntityBoneIndexByName(handle, boneName));
137
+ }
138
+ getWorldPositionOfBone(boneIndex) {
139
+ return this._withHandle(ZERO_VECTOR, (handle) => {
140
+ const position = ccmp.natives.entity.getWorldPositionOfEntityBone(handle, boneIndex);
141
+ return new Vector3D(position.x, position.y, position.z);
142
+ });
143
+ }
144
+ getVariable(name) {
145
+ const value = ccmp.entities.getStreamSyncedMeta(ccmp.entities.ENTITY_TYPE.Player, this._id, name);
146
+ return value === undefined ? null : value;
147
+ }
148
+ getSyncedMeta(key) {
149
+ return ccmp.entities.getStreamSyncedMeta(ccmp.entities.ENTITY_TYPE.Player, this._id, key);
150
+ }
151
+ hasSyncedMeta(key) {
152
+ return ccmp.entities.hasStreamSyncedMeta(ccmp.entities.ENTITY_TYPE.Player, this._id, key);
153
+ }
154
+ getSyncedMetaKeys() {
155
+ return ccmp.entities.getStreamSyncedMetaKeys(ccmp.entities.ENTITY_TYPE.Player, this._id);
156
+ }
157
+ attachToEntity(target, boneIndex, offset, rotation, p9, useSoftPinning, collision, isPed, vertexIndex, fixedRot) {
158
+ this._withHandleVoid((handle) => {
159
+ ccmp.natives.entity.attachEntityToEntity(handle, target.handle, boneIndex, offset.x, offset.y, offset.z, rotation.x, rotation.y, rotation.z, p9, useSoftPinning, collision, isPed, vertexIndex, fixedRot, 0);
160
+ });
161
+ }
162
+ detach(useDetachVelocity, collision) {
163
+ this._withHandleVoid((handle) => {
164
+ ccmp.natives.entity.detachEntity(handle, useDetachVelocity, collision);
165
+ });
166
+ }
167
+ getSpeed() {
168
+ return this._withHandle(0, (handle) => ccmp.natives.entity.getEntitySpeed(handle));
169
+ }
170
+ isPlayingAnim(dictionary, name, taskFlag) {
171
+ return this._withHandle(false, (handle) => ccmp.natives.entity.isEntityPlayingAnim(handle, dictionary, name, taskFlag));
172
+ }
173
+ // -- IPlayer --------------------------------------------------------------
174
+ get name() {
175
+ return this._name;
176
+ }
177
+ get health() {
178
+ return 100;
179
+ }
180
+ get armour() {
181
+ return 0;
182
+ }
183
+ get isDead() {
184
+ return false;
185
+ }
186
+ get vehicle() {
187
+ return null;
188
+ }
189
+ get isVoice3DEnabled() {
190
+ return false;
191
+ }
192
+ get voiceVolume() {
193
+ return 0;
194
+ }
195
+ get isVoiceActive() {
196
+ return false;
197
+ }
198
+ setVoice3D(_enable) {
199
+ this._warnOnce("setVoice3D");
200
+ }
201
+ setVoiceVolume(_volume) {
202
+ this._warnOnce("setVoiceVolume");
203
+ }
204
+ get isReloading() {
205
+ return false;
206
+ }
207
+ get weapon() {
208
+ return 0;
209
+ }
210
+ getAmmoInClip(_weapon) {
211
+ return 0;
212
+ }
213
+ getWeaponAmmo(_weapon) {
214
+ return 0;
215
+ }
216
+ getBoneIndex(boneId) {
217
+ return this._withHandle(-1, (handle) => ccmp.natives.ped.getPedBoneIndex(handle, boneId));
218
+ }
219
+ setDecoration(_collection, _overlay) {
220
+ this._warnOnce("setDecoration");
221
+ }
222
+ removeDecoration(_collection, _overlay) {
223
+ this._warnOnce("removeDecoration");
224
+ }
225
+ clearDecorations() {
226
+ this._warnOnce("clearDecorations");
227
+ }
228
+ setHeadBlendData(_shapeFirstId, _shapeSecondId, _shapeThirdId, _skinFirstId, _skinSecondId, _skinThirdId, _shapeMix, _skinMix, _thirdMix, _isParent) {
229
+ this._warnOnce("setHeadBlendData");
230
+ }
231
+ setFaceFeature(_index, _value) {
232
+ this._warnOnce("setFaceFeature");
233
+ }
234
+ setHeadOverlay(_overlayId, _index, _opacity, _firstColor, _secondColor) {
235
+ this._warnOnce("setHeadOverlay");
236
+ }
237
+ setHeadOverlayColor(_overlayId, _colorTypeId, _firstColor, _secondColor) {
238
+ this._warnOnce("setHeadOverlayColor");
239
+ }
240
+ setEyeColor(_eyeColor) {
241
+ this._warnOnce("setEyeColor");
242
+ }
243
+ setHairColor(_colorId, _highlightColorId) {
244
+ this._warnOnce("setHairColor");
245
+ }
246
+ setComponentVariation(_componentId, _drawableId, _textureId, _paletteId) {
247
+ this._warnOnce("setComponentVariation");
248
+ }
249
+ setPropertyVariation(_componentId, _drawableId, _textureId, _attach) {
250
+ this._warnOnce("setPropertyVariation");
251
+ }
252
+ clearProp(_componentId) {
253
+ this._warnOnce("clearProp");
254
+ }
255
+ get isLocalPlayer() {
256
+ return this._isLocal;
257
+ }
258
+ taskSwapWeapon() {
259
+ this._warnOnce("taskSwapWeapon");
260
+ }
261
+ taskEnterVehicle(_vehicleHandle, _timeout, _seat, _speed, _flag, _p6) {
262
+ this._warnOnce("taskEnterVehicle");
263
+ }
264
+ clearTasks() {
265
+ this._warnOnce("clearTasks");
266
+ }
267
+ clearTasksImmediately() {
268
+ this._warnOnce("clearTasksImmediately");
269
+ }
270
+ taskPlayAnim(_dictionary, _name, _blendInSpeed, _blendOutSpeed, _duration, _flag, _playbackRate, _lockX, _lockY, _lockZ) {
271
+ this._warnOnce("taskPlayAnim");
272
+ }
273
+ stopAnim(_dictionary, _name, _blendOutSpeed) {
274
+ this._warnOnce("stopAnim");
275
+ }
276
+ setMovementClipset(_clipset, _speed) {
277
+ this._warnOnce("setMovementClipset");
278
+ }
279
+ resetMovementClipset(_blendDuration) {
280
+ this._warnOnce("resetMovementClipset");
281
+ }
282
+ getBoneCoords(boneId, offsetX, offsetY, offsetZ) {
283
+ return this._withHandle(ZERO_VECTOR, (handle) => {
284
+ const position = ccmp.natives.ped.getPedBoneCoords(handle, boneId, offsetX, offsetY, offsetZ);
285
+ return new Vector3D(position.x, position.y, position.z);
286
+ });
287
+ }
288
+ setNoCollision(otherHandle, thisFrameOnly) {
289
+ this._withHandleVoid((handle) => {
290
+ if (otherHandle !== 0) {
291
+ ccmp.natives.entity.setEntityNoCollisionEntity(handle, otherHandle, thisFrameOnly);
292
+ }
293
+ });
294
+ }
295
+ _getNativePlayer() {
296
+ try {
297
+ const player = ccmp.players.getById(this._id);
298
+ if (player) {
299
+ return player;
300
+ }
301
+ const localPlayer = ccmp.players.local;
302
+ return (localPlayer === null || localPlayer === void 0 ? void 0 : localPlayer.id) === this._id ? localPlayer : null;
303
+ }
304
+ catch (_a) {
305
+ return null;
306
+ }
307
+ }
308
+ _withHandle(fallback, callback) {
309
+ const handle = this.handle;
310
+ if (!handle) {
311
+ return fallback;
312
+ }
313
+ return callback(handle);
314
+ }
315
+ _withHandleVoid(callback) {
316
+ const handle = this.handle;
317
+ if (!handle) {
318
+ return;
319
+ }
320
+ callback(handle);
321
+ }
322
+ _warnOnce(method) {
323
+ if (CCMPPlayer._warnedMethods.has(method)) {
324
+ return;
325
+ }
326
+ CCMPPlayer._warnedMethods.add(method);
327
+ console.warn(`[CCMPPlayer] ${method}() пока не реализован для CCMP — вызов проигнорирован ` +
328
+ `(следующие вызовы этого метода будут проигнорированы молча).`);
329
+ }
330
+ }
331
+ /** Глобальный set для one-time warnings, чтобы не флудить лог. */
332
+ CCMPPlayer._warnedMethods = new Set();
@@ -0,0 +1,84 @@
1
+ import { type CCMPEventsManager } from "../../../net/ccmp/events/CCMPEventsManager";
2
+ import { type IPlayersManager } from "../../common/player/IPlayersManager";
3
+ import { type IWorldObjectsIterator } from "../../common/worldObject/IWorldObjectsIterator";
4
+ import { CCMPPlayer } from "./CCMPPlayer";
5
+ /**
6
+ * Реализация `IPlayersManager` под CCMP — single source of truth для
7
+ * `IPlayer`-инстансов и `rm::playerReady`/`rm::playerConnected`-эмиссий
8
+ * с настоящими `CCMPPlayer`-инстансами.
9
+ *
10
+ * ### Хранилище
11
+ *
12
+ * `Map<id, CCMPPlayer>`. У CCMP нет отдельных `id`/`remoteId` как в RageMP:
13
+ * один числовой `id` приходит от сервера, и он же используется везде.
14
+ * `findByID`/`findByRemoteID`/`findByRemoteId` маппятся на один lookup.
15
+ *
16
+ * ### Жизненный цикл local player'а
17
+ *
18
+ * `ccmp.players.local` (backed by `op_get_local_player_id`) валиден сразу
19
+ * после handshake'а — `PlayerManager::set_local_player_id` срабатывает до
20
+ * того, как scripts загружаются. Мы используем его, чтобы синхронно
21
+ * выпустить `rm::playerReady` как sticky-event (см. ниже):
22
+ *
23
+ * 1. **На конструкторе** — fast-path. Если local op возвращает игрока,
24
+ * эмитим `rm::playerReady` через `emitInternalSticky` с реальным
25
+ * `CCMPPlayer`-инстансом. Sticky-кэш гарантирует, что поздние
26
+ * подписчики из async DI-bootstrap'а геймода тоже получат сигнал
27
+ * при подписке.
28
+ * 2. **На `connectionStateChanged`** — fallback / handler реконнекта.
29
+ * Если на конструкторе local ещё не был валиден (handshake race),
30
+ * `connected = true` запустит retry fast-path. На `connected = false`
31
+ * чистим _localPlayer и sticky-кэш, чтобы при следующем connect'е
32
+ * эмитнуть с актуальным remoteId.
33
+ *
34
+ * `CCMPPlayer`-инстанс важен (а не структурный stub) потому что
35
+ * `RockModStateAdapter` в геймоде хранит `rockModPlayer`-ссылку и через
36
+ * неё вызывает методы (`setNoCollision`, etc). На структурном stub'е
37
+ * без методов это падало бы с `TypeError`.
38
+ *
39
+ * ### Remote-игроки
40
+ *
41
+ * Источники:
42
+ * - `ccmp.players.all` — prepopulation для уже-существующих на момент
43
+ * подключения (заполнен Rust'ом в `ClientScriptingService::init`).
44
+ * - `rm::playerConnected`/`rm::playerDisconnected` internal events
45
+ * (эмитит `CCMPEventsBridge` из нативных `ccmp.on('playerConnected'/...)`).
46
+ */
47
+ export declare class CCMPPlayersManager implements IPlayersManager {
48
+ private readonly _players;
49
+ private readonly _events;
50
+ private _localPlayer;
51
+ constructor(events: CCMPEventsManager);
52
+ findLocalPlayer(): CCMPPlayer | null;
53
+ getLocalPlayer(): CCMPPlayer;
54
+ findByRemoteId(remoteId: number): CCMPPlayer | null;
55
+ getByRemoteId(remoteId: number): CCMPPlayer;
56
+ findByName(name: string): CCMPPlayer | null;
57
+ getByName(name: string): CCMPPlayer;
58
+ syncWithMpPool(): void;
59
+ registerById(id: number): CCMPPlayer;
60
+ unregisterById(id: number): CCMPPlayer;
61
+ findByID(id: number): CCMPPlayer | null;
62
+ getByID(id: number): CCMPPlayer;
63
+ findByRemoteID(remoteId: number): CCMPPlayer | null;
64
+ getByRemoteID(remoteId: number): CCMPPlayer;
65
+ deleteById(id: number): CCMPPlayer;
66
+ get iterator(): IWorldObjectsIterator<CCMPPlayer>;
67
+ private _registerNativePlayerEvents;
68
+ /**
69
+ * Идемпотентная точка создания/обновления CCMPPlayer. Все источники
70
+ * (events, prepopulation, fast-path) проходят сюда.
71
+ */
72
+ private _ensurePlayer;
73
+ /**
74
+ * Пытается синхронно достать local player из CCMP, создать CCMPPlayer
75
+ * и эмитнуть rm::playerReady как sticky-event. Идемпотентна: повторный
76
+ * вызов после успешной эмиссии — no-op (`_localPlayer !== null`).
77
+ */
78
+ private _tryEmitLocalPlayerReady;
79
+ private _handleDisconnect;
80
+ private readonly _iterator;
81
+ private _iterateDimension;
82
+ private _iterateRange2D;
83
+ private _iterateRange3D;
84
+ }