Skip to content

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 :

bash
ensure twinded_libs

Système de modules

Les scripts incluent la bibliothèque via leur fxmanifest.lua :

lua
shared_scripts {
    '@twinded_libs/init.lua',
}

Cela crée un objet global tw avec des modules chargés paresseusement.

Modules disponibles

ModuleCôtéDescription
tw.fwsharedAbstraction cross-framework (VORP, RSG, QBCore, etc.)
tw.callbacksharedCallbacks bidirectionnels client-serveur
tw.emitsharedÉmission d'événements optimisée avec contrôle de bande passante
tw.blipclientBlips sur la carte avec nettoyage automatique
tw.promptclientPrompts d'interaction natifs RedM (maintenir pour compléter)
tw.entitysharedCréation, suppression, fondu d'entités
tw.notifsharedNotifications natives RedM (droite, gauche, haut)
tw.timeoutsharedTimeouts, boucles, debounce, anti-spam
tw.progressbarclientBarre de progression NUI avec thèmes (linear, circle, innercircle)
tw.menuclientMenu interactif NUI (cross-framework)
tw.playerclientInfos joueur auto-mises à jour (ped, coords, serverId)
tw.text3dclientTexte 3D flottant au-dessus de coordonnées monde
tw.inputclientClavier natif RedM onscreen
tw.animationclientLecture et gestion d'animations
tw.databaseserverGestion de tables/colonnes MySQL via oxmysql
tw.webhookserverLogging Discord par webhook
tw.witnessserverAlertes témoins — diffusion par métier + blip temporaire

Exemples d'utilisation

lua
-- 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

lua
tw.blip.create(vec3(x, y, z), "Label", "blip_sprite")

Prompts

lua
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
end

Entités

lua
local entity = tw.entity.create("model_name", coords, heading, networked)
tw.entity.delete(entity)

Notifications

lua
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.

lua
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.

lua
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é.

lua
exports['twinded_libs']:DeleteProp(prop)

Server

SendWebhook(url, data)

Envoie un message vers un webhook Discord. Restreint aux ressources twinded_* uniquement.

lua
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.

lua
if exports['twinded_libs']:IsRateLimited(source, 3) then return end

ClearRateLimit(key) / ClearRateLimitsByPrefix(prefix)

Nettoyage des entrées de rate limit (appeler dans playerDropped).

lua
exports['twinded_libs']:ClearRateLimit(source)

Premium RedM Scripts — Multi-Framework