Exports et API
Exports serveur et client de tc-forensic avec leurs signatures : preuves, profils, enquêtes, analyses, appareil photo.
Les exports s'appellent avec exports['tc-forensic']:Nom(...).
Sans risque d'exception
Les exports serveur sont protégés : en cas d'erreur, ils renvoient nil / false et n'émettent jamais d'exception dans ton script.
#Exports serveur
#Joueurs et droits
| Signature | Rôle |
|---|---|
IsAuthorized(src) | true si le joueur est d'un job police et en service |
IsPoliceJob(jobName) | true si le job est reconnu police (Vision : par le core ; ailleurs : Config.Police.jobs) |
HasGloves(src) | Le joueur porte-t-il des gants ? |
#Traces et preuves
| Signature | Rôle |
|---|---|
DropFingerprint(src, coords, surface, extraMeta) | Dépose l'empreinte du joueur src (sauf gants). coords : vector3 ou {x,y,z} (défaut : position du joueur). Retourne la preuve ou nil |
DropBlood(src, coords) | Dépose une tache de sang avec l'ADN du personnage src |
CreateEvidence(evType, coords, metadata, reason) | Crée une preuve. Types : casing, blood, fingerprint, gunpowder, gsr, fragment, bullet_impact. metadata : table libre (dnaHash, fpHash, caliber, plate…) |
GetEvidence(id) | Preuve par numéro (même collectée), métadonnées décodées |
GetCasingsNear(coords, radius) | Douilles actuellement au sol dans un rayon |
#ADN, empreintes, fichier
| Signature | Rôle |
|---|---|
GetHash(identifier, kind) | Code d'un personnage. kind : 'dna', 'fp' ou 'gsr' |
GetProfile(identifier) | Profil au fichier (nil si jamais enregistré) |
RegisterProfile(identifier, kind, by) | Enregistre directement un personnage au fichier (ex. à l'incarcération). kind : 'dna', 'fp' ou 'both' |
RemoveProfile(identifier) | Retire un profil |
ResolveHash(kind, hash) | Résout un code : { known, registered, person, npc } |
IsGsrPositive(identifierOrSrc) | Test de résidus de tir sans item : renvoie positif (bool), nombre de traces |
WashHands(identifierOrSrc) | Efface les résidus de tir (douche, lavage des mains…) |
#Enquêtes
| Signature | Rôle |
|---|---|
CreateCase(data) | Crée une enquête. data = { title, category, priority (1-3), summary, location, coords, lead = src } (lead facultatif) |
GetCase(id) | Lit un dossier |
SetCaseStatus(id, status) | status : open, active, suspended, solved ou closed |
AddCaseNote(id, body, authorName, kind) | kind : 'note', 'event' ou 'system' |
AddPersonToCase(id, identifier, role, notes) | Rattache une personne |
AddVehicleToCase(id, plate, notes) | Rattache un véhicule |
AttachToCase(id, kind, refId, label) | kind : 'evidence', 'analysis', 'photo' ou 'folder' |
GetCasesForPerson(identifier) | Enquêtes où apparaît un personnage : { id, title, status, role } |
GetCasesForPlate(plate) | Enquêtes liées à une plaque |
#Laboratoire et photos
| Signature | Rôle |
|---|---|
GetAnalysis(id) | Analyse (résultat complet si terminée) |
GetPhotoInfo(id) | Informations d'une photo, sans l'image |
OpenCamera(src) | Ouvre le viseur de l'appareil photo chez un joueur, sans vérifier l'item |
ShowPhoto(src, photoId) | Affiche une photo à un joueur, sans lui donner l'item |
#Exports client
| Signature | Rôle |
|---|---|
IsAuthorized() | Le joueur local est-il autorisé ? |
OpenEnquete(tab) | Ouvre la tablette d'enquêtes. tab : 'dashboard', 'cases', 'people', 'fichier', 'lab' ou 'evidence' |
OpenCamera() / CloseCamera() | Ouvre / ferme le viseur de l'appareil photo |
IsCameraActive() | État du viseur |
ViewPhoto(photoId) | Affiche une photo que le joueur possède ou a le droit de voir |
LeaveFingerprint(surface, coords) | Laisse l'empreinte du joueur local (sauf gants) : coffre forcé, caisse, distributeur… coords facultatif (à moins de 6 m du joueur). Retourne { ok, id, gloves } |
#Exemples
server.lua
-- Un braquage blesse un joueur : du sang sur la scène
exports['tc-forensic']:DropBlood(src, GetEntityCoords(GetPlayerPed(src)))
-- Créer une enquête automatiquement après une fusillade
local id = exports['tc-forensic']:CreateCase({
title = 'Fusillade — Strawberry', category = 'Fusillade', priority = 2,
summary = 'Détonations signalées.', location = 'Strawberry Ave',
})
exports['tc-forensic']:AddCaseNote(id, 'Dossier ouvert automatiquement.', 'Système', 'system')
-- Réserver une action à la police en service
if not exports['tc-forensic']:IsAuthorized(src) then return endclient.lua
-- Un coffre-fort forcé laisse l'empreinte du cambrioleur
local r = exports['tc-forensic']:LeaveFingerprint('coffre')