Présentation
- Tamis, presse et table posables par les joueurs, sauvegardés en base.
- Quatre variétés : OG Kush, Purple Haze, White Widow, Blue Dream.
- Un vendeur PNJ pour le matériel.
- Aucun framework requis : fonctionne sur ESX, QBCore, Qbox ou sans framework.
- Compatible avec kq_weed, sans en dépendre.
- Français et anglais inclus.
Vidéo de présentation, de l'achat du matériel à la mise en pochon : voir YF-Kush sur YouTube.
Prérequis
| Ressource | Rôle |
|---|---|
ox_lib | Menus, saisies, notifications, échanges client-serveur. |
ox_inventory | Tous les objets, l'argent du vendeur et les images. |
ox_target | Interactions avec les postes et le vendeur. |
oxmysql | Sauvegarde des tamis, presses et tables posés. |
L'animation du tamis vient du DLC The Contract. Réglez sv_enforceGameBuild 2545 ou plus dans votre server.cfg, sinon le joueur tamise sans animation.
OneSync doit être activé, comme sur la quasi-totalité des serveurs actuels : le serveur vérifie la distance des joueurs avant chaque action.
Installation
Six étapes, dans cet ordre.
Déposer la ressource
Récupérez YF-Kush sur le portail Cfx.re (voir Récupérer ses achats). Copiez le dossier
yf-kushdans vos ressources, sans le renommer : la version protégée est liée à ce nom. Puis ajoutez-le à votreserver.cfg, après ses dépendances.server.cfgensure ox_lib ensure oxmysql ensure ox_inventory ensure ox_target ensure yf-kushCréer les tables SQL
Exécutez
install.sqlsur votre base. Il créeyf_kush_tamis,yf_kush_pressesetyf_kush_tables. Le script peut être relancé sans risque.Déclarer les objets
Ajoutez le bloc de la section Objets à la fin de
ox_inventory/data/items.lua, avant la dernière accolade.Copier les images
Copiez les 25 images
yf_*.pngdu dossierinstall/imagesdansox_inventory/web/images.Régler le config
Ouvrez
shared/config.lua: langue, têtes acceptées, sachet, tables de kq_weed et vendeur. Détail dans Configuration.Redémarrer le serveur
Un redémarrage complet est nécessaire la première fois, pour charger les nouveaux objets d'ox_inventory. La console affiche le nombre de tamis, presses et tables chargés.
Objets
25 objets : le matériel, les têtes fournies par le script, puis les quatre étapes de la filière pour chaque variété.
-- yf-kush
['yf_tamis'] = {
label = "Tamis à pollen",
weight = 8000,
stack = true,
close = true,
consume = 0,
client = {
export = 'yf-kush.useTamis'
},
},
['yf_baguettes'] = {
label = "Baguettes de battage",
weight = 500,
stack = true,
close = true,
consume = 0,
},
['yf_presse'] = {
label = "Presse à pollen",
weight = 10000,
stack = true,
close = true,
consume = 0,
client = {
export = 'yf-kush.usePresse'
},
},
['yf_table'] = {
label = "Table de découpe",
weight = 15000,
stack = true,
close = true,
consume = 0,
client = {
export = 'yf-kush.useTable'
},
},
['yf_sachet_vide'] = {
label = "Pochon vide",
weight = 1,
stack = true,
consume = 0,
},
['yf_tete_og_kush'] = {
label = "Tête de OG Kush",
weight = 2,
stack = true,
consume = 0,
},
['yf_tete_purple_haze'] = {
label = "Tête de Purple Haze",
weight = 2,
stack = true,
consume = 0,
},
['yf_tete_white_widow'] = {
label = "Tête de White Widow",
weight = 2,
stack = true,
consume = 0,
},
['yf_tete_blue_dream'] = {
label = "Tête de Blue Dream",
weight = 2,
stack = true,
consume = 0,
},
['yf_pollen_og_kush'] = {
label = "Pollen [OG Kush]",
weight = 50,
stack = true,
consume = 0,
},
['yf_pollen_purple_haze'] = {
label = "Pollen [Purple Haze]",
weight = 50,
stack = true,
consume = 0,
},
['yf_pollen_white_widow'] = {
label = "Pollen [White Widow]",
weight = 50,
stack = true,
consume = 0,
},
['yf_pollen_blue_dream'] = {
label = "Pollen [Blue Dream]",
weight = 50,
stack = true,
consume = 0,
},
['yf_plaque_og_kush'] = {
label = "Plaque de shit [OG Kush]",
weight = 100,
stack = true,
consume = 0,
},
['yf_plaque_purple_haze'] = {
label = "Plaque de shit [Purple Haze]",
weight = 100,
stack = true,
consume = 0,
},
['yf_plaque_white_widow'] = {
label = "Plaque de shit [White Widow]",
weight = 100,
stack = true,
consume = 0,
},
['yf_plaque_blue_dream'] = {
label = "Plaque de shit [Blue Dream]",
weight = 100,
stack = true,
consume = 0,
},
['yf_barrette_og_kush'] = {
label = "Barrette de shit [OG Kush]",
weight = 10,
stack = true,
consume = 0,
},
['yf_barrette_purple_haze'] = {
label = "Barrette de shit [Purple Haze]",
weight = 10,
stack = true,
consume = 0,
},
['yf_barrette_white_widow'] = {
label = "Barrette de shit [White Widow]",
weight = 10,
stack = true,
consume = 0,
},
['yf_barrette_blue_dream'] = {
label = "Barrette de shit [Blue Dream]",
weight = 10,
stack = true,
consume = 0,
},
['yf_pochon_og_kush'] = {
label = "Pochon de shit [OG Kush]",
weight = 11,
stack = true,
consume = 0,
},
['yf_pochon_purple_haze'] = {
label = "Pochon de shit [Purple Haze]",
weight = 11,
stack = true,
consume = 0,
},
['yf_pochon_white_widow'] = {
label = "Pochon de shit [White Widow]",
weight = 11,
stack = true,
consume = 0,
},
['yf_pochon_blue_dream'] = {
label = "Pochon de shit [Blue Dream]",
weight = 11,
stack = true,
consume = 0,
},| Objet | Rôle | Poids |
|---|---|---|
Tamis à pollenyf_tamis | Poste posable : tamisage | 8 000 g |
Baguettes de battageyf_baguettes | Nécessaires pour battre le tamis | 500 g |
Presse à pollenyf_presse | Poste posable : pressage | 10 000 g |
Table de découpeyf_table | Poste posable : découpe et mise en pochon | 15 000 g |
Pochon videyf_sachet_vide | Consommé à la mise en pochon | 1 g |
Tête de OG Kushyf_tete_og_kush | Entre dans le tamis | 2 g |
Tête de Purple Hazeyf_tete_purple_haze | Entre dans le tamis | 2 g |
Tête de White Widowyf_tete_white_widow | Entre dans le tamis | 2 g |
Tête de Blue Dreamyf_tete_blue_dream | Entre dans le tamis | 2 g |
Pollen [OG Kush]yf_pollen_og_kush | Sort du tamis | 50 g |
Pollen [Purple Haze]yf_pollen_purple_haze | Sort du tamis | 50 g |
Pollen [White Widow]yf_pollen_white_widow | Sort du tamis | 50 g |
Pollen [Blue Dream]yf_pollen_blue_dream | Sort du tamis | 50 g |
Plaque de shit [OG Kush]yf_plaque_og_kush | Sort de la presse | 100 g |
Plaque de shit [Purple Haze]yf_plaque_purple_haze | Sort de la presse | 100 g |
Plaque de shit [White Widow]yf_plaque_white_widow | Sort de la presse | 100 g |
Plaque de shit [Blue Dream]yf_plaque_blue_dream | Sort de la presse | 100 g |
Barrette de shit [OG Kush]yf_barrette_og_kush | Sort de la découpe | 10 g |
Barrette de shit [Purple Haze]yf_barrette_purple_haze | Sort de la découpe | 10 g |
Barrette de shit [White Widow]yf_barrette_white_widow | Sort de la découpe | 10 g |
Barrette de shit [Blue Dream]yf_barrette_blue_dream | Sort de la découpe | 10 g |
Pochon de shit [OG Kush]yf_pochon_og_kush | Produit final, à vendre | 11 g |
Pochon de shit [Purple Haze]yf_pochon_purple_haze | Produit final, à vendre | 11 g |
Pochon de shit [White Widow]yf_pochon_white_widow | Produit final, à vendre | 11 g |
Pochon de shit [Blue Dream]yf_pochon_blue_dream | Produit final, à vendre | 11 g |
Configuration
shared/config.lua est le seul fichier à modifier. Le barème, les animations et les positions sont fixés dans le script.
| Réglage | Défaut | Effet |
|---|---|---|
Config.locale | 'fr' | Langue des textes affichés aux joueurs : le nom d'un fichier du dossier locales/. Fournis : 'fr', 'en'. |
Config.tamisItems | yf_tete_* | Pour chaque variété, les objets que le tamis accepte comme têtes. Remplacez-les par les têtes de votre script de weed ; plusieurs noms sont permis par variété. Un nom qui n'existe pas dans ox_inventory est ignoré. Quand on ramasse un tamis, les têtes rendues sont le premier objet valide de la liste. |
Config.emptyBag | 'yf_sachet_vide' | L'objet consommé comme sachet vide à la mise en pochon, un par pochon. |
Config.kqWeedTables | false | true : la découpe et la mise en pochon fonctionnent aussi sur la table de conditionnement de kq_weed. La table du script fonctionne dans tous les cas. |
Config.shop | Le vendeur de matériel : voir Le vendeur. |
Config.locale = 'fr'
Config.tamisItems = {
og_kush = { 'yf_tete_og_kush' },
purple_haze = { 'yf_tete_purple_haze' },
white_widow = { 'yf_tete_white_widow' },
blue_dream = { 'yf_tete_blue_dream' },
}
Config.emptyBag = 'yf_sachet_vide'
Config.kqWeedTables = false
Config.shop = {
enabled = true,
coords = vec4(-911.87, -1269.17, 4.22, 111.8),
currency = 'black_money',
hours = { open = 0, close = 0 },
items = {
{ item = 'yf_tamis', price = 3000, stock = -1 },
{ item = 'yf_baguettes', price = 500, stock = -1 },
{ item = 'yf_presse', price = 15000, stock = -1 },
{ item = 'yf_table', price = 5000, stock = -1 },
{ item = 'yf_sachet_vide', price = 2, stock = -1 },
},
}La filière
Une fournée complète, du tamis au pochon. Le barème est fixe et identique pour les quatre variétés.
YF-Kush couvre la fabrication. Pour vendre les pochons, branchez les objets yf_pochon_og_kush, yf_pochon_purple_haze, yf_pochon_white_widow et yf_pochon_blue_dream dans votre script de deal.
Les postes
Le tamis, la presse et la table se posent depuis l'inventaire : utilisez l'objet, visez le sol, ← → pour tourner, E pour poser, Retour pour annuler. Ils restent en place après un redémarrage.
- Tout joueur peut utiliser et ramasser un poste posé, sauf pendant qu'il est utilisé.
- Les options apparaissent à moins de 1,5 m du poste.
- 60 postes de chaque type au maximum sur la carte.
Tamis
- « Charger des têtes » : une seule variété à la fois.
- À 100 têtes, le battage démarre tout seul, baguettes en main.
- Le joueur s'assoit face au tamis ; clic gauche = deux coups.
- 5 clics → 1 pollen, 50 clics pour la fournée.
- Échap arrête ; « Reprendre le tamisage » continue plus tard.
- Les baguettes ne s'usent pas. Ramasser le tamis rend les têtes.
Presse
- « Presser du pollen » : choisir la variété, il faut 2 pollens.
- Caméra sur la presse ; clic gauche pour déposer chaque pollen dans le moule.
- Le personnage actionne la presse, la plaque apparaît.
- Retour annule avant le pressage, sans rien perdre.
Table · découpe
- « Détailler une plaque de shit ».
- Maintenez clic gauche pour prendre le couteau, déplacez la souris.
- Tenez la lame 1,5 s sur le trait : la barrette se détache.
- 9 traits → 10 barrettes. On ne peut pas rater.
- Retour arrête : la plaque est conservée.
Table · mise en pochon
- « Mettre du shit en pochon » : jusqu'à 10 barrettes par passe.
- Le curseur apparaît. Maintenez clic gauche pour glisser un sachet sur l'emplacement du centre.
- Amenez une barrette au contact du sachet : le pochon se remplit et part sur la pile.
- Retour arrête : les pochons déjà remplis sont gardés.
Le vendeur
Un PNJ vend le matériel de la filière. Il ne rachète rien. Il apparaît à l'approche des joueurs, pendant ses heures d'ouverture.
| Réglage | Effet |
|---|---|
enabled | false retire le vendeur, si vous vendez le matériel ailleurs. |
coords | Position des pieds et orientation, en vec4(x, y, z, cap). |
currency | Objet ox_inventory servant de monnaie : 'black_money' ou 'money'. |
hours | Heure du jeu. open = close : toujours ouvert. open > close : ouvert la nuit, par exemple 22 → 6. |
items | Objets vendus, prix et stock (-1 = illimité). Un stock limité se reconstitue à chaque redémarrage. |
| Objet vendu | Prix par défaut |
|---|---|
Tamis à pollenyf_tamis | 3 000 $ |
Baguettes de battageyf_baguettes | 500 $ |
Presse à pollenyf_presse | 15 000 $ |
Table de découpeyf_table | 5 000 $ |
Pochon videyf_sachet_vide | 2 $ |
Le modèle du PNJ (s_m_y_dealer_01) n'est pas modifiable.
Avec kq_weed
YF-Kush fonctionne seul. Si votre serveur utilise kq_weed, trois réglages suffisent pour que ses têtes, son sachet et sa table servent à la filière.
Config.tamisItems = {
og_kush = { 'kq_weed_bud_og_kush' },
purple_haze = { 'kq_weed_bud_purple_haze' },
white_widow = { 'kq_weed_bud_white_widow' },
blue_dream = { 'kq_weed_bud_blue_dream' },
}
Config.emptyBag = 'kq_weed_bag_empty'
Config.kqWeedTables = truePour accepter à la fois les têtes de kq_weed et celles du script, listez les deux noms : og_kush = { 'kq_weed_bud_og_kush', 'yf_tete_og_kush' }.
Langues
Tous les textes affichés aux joueurs sont dans locales/, lisible et modifiable. Pour ajouter une langue :
- copiez
locales/en.luaenlocales/de.lua; - remplacez
Locales['en']parLocales['de']et traduisez les phrases ; - gardez les
%det%sdans le même ordre ; - mettez
Config.locale = 'de'.
Une phrase absente retombe sur le français. Les noms des objets, eux, se traduisent dans items.lua.
Dépannage
Les objets n'ont pas d'image dans l'inventaire
Vérifiez que les 25 fichiers yf_*.png sont dans ox_inventory/web/images, puis videz le cache de FiveM : ox_inventory garde souvent les anciennes images.
Le vendeur refuse l'achat alors que j'ai de l'argent sale
Le nom de l'objet d'argent sale dépend du serveur. Sur QBCore, c'est souvent markedbills. Indiquez le bon nom dans Config.shop.currency.
Le tamis refuse mes têtes de weed
Ajoutez les noms exacts de vos têtes dans Config.tamisItems, sous la bonne variété. Les noms doivent exister dans ox_inventory.
La table de kq_weed ne propose rien
Mettez Config.kqWeedTables = true et vérifiez que kq_weed est bien démarré.
Le joueur tamise sans animation
Le serveur tourne sur un build trop ancien. Passez sv_enforceGameBuild à 2545 ou plus.
Impossible de ramasser un poste
Quelqu'un s'en sert : un poste ne se ramasse pas pendant une fournée, un pressage, une découpe ou une mise en pochon. Il faut aussi avoir la place dans l'inventaire.
Un texte s'affiche sous la forme d'un code, par exemple cond_count
La phrase manque dans votre fichier de langue. Ajoutez la clé dans locales/, en copiant la ligne depuis fr.lua.
Fichiers modifiables
Le script est protégé par l'escrow de Cfx.re. Restent lisibles et modifiables : shared/config.lua, le dossier locales/ et install.sql.