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
tc.notify({ title = 'Titre', description = 'Texte', type = 'success', icon = nil, duration = 4000, position = nil })| Champ | Rôle |
|---|---|
title, description | Textes affichés |
type | success, error, warning ou info |
icon | Icône (facultatif) |
duration | Durée d'affichage |
position | Position à l'écran (facultatif) |
Côté serveur : tc.notify(source, data) (avec -1 pour tout le monde).
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
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é') endtc.progress(label, duration, opts) est bloquante et renvoie true (terminée) ou false (annulée).
| Option | Rôle |
|---|---|
canCancel | Permet d'annuler avec X (défaut true) |
hint | Texte 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 = '...' } |
check | Fonction appelée à chaque image : renvoyer false annule la barre |
#Barre pilotée par le script
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
-- 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.
kind | Contrôle | Réglages du preset (valeur par défaut) |
|---|---|---|
precision | Clavier (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) |
sequence | Clavier | sequence : 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, sound | Souris (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
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
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
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.worldHintaveccoordssuit le point dans le monde ; sinon donnex,y(0 à 1) et utilisetc.worldHintPos(x, y).variant = 'uv'donne la version violette.tc.helpTexttraduit les codes~INPUT_…~en touches.
#Dialogues
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 :
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égorie | Exports |
|---|---|
| Notifications | notify |
| Progression | progress, progressManual, progressEnd, progressActive, cancelProgress |
| Mini-jeux | minigame (alias skillCheck), minigameActive |
| Digicode | keypad, closeKeypad |
| Accord | consent, closeConsent |
| HUD / aide | showHud, hideHud, isHudOpen, helpText, crosshair |
| Invites | worldHint, worldHintPos, hideWorldHint |
| Dialogues | alert, input, closeDialog |
| Points | addPoint, updatePoint, removePoint, clearPoints |
| Serveur | notify |