Inicio › Documentación › Personalización · origen_housing

Personalización · origen_housing

La carpeta custom/ te permite integrar cualquier framework, inventario, sistema de ropa, sistema de llaves, garaje, despacho y sincronización del clima sin tocar el núcleo. Todos los ficheros son escrow_ignore: sobreviven a las actualizaciones.

text
custom/
├── client/
│   ├── framework.lua   — player identifier
│   ├── notify.lua      — notifications, draw text, external interactions
│   ├── inventory.lua   — stash opening and access gate
│   ├── clothing.lua    — wardrobe
│   ├── garages.lua     — keys, vehicle mods, custom garage
│   ├── house.lua       — access gate, enter/exit hooks
│   ├── robbery.lua     — dispatch alert, lockpick minigame
│   ├── raid.lua        — raid skill check
│   └── weather.lua     — weather sync pause/resume
└── server/
    ├── framework.lua   — identifier, name, job, money, items, police count
    ├── permissions.lua — permission check
    ├── inventory.lua   — stash registration
    ├── garages.lua     — vehicle queries
    └── house.lua       — purchase, delete, upgrade, furniture hooks

custom/client/framework.lua

Framework.GetPlayerIdentifier() → string | nil

Devuelve el identificador único del jugador local.


custom/client/notify.lua

Custom.Notify(text, type, length)

Muestra una notificación. Por defecto: lib.notify. Sobrescríbela cuando Config.CustomNotify = true.

Custom.DrawText(text, key) / Custom.HideText()

Muestra u oculta el texto de ayuda de interacción. Sobrescríbelas cuando Config.CustomDrawText = true.

Sistema de interacción externo

Se usa cuando Config.ExternalInteractionSystem = true. Implementa estas funciones para usar ox_target o similar:

lua
Custom.CreateCoordsInteraction = function(id, coords, drawDistance, distance, inVehicle, label, onSelect)
    -- e.g. exports.ox_target:addCoords(...)
end
 
Custom.RemoveCoordsInteraction = function(id, coords) end
 
Custom.CreateEntityInteraction = function(id, type, entity, drawDistance, distance, label, onSelect) end
 
Custom.RemoveEntityInteraction = function(id, entity) end

custom/client/inventory.lua

Custom.OpenStash(id, data) — abre un alijo

Se llama cuando Config.CustomInventory = true. Implementa aquí la lógica para abrir el alijo.

lua
Custom.OpenStash = function(id, data)
    -- data: { label, slots, weight }
end

Custom.CanOpenStash(houseID, hasSecurity) → boolean

Controla el acceso a los alijos. Si la casa tiene la mejora storage_security, hasSecurity = true. Por defecto devuelve not hasSecurity.


custom/client/clothing.lua

Custom.Wardrobe(id)

Abre el armario con el ID indicado. Se llama cuando Config.CustomClothing = true.

lua
Custom.Wardrobe = function(id)
    -- exports['origen_clothing']:openOutfitMenu(true, true)
end

custom/client/garages.lua

Custom.GiveVehicleKeys(vehicle, plate)

Da las llaves del vehículo después de sacarlo del garaje. Implementa aquí tu sistema de llaves.

lua
Custom.GiveVehicleKeys = function(vehicle, plate)
    TriggerEvent("vehiclekeys:client:SetOwner", plate)
end

Custom.GetVehicleMods(vehicle) / Custom.SetVehicleProperties(vehicle, props)

Obtiene o establece las propiedades del vehículo. Por defecto delega en Config.Framework.

Custom.GetClosestVehicle(coords) → vehicle entity

Busca el vehículo más cercano a unas coordenadas dadas.

Custom.OpenCustomGarage(houseID, garageType, coords)

Abre un sistema de garajes personalizado. Se llama cuando Config.CustomGarage = true.

Custom.OnEnterGarage(houseID) / Custom.OnExitGarage(houseID)

Hooks que se lanzan cuando el jugador entra o sale del interior del garaje integrado.


custom/client/house.lua

Custom.CanAccessHouse(houseID) → boolean

Controla la entrada a una casa. Devuelve false para bloquear el acceso.

Custom.OnEnterHouse(houseID) / Custom.OnExitHouse(houseID)

Se lanzan cuando el jugador entra o sale de una casa.

Custom.OnNearbyEntryPoint(houseID, distance, isOwned, data)

Se lanza en cada tick mientras el jugador está cerca de un punto de entrada.

Custom.CanOpenHouseMenu() → boolean

Controla la apertura del menú de gestión dentro de la casa.

Custom.OnFreecam(state)

Se lanza cuando se activa o desactiva la cámara libre (usada durante la colocación o previsualización de la casa).


custom/client/robbery.lua

Custom.Dispatch(coords)

Envía un aviso de robo a la policía. Por defecto usa origen_police. Sobrescríbela cuando Config.Dispatch = 'custom'.

lua
Custom.Dispatch = function(coords)
    TriggerServerEvent("SendAlert:police", {
        coords = coords,
        type   = 'GENERAL',
        title  = 'House robbery',
        job    = Config.PoliceJob,
    })
end

Custom.LockpickMinigame(advanced)

Sobrescribe el minijuego de ganzúa cuando Config.Lockpick.customLockpickMinigame = true. Llama a LockpickResult(true/false) con el resultado.

lua
Custom.LockpickMinigame = function(advanced)
    local result = true  -- your minigame result
    LockpickResult(result)
end

custom/client/raid.lua

Custom.RaidSkillcheck() → boolean

Se llama cuando la policía usa stormram para registrar una casa. Por defecto usa lib.skillCheck. Devuelve true si se supera.


custom/client/weather.lua

Custom.DisableWeatherSync() / Custom.EnableWeatherSync()

Se llaman al entrar o salir de un interior shell. Pausa o reanuda aquí tu recurso de sincronización del clima.


custom/server/framework.lua

Función Devuelve Descripción
Framework.GetIdentifier(source) string | nil Identificador único del jugador
Framework.GetPlayerName(source) string | nil Nombre completo del jugador
Framework.GetPlayerJob(source) { name, grade } Trabajo y rango del jugador
Framework.GetMoney(source, method) number Saldo para el método de pago indicado
Framework.RemoveMoney(source, amount, method) — Descuenta dinero
Framework.Removeitem(source, itemName, amount) — Quita un objeto del inventario
Framework.GetGroup(source) string Grupo de permisos del jugador
Framework.GetPoliceCount() number Agentes actualmente de servicio

custom/server/permissions.lua

Custom.hasPermission(src, action) → boolean, string

Comprueba si un jugador puede realizar una acción ('create', 'delete', 'edit'). Comprueba primero los permisos por trabajo, luego los permisos ace y después los grupos del framework.


custom/server/inventory.lua

Custom.RegisterStash(id, data)

Registra un alijo en el sistema de inventario activo. Se llama cuando un jugador entra en una casa.

lua
Custom.RegisterStash = function(id, data)
    -- data: { label, slots, weight }
    -- exports.ox_inventory:RegisterStash(id, data.label, data.slots, data.weight)
end

custom/server/garages.lua

Estas funciones usan automáticamente Config.Columns para construir consultas válidas para cualquier framework:

Función Devuelve Descripción
Custom.GetOwnerIdentifierByPlate(plate) string | false Identificador del propietario de una matrícula
Custom.UpdateGarageVehicle(plate, keep, garage, mods, cb) — Guarda o recupera un vehículo
Custom.GetVehiclesFromGarage(garage_id) table[] Todos los vehículos guardados en un garaje

custom/server/house.lua

Hooks de evento que se lanzan en momentos clave. Todos están vacíos por defecto: añade tu lógica personalizada:

Función Se lanza cuando
Custom.OnBuyHouse(src, data) Un jugador compra una casa
Custom.OnDeleteHouse(src, data) Se elimina una casa
Custom.OnBuyUpgrade(src, data) Un jugador compra una mejora de casa
Custom.OnBuyFurniture(src, data) Un jugador compra un mueble
Custom.OnDeleteFurniture(src, data) Se elimina un mueble
Custom.OnStartBuilding(data) Una casa empieza su fase de construcción
Custom.OnTryBuyObject(src, data) → boolean Antes de una compra — devuelve false para bloquearla