Início › Documentação › 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.
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 | nilDevolve o identificador único do jogador local.
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.
Usado quando Config.ExternalInteractionSystem = true. Implementa estas funções para usares o ox_target ou semelhante:
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 uma arrecadaçãoChamada quando Config.CustomInventory = true. Implementa aqui a lógica para abrir a arrecadação.
Custom.OpenStash = function(id, data)
-- data: { label, slots, weight }
endCustom.CanOpenStash(houseID, hasSecurity) → booleanControla o acesso às arrecadações. Se a casa tiver a melhoria storage_security, hasSecurity = true. Por omissão devolve not hasSecurity.
Custom.Wardrobe(id)Abre o roupeiro com o ID indicado. Chamada quando Config.CustomClothing = true.
Custom.Wardrobe = function(id)
-- exports['origen_clothing']:openOutfitMenu(true, true)
endCustom.GiveVehicleKeys(vehicle, plate)Dá as chaves do veículo depois de o retirar da garagem. Implementa aqui o teu sistema de chaves.
Custom.GiveVehicleKeys = function(vehicle, plate)
TriggerEvent("vehiclekeys:client:SetOwner", plate)
endCustom.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 entityProcura 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.CanAccessHouse(houseID) → booleanControla 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() → booleanControla 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.Dispatch(coords)Envia um alerta de assalto à polícia. Por omissão usa o origen_police. Substitui-a quando Config.Dispatch = 'custom'.
Custom.Dispatch = function(coords)
TriggerServerEvent("SendAlert:police", {
coords = coords,
type = 'GENERAL',
title = 'House robbery',
job = Config.PoliceJob,
})
endCustom.LockpickMinigame(advanced)Substitui o minijogo de gazua quando Config.Lockpick.customLockpickMinigame = true. Chama LockpickResult(true/false) com o resultado.
Custom.LockpickMinigame = function(advanced)
local result = true -- your minigame result
LockpickResult(result)
endCustom.RaidSkillcheck() → booleanChamada 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.DisableWeatherSync() / Custom.EnableWeatherSync()Chamadas ao entrar ou sair de um interior shell. Pausa ou retoma aqui o teu recurso de sincronização de meteorologia.
| 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.hasPermission(src, action) → boolean, stringVerifica 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.RegisterStash(id, data)Regista uma arrecadação no sistema de inventário ativo. Chamada quando um jogador entra numa casa.
Custom.RegisterStash = function(id, data)
-- data: { label, slots, weight }
-- exports.ox_inventory:RegisterStash(id, data.label, data.slots, data.weight)
endEstas 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 |
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 |