twinded_libs
Bibliothèque utilitaire partagée gratuite pour tous les scripts Twinded. Fournit un système de modules léger (global tw) et des exports communs utilisés par tous les scripts.
Ressource gratuite
twinded_libs est gratuit et requis par tous les scripts Twinded. Téléchargez-le depuis la boutique Tebex.
Installation
Placez twinded_libs dans votre dossier resources et assurez-le avant tout script Twinded :
ensure twinded_libsSystème de modules
Les scripts incluent la bibliothèque via leur fxmanifest.lua :
shared_scripts {
'@twinded_libs/init.lua',
}Cela crée un objet global tw avec des modules chargés paresseusement.
Modules disponibles
| Module | Côté | Description |
|---|---|---|
tw.blip | client | Blips sur la carte avec nettoyage automatique à l'arrêt de la ressource |
tw.prompt | client | Prompts d'interaction natifs RedM (maintenir pour compléter) |
tw.entity | shared | Création, suppression, fondu d'entités |
tw.notif | shared | Notifications natives RedM (droite, gauche, haut) |
tw.timeout | shared | Timeouts, boucles, délais |
tw.table | shared | Fonctions table étendues (copy, merge, upsert, etc.) |
tw.dataview | client | Manipulation de buffers binaires |
tw.witness | server | Alertes témoins — diffusion aux joueurs par métier + blip temporaire |
tw.text3d | client | Texte 3D flottant au-dessus de coordonnées monde |
tw.input | client | Système d'input natif RedM |
tw.animation | client | Lecture et gestion d'animations |
tw.print | shared | Sortie console colorée et logging debug |
Exemples d'utilisation
-- Callback prêt (attendre l'initialisation de la lib)
tw.ready(function()
-- votre code d'initialisation
end)
-- Nettoyage à l'arrêt de la ressource
tw.stopped(function()
-- code de nettoyage
end)Blips
tw.blip.create(vec3(x, y, z), "Label", "blip_sprite")Prompts
tw.prompt.create(group, "Label", 'INPUT_INTERACT_OPTION1', false)
tw.prompt.displayGroup(group, "Title") -- appeler chaque frame
if tw.prompt.isCompleted(group, 'INPUT_INTERACT_OPTION1') then
-- gérer l'interaction
endEntités
local entity = tw.entity.create("model_name", coords, heading, networked)
tw.entity.delete(entity)Notifications
tw.notif.rightSuccess("Vous avez trouvé 3x Pomme")
tw.notif.rightError("Pas assez de place")
tw.notif.right(text, dict, icon, color, duration)
tw.notif.left(title, text, dict, icon, color, duration)
tw.notif.simpleTop(title, subtitle, duration)Exports
Shared
HasJobAccess(jobs, current_job) → boolean
Vérifie si un métier est dans la liste autorisée. Retourne true si jobs est nil ou vide.
local allowed = exports['twinded_libs']:HasJobAccess({"doctor", "sheriff"}, player_job)Client
AttachProp(prop_name, offset, bone) → entity | nil
Attache un modèle de prop à un os du joueur avec un décalage.
local prop = exports['twinded_libs']:AttachProp(
"p_axe02x",
{ x = 0, y = 0, z = 0.5, rx = 0, ry = 0, rz = 0 },
"SKEL_R_Finger12"
)DeleteProp(prop)
Détache et supprime un prop en toute sécurité.
exports['twinded_libs']:DeleteProp(prop)Server
SendWebhook(url, data)
Envoie un message vers un webhook Discord. Restreint aux ressources twinded_* uniquement.
exports['twinded_libs']:SendWebhook(Config.Webhook.url, {
username = "Mon Script",
embeds = {{
title = "Événement",
description = "Détails",
color = 3066993,
}},
})IsRateLimited(key, min_time) → boolean
Rate limiting par clé. Retourne true si l'action doit être bloquée.
if exports['twinded_libs']:IsRateLimited(source, 3) then return endClearRateLimit(key) / ClearRateLimitsByPrefix(prefix)
Nettoyage des entrées de rate limit (appeler dans playerDropped).
exports['twinded_libs']:ClearRateLimit(source)
