rock-mod 0.18.0 → 0.19.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.
@@ -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
  }
@@ -35,7 +35,9 @@ 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;
@@ -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,10 @@ 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;
45
51
  }
@@ -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
  }
@@ -62,4 +62,16 @@ export class RageEntity extends RageWorldObject {
62
62
  getVariable(name) {
63
63
  return this.mpEntity.getVariable(name);
64
64
  }
65
+ attachToEntity(target, boneIndex, offset, rotation, p9, useSoftPinning, collision, isPed, vertexIndex, fixedRot) {
66
+ 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);
67
+ }
68
+ detach(useDetachVelocity, collision) {
69
+ mp.game.entity.detach(this.handle, useDetachVelocity, collision);
70
+ }
71
+ getSpeed() {
72
+ return mp.game.entity.getSpeed(this.handle);
73
+ }
74
+ isPlayingAnim(dictionary, name, taskFlag) {
75
+ return mp.game.entity.isPlayingAnim(this.handle, dictionary, name, taskFlag);
76
+ }
65
77
  }
@@ -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
  }
@@ -35,6 +35,8 @@ 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;
@@ -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
  }
@@ -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,10 @@ 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;
43
49
  }
@@ -111,4 +111,22 @@ 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
+ }
114
132
  }
@@ -1,7 +1,12 @@
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;
5
7
  requestIpl(iplName: string): void;
6
8
  removeIpl(iplName: string): void;
9
+ setFocusArea(position: IVector3D, offset: IVector3D): void;
10
+ clearFocus(): void;
11
+ setFocusEntity(entityHandle: number): void;
7
12
  }
@@ -1,8 +1,13 @@
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;
6
8
  requestIpl(iplName: string): void;
7
9
  removeIpl(iplName: string): void;
10
+ setFocusArea(position: IVector3D, offset: IVector3D): void;
11
+ clearFocus(): void;
12
+ setFocusEntity(entityHandle: number): void;
8
13
  }
@@ -5,6 +5,9 @@ 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);
@@ -15,4 +18,13 @@ export class RageStreamingManager {
15
18
  removeIpl(iplName) {
16
19
  mp.game.streaming.removeIpl(iplName);
17
20
  }
21
+ setFocusArea(position, offset) {
22
+ mp.game.streaming.setFocusArea(position.x, position.y, position.z, offset.x, offset.y, offset.z);
23
+ }
24
+ clearFocus() {
25
+ mp.game.streaming.clearFocus();
26
+ }
27
+ setFocusEntity(entityHandle) {
28
+ mp.game.streaming.setFocusEntity(entityHandle);
29
+ }
18
30
  }
@@ -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.19.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",