Nouveau : YF-Kush, notre premier script FiveM →
La FactorY Discord
Documentation des scripts

YF-Kush : documentation

YF-Kush transforme les têtes de weed en haschich, en quatre gestes joués à la main : tamiser, presser, découper, mettre en pochon. Chaque poste a ses animations, ses objets 3D et son mini-jeu, sans interface qui masque l'action.

v1.0.0ox_inventoryox_targetsans framework

YF-Kush – 48 €

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

RessourceRôle
ox_libMenus, saisies, notifications, échanges client-serveur.
ox_inventoryTous les objets, l'argent du vendeur et les images.
ox_targetInteractions avec les postes et le vendeur.
oxmysqlSauvegarde des tamis, presses et tables posés.
Build de jeu 2545 minimum

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.

  1. Déposer la ressource

    Récupérez YF-Kush sur le portail Cfx.re (voir Récupérer ses achats). Copiez le dossier yf-kush dans vos ressources, sans le renommer : la version protégée est liée à ce nom. Puis ajoutez-le à votre server.cfg, après ses dépendances.

    server.cfg
    ensure ox_lib
    ensure oxmysql
    ensure ox_inventory
    ensure ox_target
    ensure yf-kush
  2. Créer les tables SQL

    Exécutez install.sql sur votre base. Il crée yf_kush_tamis, yf_kush_presses et yf_kush_tables. Le script peut être relancé sans risque.

  3. Déclarer les objets

    Ajoutez le bloc de la section Objets à la fin de ox_inventory/data/items.lua, avant la dernière accolade.

  4. Copier les images

    Copiez les 25 images yf_*.png du dossier install/images dans ox_inventory/web/images.

  5. Régler le config

    Ouvrez shared/config.lua : langue, têtes acceptées, sachet, tables de kq_weed et vendeur. Détail dans Configuration.

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

ox_inventory/data/items.lua
-- 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,
},
ObjetRôlePoids
Tamis à pollen
yf_tamis
Poste posable : tamisage8 000 g
Baguettes de battage
yf_baguettes
Nécessaires pour battre le tamis500 g
Presse à pollen
yf_presse
Poste posable : pressage10 000 g
Table de découpe
yf_table
Poste posable : découpe et mise en pochon15 000 g
Pochon vide
yf_sachet_vide
Consommé à la mise en pochon1 g
Tête de OG Kush
yf_tete_og_kush
Entre dans le tamis2 g
Tête de Purple Haze
yf_tete_purple_haze
Entre dans le tamis2 g
Tête de White Widow
yf_tete_white_widow
Entre dans le tamis2 g
Tête de Blue Dream
yf_tete_blue_dream
Entre dans le tamis2 g
Pollen [OG Kush]
yf_pollen_og_kush
Sort du tamis50 g
Pollen [Purple Haze]
yf_pollen_purple_haze
Sort du tamis50 g
Pollen [White Widow]
yf_pollen_white_widow
Sort du tamis50 g
Pollen [Blue Dream]
yf_pollen_blue_dream
Sort du tamis50 g
Plaque de shit [OG Kush]
yf_plaque_og_kush
Sort de la presse100 g
Plaque de shit [Purple Haze]
yf_plaque_purple_haze
Sort de la presse100 g
Plaque de shit [White Widow]
yf_plaque_white_widow
Sort de la presse100 g
Plaque de shit [Blue Dream]
yf_plaque_blue_dream
Sort de la presse100 g
Barrette de shit [OG Kush]
yf_barrette_og_kush
Sort de la découpe10 g
Barrette de shit [Purple Haze]
yf_barrette_purple_haze
Sort de la découpe10 g
Barrette de shit [White Widow]
yf_barrette_white_widow
Sort de la découpe10 g
Barrette de shit [Blue Dream]
yf_barrette_blue_dream
Sort de la découpe10 g
Pochon de shit [OG Kush]
yf_pochon_og_kush
Produit final, à vendre11 g
Pochon de shit [Purple Haze]
yf_pochon_purple_haze
Produit final, à vendre11 g
Pochon de shit [White Widow]
yf_pochon_white_widow
Produit final, à vendre11 g
Pochon de shit [Blue Dream]
yf_pochon_blue_dream
Produit final, à vendre11 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églageDéfautEffet
Config.locale'fr'Langue des textes affichés aux joueurs : le nom d'un fichier du dossier locales/. Fournis : 'fr', 'en'.
Config.tamisItemsyf_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.kqWeedTablesfalsetrue : 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.shopLe vendeur de matériel : voir Le vendeur.
shared/config.lua
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.

100têtesdans le tamis2 g / unité
10pollens10 têtes → 1 pollen50 g / unité
5plaques2 pollens → 1 plaque100 g / unité
50barrettes1 plaque → 10 barrettes10 g / unité
50pochons1 barrette + 1 sachet11 g / unité
La revente n'est pas incluse

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.
yf_tamis · yf_baguettes

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

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

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.
yf_table · yf_sachet_vide

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églageEffet
enabledfalse retire le vendeur, si vous vendez le matériel ailleurs.
coordsPosition des pieds et orientation, en vec4(x, y, z, cap).
currencyObjet ox_inventory servant de monnaie : 'black_money' ou 'money'.
hoursHeure du jeu. open = close : toujours ouvert. open > close : ouvert la nuit, par exemple 22 → 6.
itemsObjets vendus, prix et stock (-1 = illimité). Un stock limité se reconstitue à chaque redémarrage.
Objet venduPrix par défaut
Tamis à pollen
yf_tamis
3 000 $
Baguettes de battage
yf_baguettes
500 $
Presse à pollen
yf_presse
15 000 $
Table de découpe
yf_table
5 000 $
Pochon vide
yf_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.

shared/config.lua
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 = true

Pour 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.lua en locales/de.lua ;
  • remplacez Locales['en'] par Locales['de'] et traduisez les phrases ;
  • gardez les %d et %s dans 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.

  1. Rejoignez le Discord La FactorY.
  2. Ouvrez un ticket en indiquant le produit.
  3. L'équipe vous répond rapidement pour finaliser l'achat.
Ouvrir Discord