Zum Inhalt

Utils

Hilfsfunktionen für Identifier, Steam-/Discord-API, Fahrzeugsuche, Tabellenoperationen und Asset-Loading.


Identifier (Server)

-- Einzelnen Identifier eines Spielers holen (ohne Präfix)
cv.utils.getPlayerIdentifier(src, idType)
-- Mögliche idType-Werte: "steam", "discord", "license", "license2", "xbl", "live", "fivem", "ip"

-- Alle Identifier auf einmal
cv.utils.getAllPlayerIdentifiers(src)
-- → { steam, discord, license, license2, xbl, live, fivem, ip }

Beispiel

local license  = cv.utils.getPlayerIdentifier(source, 'license')
local discord  = cv.utils.getPlayerIdentifier(source, 'discord')
local allIds   = cv.utils.getAllPlayerIdentifiers(source)
print(allIds.steam, allIds.discord)

Steam-API (Server)

-- Steam-Hex-ID → Steam64-Decimal konvertieren
cv.utils.steam.convertId(steamId)   -- → string | nil

-- Steam-Profil über API abrufen (async)
cv.utils.steam.getData(identifier, function(playerData)
    if playerData then
        print(playerData.personaname, playerData.avatarfull)
    end
end)

Voraussetzung

steam_webApiKey muss in der server.cfg als Convar gesetzt sein.


Discord-API (Server)

-- Discord-Mitglied aus dem Server-Guild abrufen (async)
cv.utils.discord.getData(discordId, function(member)
    if member then print(member.nick) end
end)

-- Avatar-URL generieren
cv.utils.discord.getAvatarUrl(discordId, avatarHash)  -- → URL string

-- Prüfen, ob Mitglied eine bestimmte Rolle hat (async)
cv.utils.discord.checkGuildRole(memberId, roleId, function(hasRole)
    if hasRole then
        -- Spieler hat die Rolle
    end
end)

Voraussetzungen

discord_botToken und discord_guildId müssen als Convars gesetzt sein.


Spieler-Hilfsfunktionen (Server)

-- Ping
cv.utils.player.getPing(src)            -- → number

-- Verbindungsstatistiken (RTT, Packet Loss, …)
cv.utils.player.getConnectStats(src)
-- → { packetLoss, packetLossVariance, rtt, rttVariance, … }

-- Spieler kicken
cv.utils.player.kick(src, reason)

-- Nachricht in Client-Konsole schreiben
cv.utils.clientprint(src, message)

Geldformatierung

-- Zahl mit Tausenderpunkten formatieren
cv.utils.formatMoney(amount)   -- → "1,234,567"

Fahrzeuge (Client & Server)

-- Alle Fahrzeuge in Radius (Client & Server)
cv.utils.getNearbyVehicles(coords, maxDistance, includePlayerVehicle)
-- → { { vehicle, coords, model, heading, spawnName? } }

-- Nächstes Fahrzeug in Radius (Client)
cv.utils.getClosestVehicle(coords, maxDistance, includePlayerVehicle)
-- → vehicle, vehicleCoords

Asset-Loading (Client, async)

-- Model laden und warten bis bereit
local model = cv.utils.requestModel('ambulance', 10000)

-- AnimDict laden und warten
local dict = cv.utils.requestAnimDict('move_m@gas_pump', 10000)

-- Warten bis Callback einen Wert zurückgibt
local value = cv.utils.waitFor(function()
    if condition then return result end
end, 'Timeout-Nachricht', 5000)

UI-Hilfsfunktionen (Client)

-- Minimap ein-/ausblenden
cv.utils.showMinimap(true)
cv.utils.showMinimap(false)

-- Prüfen ob Pause-Menü aktiv ist
if cv.utils.isPauseMenu() then return end

Tabellen-Hilfsfunktionen

-- Prüfen ob Wert in Tabelle enthalten ist
cv.table.contains(tbl, value)         -- → boolean

-- Funktioniert auch mit Arrays als Suchwert (alle Elemente müssen enthalten sein):
cv.table.contains({ 'a', 'b', 'c' }, { 'a', 'b' })   -- → true

Unix-Timestamp (Server)

-- Jetzt
local ts = cv.utils.getUnixTimestamp()

-- Aus MySQL-Datetime-String
local ts = cv.utils.getUnixTimestamp("2025-08-09 14:30:00")