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.
- package/dist/client/entities/common/entity/IEntity.d.ts +5 -0
- package/dist/client/entities/common/object/IObject.d.ts +0 -1
- package/dist/client/entities/common/ped/IPed.d.ts +5 -0
- package/dist/client/entities/common/player/IPlayer.d.ts +3 -0
- package/dist/client/entities/common/player/IPlayersManager.d.ts +2 -0
- package/dist/client/entities/common/vehicle/IVehicle.d.ts +17 -0
- package/dist/client/entities/ragemp/entity/RageEntity.d.ts +5 -0
- package/dist/client/entities/ragemp/entity/RageEntity.js +17 -2
- package/dist/client/entities/ragemp/object/RageObject.d.ts +0 -1
- package/dist/client/entities/ragemp/object/RageObject.js +0 -3
- package/dist/client/entities/ragemp/ped/RagePed.d.ts +5 -0
- package/dist/client/entities/ragemp/ped/RagePed.js +16 -0
- package/dist/client/entities/ragemp/player/RagePlayer.d.ts +3 -0
- package/dist/client/entities/ragemp/player/RagePlayer.js +9 -0
- package/dist/client/entities/ragemp/player/RagePlayersManager.d.ts +2 -0
- package/dist/client/entities/ragemp/player/RagePlayersManager.js +14 -0
- package/dist/client/entities/ragemp/vehicle/RageVehicle.d.ts +17 -0
- package/dist/client/entities/ragemp/vehicle/RageVehicle.js +54 -0
- package/dist/client/game/common/graphics/IGraphicsManager.d.ts +2 -0
- package/dist/client/game/common/streaming/IStreamingManager.d.ts +7 -0
- package/dist/client/game/ragemp/graphics/RageGraphicsManager.d.ts +2 -0
- package/dist/client/game/ragemp/graphics/RageGraphicsManager.js +7 -0
- package/dist/client/game/ragemp/streaming/RageStreamingManager.d.ts +7 -0
- package/dist/client/game/ragemp/streaming/RageStreamingManager.js +18 -0
- package/dist/server/entities/ragemp/player/RagePlayersManager.js +28 -1
- package/dist/server/net/common/events/types.d.ts +11 -1
- package/dist/server/net/common/events/types.js +5 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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.
|
|
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",
|