TC ScriptDocumentation

API Lua

Toutes les fonctions du global tc : notifications, progression, mini-jeux, digicode, HUD, dialogues, points d'interaction.

Toutes les fonctions ci-dessous sont côté client, sauf mention contraire. Chacune existe aussi en export : exports['tc-ui']:nom(...).

#Notifications

Lua
tc.notify({ title = 'Titre', description = 'Texte', type = 'success', icon = nil, duration = 4000, position = nil })
ChampRôle
title, descriptionTextes affichés
typesuccess, error, warning ou info
iconIcône (facultatif)
durationDurée d'affichage
positionPosition à l'écran (facultatif)

Côté serveur : tc.notify(source, data) (avec -1 pour tout le monde).

server.lua
tc.notify(source, { title = 'Banque', description = 'Virement reçu.', type = 'success' })
tc.notify(-1, { title = 'Annonce', description = 'Redémarrage dans 10 minutes.', type = 'warning' })

#Barre de progression

Lua
local ok = tc.progress('Réparation du moteur', 8000, {
    canCancel = true,
    hint = 'Appuie sur X pour annuler',
    disable = { move = true, sprint = true, combat = true, car = true },
    anim = { dict = 'mini@repair', clip = 'fixing_a_ped', flag = 49 },
    check = function() return not IsPedInAnyVehicle(PlayerPedId(), false) end,
})
if ok then print('Terminé') else print('Annulé') end

tc.progress(label, duration, opts) est bloquante et renvoie true (terminée) ou false (annulée).

OptionRôle
canCancelPermet d'annuler avec X (défaut true)
hintTexte d'aide sous la barre
disable{ move, sprint, jump, vehicle, combat, car, mouse, controls = { ids } } ou false pour ne rien bloquer
anim{ dict, clip, flag } ou { scenario = '...' }
checkFonction appelée à chaque image : renvoyer false annule la barre

#Barre pilotée par le script

Lua
tc.progressManual('Chargement', 0.0, 'Patiente…')
tc.progressManual('Chargement', 0.5)    -- pct de 0 à 1
tc.progressEnd()

Autres : tc.progressActive() (état), tc.cancelProgress() (annuler).

#Mini-jeux

Lua
-- au clavier
local ok = tc.minigame('precision', { hits = 3 }, 3, 'Crochetage')
local ok2 = tc.minigame({ kind = 'sequence', preset = { sequence = 5 }, maxFails = 2, label = 'Code', timeout = 20000 })

tc.minigame(kind, preset, maxFails, label) renvoie true si réussi. preset est une table de réglages (les valeurs omises prennent leur défaut, voir le tableau). Avec la forme table, timeout (en ms, 90 000 par défaut) arrête le mini-jeu : la réponse est alors false.

kindContrôleRéglages du preset (valeur par défaut)
precisionClavier (Espace)zone : largeur de la zone, de 0.06 à 0.5 (0.18) · speed : vitesse du curseur, min. 0.3 (1) · hits : réussites nécessaires (3)
sequenceClaviersequence : longueur de 3 à 8 (5) · sequenceTime : temps en ms, min. 2000 (5500) · keys : touches utilisées (W A S D Q E)
wires, button, braille, symbols, switches, password, soundSouris (modules de bombe)time : minuteur en secondes (90 pour button) · count : 3 à 6 fils pour wires · rules = false pour masquer les règles

maxFails (3 par défaut, au minimum 1) est le nombre d'erreurs tolérées.

Pour les modules de bombe, les règles s'affichent à côté du module et une erreur coûte une vie. tc.minigameActive() indique si un mini-jeu est en cours.

#Digicode

Lua
local code = tc.keypad({
    label = 'Coffre-fort', subtitle = 'Entre le code', badge = 'PIN',
    length = 4, min = 4, max = 8, lockedFor = 0,
    validate = function(code)
        local ok = lib.callback.await('monscript:verifier', false, code)
        if ok then return true end
        return false, 'Code incorrect', 30      -- message + blocage de 30 s
    end,
})

Renvoie le code saisi, ou nil si annulé. validate est facultatif et peut interroger le serveur : tant qu'il renvoie une valeur fausse, le clavier reste ouvert et affiche l'erreur. Il peut renvoyer true, false, message, secondes, ou une table { ok, err, lockedFor }.

#Demande d'accord

Lua
local accepte = tc.consent({ title = 'Prélèvement', text = 'Accepter ?', subtitle = 'Police', timeout = 20,
    labels = { accept = 'Accepter', refuse = 'Refuser' } })

Renvoie true / false ; sans réponse dans le délai, la réponse est false.

#HUD d'aide, viseur, invites

Lua
tc.showHud({ title = 'Atelier', text = 'Pose la pièce', keys = { { key = 'E', label = 'Poser' }, { key = 'X', label = 'Annuler' } }, header = nil, icon = nil, position = nil })
tc.hideHud()

tc.helpText('~INPUT_CONTEXT~ Ouvrir  ~INPUT_RELOAD~ Tourner')   -- aide native, à appeler CHAQUE image

tc.crosshair(true, 'BLOCKED', nil)    -- viseur central ; 'BLOCKED' = couleur d'alerte
tc.worldHint({ key = 'E', label = 'Ouvrir', sub = 'Coffre', coords = vec3(0, 0, 0) })   -- invite ancrée dans le monde
tc.hideWorldHint()
  • tc.isHudOpen() indique si le HUD est affiché.
  • tc.worldHint avec coords suit le point dans le monde ; sinon donne x, y (0 à 1) et utilise tc.worldHintPos(x, y). variant = 'uv' donne la version violette.
  • tc.helpText traduit les codes ~INPUT_…~ en touches.

#Dialogues

Lua
local choix = tc.alert({ header = 'Supprimer ?', content = 'Action définitive.', subtitle = nil, labels = { confirm = 'Oui', cancel = 'Non' }, cancel = true, danger = true })
-- 'confirm' ou 'cancel'

local rep = tc.input('Nouveau véhicule', {
    { type = 'input',    label = 'Nom' },
    { type = 'number',   label = 'Prix' },
    { type = 'select',   label = 'Catégorie', options = { { value = 'a', label = 'A' }, { value = 'b', label = 'B' } } },
    { type = 'checkbox', label = 'Actif' },
})
-- table des réponses, ou nil si annulé

Types de champs : input, number, textarea, select, checkbox, slider, color. tc.closeDialog() ferme le dialogue en cours.

#Points d'interaction

Une invite « touche + texte » ancrée dans le monde, sans système de cibles :

Lua
tc.point.add('atelier:coffre', {
    coords = vec3(0.0, 0.0, 70.0), radius = 2.0, key = 'E', label = 'Ouvrir le coffre',
    canInteract = function() return true end,
    onPress = function() print('ouvert') end,
    marker = false,
})
tc.point.update('atelier:coffre', { label = 'Autre texte' })
tc.point.remove('atelier:coffre')
tc.point.clear()

Exports équivalents : addPoint, updatePoint, removePoint, clearPoints.

#Liste des exports

CatégorieExports
Notificationsnotify
Progressionprogress, progressManual, progressEnd, progressActive, cancelProgress
Mini-jeuxminigame (alias skillCheck), minigameActive
Digicodekeypad, closeKeypad
Accordconsent, closeConsent
HUD / aideshowHud, hideHud, isHudOpen, helpText, crosshair
InvitesworldHint, worldHintPos, hideWorldHint
Dialoguesalert, input, closeDialog
PointsaddPoint, updatePoint, removePoint, clearPoints
Serveurnotify
Dernière mise à jour : 7 novembre 2026© 2026 TC Script