Files
Docs/docs/en/API documentation/Client-Side.md
2026-04-13 10:40:58 +01:00

27 KiB

BeamMP Client-Side API Documentation

Table of Contents

MPVehicleGE

MPConfig

MPCoreNetwork

MPGameNetwork

MPHelpers


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:

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:

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:

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:

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:

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:

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:

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:

local distances = extensions.MPVehicleGE.getDistanceMap()

getNicknameMap()

Returns all multiplayer gameVehicleIDs with their owner names

Parameters:

  • None

Returns:

  • (table) - Map of nicknames {[gameVehicleID] = ownerName}

Usage:

local nicknameMap = extensions.MPVehicleGE.getNicknameMap()

getVehicles()

Returns the complete vehicles table

Parameters:

  • None

Returns:

  • (table) - All vehicles {[serverVehicleID] = vehicles_subtable}

Usage:

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:

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:

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:

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:

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:

extensions.MPVehicleGE.hideNicknames(true)  -- Hide
extensions.MPVehicleGE.hideNicknames(false) -- Show

toggleNicknames()

Toggles the displaying of nametags

Parameters:

  • None

Usage:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

-- 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:

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:

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:

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:

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:

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:

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:

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:

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:

local originalOnUIInitialised = MPVehicleGE.onUIInitialised
MPVehicleGE.onUIInitialised = function()
    originalOnUIInitialised()
    
    print("BeamMP UI initialized")
end

onSettingsChanged()

Called when BeamMP settings are changed

Usage:

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:

local myID = extensions.MPConfig.getPlayerServerID()

MPConfig.getNickname()

Returns the local player's nickname

Returns:

  • (string) - The player's current nickname

Usage:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

-- 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:

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:

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:

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:

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:

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:

-- 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:

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:

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:

local function myFunction()
    extensions.MPHelpers.simpletrace()
    -- Logs: "Code was called from: lua/ge/extensions/mymod.lua:42"
end

Last updated: 01.01.2026