rock-mod 0.18.0 → 0.20.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 (28) hide show
  1. package/dist/client/entities/common/entity/IEntity.d.ts +5 -0
  2. package/dist/client/entities/common/object/IObject.d.ts +0 -1
  3. package/dist/client/entities/common/ped/IPed.d.ts +5 -0
  4. package/dist/client/entities/common/player/IPlayer.d.ts +3 -0
  5. package/dist/client/entities/common/player/IPlayersManager.d.ts +2 -0
  6. package/dist/client/entities/common/vehicle/IVehicle.d.ts +17 -0
  7. package/dist/client/entities/ragemp/entity/RageEntity.d.ts +5 -0
  8. package/dist/client/entities/ragemp/entity/RageEntity.js +17 -2
  9. package/dist/client/entities/ragemp/object/RageObject.d.ts +0 -1
  10. package/dist/client/entities/ragemp/object/RageObject.js +0 -3
  11. package/dist/client/entities/ragemp/ped/RagePed.d.ts +5 -0
  12. package/dist/client/entities/ragemp/ped/RagePed.js +16 -0
  13. package/dist/client/entities/ragemp/player/RagePlayer.d.ts +3 -0
  14. package/dist/client/entities/ragemp/player/RagePlayer.js +9 -0
  15. package/dist/client/entities/ragemp/player/RagePlayersManager.d.ts +2 -0
  16. package/dist/client/entities/ragemp/player/RagePlayersManager.js +14 -0
  17. package/dist/client/entities/ragemp/vehicle/RageVehicle.d.ts +17 -0
  18. package/dist/client/entities/ragemp/vehicle/RageVehicle.js +54 -0
  19. package/dist/client/game/common/graphics/IGraphicsManager.d.ts +2 -0
  20. package/dist/client/game/common/streaming/IStreamingManager.d.ts +7 -0
  21. package/dist/client/game/ragemp/graphics/RageGraphicsManager.d.ts +2 -0
  22. package/dist/client/game/ragemp/graphics/RageGraphicsManager.js +7 -0
  23. package/dist/client/game/ragemp/streaming/RageStreamingManager.d.ts +7 -0
  24. package/dist/client/game/ragemp/streaming/RageStreamingManager.js +18 -0
  25. package/dist/server/entities/ragemp/player/RagePlayersManager.js +28 -1
  26. package/dist/server/net/common/events/types.d.ts +11 -1
  27. package/dist/server/net/common/events/types.js +5 -0
  28. package/package.json +4 -1
@@ -1,3 +1,4 @@
1
+ import { type IBaseObject } from "../baseObject";
1
2
  import { type IWorldObject, type IWorldObjectOptions } from "../worldObject/IWorldObject";
2
3
  import { type IVector3D } from "../../../../shared/common/utils";
3
4
  export interface IEntityOptions extends IWorldObjectOptions {
@@ -21,4 +22,8 @@ export interface IEntity extends IWorldObject {
21
22
  getBoneIndexByName(boneName: string): number;
22
23
  getWorldPositionOfBone(boneIndex: number): IVector3D;
23
24
  getVariable(name: string): unknown | null;
25
+ attachToEntity(target: IBaseObject, boneIndex: number, offset: IVector3D, rotation: IVector3D, p9: boolean, useSoftPinning: boolean, collision: boolean, isPed: boolean, vertexIndex: number, fixedRot: boolean): void;
26
+ detach(useDetachVelocity: boolean, collision: boolean): void;
27
+ getSpeed(): number;
28
+ isPlayingAnim(dictionary: string, name: string, taskFlag: number): boolean;
24
29
  }
@@ -4,5 +4,4 @@ export interface IObjectOptions extends IEntityOptions {
4
4
  export interface IObject extends IEntity {
5
5
  attachTo(entity: Handle, boneIndex: number, xPos: number, yPos: number, zPos: number, xRot: number, yRot: number, zRot: number, useSoftPinning: boolean, collision: boolean, isPed: boolean, vertexIndex: number, fixedRot: boolean): void;
6
6
  isAttachedTo(entity: number): boolean;
7
- detach(applyVelocy: boolean, collision: boolean): void;
8
7
  }
@@ -16,4 +16,9 @@ export interface IPed extends IEntity {
16
16
  setPropertyVariation(componentId: number, drawableId: number, textureId: number, attach: boolean): void;
17
17
  clearProp(componentId: number): void;
18
18
  getBoneCoords(boneId: number, offsetX: number, offsetY: number, offsetZ: number): IVector3D;
19
+ clearTasks(): void;
20
+ taskPlayAnim(dictionary: string, name: string, blendInSpeed: number, blendOutSpeed: number, duration: number, flag: number, playbackRate: number): void;
21
+ taskGoToCoordAnyMeans(x: number, y: number, z: number, speed: number, walkingStyle?: number, drivingFlags?: number): void;
22
+ stopAnim(dictionary: string, name: string, blendOutSpeed: number): void;
23
+ setBlockingOfNonTemporaryEvents(blocking: boolean): void;
19
24
  }
@@ -35,8 +35,11 @@ export interface IPlayer extends IEntity {
35
35
  taskSwapWeapon(): void;
36
36
  taskEnterVehicle(vehicleHandle: number, timeout: number, seat: number, speed: number, flag: number, p6: number): void;
37
37
  clearTasks(): void;
38
+ clearTasksImmediately(): void;
38
39
  taskPlayAnim(dictionary: string, name: string, blendInSpeed: number, blendOutSpeed: number, duration: number, flag: number, playbackRate: number, lockX: boolean, lockY: boolean, lockZ: boolean): void;
40
+ stopAnim(dictionary: string, name: string, blendOutSpeed: number): void;
39
41
  setMovementClipset(clipset: string, speed: number): void;
40
42
  resetMovementClipset(blendDuration: number): void;
41
43
  getBoneCoords(boneId: number, offsetX: number, offsetY: number, offsetZ: number): IVector3D;
44
+ setNoCollision(otherHandle: number, thisFrameOnly: boolean): void;
42
45
  }
@@ -3,6 +3,8 @@ import { type IPlayer } from "./IPlayer";
3
3
  export interface IPlayersManager extends IEntitiesManager<IPlayer> {
4
4
  getByName(name: string): IPlayer;
5
5
  findByName(name: string): IPlayer | null;
6
+ findByRemoteId(remoteId: number): IPlayer | null;
7
+ getByRemoteId(remoteId: number): IPlayer;
6
8
  findLocalPlayer(): IPlayer | null;
7
9
  getLocalPlayer(): IPlayer;
8
10
  }
@@ -42,4 +42,21 @@ export interface IVehicle extends IEntity {
42
42
  get numberPlateTextIndex(): number;
43
43
  setDoorOpen(doorIndex: number, loose: boolean, openInstantly: boolean): void;
44
44
  setDoorShut(doorIndex: number, instantly: boolean): void;
45
+ setHandling(field: string, value: number): void;
46
+ getHandling(field: string): number;
47
+ setEnginePowerMultiplier(value: number): void;
48
+ setEngineTorqueMultiplier(value: number): void;
49
+ modifyTopSpeed(value: number): void;
50
+ setCheatPowerIncrease(value: number): void;
51
+ toggleMod(modType: number, toggle: boolean): void;
52
+ setTyreSmokeColor(r: number, g: number, b: number): void;
53
+ setModColor1(paintType: number, color: number, p3: number): void;
54
+ setExtraColours(pearlescentColor: number, wheelColor: number): void;
55
+ setHeadlightColor(colorIndex: number): void;
56
+ setDashboardColor(colorIndex: number): void;
57
+ setInteriorColor(colorIndex: number): void;
58
+ getMaxBraking(): number;
59
+ getAcceleration(): number;
60
+ getMaxTraction(): number;
61
+ getModelMaxSpeed(): number;
45
62
  }
@@ -1,3 +1,4 @@
1
+ import { type IBaseObject } from "../../common/baseObject";
1
2
  import { type IEntity } from "../../common/entity/IEntity";
2
3
  import { type IRageWorldObjectOptions, RageWorldObject } from "../worldObject/RageWorldObject";
3
4
  import { type IVector3D, Vector3D } from "../../../../shared/common/utils";
@@ -23,4 +24,8 @@ export declare abstract class RageEntity<T extends EntityMp> extends RageWorldOb
23
24
  getBoneIndexByName(boneName: string): number;
24
25
  getWorldPositionOfBone(boneIndex: number): IVector3D;
25
26
  getVariable(name: string): unknown | null;
27
+ attachToEntity(target: IBaseObject, boneIndex: number, offset: IVector3D, rotation: IVector3D, p9: boolean, useSoftPinning: boolean, collision: boolean, isPed: boolean, vertexIndex: number, fixedRot: boolean): void;
28
+ detach(useDetachVelocity: boolean, collision: boolean): void;
29
+ getSpeed(): number;
30
+ isPlayingAnim(dictionary: string, name: string, taskFlag: number): boolean;
26
31
  }
@@ -28,10 +28,13 @@ export class RageEntity extends RageWorldObject {
28
28
  return new Vector3D(vector.x, vector.y, vector.z);
29
29
  }
30
30
  freezePosition(freeze) {
31
- this.mpEntity.freezePosition(freeze);
31
+ // FREEZE_ENTITY_POSITION via raw native: the RAGEMP wrapper does not consistently
32
+ // toggle the engine-level freeze for client-spawned entities, leaving them frozen.
33
+ mp.game.invoke("0x428CA6DBD1094446", this.handle, freeze);
32
34
  }
33
35
  setCollision(collision, keepPhysics) {
34
- this.mpEntity.setCollision(collision, keepPhysics);
36
+ // SET_ENTITY_COLLISION via raw native for the same reason as freezePosition above.
37
+ mp.game.invoke("0x1A9205C1B9EE827F", this.handle, collision, keepPhysics);
35
38
  }
36
39
  setInvincible(invincible) {
37
40
  this.mpEntity.setInvincible(invincible);
@@ -62,4 +65,16 @@ export class RageEntity extends RageWorldObject {
62
65
  getVariable(name) {
63
66
  return this.mpEntity.getVariable(name);
64
67
  }
68
+ attachToEntity(target, boneIndex, offset, rotation, p9, useSoftPinning, collision, isPed, vertexIndex, fixedRot) {
69
+ mp.game.entity.attachToEntity(this.handle, target.handle, boneIndex, offset.x, offset.y, offset.z, rotation.x, rotation.y, rotation.z, p9, useSoftPinning, collision, isPed, vertexIndex, fixedRot);
70
+ }
71
+ detach(useDetachVelocity, collision) {
72
+ mp.game.entity.detach(this.handle, useDetachVelocity, collision);
73
+ }
74
+ getSpeed() {
75
+ return mp.game.entity.getSpeed(this.handle);
76
+ }
77
+ isPlayingAnim(dictionary, name, taskFlag) {
78
+ return mp.game.entity.isPlayingAnim(this.handle, dictionary, name, taskFlag);
79
+ }
65
80
  }
@@ -6,5 +6,4 @@ export declare class RageObject extends RageEntity<ObjectMp> implements IObject
6
6
  constructor(options: IRageObjectOptions);
7
7
  attachTo(entity: Handle, boneIndex: number, xPos: number, yPos: number, zPos: number, xRot: number, yRot: number, zRot: number, useSoftPinning: boolean, collision: boolean, isPed: boolean, vertexIndex: number, fixedRot: boolean): void;
8
8
  isAttachedTo(entity: number): boolean;
9
- detach(applyVelocy: boolean, collision: boolean): void;
10
9
  }
@@ -9,7 +9,4 @@ export class RageObject extends RageEntity {
9
9
  isAttachedTo(entity) {
10
10
  return this.mpEntity.isAttachedTo(entity);
11
11
  }
12
- detach(applyVelocy, collision) {
13
- this.mpEntity.detach(applyVelocy, collision);
14
- }
15
12
  }
@@ -18,4 +18,9 @@ export declare class RagePed extends RageEntity<PedMp> implements IPed {
18
18
  setPropertyVariation(componentId: number, drawableId: number, textureId: number, attach: boolean): void;
19
19
  clearProp(componentId: number): void;
20
20
  getBoneCoords(boneId: number, offsetX: number, offsetY: number, offsetZ: number): IVector3D;
21
+ clearTasks(): void;
22
+ taskPlayAnim(dictionary: string, name: string, blendInSpeed: number, blendOutSpeed: number, duration: number, flag: number, playbackRate: number): void;
23
+ stopAnim(dictionary: string, name: string, blendOutSpeed: number): void;
24
+ taskGoToCoordAnyMeans(x: number, y: number, z: number, speed: number, walkingStyle?: number, drivingFlags?: number): void;
25
+ setBlockingOfNonTemporaryEvents(blocking: boolean): void;
21
26
  }
@@ -49,4 +49,20 @@ export class RagePed extends RageEntity {
49
49
  const { x, y, z } = this.mpEntity.getBoneCoords(boneId, offsetX, offsetY, offsetZ);
50
50
  return new Vector3D(x, y, z);
51
51
  }
52
+ clearTasks() {
53
+ this.mpEntity.clearTasks();
54
+ }
55
+ taskPlayAnim(dictionary, name, blendInSpeed, blendOutSpeed, duration, flag, playbackRate) {
56
+ this.mpEntity.taskPlayAnim(dictionary, name, blendInSpeed, blendOutSpeed, duration, flag, playbackRate, false, false, false);
57
+ }
58
+ stopAnim(dictionary, name, blendOutSpeed) {
59
+ mp.game.task.stopAnimTask(this.handle, dictionary, name, blendOutSpeed);
60
+ }
61
+ taskGoToCoordAnyMeans(x, y, z, speed, walkingStyle = 786603, drivingFlags = 0xbf800000) {
62
+ mp.game.task.goToCoordAnyMeans(this.handle, x, y, z, speed, 0, false, walkingStyle, drivingFlags);
63
+ }
64
+ setBlockingOfNonTemporaryEvents(blocking) {
65
+ // BLOCKING_OF_NON_TEMPORARY_EVENTS — no RAGEMP wrapper, invoke native by hash
66
+ mp.game.invoke("0x9F8AA94D6D97DBF4", this.handle, blocking);
67
+ }
52
68
  }
@@ -35,11 +35,14 @@ export declare class RagePlayer extends RageEntity<PlayerMp> implements IPlayer
35
35
  clearProp(componentId: number): void;
36
36
  get isLocalPlayer(): boolean;
37
37
  clearTasks(): void;
38
+ clearTasksImmediately(): void;
39
+ stopAnim(dictionary: string, name: string, blendOutSpeed: number): void;
38
40
  resetMovementClipset(blendDuration: number): void;
39
41
  setMovementClipset(clipset: string, speed: number): void;
40
42
  taskEnterVehicle(vehicleHandle: number, timeout: number, seat: number, speed: number, flag: number, p6: number): void;
41
43
  taskPlayAnim(dictionary: string, name: string, blendInSpeed: number, blendOutSpeed: number, duration: number, flag: number, playbackRate: number, lockX: boolean, lockY: boolean, lockZ: boolean): void;
42
44
  taskSwapWeapon(): void;
43
45
  getBoneCoords(boneId: number, offsetX: number, offsetY: number, offsetZ: number): IVector3D;
46
+ setNoCollision(otherHandle: number, thisFrameOnly: boolean): void;
44
47
  }
45
48
  export {};
@@ -101,6 +101,12 @@ export class RagePlayer extends RageEntity {
101
101
  clearTasks() {
102
102
  this.mpEntity.clearTasks();
103
103
  }
104
+ clearTasksImmediately() {
105
+ mp.game.task.clearPedTasksImmediately(this.handle);
106
+ }
107
+ stopAnim(dictionary, name, blendOutSpeed) {
108
+ mp.game.task.stopAnimTask(this.handle, dictionary, name, blendOutSpeed);
109
+ }
104
110
  resetMovementClipset(blendDuration) {
105
111
  this.mpEntity.resetMovementClipset(blendDuration);
106
112
  }
@@ -120,4 +126,7 @@ export class RagePlayer extends RageEntity {
120
126
  const { x, y, z } = this.mpEntity.getBoneCoords(boneId, offsetX, offsetY, offsetZ);
121
127
  return new Vector3D(x, y, z);
122
128
  }
129
+ setNoCollision(otherHandle, thisFrameOnly) {
130
+ this.mpEntity.setNoCollision(otherHandle, thisFrameOnly);
131
+ }
123
132
  }
@@ -5,6 +5,8 @@ export declare class RagePlayersManager extends RageEntitiesManager<RagePlayer>
5
5
  constructor();
6
6
  getByName(name: string): RagePlayer;
7
7
  findByName(name: string): RagePlayer | null;
8
+ findByRemoteId(remoteId: number): RagePlayer | null;
9
+ getByRemoteId(remoteId: number): RagePlayer;
8
10
  findLocalPlayer(): RagePlayer | null;
9
11
  getLocalPlayer(): IPlayer;
10
12
  syncWithMpPool(): void;
@@ -21,6 +21,20 @@ export class RagePlayersManager extends RageEntitiesManager {
21
21
  }
22
22
  return null;
23
23
  }
24
+ findByRemoteId(remoteId) {
25
+ const mpPlayer = mp.players.atRemoteId(remoteId);
26
+ if (!mpPlayer) {
27
+ return null;
28
+ }
29
+ return this.findByID(mpPlayer.id);
30
+ }
31
+ getByRemoteId(remoteId) {
32
+ const player = this.findByRemoteId(remoteId);
33
+ if (!player) {
34
+ throw new Error(`Player with remoteId ${remoteId} not found`);
35
+ }
36
+ return player;
37
+ }
24
38
  findLocalPlayer() {
25
39
  return this.findByID(mp.players.local.id);
26
40
  }
@@ -40,4 +40,21 @@ export declare class RageVehicle extends RageEntity<VehicleMp> implements IVehic
40
40
  get numberPlateTextIndex(): number;
41
41
  setDoorOpen(doorIndex: number, loose: boolean, openInstantly: boolean): void;
42
42
  setDoorShut(doorIndex: number, instantly: boolean): void;
43
+ setHandling(field: string, value: number): void;
44
+ getHandling(field: string): number;
45
+ setEnginePowerMultiplier(value: number): void;
46
+ setEngineTorqueMultiplier(value: number): void;
47
+ modifyTopSpeed(value: number): void;
48
+ setCheatPowerIncrease(value: number): void;
49
+ toggleMod(modType: number, toggle: boolean): void;
50
+ setTyreSmokeColor(r: number, g: number, b: number): void;
51
+ setModColor1(paintType: number, color: number, p3: number): void;
52
+ setExtraColours(pearlescentColor: number, wheelColor: number): void;
53
+ setHeadlightColor(colorIndex: number): void;
54
+ setDashboardColor(colorIndex: number): void;
55
+ setInteriorColor(colorIndex: number): void;
56
+ getMaxBraking(): number;
57
+ getAcceleration(): number;
58
+ getMaxTraction(): number;
59
+ getModelMaxSpeed(): number;
43
60
  }
@@ -111,4 +111,58 @@ export class RageVehicle extends RageEntity {
111
111
  setDoorShut(doorIndex, instantly) {
112
112
  this.mpEntity.setDoorShut(doorIndex, instantly);
113
113
  }
114
+ setHandling(field, value) {
115
+ this.mpEntity.setHandling(field, value);
116
+ }
117
+ getHandling(field) {
118
+ return this.mpEntity.getHandling(field);
119
+ }
120
+ setEnginePowerMultiplier(value) {
121
+ this.mpEntity.setEnginePowerMultiplier(value);
122
+ }
123
+ setEngineTorqueMultiplier(value) {
124
+ this.mpEntity.setEngineTorqueMultiplier(value);
125
+ }
126
+ modifyTopSpeed(value) {
127
+ mp.game.vehicle.modifyTopSpeed(this.handle, value);
128
+ }
129
+ setCheatPowerIncrease(value) {
130
+ mp.game.vehicle.setCheatPowerIncrease(this.handle, value);
131
+ }
132
+ toggleMod(modType, toggle) {
133
+ this.mpEntity.toggleMod(modType, toggle);
134
+ }
135
+ setTyreSmokeColor(r, g, b) {
136
+ this.mpEntity.setTyreSmokeColor(r, g, b);
137
+ }
138
+ setModColor1(paintType, color, p3) {
139
+ this.mpEntity.setModColor1(paintType, color, p3);
140
+ }
141
+ setExtraColours(pearlescentColor, wheelColor) {
142
+ this.mpEntity.setExtraColours(pearlescentColor, wheelColor);
143
+ }
144
+ setHeadlightColor(colorIndex) {
145
+ // _SET_VEHICLE_HEADLIGHT_COLOUR — no RAGEMP wrapper, invoke native by hash
146
+ mp.game.invoke("0xE41033B25D003A07", this.handle, colorIndex);
147
+ }
148
+ setDashboardColor(colorIndex) {
149
+ // SET_VEHICLE_DASHBOARD_COLOUR — no RAGEMP wrapper, invoke native by hash
150
+ mp.game.invoke("0x6089CDF6A57F326C", this.handle, colorIndex);
151
+ }
152
+ setInteriorColor(colorIndex) {
153
+ // SET_VEHICLE_INTERIOR_COLOUR — no RAGEMP wrapper, invoke native by hash
154
+ mp.game.invoke("0xF40DD601A65F7F19", this.handle, colorIndex);
155
+ }
156
+ getMaxBraking() {
157
+ return this.mpEntity.getMaxBraking();
158
+ }
159
+ getAcceleration() {
160
+ return this.mpEntity.getAcceleration();
161
+ }
162
+ getMaxTraction() {
163
+ return this.mpEntity.getMaxTraction();
164
+ }
165
+ getModelMaxSpeed() {
166
+ return mp.game.vehicle.getVehicleModelMaxSpeed(this.mpEntity.model);
167
+ }
114
168
  }
@@ -11,4 +11,6 @@ export interface IGraphicsManager {
11
11
  world3dToScreen2d(position: IVector3D): IVector2D | null;
12
12
  startScreenEffect(effectName: string, duration: number, looped: boolean): void;
13
13
  stopScreenEffect(effectName: string): void;
14
+ getSafeZoneSize(): number;
15
+ getActiveScreenResolution(): IVector2D;
14
16
  }
@@ -1,7 +1,14 @@
1
+ import { type IVector3D } from "../../../../shared/common/utils";
1
2
  export interface IStreamingManager {
2
3
  requestAnimationDictionary(dictionary: string): void;
3
4
  hasAnimationDictionaryLoaded(dictionary: string): boolean;
5
+ removeAnimationDictionary(dictionary: string): void;
4
6
  isModelInCdimage(model: string): boolean;
7
+ requestModel(modelHash: number): void;
8
+ hasModelLoaded(modelHash: number): boolean;
5
9
  requestIpl(iplName: string): void;
6
10
  removeIpl(iplName: string): void;
11
+ setFocusArea(position: IVector3D, offset: IVector3D): void;
12
+ clearFocus(): void;
13
+ setFocusEntity(entityHandle: number): void;
7
14
  }
@@ -5,4 +5,6 @@ export declare class RageGraphicsManager implements IGraphicsManager {
5
5
  world3dToScreen2d(position: IVector3D): IVector2D | null;
6
6
  startScreenEffect(effectName: string, duration: number, looped: boolean): void;
7
7
  stopScreenEffect(effectName: string): void;
8
+ getSafeZoneSize(): number;
9
+ getActiveScreenResolution(): IVector2D;
8
10
  }
@@ -27,4 +27,11 @@ export class RageGraphicsManager {
27
27
  stopScreenEffect(effectName) {
28
28
  mp.game.graphics.stopScreenEffect(effectName);
29
29
  }
30
+ getSafeZoneSize() {
31
+ return mp.game.graphics.getSafeZoneSize();
32
+ }
33
+ getActiveScreenResolution() {
34
+ const result = mp.game.graphics.getActiveScreenResolution();
35
+ return new Vector2D(result.x, result.y);
36
+ }
30
37
  }
@@ -1,8 +1,15 @@
1
1
  import { type IStreamingManager } from "../../../game";
2
+ import { type IVector3D } from "../../../../shared/common/utils";
2
3
  export declare class RageStreamingManager implements IStreamingManager {
3
4
  requestAnimationDictionary(dictionary: string): void;
4
5
  hasAnimationDictionaryLoaded(dictionary: string): boolean;
6
+ removeAnimationDictionary(dictionary: string): void;
5
7
  isModelInCdimage(model: string): boolean;
8
+ requestModel(modelHash: number): void;
9
+ hasModelLoaded(modelHash: number): boolean;
6
10
  requestIpl(iplName: string): void;
7
11
  removeIpl(iplName: string): void;
12
+ setFocusArea(position: IVector3D, offset: IVector3D): void;
13
+ clearFocus(): void;
14
+ setFocusEntity(entityHandle: number): void;
8
15
  }
@@ -5,14 +5,32 @@ export class RageStreamingManager {
5
5
  hasAnimationDictionaryLoaded(dictionary) {
6
6
  return mp.game.streaming.hasAnimDictLoaded(dictionary);
7
7
  }
8
+ removeAnimationDictionary(dictionary) {
9
+ mp.game.streaming.removeAnimDict(dictionary);
10
+ }
8
11
  isModelInCdimage(model) {
9
12
  const modelHash = mp.game.joaat(model);
10
13
  return mp.game.streaming.isModelInCdimage(modelHash);
11
14
  }
15
+ requestModel(modelHash) {
16
+ mp.game.streaming.requestModel(modelHash);
17
+ }
18
+ hasModelLoaded(modelHash) {
19
+ return mp.game.streaming.hasModelLoaded(modelHash);
20
+ }
12
21
  requestIpl(iplName) {
13
22
  mp.game.streaming.requestIpl(iplName);
14
23
  }
15
24
  removeIpl(iplName) {
16
25
  mp.game.streaming.removeIpl(iplName);
17
26
  }
27
+ setFocusArea(position, offset) {
28
+ mp.game.streaming.setFocusArea(position.x, position.y, position.z, offset.x, offset.y, offset.z);
29
+ }
30
+ clearFocus() {
31
+ mp.game.streaming.clearFocus();
32
+ }
33
+ setFocusEntity(entityHandle) {
34
+ mp.game.streaming.setFocusEntity(entityHandle);
35
+ }
18
36
  }
@@ -4,6 +4,7 @@ exports.RagePlayersManager = void 0;
4
4
  const RageEntitiesManager_1 = require("../entity/RageEntitiesManager");
5
5
  const RagePlayer_1 = require("./RagePlayer");
6
6
  const types_1 = require("../../../net/common/events/types");
7
+ const RockMod_1 = require("../../../RockMod");
7
8
  class RagePlayersManager extends RageEntitiesManager_1.RageEntitiesManager {
8
9
  constructor(net) {
9
10
  super({
@@ -51,11 +52,37 @@ class RagePlayersManager extends RageEntitiesManager_1.RageEntitiesManager {
51
52
  this.registerBaseObject(player);
52
53
  net.events.emitInternal(types_1.ServerInternalEventName.PlayerConnected, player);
53
54
  },
54
- playerQuit: (mpPlayer) => {
55
+ playerQuit: (mpPlayer, exitType, reason) => {
55
56
  const player = this.getByID(mpPlayer.id);
57
+ net.events.emitInternal(types_1.ServerInternalEventName.PlayerQuit, player, exitType, reason);
56
58
  this.unregisterBaseObject(player);
57
59
  net.events.emitInternal(types_1.ServerInternalEventName.PlayerDisconnected, player);
58
60
  },
61
+ playerDeath: (mpPlayer, reason, killer) => {
62
+ const player = this.getByID(mpPlayer.id);
63
+ const killerPlayer = killer ? (RockMod_1.RockMod.instance.players.findByID(killer.id) ?? null) : null;
64
+ net.events.emitInternal(types_1.ServerInternalEventName.PlayerDeath, player, reason, killerPlayer);
65
+ },
66
+ playerDamage: (mpPlayer, healthLoss, armourLoss) => {
67
+ const player = this.getByID(mpPlayer.id);
68
+ net.events.emitInternal(types_1.ServerInternalEventName.PlayerDamage, player, healthLoss, armourLoss);
69
+ },
70
+ playerEnterVehicle: (mpPlayer, mpVehicle, seat) => {
71
+ const player = this.getByID(mpPlayer.id);
72
+ const vehicle = RockMod_1.RockMod.instance.vehicles.findByID(mpVehicle.id);
73
+ if (!vehicle) {
74
+ return;
75
+ }
76
+ net.events.emitInternal(types_1.ServerInternalEventName.PlayerEnterVehicle, player, vehicle, seat);
77
+ },
78
+ playerExitVehicle: (mpPlayer, mpVehicle) => {
79
+ const player = this.getByID(mpPlayer.id);
80
+ const vehicle = RockMod_1.RockMod.instance.vehicles.findByID(mpVehicle.id);
81
+ if (!vehicle) {
82
+ return;
83
+ }
84
+ net.events.emitInternal(types_1.ServerInternalEventName.PlayerExitVehicle, player, vehicle);
85
+ },
59
86
  });
60
87
  }
61
88
  }
@@ -1,7 +1,12 @@
1
- import { type IBaseObject, type IColshape, type IPlayer } from "../../../entities";
1
+ import { type IBaseObject, type IColshape, type IPlayer, type IVehicle } from "../../../entities";
2
2
  export declare enum ServerInternalEventName {
3
3
  PlayerConnected = "rm::playerConnected",
4
4
  PlayerDisconnected = "rm::playerDisconnected",
5
+ PlayerQuit = "rm::playerQuit",
6
+ PlayerDeath = "rm::playerDeath",
7
+ PlayerDamage = "rm::playerDamage",
8
+ PlayerEnterVehicle = "rm::playerEnterVehicle",
9
+ PlayerExitVehicle = "rm::playerExitVehicle",
5
10
  PlayerEnteredColshape = "rm::playerEnteredColshape",
6
11
  PlayerLeftColshape = "rm::playerLeftColshape",
7
12
  EntityCreated = "rm::entityCreated",
@@ -10,6 +15,11 @@ export declare enum ServerInternalEventName {
10
15
  export interface IServerInternalEvents {
11
16
  [ServerInternalEventName.PlayerConnected]: (player: IPlayer) => void;
12
17
  [ServerInternalEventName.PlayerDisconnected]: (player: IPlayer) => void;
18
+ [ServerInternalEventName.PlayerQuit]: (player: IPlayer, exitType: string, reason: string) => void;
19
+ [ServerInternalEventName.PlayerDeath]: (player: IPlayer, reason: number, killer: IPlayer | null) => void;
20
+ [ServerInternalEventName.PlayerDamage]: (player: IPlayer, healthLoss: number, armourLoss: number) => void;
21
+ [ServerInternalEventName.PlayerEnterVehicle]: (player: IPlayer, vehicle: IVehicle, seat: number) => void;
22
+ [ServerInternalEventName.PlayerExitVehicle]: (player: IPlayer, vehicle: IVehicle) => void;
13
23
  [ServerInternalEventName.PlayerEnteredColshape]: (player: IPlayer, colshape: IColshape) => void;
14
24
  [ServerInternalEventName.PlayerLeftColshape]: (player: IPlayer, colshape: IColshape) => void;
15
25
  [ServerInternalEventName.EntityCreated]: (object: IBaseObject) => void;
@@ -5,6 +5,11 @@ var ServerInternalEventName;
5
5
  (function (ServerInternalEventName) {
6
6
  ServerInternalEventName["PlayerConnected"] = "rm::playerConnected";
7
7
  ServerInternalEventName["PlayerDisconnected"] = "rm::playerDisconnected";
8
+ ServerInternalEventName["PlayerQuit"] = "rm::playerQuit";
9
+ ServerInternalEventName["PlayerDeath"] = "rm::playerDeath";
10
+ ServerInternalEventName["PlayerDamage"] = "rm::playerDamage";
11
+ ServerInternalEventName["PlayerEnterVehicle"] = "rm::playerEnterVehicle";
12
+ ServerInternalEventName["PlayerExitVehicle"] = "rm::playerExitVehicle";
8
13
  ServerInternalEventName["PlayerEnteredColshape"] = "rm::playerEnteredColshape";
9
14
  ServerInternalEventName["PlayerLeftColshape"] = "rm::playerLeftColshape";
10
15
  ServerInternalEventName["EntityCreated"] = "rm::entityCreated";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rock-mod",
3
- "version": "0.18.0",
3
+ "version": "0.20.0",
4
4
  "description": "Rock-Mod is a powerful framework designed for creating and managing mods for Grand Theft Auto (GTA) games.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -82,6 +82,9 @@
82
82
  ],
83
83
  "author": "xvetal",
84
84
  "license": "MIT",
85
+ "dependencies": {
86
+ "@swc/helpers": "^0.5.15"
87
+ },
85
88
  "devDependencies": {
86
89
  "@rollup/plugin-commonjs": "^25.0.7",
87
90
  "@rollup/plugin-node-resolve": "^15.2.3",