Scripts recommandés
Comment un script gratuit entre dans la section Recommended scripts du panneau d’administration.
Le tableau de bord du panneau d’administration a une section Recommended scripts : des scripts gratuits qui valent la peine d’être installés sur un serveur AI Core. Chacun n’apparaît que tant qu’il convient au serveur (aucun script de téléphone ne tourne : un téléphone est recommandé ; le script tourne déjà : sa carte disparaît), et ceux qui apparaissent sont aussi écrits une fois dans la console du serveur 15 secondes après le démarrage. Le propriétaire masque une carte avec son X et la fait revenir dans l’onglet General, carte Recommendations.
Conditions
- Il est gratuit. La carte affiche un badge Free.
- Il passe par AI Core, pas par un seul framework ou un seul script. Tout ce que le script partage avec d’autres scripts passe par les couches et les exports d’AI Core, pour que chaque script
ai-*, le pont ESX / QB / Qbox et les autres scripts du propriétaire fonctionnent avec lui. Par exemple :- donner et retirer des clés de véhicule passe par la couche des clés (lib
vehicleKeys.give/vehicleKeys.remove, exportsGiveVehicleKeys/RemoveVehicleKeys), jamais par les exports d’un script de clés ; - appliquer une apparence et recharger le skin passent par la couche d’apparence (
appearance.apply,appearance.reloadSkin) ; - les objets passent par la couche d’inventaire (
inventory.addItem, ouexports['ai-core']:AddItem(source, 'bread', 2)depuis Lua) ; - le carburant, les portes, les garages, le téléphone et les alertes police (
dispatch.alert) passent de la même façon par leurs couches.
- donner et retirer des clés de véhicule passe par la couche des clés (lib
- Si sa catégorie a une couche, il y a un adaptateur. Un script d’inventaire, de clés de véhicule, de vêtements, de carburant, de serrures de porte, de garage, de téléphone, de dispatch, de banque, de factures ou médical a besoin d’un adaptateur dans cette couche, pour que les autres scripts l’atteignent. Un script qui répond à une API que la couche lit déjà en demande moins : un script de carburant avec les exports client façon LegacyFuel
GetFuel(vehicle)/SetFuel(vehicle, level)est une ligne dans la liste de la couche carburant.
Les couches et les scripts qu’elles prennent en charge : Couches et pont, Compatibilité, et une note par couche dans docs/compat/ du dépôt du serveur.
Être listé
Ajouter l’entrée
Forkez aifivem/ai-core et ajoutez une entrée à la liste RECOMMENDATIONS dans resource/server/recommendations/index.ts :
{
id: "my-garbagejob",
title: "ADMIN_REC_MY_GARBAGEJOB",
desc: "ADMIN_REC_MY_GARBAGEJOB_DESC",
url: "https://example.com/my-garbagejob",
free: true,
// apparaît tant que le script ne tourne pas
shows: (runs) => !runs("my-garbagejob"),
},| Champ | Contenu |
|---|---|
id | Le nom de ressource du script. Une carte masquée l’enregistre, il fait donc de 2 à 64 lettres minuscules, chiffres, _ ou -. |
title, desc | Clés de langue d’ai-core : le nom du script et une ligne qui dit pourquoi le serveur le veut. |
url | La page où le propriétaire obtient le script. |
free | true. |
shows | Quand la carte apparaît. runs(resource) vaut true tant que cette ressource est démarrée et ne s’arrête pas. Une condition peut aussi interroger une couche, comme l’entrée du téléphone : shows: () => phones.active === null (aucun téléphone ne tourne). |
AI Core revérifie les conditions quand une ressource démarre ou s’arrête, quand la couche téléphone change et quand les paramètres changent. Une condition sur une autre couche branche aussi le changement de cette couche sur recommendations.refresh(), comme le fait la fin du fichier pour le téléphone (phones.onSwitch).
Ajouter les deux textes
Dans locales/en.json, à côté des autres clés ADMIN_REC_* :
"ADMIN_REC_MY_GARBAGEJOB": "My Garbage Job",
"ADMIN_REC_MY_GARBAGEJOB_DESC": "Garbage routes with pay per stop; items and vehicle keys go through ai-core's layers."Anglais uniquement : les autres langues s’ajoutent par-dessus en.json.
Ajouter l’adaptateur, si votre catégorie a une couche
Dans la même pull request :
- le fichier d’adaptateur dans le dossier
adapters/de la couche :resource/server/<layer>/adapters/<resource>.ts, plusresource/client/<layer>/adapters/<resource>.tsquand le script n’a qu’une API client. Copiez l’adaptateur d’un script semblable ; - sa ligne dans la liste des adaptateurs de la couche :
resource/server/<layer>/registry.ts, ou leindex.tsde la couche quand elle n’a pas deregistry.ts(phone, medical, prison, world).
Ouvrez ensuite une deuxième pull request sur aifivem/aicore-server qui ajoute le script à la note de la couche docs/compat/<layer>.md (par exemple vehicle-keys.md, phone.md) : version testée, statut et limites connues.
Ouvrir la pull request
Dans ai-core, lancez bun install, puis bun run typecheck, bun run lint et bun run build ; les trois doivent passer. Donnez à la pull request un titre Conventional Commit en anglais, par exemple feat(recommendations): recommend my-garbagejob. Les mainteneurs la relisent : ils vérifient que le script est gratuit et passe par les couches, puis la fusionnent ; la carte arrive avec la prochaine version d’ai-core.