rock-mod 0.21.0 → 0.22.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/ccmp/blip/CCMPBlip.d.ts +38 -0
- package/dist/client/entities/ccmp/blip/CCMPBlip.js +118 -0
- package/dist/client/entities/ccmp/blip/CCMPBlipsManager.d.ts +27 -0
- package/dist/client/entities/ccmp/blip/CCMPBlipsManager.js +191 -0
- package/dist/client/entities/ccmp/camera/CCMPCamera.d.ts +1 -1
- package/dist/client/entities/ccmp/camera/CCMPCamera.js +1 -1
- package/dist/client/entities/ccmp/camera/CCMPCameraManager.js +2 -1
- package/dist/client/entities/ccmp/colshape/CCMPColshape.d.ts +26 -0
- package/dist/client/entities/ccmp/colshape/CCMPColshape.js +83 -0
- package/dist/client/entities/ccmp/colshape/CCMPColshapesManager.d.ts +31 -0
- package/dist/client/entities/ccmp/colshape/CCMPColshapesManager.js +193 -0
- package/dist/client/entities/ccmp/marker/CCMPMarker.d.ts +34 -0
- package/dist/client/entities/ccmp/marker/CCMPMarker.js +109 -0
- package/dist/client/entities/ccmp/marker/CCMPMarkersManager.d.ts +27 -0
- package/dist/client/entities/ccmp/marker/CCMPMarkersManager.js +180 -0
- package/dist/client/entities/ccmp/object/CCMPObject.d.ts +53 -0
- package/dist/client/entities/ccmp/object/CCMPObject.js +218 -0
- package/dist/client/entities/ccmp/object/CCMPObjectsManager.d.ts +27 -0
- package/dist/client/entities/ccmp/object/CCMPObjectsManager.js +177 -0
- package/dist/client/entities/ccmp/ped/CCMPPed.d.ts +1 -1
- package/dist/client/entities/ccmp/ped/CCMPPed.js +21 -7
- package/dist/client/entities/ccmp/ped/CCMPPedsManager.d.ts +7 -0
- package/dist/client/entities/ccmp/ped/CCMPPedsManager.js +82 -10
- package/dist/client/entities/ccmp/player/CCMPPlayer.d.ts +1 -1
- package/dist/client/entities/ccmp/player/CCMPPlayer.js +10 -4
- package/dist/client/entities/ccmp/player/CCMPPlayersManager.d.ts +4 -3
- package/dist/client/entities/ccmp/player/CCMPPlayersManager.js +20 -7
- package/dist/client/entities/ccmp/vehicle/CCMPVehicle.d.ts +119 -0
- package/dist/client/entities/ccmp/vehicle/CCMPVehicle.js +392 -0
- package/dist/client/entities/ccmp/vehicle/CCMPVehiclesManager.d.ts +11 -48
- package/dist/client/entities/ccmp/vehicle/CCMPVehiclesManager.js +152 -74
- package/dist/client/entities/common/baseObject/IBaseObject.d.ts +2 -1
- package/dist/client/entities/ragemp/entity/RageEntity.d.ts +4 -0
- package/dist/client/entities/ragemp/entity/RageEntity.js +34 -2
- package/dist/client/factories/ccmp/CCMPManagersFactory.d.ts +9 -7
- package/dist/client/factories/ccmp/CCMPManagersFactory.js +62 -22
- package/dist/client/game/ccmp/storage/CCMPStorageManager.d.ts +0 -18
- package/dist/client/game/ccmp/storage/CCMPStorageManager.js +4 -36
- package/dist/client/net/ccmp/CCMPNetManager.js +1 -1
- package/dist/client/net/ccmp/dataHandler/CCMPDataHandler.d.ts +2 -2
- package/dist/client/net/ccmp/dataHandler/CCMPDataHandler.js +2 -2
- package/dist/client/net/ccmp/events/CCMPSyncedMetaBridge.d.ts +21 -16
- package/dist/client/net/ccmp/events/CCMPSyncedMetaBridge.js +32 -22
- package/dist/client/net/common/dataHandler/IDataHandler.d.ts +2 -2
- package/dist/client/net/common/events/types.d.ts +4 -4
- package/dist/client/net/ragemp/dataHandler/RageDataHandler.d.ts +2 -2
- package/dist/server/entities/ccmp/baseObject/CCMPBaseObjectsManager.js +4 -4
- package/dist/server/entities/ccmp/blip/CCMPBlip.d.ts +2 -0
- package/dist/server/entities/ccmp/blip/CCMPBlip.js +6 -0
- package/dist/server/entities/ccmp/colshape/CCMPColshape.d.ts +2 -0
- package/dist/server/entities/ccmp/colshape/CCMPColshape.js +6 -0
- package/dist/server/entities/ccmp/marker/CCMPMarker.d.ts +2 -0
- package/dist/server/entities/ccmp/marker/CCMPMarker.js +6 -0
- package/dist/server/entities/ccmp/object/CCMPObject.d.ts +1 -1
- package/dist/server/entities/ccmp/object/CCMPObject.js +3 -5
- package/dist/server/entities/ccmp/object/CCMPObjectsManager.js +1 -2
- package/dist/server/entities/ccmp/vehicle/CCMPVehicle.d.ts +2 -2
- package/dist/server/entities/ccmp/vehicle/CCMPVehicle.js +5 -5
- package/dist/server/entities/ragemp/entity/RageEntity.d.ts +5 -1
- package/dist/server/entities/ragemp/entity/RageEntity.js +17 -1
- package/dist/server/entities/ragemp/object/RageObjectsManager.js +1 -1
- package/dist/server/entities/ragemp/ped/RagePedsManager.js +1 -1
- package/dist/server/entities/ragemp/vehicle/RageVehiclesManager.js +1 -1
- package/package.json +2 -2
|
@@ -1,35 +1,45 @@
|
|
|
1
1
|
import { ClientInternalEventName } from "../../common/events/types";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* `rm::syncedMetaChange
|
|
5
|
-
*
|
|
6
|
-
* Вынесено в отдельный класс от `CCMPEventsBridge` из-за порядка
|
|
7
|
-
* инстанцирования: bridge'у нужна ссылка на `CCMPPlayersManager` чтобы
|
|
8
|
-
* резолвить `payload.entityId → CCMPPlayer`, а players manager создаётся
|
|
9
|
-
* в `CCMPManagersFactory` **после** `CCMPNetManager` (внутри которого
|
|
10
|
-
* живёт `CCMPEventsBridge`). Поэтому этот bridge создаётся вторым
|
|
11
|
-
* шагом из `createPlayersManager`, когда обе зависимости уже доступны.
|
|
12
|
-
*
|
|
13
|
-
* Сейчас обслуживается только `entityType === Player` (=0) — на клиенте
|
|
14
|
-
* rock-mod-CCMP других сущностей пока нет. Остальные типы тихо
|
|
15
|
-
* игнорируем (snapshot прилетает на каждом stream-in, для несуществующих
|
|
16
|
-
* на клиенте сущностей это нормально).
|
|
3
|
+
* Translates CCMP `streamSyncedMetaChange` into Rock-Mod's internal
|
|
4
|
+
* `rm::syncedMetaChange` for stream-synced base objects.
|
|
17
5
|
*/
|
|
18
6
|
export class CCMPSyncedMetaBridge {
|
|
19
|
-
constructor(events,
|
|
7
|
+
constructor(events, managers) {
|
|
8
|
+
this._registered = false;
|
|
20
9
|
this._events = events;
|
|
21
|
-
this.
|
|
10
|
+
this._managers = managers;
|
|
22
11
|
}
|
|
23
12
|
register() {
|
|
13
|
+
if (this._registered) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
this._registered = true;
|
|
24
17
|
ccmp.on("streamSyncedMetaChange", (payload) => {
|
|
25
|
-
|
|
18
|
+
const object = this._resolveObject(payload.entityType, payload.entityId);
|
|
19
|
+
if (!object) {
|
|
26
20
|
return;
|
|
27
21
|
}
|
|
28
|
-
|
|
29
|
-
if (!player) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
this._events.emitInternal(ClientInternalEventName.SyncedMetaChange, player, payload.key, payload.newValue, payload.oldValue);
|
|
22
|
+
this._events.emitInternal(ClientInternalEventName.SyncedMetaChange, object, payload.key, payload.newValue, payload.oldValue);
|
|
33
23
|
});
|
|
34
24
|
}
|
|
25
|
+
_resolveObject(entityType, entityId) {
|
|
26
|
+
switch (entityType) {
|
|
27
|
+
case ccmp.entities.ENTITY_TYPE.Player:
|
|
28
|
+
return this._managers.players.findByRemoteId(entityId);
|
|
29
|
+
case ccmp.entities.ENTITY_TYPE.Vehicle:
|
|
30
|
+
return this._managers.vehicles.findByRemoteID(entityId);
|
|
31
|
+
case ccmp.entities.ENTITY_TYPE.Object:
|
|
32
|
+
return this._managers.objects.findByRemoteID(entityId);
|
|
33
|
+
case ccmp.entities.ENTITY_TYPE.Ped:
|
|
34
|
+
return this._managers.peds.findByRemoteID(entityId);
|
|
35
|
+
case ccmp.entities.ENTITY_TYPE.Marker:
|
|
36
|
+
return this._managers.markers.findByRemoteID(entityId);
|
|
37
|
+
case ccmp.entities.ENTITY_TYPE.Blip:
|
|
38
|
+
return this._managers.blips.findByRemoteID(entityId);
|
|
39
|
+
case ccmp.entities.ENTITY_TYPE.Colshape:
|
|
40
|
+
return this._managers.colshapes.findByRemoteID(entityId);
|
|
41
|
+
default:
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
35
45
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type IBaseObject } from "../../../entities";
|
|
2
2
|
export interface IDataHandler {
|
|
3
|
-
addDataHandler(key: string, callback: (
|
|
3
|
+
addDataHandler(key: string, callback: (object: IBaseObject, value: unknown, oldValue?: unknown) => void): void;
|
|
4
4
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type IBaseObject, type
|
|
1
|
+
import { type IBaseObject, type IPlayer, type IVehicle } from "../../../entities";
|
|
2
2
|
import { type IVector3D } from "../../../../shared/common/utils";
|
|
3
3
|
export declare enum ClientInternalEventName {
|
|
4
4
|
PlayerConnected = "rm::playerConnected",
|
|
@@ -35,8 +35,8 @@ export interface IClientInternalEvents {
|
|
|
35
35
|
[ClientInternalEventName.EntityDestroyed]: (object: IBaseObject) => void;
|
|
36
36
|
[ClientInternalEventName.PlayerReady]: (localPlayer: IPlayer) => void;
|
|
37
37
|
[ClientInternalEventName.BrowserDomReady]: () => void;
|
|
38
|
-
[ClientInternalEventName.EntityStreamIn]: (
|
|
39
|
-
[ClientInternalEventName.EntityStreamOut]: (
|
|
38
|
+
[ClientInternalEventName.EntityStreamIn]: (object: IBaseObject) => void;
|
|
39
|
+
[ClientInternalEventName.EntityStreamOut]: (object: IBaseObject) => void;
|
|
40
40
|
[ClientInternalEventName.PlayerEnterVehicle]: (vehicle: IVehicle, seat: number) => void;
|
|
41
41
|
[ClientInternalEventName.PlayerLeaveVehicle]: (vehicle: IVehicle, seat: number) => void;
|
|
42
42
|
[ClientInternalEventName.PlayerDeath]: (player: IPlayer) => void;
|
|
@@ -44,5 +44,5 @@ export interface IClientInternalEvents {
|
|
|
44
44
|
[ClientInternalEventName.PlayerWeaponShot]: () => void;
|
|
45
45
|
[ClientInternalEventName.Render]: () => void;
|
|
46
46
|
[ClientInternalEventName.Click]: (options: IClickOptions) => void;
|
|
47
|
-
[ClientInternalEventName.SyncedMetaChange]: (
|
|
47
|
+
[ClientInternalEventName.SyncedMetaChange]: (object: IBaseObject, key: string, value: unknown, oldValue: unknown) => void;
|
|
48
48
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type IBaseObject, type IEntityPoolRouter } from "../../../entities";
|
|
2
2
|
import { type IDataHandler } from "../../../net/common/dataHandler/IDataHandler";
|
|
3
3
|
export declare class RageDataHandler implements IDataHandler {
|
|
4
4
|
private readonly _entityPoolRouter;
|
|
5
5
|
constructor(entityPoolRouter: IEntityPoolRouter);
|
|
6
|
-
addDataHandler(key: string, callback: (
|
|
6
|
+
addDataHandler(key: string, callback: (object: IBaseObject, value: unknown, oldValue?: unknown) => void): void;
|
|
7
7
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CCMPBaseObjectsManager = void 0;
|
|
4
4
|
const CCMPBaseObjectsIterator_1 = require("./CCMPBaseObjectsIterator");
|
|
5
|
+
const RockMod_1 = require("../../../RockMod");
|
|
6
|
+
const types_1 = require("../../../net/common/events/types");
|
|
5
7
|
class CCMPBaseObjectsManager {
|
|
6
8
|
_baseObjects;
|
|
7
9
|
_baseObjectsType;
|
|
@@ -35,15 +37,13 @@ class CCMPBaseObjectsManager {
|
|
|
35
37
|
throw new Error(`BaseObject [${this._baseObjectsType}] with id ${baseObject.id} already exists`);
|
|
36
38
|
}
|
|
37
39
|
this._baseObjects.set(baseObject.id, baseObject);
|
|
38
|
-
|
|
39
|
-
// through net.events once CCMPEventsManager is implemented (parity with RageBaseObjectsManager).
|
|
40
|
+
RockMod_1.RockMod.instance.net.events.emitInternal(types_1.ServerInternalEventName.EntityCreated, baseObject);
|
|
40
41
|
}
|
|
41
42
|
unregisterBaseObject(baseObject) {
|
|
42
43
|
if (!this._baseObjects.delete(baseObject.id)) {
|
|
43
44
|
throw new Error(`BaseObject [${this._baseObjectsType}] with id ${baseObject.id} not found`);
|
|
44
45
|
}
|
|
45
|
-
|
|
46
|
-
// through net.events once CCMPEventsManager is implemented.
|
|
46
|
+
RockMod_1.RockMod.instance.net.events.emitInternal(types_1.ServerInternalEventName.EntityDestroyed, baseObject);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
exports.CCMPBaseObjectsManager = CCMPBaseObjectsManager;
|
|
@@ -27,6 +27,8 @@ export declare class CCMPBlip extends CCMPWorldObject implements IBlip {
|
|
|
27
27
|
destroy(): void;
|
|
28
28
|
setPosition(value: IVector3D): void;
|
|
29
29
|
setDimension(value: number): void;
|
|
30
|
+
getNetData(name: string): unknown;
|
|
31
|
+
setNetData(name: string, value: unknown): void;
|
|
30
32
|
setName(value: string): void;
|
|
31
33
|
setSprite(value: IBlipSprite): void;
|
|
32
34
|
setColor(value: IBlipColor): void;
|
|
@@ -64,6 +64,12 @@ class CCMPBlip extends CCMPWorldObject_1.CCMPWorldObject {
|
|
|
64
64
|
setDimension(value) {
|
|
65
65
|
this._ccmpBlip.dimension = value;
|
|
66
66
|
}
|
|
67
|
+
getNetData(name) {
|
|
68
|
+
return this._ccmpBlip.getStreamSyncedMeta(name);
|
|
69
|
+
}
|
|
70
|
+
setNetData(name, value) {
|
|
71
|
+
this._ccmpBlip.setStreamSyncedMeta(name, value);
|
|
72
|
+
}
|
|
67
73
|
setName(value) {
|
|
68
74
|
this._ccmpBlip.name = value;
|
|
69
75
|
}
|
|
@@ -16,6 +16,8 @@ export declare abstract class CCMPColshape extends CCMPWorldObject implements IC
|
|
|
16
16
|
get position(): IVector3D;
|
|
17
17
|
get dimension(): number;
|
|
18
18
|
get playersInside(): readonly CcmpPlayer[];
|
|
19
|
+
getNetData(name: string): unknown;
|
|
20
|
+
setNetData(name: string, value: unknown): void;
|
|
19
21
|
protected constructor(options: ICCMPColshapeOptions);
|
|
20
22
|
destroy(): void;
|
|
21
23
|
setPosition(value: IVector3D): void;
|
|
@@ -26,6 +26,12 @@ class CCMPColshape extends CCMPWorldObject_1.CCMPWorldObject {
|
|
|
26
26
|
get playersInside() {
|
|
27
27
|
return this._ccmpColshape.playersInside;
|
|
28
28
|
}
|
|
29
|
+
getNetData(name) {
|
|
30
|
+
return this._ccmpColshape.getStreamSyncedMeta(name);
|
|
31
|
+
}
|
|
32
|
+
setNetData(name, value) {
|
|
33
|
+
this._ccmpColshape.setStreamSyncedMeta(name, value);
|
|
34
|
+
}
|
|
29
35
|
constructor(options) {
|
|
30
36
|
super();
|
|
31
37
|
this._ccmpColshape = options.ccmpColshape;
|
|
@@ -25,6 +25,8 @@ export declare class CCMPMarker extends CCMPWorldObject implements IMarker {
|
|
|
25
25
|
destroy(): void;
|
|
26
26
|
setPosition(value: IVector3D): void;
|
|
27
27
|
setDimension(value: number): void;
|
|
28
|
+
getNetData(name: string): unknown;
|
|
29
|
+
setNetData(name: string, value: unknown): void;
|
|
28
30
|
setVisible(value: boolean): void;
|
|
29
31
|
setScale(value: number): void;
|
|
30
32
|
setColor(value: IRGBA): void;
|
|
@@ -58,6 +58,12 @@ class CCMPMarker extends CCMPWorldObject_1.CCMPWorldObject {
|
|
|
58
58
|
setDimension(value) {
|
|
59
59
|
this._ccmpMarker.dimension = value;
|
|
60
60
|
}
|
|
61
|
+
getNetData(name) {
|
|
62
|
+
return this._ccmpMarker.getStreamSyncedMeta(name);
|
|
63
|
+
}
|
|
64
|
+
setNetData(name, value) {
|
|
65
|
+
this._ccmpMarker.setStreamSyncedMeta(name, value);
|
|
66
|
+
}
|
|
61
67
|
setVisible(value) {
|
|
62
68
|
this._ccmpMarker.visible = value;
|
|
63
69
|
}
|
|
@@ -18,6 +18,7 @@ export interface ICCMPObjectNative extends StreamSyncedMeta {
|
|
|
18
18
|
};
|
|
19
19
|
model: number;
|
|
20
20
|
dimension: number;
|
|
21
|
+
alpha: number;
|
|
21
22
|
destroy(): boolean;
|
|
22
23
|
}
|
|
23
24
|
export interface ICCMPObjectOptions {
|
|
@@ -28,7 +29,6 @@ export interface ICCMPObjectOptions {
|
|
|
28
29
|
export declare class CCMPObject extends CCMPEntity implements IObject {
|
|
29
30
|
private readonly _ccmpObject;
|
|
30
31
|
private readonly _onDestroy;
|
|
31
|
-
private _alpha;
|
|
32
32
|
get id(): number;
|
|
33
33
|
get type(): BaseObjectType;
|
|
34
34
|
get isExists(): boolean;
|
|
@@ -8,7 +8,6 @@ const RockMod_1 = require("../../../RockMod");
|
|
|
8
8
|
class CCMPObject extends CCMPEntity_1.CCMPEntity {
|
|
9
9
|
_ccmpObject;
|
|
10
10
|
_onDestroy;
|
|
11
|
-
_alpha;
|
|
12
11
|
get id() {
|
|
13
12
|
return this._ccmpObject.id;
|
|
14
13
|
}
|
|
@@ -33,7 +32,7 @@ class CCMPObject extends CCMPEntity_1.CCMPEntity {
|
|
|
33
32
|
return new Vectors_1.Vector3D(r.x, r.y, r.z);
|
|
34
33
|
}
|
|
35
34
|
get alpha() {
|
|
36
|
-
return this.
|
|
35
|
+
return this._ccmpObject.alpha;
|
|
37
36
|
}
|
|
38
37
|
get ccmpMeta() {
|
|
39
38
|
return this._ccmpObject;
|
|
@@ -41,7 +40,7 @@ class CCMPObject extends CCMPEntity_1.CCMPEntity {
|
|
|
41
40
|
constructor(options) {
|
|
42
41
|
super();
|
|
43
42
|
this._ccmpObject = options.ccmpObject;
|
|
44
|
-
this.
|
|
43
|
+
this._ccmpObject.alpha = options.alpha;
|
|
45
44
|
this._onDestroy = options.onDestroy;
|
|
46
45
|
}
|
|
47
46
|
destroy() {
|
|
@@ -62,9 +61,8 @@ class CCMPObject extends CCMPEntity_1.CCMPEntity {
|
|
|
62
61
|
setRotation(value) {
|
|
63
62
|
this._ccmpObject.rotation = { x: value.x, y: value.y, z: value.z };
|
|
64
63
|
}
|
|
65
|
-
// CCMP runtime currently has no object alpha op; keep an API-level cache.
|
|
66
64
|
setAlpha(value) {
|
|
67
|
-
this.
|
|
65
|
+
this._ccmpObject.alpha = value;
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
68
|
exports.CCMPObject = CCMPObject;
|
|
@@ -11,11 +11,10 @@ class CCMPObjectsManager extends CCMPEntitiesManager_1.CCMPEntitiesManager {
|
|
|
11
11
|
}
|
|
12
12
|
create(options) {
|
|
13
13
|
const { model, position, dimension, rotation, alpha } = options;
|
|
14
|
-
const ccmpObject = ccmp.objects.create(ccmp.hash(model), position.x, position.y, position.z, rotation.x, rotation.y, rotation.z);
|
|
14
|
+
const ccmpObject = ccmp.objects.create(ccmp.hash(model), position.x, position.y, position.z, rotation.x, rotation.y, rotation.z, { dimension, alpha });
|
|
15
15
|
if (!ccmpObject) {
|
|
16
16
|
throw new Error("CCMPObjectsManager.create: ccmp.objects.create failed (server full?)");
|
|
17
17
|
}
|
|
18
|
-
ccmpObject.dimension = dimension;
|
|
19
18
|
const object = new CCMPObject_1.CCMPObject({
|
|
20
19
|
ccmpObject,
|
|
21
20
|
alpha,
|
|
@@ -40,7 +40,7 @@ export declare class CCMPVehicle extends CCMPEntity implements IVehicle {
|
|
|
40
40
|
setBodyHealth(_value: number): void;
|
|
41
41
|
setEngineHealth(_value: number): void;
|
|
42
42
|
setEngineOn(value: boolean): void;
|
|
43
|
-
setNumberPlate(
|
|
43
|
+
setNumberPlate(value: string): void;
|
|
44
44
|
setLocked(_value: boolean): void;
|
|
45
45
|
setPrimaryColor(_value: number): void;
|
|
46
46
|
setSecondaryColor(_value: number): void;
|
|
@@ -52,7 +52,7 @@ export declare class CCMPVehicle extends CCMPEntity implements IVehicle {
|
|
|
52
52
|
setNeonColor(_r: number, _g: number, _b: number): void;
|
|
53
53
|
setWindowTint(_tintType: number): void;
|
|
54
54
|
setWheelType(_wheelType: number): void;
|
|
55
|
-
setPlateType(
|
|
55
|
+
setPlateType(plateType: number): void;
|
|
56
56
|
explode(): void;
|
|
57
57
|
repair(): void;
|
|
58
58
|
}
|
|
@@ -41,7 +41,7 @@ class CCMPVehicle extends CCMPEntity_1.CCMPEntity {
|
|
|
41
41
|
return notImplemented("CCMPVehicle.engineHealth");
|
|
42
42
|
}
|
|
43
43
|
get numberPlate() {
|
|
44
|
-
return
|
|
44
|
+
return this._ccmpVehicle.numberPlateText;
|
|
45
45
|
}
|
|
46
46
|
get isLocked() {
|
|
47
47
|
return notImplemented("CCMPVehicle.isLocked");
|
|
@@ -112,8 +112,8 @@ class CCMPVehicle extends CCMPEntity_1.CCMPEntity {
|
|
|
112
112
|
setEngineOn(value) {
|
|
113
113
|
this._ccmpVehicle.engineOn = value;
|
|
114
114
|
}
|
|
115
|
-
setNumberPlate(
|
|
116
|
-
|
|
115
|
+
setNumberPlate(value) {
|
|
116
|
+
this._ccmpVehicle.numberPlateText = value;
|
|
117
117
|
}
|
|
118
118
|
setLocked(_value) {
|
|
119
119
|
notImplemented("CCMPVehicle.setLocked");
|
|
@@ -148,8 +148,8 @@ class CCMPVehicle extends CCMPEntity_1.CCMPEntity {
|
|
|
148
148
|
setWheelType(_wheelType) {
|
|
149
149
|
notImplemented("CCMPVehicle.setWheelType");
|
|
150
150
|
}
|
|
151
|
-
setPlateType(
|
|
152
|
-
|
|
151
|
+
setPlateType(plateType) {
|
|
152
|
+
this._ccmpVehicle.numberPlateType = plateType;
|
|
153
153
|
}
|
|
154
154
|
explode() {
|
|
155
155
|
notImplemented("CCMPVehicle.explode");
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type IEntity } from "../../common/entity/IEntity";
|
|
2
2
|
import { type IRageWorldObjectOptions, RageWorldObject } from "../worldObject/RageWorldObject";
|
|
3
|
-
import { Vector3D } from "../../../../shared/common/utils";
|
|
3
|
+
import { type IVector3D, Vector3D } from "../../../../shared/common/utils";
|
|
4
4
|
export interface IRageEntityOptions<T extends EntityMp> extends IRageWorldObjectOptions<T> {
|
|
5
|
+
rotation?: IVector3D;
|
|
5
6
|
}
|
|
6
7
|
export declare abstract class RageEntity<T extends EntityMp> extends RageWorldObject<T> implements IEntity {
|
|
8
|
+
private _rotation;
|
|
7
9
|
get model(): number;
|
|
8
10
|
get rotation(): Vector3D;
|
|
9
11
|
protected constructor(options: IRageEntityOptions<T>);
|
|
@@ -11,4 +13,6 @@ export declare abstract class RageEntity<T extends EntityMp> extends RageWorldOb
|
|
|
11
13
|
setRotation(value: Vector3D): void;
|
|
12
14
|
getNetData(name: string): unknown;
|
|
13
15
|
setNetData(name: string, value: unknown): void;
|
|
16
|
+
private _getEntityRotationProperty;
|
|
17
|
+
private _isVectorLike;
|
|
14
18
|
}
|
|
@@ -4,20 +4,23 @@ exports.RageEntity = void 0;
|
|
|
4
4
|
const RageWorldObject_1 = require("../worldObject/RageWorldObject");
|
|
5
5
|
const utils_1 = require("../../../../shared/common/utils");
|
|
6
6
|
class RageEntity extends RageWorldObject_1.RageWorldObject {
|
|
7
|
+
_rotation;
|
|
7
8
|
get model() {
|
|
8
9
|
return this.mpEntity.model;
|
|
9
10
|
}
|
|
10
11
|
get rotation() {
|
|
11
|
-
const { x, y, z } = this.
|
|
12
|
+
const { x, y, z } = this._getEntityRotationProperty() ?? this._rotation ?? new utils_1.Vector3D(0, 0, 0);
|
|
12
13
|
return new utils_1.Vector3D(x, y, z);
|
|
13
14
|
}
|
|
14
15
|
constructor(options) {
|
|
15
16
|
super(options);
|
|
17
|
+
this._rotation = options.rotation;
|
|
16
18
|
}
|
|
17
19
|
setModel(value) {
|
|
18
20
|
this.mpEntity.model = mp.joaat(value);
|
|
19
21
|
}
|
|
20
22
|
setRotation(value) {
|
|
23
|
+
this._rotation = value;
|
|
21
24
|
this.mpEntity.rotation = new mp.Vector3(value);
|
|
22
25
|
}
|
|
23
26
|
getNetData(name) {
|
|
@@ -26,5 +29,18 @@ class RageEntity extends RageWorldObject_1.RageWorldObject {
|
|
|
26
29
|
setNetData(name, value) {
|
|
27
30
|
this.mpEntity.setVariable(name, value);
|
|
28
31
|
}
|
|
32
|
+
_getEntityRotationProperty() {
|
|
33
|
+
const rotation = this.mpEntity.rotation;
|
|
34
|
+
if (!this._isVectorLike(rotation))
|
|
35
|
+
return null;
|
|
36
|
+
return rotation;
|
|
37
|
+
}
|
|
38
|
+
_isVectorLike(value) {
|
|
39
|
+
return (typeof value === "object" &&
|
|
40
|
+
value !== null &&
|
|
41
|
+
typeof value.x === "number" &&
|
|
42
|
+
typeof value.y === "number" &&
|
|
43
|
+
typeof value.z === "number");
|
|
44
|
+
}
|
|
29
45
|
}
|
|
30
46
|
exports.RageEntity = RageEntity;
|
|
@@ -17,7 +17,7 @@ class RageObjectsManager extends RageEntitiesManager_1.RageEntitiesManager {
|
|
|
17
17
|
alpha,
|
|
18
18
|
});
|
|
19
19
|
mpEntity.isExists = () => mp.objects.exists(mpEntity);
|
|
20
|
-
const object = new RageObject_1.RageObject({ mpEntity });
|
|
20
|
+
const object = new RageObject_1.RageObject({ mpEntity, rotation });
|
|
21
21
|
this.registerBaseObject(object);
|
|
22
22
|
return object;
|
|
23
23
|
}
|
|
@@ -17,7 +17,7 @@ class RagePedsManager extends RageEntitiesManager_1.RageEntitiesManager {
|
|
|
17
17
|
frozen,
|
|
18
18
|
});
|
|
19
19
|
mpEntity.isExists = () => mp.peds.exists(mpEntity);
|
|
20
|
-
const ped = new RagePed_1.RagePed({ mpEntity });
|
|
20
|
+
const ped = new RagePed_1.RagePed({ mpEntity, rotation });
|
|
21
21
|
this.registerBaseObject(ped);
|
|
22
22
|
return ped;
|
|
23
23
|
}
|
|
@@ -19,7 +19,7 @@ class RageVehiclesManager extends RageEntitiesManager_1.RageEntitiesManager {
|
|
|
19
19
|
});
|
|
20
20
|
mpEntity.rotation = new mp.Vector3(rotation);
|
|
21
21
|
mpEntity.isExists = () => mp.vehicles.exists(mpEntity);
|
|
22
|
-
const vehicle = new RageVehicle_1.RageVehicle({ mpEntity });
|
|
22
|
+
const vehicle = new RageVehicle_1.RageVehicle({ mpEntity, rotation });
|
|
23
23
|
this.registerBaseObject(vehicle);
|
|
24
24
|
return vehicle;
|
|
25
25
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rock-mod",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.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",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"@swc/helpers": "^0.5.15"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
|
-
"@classic-mp/types": "^1.
|
|
90
|
+
"@classic-mp/types": "^1.6.0",
|
|
91
91
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
92
92
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
93
93
|
"@rollup/plugin-terser": "^0.4.4",
|