Accueil › Documentation › Personnalisation · origen_inventory
origen_inventory propose trois moyens de personnalisation :
origen_customitems).config/
├── hooks.lua -- Hook examples (server + client)
modules/
├── customItems.lua -- AddCustomItem / EditCustomItem / RemoveCustomItem implementation
client/functions/
├── f_hooks.lua -- registerHook / removeHooks (client-side)
└── f_worldpoint.lua -- World point exportsLes hooks permettent à d’autres ressources de s’abonner aux événements de l’inventaire et, soit de consulter les données, soit de les modifier ou d’annuler l’action. Le client et le serveur exposent le même nom d’export : registerHook.
registerHook(event, callback, options?) → string (id)Enregistre un callback pour le hook indiqué.
local hookId = exports.origen_inventory:registerHook('createItem', function(payload)
-- payload is hook-specific
return payload.metadata
end)| Paramètre | Type | Description |
|---|---|---|
event |
string |
Nom du hook à écouter. |
callback |
function |
Appelé avec les données du hook. |
options |
table |
Configuration facultative du hook. |
removeHooks(id) → voidSupprime un hook enregistré précédemment à partir de son id.
exports.origen_inventory:removeHooks(hookId)createItemDéclenché lorsqu’un objet est en cours de création (par exemple lors de l’initialisation des métadonnées). Renvoie la table metadata (éventuellement modifiée) pour appliquer les changements.
Données reçues
| Champ | Type | Description |
|---|---|---|
item |
table |
Définition de l’objet en cours de création. |
metadata |
table |
Table de métadonnées modifiable. |
Exemple : attribuer un id de sac unique lors de la création d’un paperbag :
exports.origen_inventory:registerHook('createItem', function(payload)
local metadata = payload.metadata
local item = payload.item
if item.name == 'paperbag' and not metadata.bagId then
metadata.bagId = math.random(1000, 9999)
end
return metadata -- you MUST return the metadata table
end)Si tu enregistres le hook createItem et que tu oublies de renvoyer la table de métadonnées, l’objet sera créé avec des métadonnées vides.
worldpoint-interact-inDéclenché lorsque le joueur entre dans le rayon d’interaction d’un point du monde.
Données reçues
| Champ | Type | Description |
|---|---|---|
type |
string |
Type de point (stash, shop, crafting, drop, personnalisé). |
id |
string |
Id unique du point. |
location |
vector3 |
Coordonnées du point. |
label |
string |
Libellé affiché. |
worldpoint-interact-outDéclenché lorsque le joueur quitte le rayon d’interaction d’un point du monde. Reçoit les mêmes données que le précédent.
worldpoint-area-nearbyDéclenché lorsque le joueur entre dans la zone plus large (zoneDistance) autour d’un stash ou d’un autre point disposant d’une zone configurée. Sert à charger à la demande des interfaces coûteuses.
Exemple : journaliser chaque entrée dans un stash :
exports.origen_inventory:registerHook('worldpoint-interact-in', function(payload)
if payload.type ~= 'stash' then return end
print(('Player entered stash %s at %s'):format(payload.id, payload.label))
end)Les objets personnalisés sont stockés dans la table origen_customitems et rechargés au démarrage de la ressource. Les trois opérations s’exécutent côté serveur.
AddCustomItem(data) → booleanAjoute un nouvel objet personnalisé. Renvoie false si l’objet existe déjà.
exports.origen_inventory:AddCustomItem({
name = 'origen_compass',
label = 'Compass',
weight = 200,
type = 'item',
image = 'origen_compass.png',
description = 'Always points to the next adventure.',
rarity = 'rare',
stack = false,
close = true,
decay = nil,
server = nil,
client = nil,
buttons = {},
})| Champ | Type | Description |
|---|---|---|
name |
string |
Clé unique de l’objet. Si elle est vide, elle est générée à partir de label. |
label |
string |
Libellé affiché. |
weight |
number |
Poids de l’objet. |
type |
string |
Type d’objet (item, weapon, etc.). |
image |
string |
Nom du fichier image (il doit exister dans le dossier d’images de ton inventaire). |
description |
string |
Description de l’objet. |
rarity |
string |
Libellé de rareté (facultatif). |
stack |
boolean |
Indique si l’objet est empilable. La valeur par défaut est true. |
close |
boolean |
Ferme l’inventaire à l’utilisation. La valeur par défaut est true. |
decay |
number |
Durée de détérioration (facultatif). |
server |
string|table |
Définition du callback serveur (facultatif). |
client |
string|table |
Définition du callback client (facultatif). |
buttons |
table |
Boutons du menu contextuel (facultatif). |
consume / uses |
number |
Nombre d’utilisations avant que l’objet soit consommé. |
L’objet est ajouté au dictionnaire en mémoire et synchronisé automatiquement avec tous les clients.
EditCustomItem(data) → boolean, error?Modifie un objet personnalisé existant. Le champ name est obligatoire et doit correspondre à un objet existant.
exports.origen_inventory:EditCustomItem({
name = 'origen_compass',
label = 'Magic Compass',
weight = 150,
})Renvoie false accompagné d’une chaîne d’erreur lorsque :
data est absent ou n’a pas de name ('invalid_item_data').'item_not_found').RemoveCustomItem(name) → booleanSupprime un objet de la base de données et de l’inventaire de tous les joueurs. Déclenche un événement interne de synchronisation pour que les clients abandonnent leurs références en cache.
exports.origen_inventory:RemoveCustomItem('origen_compass')Cette action est destructive. L’objet est retiré de tous les inventaires actifs et de la table origen_customitems.
Les points du monde affichent des lieux interactifs sur la carte et y réagissent. Ils font fonctionner les stashes, les boutiques, les tables de crafting, les drops et tout point personnalisé que tu enregistres.
CreateWorldPoint(pointId, pointData, pointType) → void (client)Enregistre un seul point en cours d’exécution.
exports.origen_inventory:CreateWorldPoint('my_lab_table', {
label = 'Underground Lab',
location = vector3(2541.92, 4684.31, 34.05),
-- marker = { type = 27, size = vector3(0.3, 0.3, 0.3), color = vector4(255, 0, 0, 150) },
-- sprite = { enabled = true, icon = 'lucide:flask-conical' },
}, 'crafting')RemoveWorldPoint(pointId) → void (client)Supprime un point à partir de son id.
SetWorldPointEnabled(pointId, enabled) → void (client)Active ou désactive un point existant sans le supprimer.
CreateBatchPoints(pointsData, pointType) → void (client)Enregistre plusieurs points en une seule fois.
exports.origen_inventory:CreateBatchPoints({
['stash_1'] = { label = 'Stash 1', location = vector3(...) },
['stash_2'] = { label = 'Stash 2', location = vector3(...) },
}, 'stash')ClearPoints(pointType) → void (client)Supprime tous les points d’un type.
RefreshAllPoints(pointType) → void (client)Recharge tous les points d’un type. Utile après avoir modifié les permissions de métier du joueur.
GetPoints(pointType) → table (client)Renvoie la liste des points d’un type.
GetPointCount(pointType) → number (client)Renvoie le nombre de points enregistrés d’un type.
HasPoint(pointId) → boolean (client)Renvoie true si un point avec cet id existe.
RegisterPointType(pointType, config) → void (client)Enregistre un type de point entièrement nouveau, avec son propre sprite, son propre marqueur et ses propres hooks. Utilise-le quand tu veux ajouter une nouvelle catégorie à côté de stash, shop, crafting et drop.
LoadPointType(pointType) → void (client)Recharge la configuration d’un type de point.
GetWorldPointManager() → table (client)Renvoie l’objet gestionnaire de points sous-jacent. Réservé à un usage avancé.
Le helper SQL situé dans bridge/sql.lua fournit des fonctions indépendantes du framework que tous les sous-systèmes internes utilisent. En général, tu n’as pas à l’utiliser directement, mais son code source n’est pas obfusqué (il est hors du périmètre de escrow_ignore) et tes propres scripts peuvent l’encapsuler.