Início › Documentação › Personalização · origen_housing

Personalização · origen_housing

A pasta custom/ permite-te integrar qualquer framework, inventário, sistema de roupa, sistema de chaves, garagem, despacho e sincronização de meteorologia sem tocar no núcleo. Todos os ficheiros são escrow_ignore: sobrevivem às atualizações.

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

Devolve o identificador único do jogador local.


custom/client/notify.lua

Custom.Notify(text, type, length)

Mostra uma notificação. Por omissão: lib.notify. Substitui-a quando Config.CustomNotify = true.

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

Mostra ou esconde o texto de ajuda de interação. Substitui-as quando Config.CustomDrawText = true.

Sistema de interação externo

Usado quando Config.ExternalInteractionSystem = true. Implementa estas funções para usares o ox_target ou semelhante:

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 uma arrecadação

Chamada quando Config.CustomInventory = true. Implementa aqui a lógica para abrir a arrecadação.

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

Custom.CanOpenStash(houseID, hasSecurity) → boolean

Controla o acesso às arrecadações. Se a casa tiver a melhoria storage_security, hasSecurity = true. Por omissão devolve not hasSecurity.


custom/client/clothing.lua

Custom.Wardrobe(id)

Abre o roupeiro com o ID indicado. Chamada quando Config.CustomClothing = true.

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

custom/client/garages.lua

Custom.GiveVehicleKeys(vehicle, plate)

Dá as chaves do veículo depois de o retirar da garagem. Implementa aqui o teu sistema de chaves.

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

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

Obtém ou define as propriedades do veículo. Por omissão delega em Config.Framework.

Custom.GetClosestVehicle(coords) → vehicle entity

Procura o veículo mais próximo de umas coordenadas dadas.

Custom.OpenCustomGarage(houseID, garageType, coords)

Abre um sistema de garagens personalizado. Chamada quando Config.CustomGarage = true.

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

Hooks disparados quando o jogador entra ou sai do interior da garagem integrada.


custom/client/house.lua

Custom.CanAccessHouse(houseID) → boolean

Controla a entrada numa casa. Devolve false para bloquear o acesso.

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

Disparadas quando o jogador entra ou sai de uma casa.

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

Disparada a cada tick enquanto o jogador está perto de um ponto de entrada.

Custom.CanOpenHouseMenu() → boolean

Controla a abertura do menu de gestão dentro da casa.

Custom.OnFreecam(state)

Disparada quando a câmara livre (usada durante a colocação ou pré-visualização da casa) é ativada ou desativada.


custom/client/robbery.lua

Custom.Dispatch(coords)

Envia um alerta de assalto à polícia. Por omissão usa o origen_police. Substitui-a quando 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)

Substitui o minijogo de gazua quando Config.Lockpick.customLockpickMinigame = true. Chama LockpickResult(true/false) com o resultado.

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

custom/client/raid.lua

Custom.RaidSkillcheck() → boolean

Chamada quando a polícia usa stormram para fazer uma rusga a uma casa. Por omissão usa lib.skillCheck. Devolve true se for superado.


custom/client/weather.lua

Custom.DisableWeatherSync() / Custom.EnableWeatherSync()

Chamadas ao entrar ou sair de um interior shell. Pausa ou retoma aqui o teu recurso de sincronização de meteorologia.


custom/server/framework.lua

Função Devolve Descrição
Framework.GetIdentifier(source) string | nil Identificador único do jogador
Framework.GetPlayerName(source) string | nil Nome completo do jogador
Framework.GetPlayerJob(source) { name, grade } Trabalho e grau do jogador
Framework.GetMoney(source, method) number Saldo para o método de pagamento indicado
Framework.RemoveMoney(source, amount, method) — Desconta dinheiro
Framework.Removeitem(source, itemName, amount) — Remove um item do inventário
Framework.GetGroup(source) string Grupo de permissões do jogador
Framework.GetPoliceCount() number Agentes atualmente em serviço

custom/server/permissions.lua

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

Verifica se um jogador pode realizar uma ação ('create', 'delete', 'edit'). Verifica primeiro as permissões por trabalho, depois as permissões ace e por fim os grupos da framework.


custom/server/inventory.lua

Custom.RegisterStash(id, data)

Regista uma arrecadação no sistema de inventário ativo. Chamada quando um jogador entra numa 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 funções usam automaticamente Config.Columns para construir consultas válidas para qualquer framework:

Função Devolve Descrição
Custom.GetOwnerIdentifierByPlate(plate) string | false Identificador do proprietário de uma matrícula
Custom.UpdateGarageVehicle(plate, keep, garage, mods, cb) — Guarda ou recupera um veículo
Custom.GetVehiclesFromGarage(garage_id) table[] Todos os veículos guardados numa garagem

custom/server/house.lua

Hooks de evento disparados em momentos-chave. Todos estão vazios por omissão: adiciona a tua lógica personalizada:

Função Disparada quando
Custom.OnBuyHouse(src, data) Um jogador compra uma casa
Custom.OnDeleteHouse(src, data) Uma casa é eliminada
Custom.OnBuyUpgrade(src, data) Um jogador compra uma melhoria de casa
Custom.OnBuyFurniture(src, data) Um jogador compra um móvel
Custom.OnDeleteFurniture(src, data) Um móvel é eliminado
Custom.OnStartBuilding(data) Uma casa começa a fase de construção
Custom.OnTryBuyObject(src, data) → boolean Antes de uma compra — devolve false para a bloquear