tw.fw (Framework Bridge)
Cote : Shared (Client + Server)
Couche d'abstraction cross-framework. Detecte automatiquement le framework installe et fournit une API unifiee pour les donnees joueur, l'inventaire, l'argent et les metiers.
Alias : tw.fw est un raccourci pour tw.framework. Les deux sont interchangeables.
Frameworks supportes : VORP, RSG v1/v2, QBCore RedM, QRCore, RedEM:RP (ancien et 2023), RPX, TPZ-CORE, FRP.
Detection du framework
tw.fw:get()
Retourne la chaine d'identifiant du framework detecte.
Retour : string (ex: "vorp", "rsg", "qbcore", "redemrp", etc.)
tw.fw:is(name)
Verifie si le framework actuel correspond au nom donne.
| Parametre | Type | Description |
|---|---|---|
name | string | Identifiant du framework a verifier |
Retour : boolean
Donnees joueur (Server)
tw.fw:getUser(source)
Retourne un objet UserClass pour le joueur.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
Retour : UserClass (voir Methodes UserClass ci-dessous)
tw.fw:getUserIdentifiers(source)
Retourne les identifiants du joueur sans creer un UserClass complet.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
Retour : table — { identifier = string, charid = string|integer }
tw.fw:getJob(source)
Retourne le nom du metier actuel du joueur.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
Retour : string
tw.fw:getRPName(source)
Retourne le nom roleplay du joueur (prenom + nom).
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
Retour : string (ex: "John Smith")
tw.fw:getSteamIdentifier(source)
Retourne l'identifiant Steam du joueur.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
Retour : string ("steam:xxxx" ou "Unknown")
tw.fw:onCharacterSelected(cb)
Enregistre un callback declenche lorsqu'un joueur selectionne un personnage.
| Parametre | Type | Description |
|---|---|---|
cb | function(source) | Callback recevant l'ID serveur du joueur |
Donnees joueur (Client)
tw.fw:getMyIdentifiers()
Retourne les identifiants du joueur local.
Retour : table — { identifier = string, charid = string|integer }
Argent (Server)
tw.fw:addMoney(source, amount, moneyType)
Ajoute de l'argent a un joueur.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
amount | number | Montant a ajouter |
moneyType | integer | 0 = dollar, 1 = gold, 2 = rol |
tw.fw:removeMoney(source, amount, moneyType)
Retire de l'argent a un joueur.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
amount | number | Montant a retirer |
moneyType | integer | 0 = dollar, 1 = gold, 2 = rol |
tw.fw:canUserBuy(source, amount, moneyType, removeIfCan?)
Verifie si un joueur peut se permettre un achat. Retire optionnellement l'argent s'il le peut.
| Parametre | Type | Par defaut | Description |
|---|---|---|---|
source | integer | — | ID serveur du joueur |
amount | number | — | Prix a verifier |
moneyType | integer | — | 0 = dollar, 1 = gold, 2 = rol |
removeIfCan | boolean? | false | Si true, deduit l'argent quand l'achat est possible |
Retour : boolean
tw.fw:canUserPayWith(source, prices, removeIfCan?)
Verifie si un joueur peut se permettre un achat multi-devises.
| Parametre | Type | Par defaut | Description |
|---|---|---|---|
source | integer | — | ID serveur du joueur |
prices | table | — | Tableau d'entrees { amount, moneyType } |
removeIfCan | boolean? | false | Si true, deduit tous les montants quand l'achat est possible |
Retour : boolean, integer|nil — indicateur de succes, et l'index de la premiere devise echouee si non affordable.
tw.fw:refundUserWith(source, prices)
Rembourse un achat multi-devises.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
prices | table | Tableau d'entrees { amount, moneyType } (meme format que canUserPayWith) |
Inventaire (Server)
tw.fw:giveItem(source, item, quantity, meta?)
Donne un objet a un joueur.
| Parametre | Type | Par defaut | Description |
|---|---|---|---|
source | integer | — | ID serveur du joueur |
item | string | — | Nom de l'objet |
quantity | integer | — | Quantite a donner |
meta | table? | nil | Metadonnees de l'objet |
Retour : boolean — false si le joueur n'a pas de place.
tw.fw:removeItem(source, item, quantity, meta?)
Retire un objet d'un joueur.
| Parametre | Type | Par defaut | Description |
|---|---|---|---|
source | integer | — | ID serveur du joueur |
item | string | — | Nom de l'objet |
quantity | integer | — | Quantite a retirer |
meta | table? | nil | Metadonnees de l'objet |
tw.fw:canUseItem(source, item, amount, meta?, remove?)
Verifie si un joueur possede assez d'un objet. Le retire optionnellement.
| Parametre | Type | Par defaut | Description |
|---|---|---|---|
source | integer | — | ID serveur du joueur |
item | string | — | Nom de l'objet |
amount | integer | — | Quantite requise |
meta | table? | nil | Metadonnees de l'objet |
remove | boolean? | false | Si true, retire l'objet s'il est disponible |
Retour : boolean
tw.fw:registerUseItem(item, closeAfterUsed?, callback)
Enregistre un handler d'objet utilisable.
| Parametre | Type | Par defaut | Description |
|---|---|---|---|
item | string | — | Nom de l'objet |
closeAfterUsed | boolean? | false | Fermer l'inventaire apres utilisation |
callback | function(data) | — | Handler appele lorsque l'objet est utilise |
tw.fw:createInventory(invName, name, invConfig)
Cree un inventaire secondaire personnalise.
| Parametre | Type | Description |
|---|---|---|
invName | string | Identifiant unique de l'inventaire |
name | string | Libelle d'affichage |
invConfig | table | Configuration (voir ci-dessous) |
Champs invConfig :
| Champ | Type | Description |
|---|---|---|
maxSlots | integer | Nombre maximum de slots |
maxWeight | number | Poids maximum |
acceptWeapons | boolean | Si les armes peuvent etre stockees |
shared | boolean | Si l'inventaire est partage entre les joueurs |
tw.fw:removeInventory(invName)
Supprime un inventaire personnalise.
| Parametre | Type | Description |
|---|---|---|
invName | string | Identifiant de l'inventaire |
tw.fw:openInventory(source, invName)
Ouvre un inventaire personnalise pour un joueur.
| Parametre | Type | Description |
|---|---|---|
source | integer | ID serveur du joueur |
invName | string | Identifiant de l'inventaire |
tw.fw:getItemData(item)
Retourne les metadonnees d'un objet depuis le registre d'objets du framework.
| Parametre | Type | Description |
|---|---|---|
item | string | Nom de l'objet |
Retour : table — { label = string, ... }
tw.fw:getItems()
Retourne tous les objets du registre d'objets du framework.
Retour : table
Methodes UserClass
Objet retourne par tw.fw:getUser(source).
user:getMoney(moneyType)
| Parametre | Type | Description |
|---|---|---|
moneyType | integer | 0 = dollar, 1 = gold, 2 = rol |
Retour : number
user:addMoney(amount, moneyType)
| Parametre | Type | Description |
|---|---|---|
amount | number | Montant a ajouter |
moneyType | integer | Type de devise |
user:removeMoney(amount, moneyType)
| Parametre | Type | Description |
|---|---|---|
amount | number | Montant a retirer |
moneyType | integer | Type de devise |
user:getIdentifiers()
Retour : table — { identifier = string, charid = string|integer }
user:getJob()
Retour : string
user:getRPName()
Retour : string (ex: "John Smith")
user:canBuy(price, moneyType, removeIfCan?)
| Parametre | Type | Par defaut | Description |
|---|---|---|---|
price | number | — | Prix a verifier |
moneyType | integer | — | Type de devise |
removeIfCan | boolean? | false | Deduire l'argent si l'achat est possible |
Retour : boolean
Exemples
Informations basiques du joueur
-- server.lua
local user = tw.fw:getUser(source)
local name = user:getRPName()
local job = user:getJob()
local ids = user:getIdentifiers()
print(name .. " (" .. job .. ") — char: " .. ids.charid)Flux d'achat
-- server.lua
local price = 50
local user = tw.fw:getUser(source)
if not user:canBuy(price, 0, true) then
tw.notif.rightError(source, "Not enough money")
return
end
local success = tw.fw:giveItem(source, "bandage", 5)
if not success then
user:addMoney(price, 0) -- remboursement
tw.notif.rightError(source, "Inventory full")
return
end
tw.notif.rightSuccess(source, "Purchased 5x Bandage")Achat multi-devises
-- server.lua
local prices = {
{ amount = 10, moneyType = 0 }, -- $10
{ amount = 2, moneyType = 1 }, -- 2 gold
}
local canPay, failIndex = tw.fw:canUserPayWith(source, prices, true)
if not canPay then
tw.notif.rightError(source, "Not enough funds")
return
endDetecter le framework
print("Running on: " .. tw.fw:get())
if tw.fw:is("vorp") then
-- Logique specifique a VORP
endEnregistrer un objet utilisable
-- server.lua
tw.fw:registerUseItem("bandage", true, function(data)
local source = data.source
tw.fw:removeItem(source, "bandage", 1)
-- logique de soin
end)Identifiants cote client
-- client.lua
local ids = tw.fw:getMyIdentifiers()
print("My char ID: " .. ids.charid)Notes
- Utilisez toujours
tw.fwau lieu d'appeler directement les exports du framework. Cela garantit que votre code fonctionne sur tous les frameworks supportes. - Les valeurs de
moneyType(0= dollar,1= gold,2= rol) sont coherentes entre tous les frameworks. giveItemretournefalselorsque l'inventaire du joueur est plein. Verifiez toujours la valeur de retour et gerez l'echec (ex: rembourser l'argent).onCharacterSelectedse declenche une fois par selection de personnage, y compris lors de la reconnexion.

