> For the complete documentation index, see [llms.txt](https://bsensei-script.gitbook.io/bsensei-script-documentation-officiel-fivem/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bsensei-script.gitbook.io/bsensei-script-documentation-officiel-fivem/systemes-and-gestion/bsensei-annonce-entreprise-systeme-dannonce-style/systeme-de-notifications.md).

# Système de notifications

## 🔔 Système de notifications

**BSensei Annonces Entreprises** utilise les notifications natives d’**ESX Legacy** pour informer les joueurs.

Les textes affichés sont entièrement personnalisables depuis le fichier `config.lua`.

***

### 📁 Localisation des fichiers

Les textes des notifications se trouvent ici :

```
BSensei_annonces/config.lua
```

Les notifications sont déclenchées depuis :

```
BSensei_annonces/client.lua
```

Après chaque modification, redémarre la ressource :

```
restart BSensei_annonces
```

***

### 🟦 Notifications ESX

Dans sa configuration d’origine, le script utilise les notifications natives d’ESX :

```lua
ESX.ShowNotification(message)
```

Aucune ressource de notification supplémentaire n’est nécessaire.

Assure-toi simplement que `es_extended` démarre avant le script :

```
ensure es_extended
ensure BSensei_annonces
```

***

### 💬 Textes des notifications

Les principaux messages sont regroupés dans cette section :

```lua
Config.Text = {
    Cooldown = "⏳ Tu dois attendre encore %s secondes avant de refaire une annonce.",
    NotAllowed = "❌ Ton entreprise ne peut pas faire d’annonces.",
    Cancel = "Annonce annulée.",
    NoMessage = "Tu dois écrire un message avant d’envoyer ton annonce."
}
```

Tu peux modifier librement les textes placés entre guillemets.

⚠️ Ne modifie pas les noms placés à gauche, comme `Cooldown` ou `NotAllowed`.

***

### ⏳ Notification de cooldown

Cette notification apparaît lorsqu’un joueur tente de publier une nouvelle annonce trop rapidement :

```lua
Cooldown = "⏳ Tu dois attendre encore %s secondes avant de refaire une annonce."
```

Le `%s` est remplacé automatiquement par le nombre de secondes restantes.

Exemple affiché :

```
⏳ Tu dois attendre encore 145 secondes avant de refaire une annonce.
```

Exemple personnalisé :

```lua
Cooldown = "⏳ Le service de communication sera disponible dans %s secondes."
```

⚠️ Conserve obligatoirement le `%s`.

***

### 🚫 Entreprise non autorisée

Cette notification apparaît lorsque le métier du joueur n’est pas présent dans `Config.Jobs` :

```lua
NotAllowed = "❌ Ton entreprise ne peut pas faire d’annonces."
```

Exemple personnalisé :

```lua
NotAllowed = "❌ Votre entreprise ne possède pas l’autorisation de publier une annonce."
```

Pour autoriser une entreprise, ajoute son métier dans :

```lua
Config.Jobs = {
}
```

***

### ❌ Annonce annulée

Cette notification apparaît lorsque le joueur ferme ou annule la création de son annonce :

```lua
Cancel = "Annonce annulée."
```

Exemple personnalisé :

```lua
Cancel = "La création de l’annonce a été annulée."
```

***

### 📝 Message vide

Cette notification apparaît lorsqu’un joueur tente d’envoyer une annonce sans avoir écrit de texte :

```lua
NoMessage = "Tu dois écrire un message avant d’envoyer ton annonce."
```

Exemple personnalisé :

```lua
NoMessage = "❌ Veuillez rédiger un message avant de publier votre annonce."
```

***

### 📢 Affichage de l’annonce

L’annonce envoyée n’utilise pas une notification ESX classique.

Elle est affichée grâce à l’interface NUI du script afin de présenter :

* le logo de l’entreprise ;
* le nom de l’entreprise ;
* le message rédigé ;
* les emojis ;
* la mise en forme du texte ;
* les couleurs sélectionnées ;
* le son de notification.

L’affichage est envoyé à tous les joueurs connectés.

***

### 🔊 Son de l’annonce

Le son joué lors de l’apparition d’une annonce se trouve dans :

```
BSensei_annonces/html/sounds/
```

Exemple :

```
BSensei_annonces/html/sounds/notification.mp3
```

Si le son ne fonctionne pas, vérifie :

* que le fichier existe ;
* que son nom est correctement écrit ;
* qu’il est déclaré dans l’interface ;
* que son format est compatible ;
* que le volume de l’interface FiveM n’est pas coupé.

Formats conseillés :

```
.mp3
.ogg
.wav
```

***

### 🛠️ Utiliser un autre système de notifications

La version d’origine utilise :

```lua
ESX.ShowNotification(message)
```

Pour utiliser un autre système, les appels de notification doivent être remplacés dans la partie modifiable du fichier client.

#### Exemple avec `ox_lib`

```lua
lib.notify({
    title = "Annonces Entreprises",
    description = message,
    type = notifyType or "inform",
    duration = 5000
})
```

Ordre conseillé :

```
ensure ox_lib
ensure es_extended
ensure BSensei_annonces
```

***

### 🟢 Exemple avec `okokNotify`

```lua
exports["okokNotify"]:Alert(
    "Annonces Entreprises",
    message,
    5000,
    notifyType or "info"
)
```

Ordre conseillé :

```
ensure okokNotify
ensure es_extended
ensure BSensei_annonces
```

***

### 🎨 Types de notifications

Selon le système personnalisé utilisé, tu peux attribuer différents types :

```
inform
success
error
warning
```

Exemples conseillés :

| Situation                | Type      |
| ------------------------ | --------- |
| Cooldown actif           | `warning` |
| Entreprise non autorisée | `error`   |
| Message vide             | `error`   |
| Annonce annulée          | `inform`  |
| Annonce envoyée          | `success` |

⚠️ Les noms des types peuvent varier selon ton système de notifications.

***

### 🧰 Exemple de fonction personnalisée

Tu peux centraliser les notifications dans une fonction modifiable :

```lua
local function Notify(message, notifyType)
    ESX.ShowNotification(message)
end
```

Exemple avec `ox_lib` :

```lua
local function Notify(message, notifyType)
    lib.notify({
        title = "Annonces Entreprises",
        description = message,
        type = notifyType or "inform",
        duration = 5000,
        position = "top-right"
    })
end
```

Les appels peuvent ensuite utiliser :

```lua
Notify(Config.Text.NotAllowed, "error")
```

```lua
Notify(Config.Text.NoMessage, "error")
```

```lua
Notify(Config.Text.Cancel, "inform")
```

💡 Ne modifie pas les événements NUI ou les événements réseau uniquement pour changer le système de notifications.

***

### ⚠️ Erreurs à éviter

* Ne supprime pas le `%s` de la notification de cooldown
* Ne renomme pas les clés présentes dans `Config.Text`
* Vérifie que `es_extended` démarre avant le script
* Ne sélectionne pas un système personnalisé sans installer sa ressource
* Ne modifie pas les événements servant à diffuser les annonces
* Ne confonds pas les notifications ESX avec l’affichage NUI des annonces
* Redémarre la ressource après chaque modification

***

### 🧪 Vérification des notifications

Après une modification, utilise :

```
restart BSensei_annonces
```

Teste ensuite les situations suivantes :

1. Utiliser `/annonce` avec un métier non autorisé
2. Fermer le menu sans envoyer d’annonce
3. Essayer d’envoyer un message vide
4. Envoyer deux annonces pendant le cooldown
5. Vérifier l’affichage de l’annonce chez plusieurs joueurs
6. Vérifier le son de l’annonce
7. Contrôler la console F8

***

➡️ **Étape suivante : Dépendances nécessaires**


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://bsensei-script.gitbook.io/bsensei-script-documentation-officiel-fivem/systemes-and-gestion/bsensei-annonce-entreprise-systeme-dannonce-style/systeme-de-notifications.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
