Inicio › Documentación › 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.
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 hooksFramework.GetPlayerIdentifier() → string | nilDevuelve el identificador único del jugador local.
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.
Se usa cuando Config.ExternalInteractionSystem = true. Implementa estas funciones para usar ox_target o similar:
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) endCustom.OpenStash(id, data) — abre un alijoSe llama cuando Config.CustomInventory = true. Implementa aquí la lógica para abrir el alijo.
Custom.OpenStash = function(id, data)
-- data: { label, slots, weight }
endCustom.CanOpenStash(houseID, hasSecurity) → booleanControla el acceso a los alijos. Si la casa tiene la mejora storage_security, hasSecurity = true. Por defecto devuelve not hasSecurity.
Custom.Wardrobe(id)Abre el armario con el ID indicado. Se llama cuando Config.CustomClothing = true.
Custom.Wardrobe = function(id)
-- exports['origen_clothing']:openOutfitMenu(true, true)
endCustom.GiveVehicleKeys(vehicle, plate)Da las llaves del vehículo después de sacarlo del garaje. Implementa aquí tu sistema de llaves.
Custom.GiveVehicleKeys = function(vehicle, plate)
TriggerEvent("vehiclekeys:client:SetOwner", plate)
endCustom.GetVehicleMods(vehicle) / Custom.SetVehicleProperties(vehicle, props)Obtiene o establece las propiedades del vehículo. Por defecto delega en Config.Framework.
Custom.GetClosestVehicle(coords) → vehicle entityBusca 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.CanAccessHouse(houseID) → booleanControla 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() → booleanControla 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.Dispatch(coords)Envía un aviso de robo a la policía. Por defecto usa origen_police. Sobrescríbela cuando Config.Dispatch = 'custom'.
Custom.Dispatch = function(coords)
TriggerServerEvent("SendAlert:police", {
coords = coords,
type = 'GENERAL',
title = 'House robbery',
job = Config.PoliceJob,
})
endCustom.LockpickMinigame(advanced)Sobrescribe el minijuego de ganzúa cuando Config.Lockpick.customLockpickMinigame = true. Llama a LockpickResult(true/false) con el resultado.
Custom.LockpickMinigame = function(advanced)
local result = true -- your minigame result
LockpickResult(result)
endCustom.RaidSkillcheck() → booleanSe llama cuando la policía usa stormram para registrar una casa. Por defecto usa lib.skillCheck. Devuelve true si se supera.
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.
| 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.hasPermission(src, action) → boolean, stringComprueba 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.RegisterStash(id, data)Registra un alijo en el sistema de inventario activo. Se llama cuando un jugador entra en una casa.
Custom.RegisterStash = function(id, data)
-- data: { label, slots, weight }
-- exports.ox_inventory:RegisterStash(id, data.label, data.slots, data.weight)
endEstas 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 |
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 |