Objecthandling System
- Resource
fh_objecthandling- Version
- 2.0.0
- Framework
- ESX
Objecthandling lader spillere stille items op som rigtige props i verden og samle dem op igen. Andre scripts kan registrere deres egne objekttyper, så planter, crafting-borde, kasser og politiafspærring kører på samme system.
Installation
1. Start scriptet
Læg scriptet i resources, og tilføj det i server.cfg, efter ESX og ox-scripts:
ensure fh_objecthandlingTabellen object_handling_objects oprettes automatisk.
2. Tilføj items
Hver type skal have et item med knappen Placere. Tilføj dem i ox_inventory/data/items.lua. Det første ord i Place er itemets navn:
['beercase'] = {
label = 'Ølkasse',
weight = 100,
stack = false,
close = false,
buttons = {
{
label = 'Placere',
action = function(slot)
TriggerEvent('ox_inventory:closeInventory', true)
exports.fh_objecthandling:Place('beercase', slot)
end
},
},
},Scriptet har disse typer klar i config.lua: red_wine, beercase, craftingbench, policecone, policebarricade, policeroadsign, policetent og policespotlight.
Sådan bruges det
Giv dig selv et item, åbn inventaret og tryk på Placere.
| Tast | Handling |
|---|---|
E | Stil op |
| Scroll | Drej |
| Højreklik | Fortryd |
Props bliver stående efter genstart. Spillere samler dem op med ox_target.
Indstillinger
Indstillingerne ligger i config.lua.
| Indstilling | Standard | Beskrivelse |
|---|---|---|
Config.RenderDistance | 50 | Afstand i meter, hvor props bliver vist for spillere |
Config.MaxPlaceDistance | 5.0 | Hvor langt væk en spiller kan stille noget op |
Config.InteractDistance | 2.5 | Standardafstand til menuer og opsamling |
Tilføj dine egne objekter
Simple objekter tilføjer du i Config.Types:
Config.Types = {
-- Almindeligt objekt
red_wine = {
label = 'Flaske rødvin',
model = 'prop_wine_red',
pickup = 'Saml flasken op',
},
-- Kun for politiet
policecone = { label = 'Kegle', model = 'prop_roadcone02a', job = 'police', pickup = 'Fjern keglen' },
-- Gemmekasse med egne pladser
beercase = {
label = 'Ølkasse',
model = 'v_ret_ml_beerpis1',
pickup = 'Saml ølkassen op',
box = { slots = 10, maxWeight = 10000 },
},
}Husk, at hver type også skal have et item, som vist under Tilføj items.
| Felt | Beskrivelse |
|---|---|
label | Navnet i menuer |
item | Itemet, der stiller objektet op og fås tilbage. Standard er typens navn |
model | Modellen. En liste med flere navne bruger den første, der findes i spillet |
pickup | false, true eller teksten på knappen. Standard er Saml op |
job | Kun dette job må stille op og samle op |
distance | Hvor tæt spilleren skal stå |
box | Gør objektet til en kasse: { slots = 10, maxWeight = 10000 } |
options | Ekstra knapper, for eksempel { label = 'Åbn', icon = 'fa-solid fa-hammer', export = 'fh_crafting:OpenCrafting' } |
stages, stageKey | Skift model i stadier ud fra en værdi i objektets data |
data | Startdata eller en funktion, der returnerer dem |
For udviklere
Registrer en objekttype fra dit script
Registrer typen på serveren. Tilføj fh_objecthandling i din resources dependencies, og lyt på fh_objecthandling:ready, så typen kommer igen efter en genstart:
local function register()
exports.fh_objecthandling:RegisterType('weed_pot', {
label = 'Hashplante',
model = 'prop_weed_01',
data = { progress = 0 },
-- Opdater objektet på en timer
interval = 180,
tick = function(object)
return { data = { progress = object.data.progress + 5 } }
end,
-- Afvis placering eller opsamling med en begrundelse
canPlace = function(source, position, meta) return true end,
canPickup = function(source, object) return true end,
-- Menu, der bygges på serveren og vises med ox_lib
menuLabel = 'Se til planten',
menuIcon = 'fa-solid fa-seedling',
menu = function(source, object)
return {
title = 'Hashplante',
options = {
{ title = 'Vand planten', action = 'water' },
},
}
end,
actions = {
water = function(source, object, input)
return { message = 'Vandet', type = 'success', reopen = true }
end,
},
})
end
AddEventHandler('fh_objecthandling:ready', register)
CreateThread(function()
if GetResourceState('fh_objecthandling') == 'started' then register() end
end)Vigtigt
En action skal selv tjekke alt igen på serveren, for eksempel afstand og job.
Når den resource, der har registreret en type, stopper, forsvinder typen. Objekterne bliver stående, men kan ikke bruges, før typen er registreret igen.
Exports
| Export | Side | Beskrivelse |
|---|---|---|
RegisterType(key, def) | Server | Registrerer en objekttype |
GetObject(id) | Server | Giver en kopi af et objekt |
GetObjects(typeKey) | Server | Giver alle objekter, eventuelt kun af én type |
UpdateObject(id, changes) | Server | Ændrer data, meta eller model |
RemoveObject(id) | Server | Fjerner et objekt. Giver kun true én gang pr. objekt |
SpawnObject(typeKey, fields) | Server | Stiller et objekt op uden at tage et item. fields: position, heading, owner, data, meta |
Place(item, slot) | Klient | Starter placering af et item |
Ændringer
2.0.0 (1. november 2026)
- ESX-version med ox_inventory.
- Andre scripts kan registrere deres egne objekttyper med menuer, actions og timere.
Opgradering fra en ældre version
Config.Objects og CreateSpawnedObject findes ikke længere. Flyt dine objekter til Config.Types, og brug exports.fh_objecthandling:Place på item-knapperne. Databasen opdateres automatisk.