@cybermp-community/server-types 1.0.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 CyberMP Community Developers
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # CyberMP Server Types
2
+ > By [CyberMP Community Developers](https://gitlab.com/cybermp).
3
+
4
+ This repository contains the TypeScript type definitions for the **[CyberMP](https://cyber.mp) multiplayer server**, providing comprehensive type safety and IntelliSense support for server-side development.
5
+
6
+ These types are designed to work seamlessly with the CyberMP server environment, offering full typing for server events, player management, world state synchronization, and all server-side APIs exposed by the CyberMP multiplayer modification.
7
+
8
+ ## 📦 Installation
9
+
10
+ ### 1. Install Package
11
+
12
+ Using NPM:
13
+
14
+ ```bash
15
+ npm install -D @cybermp-community/server-types
16
+ ```
17
+
18
+ Using PNPM:
19
+
20
+ ```bash
21
+ pnpm install -D @cybermp-community/server-types
22
+ ```
23
+
24
+ Using Bun:
25
+
26
+ ```bash
27
+ bun add -d @cybermp-community/server-types
28
+ ```
29
+
30
+ ### 2. Set types in tsconfig.json
31
+
32
+ ```json
33
+ {
34
+ "compilerOptions": {
35
+ "types": [
36
+ "@cybermp-community/server-types"
37
+ ]
38
+ }
39
+ }
40
+ ```
41
+
42
+ ## ⚖️ License
43
+
44
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@cybermp-community/server-types",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript type definitions for the CyberMP server-side environment.",
5
+ "license": "MIT",
6
+ "main": "./src/index.d.ts",
7
+ "files": [
8
+ "src"
9
+ ],
10
+ "scripts": {
11
+ "bump": "npm version patch --no-git-tag-version",
12
+ "pub": "npm publish --access public"
13
+ },
14
+ "keywords": [
15
+ "cybermp",
16
+ "cyberpunk",
17
+ "multiplayer",
18
+ "mp",
19
+ "server",
20
+ "cp2077",
21
+ "types"
22
+ ],
23
+ "repository": {
24
+ "type": "gitlab",
25
+ "url": "https://gitlab.com/cybermp/types/server"
26
+ },
27
+ "author": {
28
+ "name": "An1by",
29
+ "url": "https://gitlab.com/an1by"
30
+ },
31
+ "contributors": [
32
+ "terminaate"
33
+ ]
34
+ }
@@ -0,0 +1,13 @@
1
+ import type { MpPlayer } from './entities/player';
2
+
3
+ export interface MpCommands {
4
+ /**
5
+ * Register a command in the server scope.
6
+ * @param commandName Command name without "/".
7
+ * @param callback Callback with id and args.
8
+ */
9
+ add(
10
+ commandName: string,
11
+ callback: (player: MpPlayer, args: string[]) => void,
12
+ ): void;
13
+ }
@@ -0,0 +1,34 @@
1
+ import type { MpPlayer } from './player';
2
+ import type { Rotation, Vector3 } from '../shared';
3
+
4
+ export enum EntityType {
5
+ Player = 1,
6
+ Vehicle = 2,
7
+ Object = 3,
8
+ Ped = 4,
9
+ Pickup = 5,
10
+ GameObject = 6,
11
+ }
12
+
13
+ export interface MpEntity {
14
+ readonly id: number;
15
+ readonly owner: MpPlayer;
16
+ readonly firstOwner: MpPlayer;
17
+ readonly position: Vector3;
18
+ readonly rotation: Rotation;
19
+ readonly yaw: number;
20
+ readonly type: EntityType;
21
+ readonly exist: boolean;
22
+
23
+ dimension: number;
24
+ streamingRadius: number;
25
+
26
+ getMeta<T = any>(key: string): T;
27
+ setMeta(key: string, value: any, sync?: boolean): void;
28
+ }
29
+
30
+ export interface MpEntities<T extends MpEntity = MpEntity> {
31
+ exists(entity: T | number): boolean;
32
+
33
+ at(entity: T | number): T;
34
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./entity";
2
+ export * from "./player";
@@ -0,0 +1,26 @@
1
+ import type { MpEntities, MpEntity } from './entity';
2
+ import type { Vector3 } from '../shared';
3
+ import type { MpVehicle } from '../vehicles';
4
+
5
+ export type PlayerIdentifierType = 'steam' | 'ip';
6
+
7
+ export interface MpPlayer extends MpEntity {
8
+ readonly velocity: Vector3;
9
+ readonly health: number;
10
+ readonly nickname: string;
11
+ readonly ping: number;
12
+ readonly vehicle: MpVehicle | null;
13
+ readonly lastVehicle: MpVehicle | null;
14
+
15
+ kick(reason?: string): void;
16
+ getIdentifier(type: PlayerIdentifierType): string;
17
+
18
+ emit(eventName: string, ...args: any[]): void;
19
+ mute(): void;
20
+ }
21
+
22
+ export interface MpPlayers extends MpEntities<MpPlayer> {
23
+ kick(player: MpPlayer | number, reason?: string): void;
24
+ getIdentifier(player: MpPlayer | number, type: PlayerIdentifierType): string;
25
+ toArray(): MpPlayer[];
26
+ }
@@ -0,0 +1,52 @@
1
+ import { MpPlayer } from "../entities";
2
+ import { MpEventsMap } from "./map";
3
+
4
+ export interface MpEvents {
5
+ /**
6
+ * Listen for a shared (server or client) custom event.
7
+ * @param eventName The name of the custom event.
8
+ * @param callback The callback to run when triggered.
9
+ */
10
+ on<E extends keyof MpEventsMap>(eventName: E, callback: MpEventsMap[E]): void;
11
+ on(eventName: string, callback: (...args: any[]) => void): void;
12
+
13
+ /**
14
+ * Listen for a client-side event on the server.
15
+ * @param eventName The name of the event.
16
+ * @param callback Function triggered when the event is received.
17
+ */
18
+ onClient(
19
+ eventName: string,
20
+ callback: (player: MpPlayer, ...args: any[]) => void,
21
+ ): void;
22
+
23
+ /**
24
+ * Unregister a custom event listener.
25
+ * @param eventName Name of the event.
26
+ * @param callback Callback function.
27
+ */
28
+ off<E extends keyof MpEventsMap>(
29
+ eventName: E,
30
+ callback: MpEventsMap[E],
31
+ ): void;
32
+ off(eventName: string, callback: (...args: any[]) => void): void;
33
+
34
+ /**
35
+ * Emit a shared custom event.
36
+ * @param eventName The event name to emit.
37
+ * @param args Arguments to pass to the handler.
38
+ */
39
+ emit(eventName: string, ...args: any[]): void;
40
+
41
+ /**
42
+ * Emit a client-side event from the server.
43
+ * @param eventName Resource name to emit from.
44
+ * @param playerId Target player entity/network ID.
45
+ * @param args Arguments to send with the event.
46
+ */
47
+ emitClient(
48
+ player: MpPlayer | number,
49
+ eventName: string,
50
+ ...args: any[]
51
+ ): void;
52
+ }
@@ -0,0 +1,180 @@
1
+ import type { EntityType } from '../entities';
2
+ import type { GameHash, Vector3Object } from '../shared';
3
+
4
+ export type DamageEventData = {
5
+ damageType: number;
6
+ weaponHash: GameHash;
7
+ totalDamage: number;
8
+ killerId: number;
9
+ victimId: number;
10
+ hitComponent: number;
11
+ hitPositionX: number;
12
+ hitPositionY: number;
13
+ hitPositionZ: number;
14
+ hitDirectionX: number;
15
+ hitDirectionY: number;
16
+ hitDirectionZ: number;
17
+ damageValues: number[];
18
+ flags: number[];
19
+ compName: string;
20
+ dismembermentParts: any[];
21
+ hitReactionZones: any[];
22
+ hitShapeTypes: any[];
23
+ hitShapeNames: string[];
24
+ physicsMaterials: string[];
25
+ };
26
+
27
+ export type DoorStateChangeEventData = Vector3Object & {
28
+ hashObject: GameHash;
29
+ state: boolean;
30
+ };
31
+
32
+ export type LiftStateChangeEventData = Vector3Object & {
33
+ hashObject: GameHash;
34
+ playerID: number;
35
+ targetFloor: number;
36
+ currentFloor: number;
37
+ maxFloor: number;
38
+ };
39
+
40
+ export type ExplosionEventData = Vector3Object & {
41
+ isVehicle: boolean;
42
+ vehicleID: number;
43
+ hashObject: GameHash;
44
+ objNetID: number;
45
+ };
46
+
47
+ export type AppearancePropertyData = {
48
+ meshType: number;
49
+ isEnabed: boolean;
50
+ pathToMesh: GameHash;
51
+ appearanceHash: GameHash;
52
+ chunkMask: GameHash;
53
+ };
54
+
55
+ export type AppearanceWeightPropertyData = {
56
+ targetHash: GameHash;
57
+ regionHash: GameHash;
58
+ weight: number;
59
+ };
60
+
61
+ export type PlayerAppearanceChangeEventData = {
62
+ skinneds: AppearancePropertyData[];
63
+ garments: AppearancePropertyData[];
64
+ morphs: AppearancePropertyData[];
65
+ weights: AppearanceWeightPropertyData[];
66
+ };
67
+
68
+ export type PlayerDeathEventData = {
69
+ killerId?: number;
70
+ };
71
+
72
+ export type VehicleCustomizationChangeEventData = {
73
+ isVehicleWasCustomized: boolean;
74
+ isEnabledVehCustomization: boolean;
75
+ isDisabledVehCustomizationByDamage: boolean;
76
+ lightsColorDefined: boolean;
77
+ lightsColorHue: number;
78
+ primaryColorR: number;
79
+ primaryColorG: number;
80
+ primaryColorB: number;
81
+ primaryColorDefined: boolean;
82
+ secondaryColorR: number;
83
+ secondaryColorG: number;
84
+ secondaryColorB: number;
85
+ secondaryColorDefined: boolean;
86
+ vehicleID: number;
87
+ hashAppearance: GameHash;
88
+ };
89
+
90
+ export type VehicleDestructionChangeEventData = {
91
+ vehicleID: number;
92
+ brokenGlass: number;
93
+ brokenLights: number;
94
+ flatTire: number;
95
+ windshieldShattered: boolean;
96
+ };
97
+
98
+ export type FireEventData = Vector3Object & {
99
+ hashObject: GameHash;
100
+ dirX: number;
101
+ dirY: number;
102
+ dirZ: number;
103
+ };
104
+
105
+ export type PickupChangeEventData = {
106
+ pickupNetId: number;
107
+ pickupHash: GameHash;
108
+ pickupHashes: GameHash[];
109
+ };
110
+
111
+ export type PickupDespawnEventData = {
112
+ pickupNetId: number;
113
+ pickupHash: GameHash;
114
+ isBag: boolean;
115
+ };
116
+
117
+ export type PickupCreateEventData = Vector3Object & {
118
+ pickupNetId: number;
119
+ pickupHash: GameHash;
120
+ pickupHashes: GameHash[];
121
+ isBag: boolean;
122
+ };
123
+
124
+ export interface MpEventsMap {
125
+ anyResourceStart(resourceName: string): void;
126
+ anyResourceStop(resourceName: string): void;
127
+ anyServerResourceStart(resourceName: string): void;
128
+ anyServerResourceStop(resourceName: string): void;
129
+ resourceStart(): void;
130
+ resourceStop(): void;
131
+ resourcesRefresh(): void;
132
+
133
+ playerConnecting(tempId: number, name: string): void;
134
+ playerConnected(playerId: number, tempId: string): void;
135
+ playerSpawn(playerId: number): void;
136
+ playerRespawn(playerId: number, data: Vector3Object): void;
137
+ playerDespawn(playerId: number): void;
138
+ playerDeath(playerId: number, data: PlayerDeathEventData): void;
139
+ playerDisconnected(playerId: number, reason: string): void;
140
+ playerAppearanceChange(
141
+ playerId: number,
142
+ data: PlayerAppearanceChangeEventData,
143
+ ): void;
144
+
145
+ damage(playerId: number, data: DamageEventData): void;
146
+ fire(playerId: number, data: FireEventData): void;
147
+ explosion(playerId: number, data: ExplosionEventData): void;
148
+
149
+ doorStateChange(playerId: number, data: DoorStateChangeEventData): void;
150
+ liftStateChange(playerId: number, data: LiftStateChangeEventData): void;
151
+
152
+ entitySpawn(id: number, type: EntityType): void;
153
+ entityDespawn(id: number, type: EntityType): void;
154
+
155
+ objectSpawn(id: number): void;
156
+ objectDespawn(id: number): void;
157
+
158
+ pedSpawn(id: number): void;
159
+ pedDespawn(id: number): void;
160
+
161
+ gameObjectSpawn(id: number): void;
162
+ gameObjectDespawn(id: number): void;
163
+
164
+ vehicleCustomizationChange(
165
+ playerId: number,
166
+ data: VehicleCustomizationChangeEventData,
167
+ ): void;
168
+ vehicleDestructionChange(
169
+ playerId: number,
170
+ data: VehicleDestructionChangeEventData,
171
+ ): void;
172
+ vehicleSpawn(id: number): void;
173
+ vehicleDespawn(id: number): void;
174
+
175
+ pickupChange(playerId: number, data: PickupChangeEventData): void;
176
+ pickupRaise(playerId: number, data: PickupDespawnEventData): void;
177
+ pickupDrop(playerId: number, data: PickupCreateEventData): void;
178
+ pickupSpawn(id: number): void;
179
+ pickupDespawn(id: number): void;
180
+ }
@@ -0,0 +1,5 @@
1
+ export interface MpExports {
2
+ [module: string]: {
3
+ [name: string]: (...args: unknown[]) => unknown;
4
+ };
5
+ }
@@ -0,0 +1,7 @@
1
+ import type { CName, ResRef, TweakDBID } from './shared';
2
+
3
+ export interface MpHashes {
4
+ tweakdbid(path: string): TweakDBID;
5
+ cname(path: string): CName;
6
+ resref(path: string): ResRef;
7
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export type * from './commands.d.ts';
2
+ export type * from './entities';
3
+ export type * from './events';
4
+ export type * from './hashes.d.ts';
5
+ export type * from './meta.d.ts';
6
+ export type * from './mp';
7
+ export type * from './objects.d.ts';
8
+ export type * from './peds.d.ts';
9
+ export type * from './pickups.d.ts';
10
+ export type * from './resources.d.ts';
11
+ export type * from './shared';
12
+ export type * from './vehicles.d.ts';
13
+ export type * from './voice-chat.d.ts';
package/src/meta.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import type { MpEntity } from './entities';
2
+ import type { MpPlayer } from './entities/player';
3
+
4
+ export interface MpMeta {
5
+ setGlobalMeta(key: string, value: any, sync?: boolean): void;
6
+ getGlobalMeta<T = any>(key: string): T;
7
+
8
+ setPlayerMeta(
9
+ player: MpPlayer | number,
10
+ key: string,
11
+ value: any,
12
+ sync?: boolean,
13
+ ): void;
14
+ getPlayerMeta<T = any>(player: MpPlayer | number, key: string): T;
15
+
16
+ setEntityMeta(
17
+ entity: MpEntity | number,
18
+ key: string,
19
+ value: any,
20
+ sync?: boolean,
21
+ ): void;
22
+ getEntityMeta<T = any>(entity: MpEntity | number, key: string): T;
23
+ }
@@ -0,0 +1,38 @@
1
+ export namespace MpServer {
2
+ export type CoreOverrides = {
3
+ change_player_on_death_logic?: boolean;
4
+ disable_side_quests_notifications?: boolean;
5
+ change_vehicles_logic?: boolean;
6
+ disable_player_inventory_encumbrance?: boolean;
7
+ player_extended_customization?: boolean;
8
+ disable_time_skip?: boolean;
9
+ disable_turrets?: boolean;
10
+ disable_surveillance_cameras?: boolean;
11
+ disable_vending_machines?: boolean;
12
+ disable_generic_devices?: boolean;
13
+ disable_no_combat?: boolean;
14
+ };
15
+
16
+ export type CoreConfig = {
17
+ nametags?: boolean;
18
+ disable_switch_seats?: boolean;
19
+ delete_map_objects?: boolean;
20
+ default_gameplay_restrictions?: boolean;
21
+ disable_drop_points?: boolean;
22
+ disable_location_dependent_quests?: boolean;
23
+ disable_garage?: boolean;
24
+ overrides?: CoreOverrides;
25
+ files?: string[];
26
+ };
27
+
28
+ export type ServerConfig = {
29
+ tcp_host: string;
30
+ udp_host: string;
31
+ connection_host_addr: string;
32
+ max_players: number;
33
+ secret_token: string;
34
+ resources: string[];
35
+ disable_VoIP_server: boolean;
36
+ core?: CoreConfig;
37
+ };
38
+ }
@@ -0,0 +1,40 @@
1
+ import type { MpCommands } from '../commands';
2
+ import type { MpEntities } from '../entities';
3
+ import type { MpEvents } from '../events';
4
+ import type { MpHashes } from '../hashes';
5
+ import type { MpMeta } from '../meta';
6
+ import type { MpObjects } from '../objects';
7
+ import type { MpPeds } from '../peds';
8
+ import type { MpPickups } from '../pickups';
9
+ import type { MpPlayers } from '../entities/player';
10
+ import type { MpResources } from '../resources';
11
+ import type { MpVehicles } from '../vehicles';
12
+ import type { MpServer as MpServ } from './config';
13
+ import type { MpExports } from '../exports';
14
+
15
+ export interface MpServer {
16
+ events: MpEvents;
17
+ exports: MpExports;
18
+ meta: MpMeta;
19
+ resources: MpResources;
20
+ commands: MpCommands;
21
+ entities: MpEntities;
22
+ vehicles: MpVehicles;
23
+ players: MpPlayers;
24
+ objects: MpObjects;
25
+ pickups: MpPickups;
26
+ peds: MpPeds;
27
+ hashes: MpHashes;
28
+
29
+ /**
30
+ * Checks if the code is running on the server.
31
+ * @returns True if running on server, false otherwise.
32
+ */
33
+ isServer(): boolean;
34
+
35
+ config: MpServ.ServerConfig;
36
+ }
37
+
38
+ declare global {
39
+ var mp: MpServer;
40
+ }
@@ -0,0 +1,22 @@
1
+ import type { MpEntities, MpEntity } from './entities';
2
+ import type { TweakDBID, Vector3 } from './shared';
3
+
4
+ export interface MpObject extends MpEntity {
5
+ readonly model: TweakDBID;
6
+
7
+ destroy(): void;
8
+ }
9
+
10
+ export type CreateObjectOptions = {
11
+ model: TweakDBID;
12
+ position: Vector3;
13
+ yaw?: number;
14
+ dynamic?: boolean;
15
+ dimension?: number;
16
+ };
17
+
18
+ export interface MpObjects extends MpEntities<MpObject> {
19
+ create(options: CreateObjectOptions): MpObject;
20
+ destroy(entity: MpObject | number): void;
21
+ toArray(): MpObject[];
22
+ }
package/src/peds.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ import type { MpEntities, MpEntity } from './entities';
2
+ import type { CName, TweakDBID, Vector3 } from './shared';
3
+
4
+ export interface MpPed extends MpEntity {
5
+ readonly health: number;
6
+ readonly model: TweakDBID;
7
+ readonly appearance: CName;
8
+
9
+ destroy(): void;
10
+ }
11
+
12
+ export type CreatePedOptions = {
13
+ model: TweakDBID;
14
+ appearance: CName;
15
+ position: Vector3;
16
+ health?: number;
17
+ yaw?: number;
18
+ dimension?: number;
19
+ };
20
+
21
+ export interface MpPeds extends MpEntities<MpPed> {
22
+ create(options: CreatePedOptions): MpPed;
23
+
24
+ destroy(ped: MpPed | number): void;
25
+
26
+ toArray(): MpPed[];
27
+ }
@@ -0,0 +1,27 @@
1
+ import type { MpEntities, MpEntity } from './entities';
2
+ import type { TweakDBID, Vector3 } from './shared';
3
+
4
+ export enum PickupType {
5
+ Clothes = 1,
6
+ Weapon = 2,
7
+ Other = 3,
8
+ }
9
+
10
+ export interface MpPickup extends MpEntity {
11
+ readonly model: TweakDBID;
12
+ readonly pickupType: PickupType;
13
+
14
+ destroy(): void;
15
+ }
16
+
17
+ export type CreatePickupOptions = {
18
+ model: TweakDBID;
19
+ type: PickupType;
20
+ position: Vector3;
21
+ yaw?: number;
22
+ dimension?: number;
23
+ };
24
+
25
+ export interface MpPickups extends MpEntities<MpPickup> {
26
+ create(options: CreatePickupOptions): MpPickup;
27
+ }
@@ -0,0 +1,45 @@
1
+ export interface MpResources {
2
+ /**
3
+ * Gets the current state of a resource.
4
+ * @param resourceName The resource to check.
5
+ * @returns Resource state as string.
6
+ */
7
+ getState(resourceName: string): string;
8
+
9
+ /**
10
+ * Starts a specific resource by name.
11
+ * @param resourceName Name of the resource to start.
12
+ */
13
+ start(resourceName: string): void;
14
+
15
+ /**
16
+ * Stops a specific resource by name.
17
+ * @param resourceName Name of the resource to stop.
18
+ */
19
+ stop(resourceName: string): void;
20
+
21
+ restart(resourceName: string): void;
22
+
23
+ /**
24
+ * Gets the current resource's name.
25
+ * @returns Resource name.
26
+ */
27
+ getCurrentName(): string;
28
+
29
+ /**
30
+ * Gets metadata from a resource manifest.
31
+ * @param resourceName Resource name.
32
+ * @param keyName Metadata key.
33
+ * @param index Index (if multiple values exist).
34
+ * @returns Metadata string.
35
+ */
36
+ getMetadata(resourceName: string, keyName: string, index: number): string;
37
+
38
+ /**
39
+ * Reads a file inside a resource and returns its contents.
40
+ * @param resourceName Name of the resource.
41
+ * @param pathToResource Path to the file.
42
+ * @returns File content as string.
43
+ */
44
+ loadFile(resourceName: string, pathToResource: string): string;
45
+ }
@@ -0,0 +1,4 @@
1
+ export type GameHash = bigint | number;
2
+ export type TweakDBID = GameHash;
3
+ export type CName = GameHash;
4
+ export type ResRef = GameHash;
@@ -0,0 +1,2 @@
1
+ export * from "./transform"
2
+ export * from "./hash"
@@ -0,0 +1,9 @@
1
+ export type Vector3 = [x: number, y: number, z: number];
2
+ export type Vector4 = [x: number, y: number, z: number, w: number];
3
+ export type Rotation = [pitch: number, roll: number, yaw: number];
4
+
5
+ export type Vector3Object = {
6
+ posX: number;
7
+ posY: number;
8
+ posZ: number;
9
+ };
@@ -0,0 +1,37 @@
1
+ import type { MpPlayer, MpEntities, MpEntity } from './entities';
2
+ import type { CName, TweakDBID, Vector3 } from './shared';
3
+
4
+ export enum VehicleSeat {
5
+ Driver = 0,
6
+ Passenger = 1,
7
+ RearLeft = 2,
8
+ RearRight = 3,
9
+ }
10
+
11
+ export interface MpVehicle extends MpEntity {
12
+ readonly model: TweakDBID;
13
+ readonly appearance: CName;
14
+ readonly health: number;
15
+ readonly velocity: Vector3;
16
+ readonly angularVelocity: Vector3;
17
+
18
+ getPlayerInSeat(seat: VehicleSeat): MpPlayer | null;
19
+ getLastPlayerInSeat(seat: VehicleSeat): MpPlayer | null;
20
+
21
+ destroy(): void;
22
+ }
23
+
24
+ export type CreateVehicleOptions = {
25
+ model: TweakDBID;
26
+ appearance: CName;
27
+ position: Vector3;
28
+ yaw?: number;
29
+ health?: number;
30
+ dimension?: number;
31
+ };
32
+
33
+ export interface MpVehicles extends MpEntities<MpVehicle> {
34
+ create(options: CreateVehicleOptions): MpVehicle;
35
+ destroy(vehicle: MpVehicle | number): void;
36
+ toArray(): MpVehicle[];
37
+ }
@@ -0,0 +1,9 @@
1
+ import type { MpPlayer } from './entities';
2
+
3
+ export interface MpVoiceChat {
4
+ mutePlayer(player: MpPlayer | number): void;
5
+
6
+ createChannel(voiceId: number): void;
7
+
8
+ isPlayerMuted(player: MpPlayer | number): boolean;
9
+ }