mirror of
https://github.com/BeamMP/Docs.git
synced 2026-04-19 06:50:21 +00:00
1300 lines
27 KiB
Markdown
1300 lines
27 KiB
Markdown
# BeamMP Client-Side API Documentation
|
|
|
|
## Table of Contents
|
|
|
|
### MPVehicleGE
|
|
- [Vehicle Functions](#vehicle-functions)
|
|
- [Player Functions](#player-functions)
|
|
- [Nametag Functions](#nametag-functions)
|
|
- [Role Functions](#role-functions)
|
|
- [Navigation Functions](#navigation-functions)
|
|
- [Object Methods](#object-methods)
|
|
- [Event Hooks](#event-hooks)
|
|
|
|
### MPConfig
|
|
- [MPConfig Functions](#mpconfig-functions)
|
|
|
|
### MPCoreNetwork
|
|
- [MPCoreNetwork Functions](#mpcorenetwork-functions)
|
|
|
|
### MPGameNetwork
|
|
- [Event System Functions](#event-system-functions)
|
|
- [Keypress Functions](#keypress-functions)
|
|
- [UI Functions](#ui-functions)
|
|
- [MPGameNetwork Callbacks](#mpgamenetwork-callbacks)
|
|
|
|
### MPHelpers
|
|
- [Encoding Functions](#encoding-functions)
|
|
- [Color Functions](#color-functions)
|
|
- [String Functions](#string-functions)
|
|
- [Table Functions](#table-functions)
|
|
- [Debug Functions](#debug-functions)
|
|
|
|
---
|
|
|
|
## Vehicle Functions
|
|
|
|
### `getGameVehicleID(serverVehicleID)`
|
|
Resolves a serverVehicleID into the gameVehicleID
|
|
|
|
**Parameters:**
|
|
- `serverVehicleID` (string) - Format: "X-Y" where X is PlayerID and Y is VehicleID
|
|
|
|
**Returns:**
|
|
- (number) - The game's internal vehicle ID
|
|
- (number) `-1` - If vehicle is unknown
|
|
|
|
**Usage:**
|
|
```lua
|
|
local gameID = extensions.MPVehicleGE.getGameVehicleID("0-0")
|
|
```
|
|
|
|
---
|
|
|
|
### `getServerVehicleID(gameVehicleID)`
|
|
Resolves a gameVehicleID into the serverVehicleID
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Returns:**
|
|
- (string) - Server vehicle ID (e.g., "0-0")
|
|
- (nil) - If gameVehicleID is unknown
|
|
|
|
**Usage:**
|
|
```lua
|
|
local serverID = extensions.MPVehicleGE.getServerVehicleID(11171)
|
|
```
|
|
|
|
---
|
|
|
|
### `getVehicleByServerID(serverVehicleID)`
|
|
Returns the complete vehicle table for this vehicle
|
|
|
|
**Parameters:**
|
|
- `serverVehicleID` (string) - Format: "X-Y"
|
|
|
|
**Returns:**
|
|
- (table) - Vehicle information (name, gameVehicleID, jbeam, ownerID, ownerName, isLocal, isSpawned, etc.)
|
|
- (nil) - If serverVehicleID is invalid
|
|
|
|
**Usage:**
|
|
```lua
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByServerID("0-0")
|
|
if vehicle then
|
|
print("Owner: " .. vehicle.ownerName)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### `getVehicleByGameID(gameVehicleID)`
|
|
Returns the complete vehicle table for this vehicle
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Returns:**
|
|
- (table) - Vehicle information
|
|
- (nil) - If gameVehicleID is invalid
|
|
|
|
**Usage:**
|
|
```lua
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByGameID(11171)
|
|
```
|
|
|
|
---
|
|
|
|
### `isOwn(gameVehicleID)`
|
|
Checks if the given vehicle belongs to this client
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Returns:**
|
|
- (boolean) - True if vehicle belongs to this client
|
|
|
|
**Usage:**
|
|
```lua
|
|
if extensions.MPVehicleGE.isOwn(11171) then
|
|
print("This is my vehicle")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### `getOwnMap()`
|
|
Returns a table containing all vehicles owned by this client
|
|
|
|
**Parameters:**
|
|
- None
|
|
|
|
**Returns:**
|
|
- (table) - Map of owned vehicles `{[gameVehicleID] = vehicles_subtable}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local myVehicles = extensions.MPVehicleGE.getOwnMap()
|
|
```
|
|
|
|
---
|
|
|
|
### `getVehicleMap()`
|
|
Returns a table of all known multiplayer vehicles
|
|
|
|
**Parameters:**
|
|
- None
|
|
|
|
**Returns:**
|
|
- (table) - Map of all vehicles `{[serverVehicleID] = gameVehicleID}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local allVehicles = extensions.MPVehicleGE.getVehicleMap()
|
|
```
|
|
|
|
---
|
|
|
|
### `getDistanceMap()`
|
|
Returns the distance from each multiplayer vehicle to this client's point of view
|
|
|
|
**Parameters:**
|
|
- None
|
|
|
|
**Returns:**
|
|
- (table) - Map of distances `{[gameVehicleID] = distanceInMeters}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local distances = extensions.MPVehicleGE.getDistanceMap()
|
|
```
|
|
|
|
---
|
|
|
|
### `getNicknameMap()`
|
|
Returns all multiplayer gameVehicleIDs with their owner names
|
|
|
|
**Parameters:**
|
|
- None
|
|
|
|
**Returns:**
|
|
- (table) - Map of nicknames `{[gameVehicleID] = ownerName}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local nicknameMap = extensions.MPVehicleGE.getNicknameMap()
|
|
```
|
|
|
|
---
|
|
|
|
### `getVehicles()`
|
|
Returns the complete vehicles table
|
|
|
|
**Parameters:**
|
|
- None
|
|
|
|
**Returns:**
|
|
- (table) - All vehicles `{[serverVehicleID] = vehicles_subtable}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local vehicles = extensions.MPVehicleGE.getVehicles()
|
|
for serverID, vehicle in pairs(vehicles) do
|
|
print("Vehicle: " .. vehicle.jbeam)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## Player Functions
|
|
|
|
### `getPlayerByName(name)`
|
|
Returns this player's table and ID
|
|
|
|
**Parameters:**
|
|
- `name` (string) - The player's name
|
|
|
|
**Returns:**
|
|
- (table) - Player information (name, playerID, role, vehicles, etc.)
|
|
- (number) - The player's ID
|
|
- (nil) - If player not found
|
|
|
|
**Usage:**
|
|
```lua
|
|
local player, playerID = extensions.MPVehicleGE.getPlayerByName("John")
|
|
if player then
|
|
print("Player ID: " .. playerID)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### `getPlayers()`
|
|
Returns the complete players table
|
|
|
|
**Parameters:**
|
|
- None
|
|
|
|
**Returns:**
|
|
- (table) - All players `{[playerID] = players_subtable}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local players = extensions.MPVehicleGE.getPlayers()
|
|
for playerID, player in pairs(players) do
|
|
print("Player: " .. player.name)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## Nametag Functions
|
|
|
|
### `setPlayerNickPrefix(targetName, tagSource, text)`
|
|
Adds a prefix to a player's nametag (displayed before the name)
|
|
|
|
**Parameters:**
|
|
- `targetName` (string) - The player's name
|
|
- `tagSource` (string) - Unique identifier for this prefix
|
|
- `text` (string) - Text to display before the name
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.setPlayerNickPrefix("John", "RANK", "1st.")
|
|
-- Result: "1st. John"
|
|
```
|
|
|
|
---
|
|
|
|
### `setPlayerNickSuffix(targetName, tagSource, text)`
|
|
Adds a suffix to a player's nametag (displayed after the name)
|
|
|
|
**Parameters:**
|
|
- `targetName` (string) - The player's name
|
|
- `tagSource` (string) - Unique identifier for this suffix
|
|
- `text` (string) - Text to display after the name
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.setPlayerNickSuffix("John", "STATUS", "[AFK]")
|
|
-- Result: "John [AFK]"
|
|
```
|
|
|
|
---
|
|
|
|
### `hideNicknames(hide)`
|
|
Turns on or off the nametag drawing from BeamMP
|
|
|
|
**Parameters:**
|
|
- `hide` (boolean) - True to hide nametags, false to show them
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.hideNicknames(true) -- Hide
|
|
extensions.MPVehicleGE.hideNicknames(false) -- Show
|
|
```
|
|
|
|
---
|
|
|
|
### `toggleNicknames()`
|
|
Toggles the displaying of nametags
|
|
|
|
**Parameters:**
|
|
- None
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.toggleNicknames()
|
|
```
|
|
|
|
---
|
|
|
|
## Role Functions
|
|
|
|
### `setPlayerRole(playerID, tag, shorttag, red, green, blue)`
|
|
Sets a custom role for a player
|
|
|
|
**Parameters:**
|
|
- `playerID` (number) - ID of the player
|
|
- `tag` (string) - Role tag (e.g., "VIP")
|
|
- `shorttag` (string) - Short version (e.g., "V")
|
|
- `red` (number) - Red channel (0-255)
|
|
- `green` (number) - Green channel (0-255)
|
|
- `blue` (number) - Blue channel (0-255)
|
|
|
|
**Returns:**
|
|
- (boolean, string) - `false, "player not found"` if player doesn't exist
|
|
- (boolean, string) - `false, error` if invalid arguments
|
|
- (nil) - Nothing on success
|
|
|
|
**Usage:**
|
|
```lua
|
|
local success, error = extensions.MPVehicleGE.setPlayerRole(0, "VIP", "V", 255, 215, 0)
|
|
if success == false then
|
|
print("Error: " .. error)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### `clearPlayerRole(playerID)`
|
|
Clears a custom role for a player
|
|
|
|
**Parameters:**
|
|
- `playerID` (number) - ID of the player
|
|
|
|
**Returns:**
|
|
- (boolean) - Always returns `false` (implementation quirk - use to check if player exists)
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.clearPlayerRole(0)
|
|
```
|
|
|
|
---
|
|
|
|
### `setVehicleRole(playerIDVehicleID, tag, shorttag, red, green, blue)`
|
|
Sets a custom role for a specific vehicle
|
|
|
|
**Parameters:**
|
|
- `playerIDVehicleID` (string) - Vehicle ID (format: "0-0")
|
|
- `tag` (string) - Role tag
|
|
- `shorttag` (string) - Short version
|
|
- `red` (number) - Red (0-255)
|
|
- `green` (number) - Green (0-255)
|
|
- `blue` (number) - Blue (0-255)
|
|
|
|
**Returns:**
|
|
- (boolean, string) - `false, "vehicle not found"` if vehicle doesn't exist
|
|
- (boolean, string) - `false, error` if invalid arguments
|
|
- (nil) - Nothing on success
|
|
|
|
**Usage:**
|
|
```lua
|
|
local success, error = extensions.MPVehicleGE.setVehicleRole("0-0", "Police", "POL", 0, 0, 255)
|
|
if success == false then
|
|
print("Error: " .. error)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### `clearVehicleRole(playerIDVehicleID)`
|
|
Clears a custom role for a vehicle
|
|
|
|
**Parameters:**
|
|
- `playerIDVehicleID` (string) - Vehicle ID (format: "0-0")
|
|
|
|
**Returns:**
|
|
- (boolean) - Always returns `false` (implementation quirk - use to check if vehicle exists)
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.clearVehicleRole("0-0")
|
|
```
|
|
|
|
---
|
|
|
|
## Navigation Functions
|
|
|
|
### `groundmarkerToPlayer(targetName)`
|
|
Sets a ground marker route to target player's position (static)
|
|
|
|
**Parameters:**
|
|
- `targetName` (string) - Player's name, or nil to clear
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.groundmarkerToPlayer("John") -- Set
|
|
extensions.MPVehicleGE.groundmarkerToPlayer(nil) -- Clear
|
|
```
|
|
|
|
---
|
|
|
|
### `groundmarkerFollowPlayer(targetName, dontfollow)`
|
|
Sets a ground marker route that follows target player
|
|
|
|
**Parameters:**
|
|
- `targetName` (string) - Player's name, or nil to stop
|
|
- `dontfollow` (boolean) - If true, creates static marker
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPVehicleGE.groundmarkerFollowPlayer("John") -- Follow
|
|
extensions.MPVehicleGE.groundmarkerFollowPlayer("John", true) -- Static
|
|
extensions.MPVehicleGE.groundmarkerFollowPlayer(nil) -- Stop
|
|
```
|
|
|
|
---
|
|
|
|
### `queryRoadNodeToPosition(targetPosition, owner)`
|
|
Finds the closest road nodes to a target position
|
|
|
|
**Parameters:**
|
|
- `targetPosition` (vec3 or table) - Target position with x, y, z
|
|
- `owner` (string) - Optional identifier (default: "target")
|
|
|
|
**Returns:**
|
|
- (boolean) - Success status
|
|
- (number) - nodeID (if successful)
|
|
|
|
**Usage:**
|
|
```lua
|
|
local pos = vec3(100, 200, 50)
|
|
local success, nodeID = extensions.MPVehicleGE.queryRoadNodeToPosition(pos)
|
|
```
|
|
|
|
---
|
|
|
|
## Object Methods
|
|
|
|
### Player Object Methods
|
|
|
|
#### `player:setNickPrefix(tagSource, text)`
|
|
Sets a prefix for this player's nametag
|
|
|
|
**Parameters:**
|
|
- `tagSource` (string) - Unique identifier
|
|
- `text` (string) - Text to display (or nil to remove)
|
|
|
|
**Usage:**
|
|
```lua
|
|
local player = extensions.MPVehicleGE.getPlayerByName("John")
|
|
if player then
|
|
player:setNickPrefix("STATUS", "[AFK]")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `player:setNickSuffix(tagSource, text)`
|
|
Sets a suffix for this player's nametag
|
|
|
|
**Parameters:**
|
|
- `tagSource` (string) - Unique identifier
|
|
- `text` (string) - Text to display (or nil to remove)
|
|
|
|
**Usage:**
|
|
```lua
|
|
local player = extensions.MPVehicleGE.getPlayerByName("John")
|
|
if player then
|
|
player:setNickSuffix("MISSION", "[In Mission]")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `player:setCustomRole(role)`
|
|
Sets a custom role for this player
|
|
|
|
**Parameters:**
|
|
- `role` (table) - Role table: `{backcolor = {r, g, b}, tag = string, shorttag = string}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local player = extensions.MPVehicleGE.getPlayerByName("John")
|
|
if player then
|
|
player:setCustomRole({
|
|
backcolor = {r = 255, g = 0, b = 0},
|
|
tag = " [VIP]",
|
|
shorttag = " [V]"
|
|
})
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `player:clearCustomRole()`
|
|
Clears the custom role for this player
|
|
|
|
**Usage:**
|
|
```lua
|
|
local player = extensions.MPVehicleGE.getPlayerByName("John")
|
|
if player then
|
|
player:clearCustomRole()
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### Vehicle Object Methods
|
|
|
|
#### `vehicle:getOwner()`
|
|
Returns the owner of this vehicle
|
|
|
|
**Returns:**
|
|
- (table) - Player object
|
|
- (number) - Player's ID
|
|
|
|
**Usage:**
|
|
```lua
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByServerID("0-0")
|
|
if vehicle then
|
|
local owner, ownerID = vehicle:getOwner()
|
|
print("Owner: " .. owner.name)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `vehicle:setCustomRole(role)`
|
|
Sets a custom role for this vehicle
|
|
|
|
**Parameters:**
|
|
- `role` (table) - Role table: `{backcolor = {r, g, b}, tag = string, shorttag = string}`
|
|
|
|
**Usage:**
|
|
```lua
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByServerID("0-0")
|
|
if vehicle then
|
|
vehicle:setCustomRole({
|
|
backcolor = {r = 0, g = 0, b = 255},
|
|
tag = " [Police]",
|
|
shorttag = " [POL]"
|
|
})
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `vehicle:clearCustomRole()`
|
|
Clears the custom role for this vehicle
|
|
|
|
**Usage:**
|
|
```lua
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByServerID("0-0")
|
|
if vehicle then
|
|
vehicle:clearCustomRole()
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `vehicle:setDisplayName(displayName)`
|
|
Sets a custom display name for this vehicle
|
|
|
|
**Parameters:**
|
|
- `displayName` (string) - Custom name to display
|
|
|
|
**Usage:**
|
|
```lua
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByServerID("0-0")
|
|
if vehicle then
|
|
vehicle:setDisplayName("Patrol Car #1")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## Event Hooks
|
|
|
|
BeamMP provides event hooks that you can override to execute custom code when specific events occur. **Do not call these functions directly** - instead, override them while preserving the original functionality.
|
|
|
|
### Hook Pattern
|
|
|
|
Always preserve the original function when overriding:
|
|
|
|
```lua
|
|
-- Save the original function
|
|
local originalCallback = MPVehicleGE.onVehicleSpawned
|
|
|
|
-- Override with your custom logic
|
|
MPVehicleGE.onVehicleSpawned = function(gameVehicleID)
|
|
-- Call the original first
|
|
originalCallback(gameVehicleID)
|
|
|
|
-- Your custom code here
|
|
print("Vehicle spawned: " .. gameVehicleID)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### Available Event Hooks
|
|
|
|
#### `onUpdate(dt)`
|
|
Called every frame while connected to multiplayer
|
|
|
|
**Parameters:**
|
|
- `dt` (number) - Delta time in seconds since last frame
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnUpdate = MPVehicleGE.onUpdate
|
|
MPVehicleGE.onUpdate = function(dt)
|
|
originalOnUpdate(dt)
|
|
-- Your frame-by-frame logic here
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onPreRender(dt)`
|
|
Called every frame before rendering
|
|
|
|
**Parameters:**
|
|
- `dt` (number) - Delta time in seconds
|
|
|
|
**Note:**
|
|
This handles nametag rendering, distance calculations, and ground markers internally.
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnPreRender = MPVehicleGE.onPreRender
|
|
MPVehicleGE.onPreRender = function(dt)
|
|
originalOnPreRender(dt)
|
|
-- Your pre-render logic here
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onVehicleSpawned(gameVehicleID)`
|
|
Called when a vehicle spawns (both local and remote)
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnVehicleSpawned = MPVehicleGE.onVehicleSpawned
|
|
MPVehicleGE.onVehicleSpawned = function(gameVehicleID)
|
|
originalOnVehicleSpawned(gameVehicleID)
|
|
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByGameID(gameVehicleID)
|
|
if vehicle then
|
|
print(vehicle.ownerName .. " spawned a " .. vehicle.jbeam)
|
|
end
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onVehicleDestroyed(gameVehicleID)`
|
|
Called when a vehicle is destroyed/removed
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnVehicleDestroyed = MPVehicleGE.onVehicleDestroyed
|
|
MPVehicleGE.onVehicleDestroyed = function(gameVehicleID)
|
|
local vehicle = extensions.MPVehicleGE.getVehicleByGameID(gameVehicleID)
|
|
if vehicle then
|
|
print("Vehicle " .. vehicle.jbeam .. " was destroyed")
|
|
end
|
|
|
|
originalOnVehicleDestroyed(gameVehicleID)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onVehicleSwitched(oldGameVehicleID, newGameVehicleID)`
|
|
Called when player switches between vehicles
|
|
|
|
**Parameters:**
|
|
- `oldGameVehicleID` (number) - Previous vehicle ID (or -1)
|
|
- `newGameVehicleID` (number) - New vehicle ID (or -1)
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnVehicleSwitched = MPVehicleGE.onVehicleSwitched
|
|
MPVehicleGE.onVehicleSwitched = function(oldID, newID)
|
|
originalOnVehicleSwitched(oldID, newID)
|
|
|
|
print("Switched from vehicle " .. oldID .. " to " .. newID)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onVehicleResetted(gameVehicleID)`
|
|
Called when a vehicle is reset (local vehicles only)
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnVehicleResetted = MPVehicleGE.onVehicleResetted
|
|
MPVehicleGE.onVehicleResetted = function(gameVehicleID)
|
|
originalOnVehicleResetted(gameVehicleID)
|
|
|
|
print("Vehicle " .. gameVehicleID .. " was reset")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onVehicleColorChanged(gameVehicleID, index, paint)`
|
|
Called when a vehicle's paint color is changed
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
- `index` (number) - Paint slot index (0, 1, or 2)
|
|
- `paint` (table) - Paint data with color information
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnVehicleColorChanged = MPVehicleGE.onVehicleColorChanged
|
|
MPVehicleGE.onVehicleColorChanged = function(gameVehicleID, index, paint)
|
|
originalOnVehicleColorChanged(gameVehicleID, index, paint)
|
|
|
|
print("Vehicle " .. gameVehicleID .. " changed paint slot " .. index)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onVehicleReady(gameVehicleID)`
|
|
Called when a vehicle's extensions have loaded and the vehicle is fully ready
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Note:**
|
|
Use this instead of `onVehicleSpawned` if you need vehicle extensions to be loaded.
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnVehicleReady = MPVehicleGE.onVehicleReady
|
|
MPVehicleGE.onVehicleReady = function(gameVehicleID)
|
|
originalOnVehicleReady(gameVehicleID)
|
|
|
|
-- Safe to interact with vehicle extensions here
|
|
local veh = be:getObjectByID(gameVehicleID)
|
|
if veh then
|
|
veh:queueLuaCommand("print('Vehicle is ready!')")
|
|
end
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onUIInitialised()`
|
|
Called when the BeamMP UI is initialized
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnUIInitialised = MPVehicleGE.onUIInitialised
|
|
MPVehicleGE.onUIInitialised = function()
|
|
originalOnUIInitialised()
|
|
|
|
print("BeamMP UI initialized")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
#### `onSettingsChanged()`
|
|
Called when BeamMP settings are changed
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnSettingsChanged = MPVehicleGE.onSettingsChanged
|
|
MPVehicleGE.onSettingsChanged = function()
|
|
originalOnSettingsChanged()
|
|
|
|
print("BeamMP settings changed")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## MPConfig Functions
|
|
|
|
### `MPConfig.getPlayerServerID()`
|
|
Returns the local player's server-assigned ID
|
|
|
|
**Returns:**
|
|
- (number) - The player's server ID (-1 if not set)
|
|
|
|
**Usage:**
|
|
```lua
|
|
local myID = extensions.MPConfig.getPlayerServerID()
|
|
```
|
|
|
|
---
|
|
|
|
### `MPConfig.getNickname()`
|
|
Returns the local player's nickname
|
|
|
|
**Returns:**
|
|
- (string) - The player's current nickname
|
|
|
|
**Usage:**
|
|
```lua
|
|
local name = extensions.MPConfig.getNickname()
|
|
```
|
|
|
|
---
|
|
|
|
### `MPConfig.getConfig()`
|
|
Returns the BeamMP configuration settings
|
|
|
|
**Returns:**
|
|
- (table) - Configuration table with all BeamMP settings
|
|
- (nil) - If config file doesn't exist
|
|
|
|
**Usage:**
|
|
```lua
|
|
local config = extensions.MPConfig.getConfig()
|
|
```
|
|
|
|
---
|
|
|
|
### `MPConfig.setConfig(settingName, settingVal)`
|
|
Sets a specific configuration value
|
|
|
|
**Parameters:**
|
|
- `settingName` (string) - Name of the setting
|
|
- `settingVal` (any) - Value to set
|
|
|
|
**Usage:**
|
|
```lua
|
|
extensions.MPConfig.setConfig("myCustomSetting", true)
|
|
```
|
|
|
|
---
|
|
|
|
## MPCoreNetwork Functions
|
|
|
|
### `MPCoreNetwork.getCurrentServer()`
|
|
Returns information about the current connected server
|
|
|
|
**Returns:**
|
|
- (table) - Server data (ip, port, name, map)
|
|
- (nil) - If not connected
|
|
|
|
**Usage:**
|
|
```lua
|
|
local server = extensions.MPCoreNetwork.getCurrentServer()
|
|
if server then
|
|
print("Server: " .. server.name)
|
|
print("IP: " .. server.ip .. ":" .. server.port)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## Event System Functions
|
|
|
|
### `TriggerServerEvent(name, data)`
|
|
Sends an event to the server
|
|
|
|
**Parameters:**
|
|
- `name` (string) - Event name
|
|
- `data` (string) - Data to send
|
|
|
|
**Note:**
|
|
Global function. The server must have a registered handler for this event.
|
|
|
|
**Usage:**
|
|
```lua
|
|
TriggerServerEvent("playerReady", "ready")
|
|
|
|
-- With JSON
|
|
local data = {position = {x=100, y=200, z=50}}
|
|
TriggerServerEvent("updatePlayer", jsonEncode(data))
|
|
```
|
|
|
|
---
|
|
|
|
### `TriggerClientEvent(name, data)`
|
|
Triggers a local client event
|
|
|
|
**Parameters:**
|
|
- `name` (string) - Event name
|
|
- `data` (string) - Data to send
|
|
|
|
**Note:**
|
|
Global function. Triggers locally without sending to server.
|
|
|
|
**Usage:**
|
|
```lua
|
|
TriggerClientEvent("localUpdate", "data")
|
|
```
|
|
|
|
---
|
|
|
|
### `AddEventHandler(event_name, func, name)`
|
|
Registers a function to handle a specific event
|
|
|
|
**Parameters:**
|
|
- `event_name` (string) - Name of the event to handle
|
|
- `func` (function) - Handler function (receives event data)
|
|
- `name` (string) - Optional internal name
|
|
|
|
**Note:**
|
|
Global function.
|
|
|
|
**Usage:**
|
|
```lua
|
|
AddEventHandler("playerDamage", function(data)
|
|
print("Damage: " .. data)
|
|
end)
|
|
|
|
-- With JSON
|
|
AddEventHandler("vehicleSpawned", function(data)
|
|
local vehData = jsonDecode(data)
|
|
print("Spawned: " .. vehData.model)
|
|
end)
|
|
```
|
|
|
|
---
|
|
|
|
### `RemoveEventHandler(event_name, name)`
|
|
Removes an event handler
|
|
|
|
**Parameters:**
|
|
- `event_name` (string) - Name of the event
|
|
- `name` (string) - Optional internal name
|
|
|
|
**Note:**
|
|
Global function.
|
|
|
|
**Usage:**
|
|
```lua
|
|
RemoveEventHandler("playerDamage")
|
|
```
|
|
|
|
---
|
|
|
|
## Keypress Functions
|
|
|
|
### `onKeyPressed(keyname, func)`
|
|
Registers a function to be called when a key is pressed
|
|
|
|
**Parameters:**
|
|
- `keyname` (string) - Name of the key (e.g., "NUMPAD1", "F1")
|
|
- `func` (function) - Function to call (receives boolean)
|
|
|
|
**Note:**
|
|
Global function.
|
|
|
|
**Usage:**
|
|
```lua
|
|
onKeyPressed("NUMPAD1", function(state)
|
|
print("NUMPAD1 pressed!")
|
|
end)
|
|
```
|
|
|
|
---
|
|
|
|
### `onKeyReleased(keyname, func)`
|
|
Registers a function to be called when a key is released
|
|
|
|
**Parameters:**
|
|
- `keyname` (string) - Name of the key
|
|
- `func` (function) - Function to call (receives boolean)
|
|
|
|
**Note:**
|
|
Global function.
|
|
|
|
**Usage:**
|
|
```lua
|
|
onKeyReleased("NUMPAD1", function(state)
|
|
print("NUMPAD1 released!")
|
|
end)
|
|
```
|
|
|
|
---
|
|
|
|
### `addKeyEventListener(keyname, func, type)`
|
|
Registers a key event listener with customizable trigger type
|
|
|
|
**Parameters:**
|
|
- `keyname` (string) - Name of the key
|
|
- `func` (function) - Function to call
|
|
- `type` (string) - Event type: "down", "up", or "both" (default: "both")
|
|
|
|
**Note:**
|
|
Global function.
|
|
|
|
**Usage:**
|
|
```lua
|
|
addKeyEventListener("F1", function(isPressed)
|
|
if isPressed then
|
|
print("F1 pressed")
|
|
else
|
|
print("F1 released")
|
|
end
|
|
end, "both")
|
|
```
|
|
|
|
---
|
|
|
|
### `getKeyState(keyname)`
|
|
Returns the current state of a key
|
|
|
|
**Parameters:**
|
|
- `keyname` (string) - Name of the key
|
|
|
|
**Returns:**
|
|
- (boolean) - True if pressed, false otherwise
|
|
|
|
**Note:**
|
|
Global function. Only works for keys registered with addKeyEventListener.
|
|
|
|
**Usage:**
|
|
```lua
|
|
local isPressed = getKeyState("NUMPAD1")
|
|
if isPressed then
|
|
print("NUMPAD1 is held down")
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## UI Functions
|
|
|
|
### `MPGameNetwork.spawnUiDialog(dialogInfo)`
|
|
Creates a custom interactive dialog box
|
|
|
|
**Parameters:**
|
|
- `dialogInfo` (table) - Dialog configuration:
|
|
- `title` (string) - Dialog title (optional)
|
|
- `body` (string) - Dialog message (optional)
|
|
- `buttons` (table) - Button configurations (optional)
|
|
- `class` (string) - "experimental" for hazard lines (optional)
|
|
- `interactionID` (string) - Interaction identifier (optional)
|
|
- `reportToServer` (boolean) - Send to server (optional, default: false)
|
|
- `reportToExtensions` (boolean) - Trigger local event (optional, default: false)
|
|
|
|
**Usage:**
|
|
```lua
|
|
-- Simple dialog
|
|
extensions.MPGameNetwork.spawnUiDialog({
|
|
title = "Welcome",
|
|
body = "Welcome to the server!"
|
|
})
|
|
|
|
-- Choice dialog
|
|
extensions.MPGameNetwork.spawnUiDialog({
|
|
title = "Choose Team",
|
|
body = "Which team?",
|
|
buttons = {
|
|
{label = "Red", key = "joinRed"},
|
|
{label = "Blue", key = "joinBlue"}
|
|
},
|
|
interactionID = "teamSelection",
|
|
reportToServer = true
|
|
})
|
|
```
|
|
|
|
---
|
|
|
|
## MPGameNetwork Callbacks
|
|
|
|
### `MPGameNetwork.onUpdate(dt)`
|
|
Called every frame while connected to multiplayer
|
|
|
|
**Parameters:**
|
|
- `dt` (number) - Delta time in seconds
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnUpdate = MPGameNetwork.onUpdate
|
|
MPGameNetwork.onUpdate = function(dt)
|
|
originalOnUpdate(dt)
|
|
-- Your code here
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### `MPGameNetwork.onVehicleReady(gameVehicleID)`
|
|
Called when a vehicle is ready and extensions are loaded
|
|
|
|
**Parameters:**
|
|
- `gameVehicleID` (number) - The game's internal vehicle ID
|
|
|
|
**Usage:**
|
|
```lua
|
|
local originalOnVehicleReady = MPGameNetwork.onVehicleReady
|
|
MPGameNetwork.onVehicleReady = function(gameVehicleID)
|
|
originalOnVehicleReady(gameVehicleID)
|
|
-- Your code here
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## Encoding Functions
|
|
|
|
### `MPHelpers.b64encode(string)`
|
|
Encodes a string to Base64 (RFC 2045)
|
|
|
|
**Parameters:**
|
|
- `string` (string) - String to encode
|
|
|
|
**Returns:**
|
|
- (string) - Base64-encoded string
|
|
|
|
**Usage:**
|
|
```lua
|
|
local encoded = extensions.MPHelpers.b64encode("Hello World")
|
|
|
|
-- Encoding JSON
|
|
local data = {name = "Player", score = 100}
|
|
local encoded = extensions.MPHelpers.b64encode(jsonEncode(data))
|
|
TriggerServerEvent("sendData", encoded)
|
|
```
|
|
|
|
---
|
|
|
|
### `MPHelpers.b64decode(string)`
|
|
Decodes a Base64 string (RFC 2045)
|
|
|
|
**Parameters:**
|
|
- `string` (string) - Base64-encoded string
|
|
|
|
**Returns:**
|
|
- (string) - Decoded string
|
|
|
|
**Usage:**
|
|
```lua
|
|
local decoded = extensions.MPHelpers.b64decode("SGVsbG8gV29ybGQ=")
|
|
|
|
-- Decoding JSON
|
|
AddEventHandler("receiveData", function(data)
|
|
local decoded = extensions.MPHelpers.b64decode(data)
|
|
local jsonData = jsonDecode(decoded)
|
|
end)
|
|
```
|
|
|
|
---
|
|
|
|
## Color Functions
|
|
|
|
### `MPHelpers.hex2rgb(hex)`
|
|
Converts a hexadecimal color code to RGB values
|
|
|
|
**Parameters:**
|
|
- `hex` (string) - Hex color code (e.g., "#FF5733" or "#F57")
|
|
|
|
**Returns:**
|
|
- (table) - RGB values `{r, g, b}` in 0-1 range
|
|
- (table) - `{0, 0, 0}` if invalid
|
|
|
|
**Note:**
|
|
Supports both 3-character and 6-character hex codes.
|
|
|
|
**Usage:**
|
|
```lua
|
|
local rgb = extensions.MPHelpers.hex2rgb("#FF5733")
|
|
print(rgb[1], rgb[2], rgb[3]) -- 1.0, 0.341, 0.2
|
|
|
|
-- Short format
|
|
local rgb = extensions.MPHelpers.hex2rgb("#F57")
|
|
```
|
|
|
|
---
|
|
|
|
## String Functions
|
|
|
|
### `MPHelpers.splitStringToTable(string, delimiter, convert_into)`
|
|
Splits a string by delimiter and optionally converts values
|
|
|
|
**Parameters:**
|
|
- `string` (string) - String to split
|
|
- `delimiter` (string) - Delimiter to split by
|
|
- `convert_into` (number) - Conversion type (optional):
|
|
- `nil` or `0` - Keep as strings (default)
|
|
- `1` - Convert to numbers
|
|
- `2` - Convert to booleans
|
|
|
|
**Returns:**
|
|
- (table) - Array of split values
|
|
|
|
**Usage:**
|
|
```lua
|
|
-- Strings
|
|
local parts = extensions.MPHelpers.splitStringToTable("Hello,World", ",")
|
|
-- {"Hello", "World"}
|
|
|
|
-- Numbers
|
|
local nums = extensions.MPHelpers.splitStringToTable("10,20,30", ",", 1)
|
|
-- {10, 20, 30}
|
|
|
|
-- Parse coordinates
|
|
local coords = extensions.MPHelpers.splitStringToTable("100,200,50", ",", 1)
|
|
local x, y, z = coords[1], coords[2], coords[3]
|
|
```
|
|
|
|
---
|
|
|
|
## Table Functions
|
|
|
|
### `MPHelpers.tableDiff(old, new)`
|
|
Compares two tables and returns their differences
|
|
|
|
**Parameters:**
|
|
- `old` (table) - First table to compare
|
|
- `new` (table) - Second table to compare
|
|
|
|
**Returns:**
|
|
- (table) `diff` - All keys that differ
|
|
- (table) `o` - Values from old that differ
|
|
- (table) `n` - Values from new that differ
|
|
|
|
**Usage:**
|
|
```lua
|
|
local oldConfig = {speed = 100, damage = 50, armor = 30}
|
|
local newConfig = {speed = 120, damage = 50, armor = 40}
|
|
|
|
local diff, oldVals, newVals = extensions.MPHelpers.tableDiff(oldConfig, newConfig)
|
|
-- diff = {speed = 120, armor = 40}
|
|
|
|
for key, value in pairs(diff) do
|
|
print(key .. " changed from " .. oldVals[key] .. " to " .. newVals[key])
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## Debug Functions
|
|
|
|
### `MPHelpers.simpletraces(level)`
|
|
Returns formatted caller information as string
|
|
|
|
**Parameters:**
|
|
- `level` (number) - Stack level (optional, default: 2)
|
|
|
|
**Returns:**
|
|
- (string) - Formatted string: `"source:line, namewhat name"`
|
|
- (string) - `"unknown"` if info not available
|
|
|
|
**Usage:**
|
|
```lua
|
|
local function myFunction()
|
|
local caller = extensions.MPHelpers.simpletraces()
|
|
print("Called from: " .. caller)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### `MPHelpers.simpletrace(level)`
|
|
Logs caller information to console
|
|
|
|
**Parameters:**
|
|
- `level` (number) - Stack level (optional, default: 1)
|
|
|
|
**Note:**
|
|
Logs the calling location to the console.
|
|
|
|
**Usage:**
|
|
```lua
|
|
local function myFunction()
|
|
extensions.MPHelpers.simpletrace()
|
|
-- Logs: "Code was called from: lua/ge/extensions/mymod.lua:42"
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
*Last updated: 01.01.2026*
|