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.blipclientBlips sur la carte avec nettoyage automatique à l'arrêt de la ressource
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, délais
tw.tablesharedFonctions table étendues (copy, merge, upsert, etc.)
tw.dataviewclientManipulation de buffers binaires
tw.witnessserverAlertes témoins — diffusion aux joueurs par métier + blip temporaire
tw.text3dclientTexte 3D flottant au-dessus de coordonnées monde
tw.inputclientSystème d'input natif RedM
tw.animationclientLecture et gestion d'animations
tw.printsharedSortie console colorée et logging debug

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