Biblioteca de shells (interiores) K4MB1 para Qbox: expõe funções que spawnam um shell numa coordenada, teleportam o jogador para dentro e devolvem os pontos de interesse do interior.
O fxmanifest.lua declara this_is_a_map 'yes' e registra o DLC_ITYP_REQUEST de starter_shells_k4mb1.ytyp — os shells da pasta stream/ ficam disponíveis automaticamente.
Para usar os exports de client/optional.lua, adicione os assets dos packs K4MB1 correspondentes ao servidor (ver Shells opcionais). Eles não acompanham este recurso.
A chave da tabela define o comportamento do export:
Chave string (ex.: 'GTAOHouseMid1') — interior de MLO/IPL já existente no mapa. As coordenadas do config são absolutas; nenhum objeto é criado, apenas teleporte e routing bucket.
Chave hash (ex.: `furnitured_midapart`) — shell de objeto. O servidor cria o objeto no Coords informado e as coordenadas do config são tratadas como offsets relativos a esse ponto.
client/optional.lua traz cerca de 100 exports adicionais (CreateMedium2, CreateMansion, CreateHighend1, CreateK4Garage1, CreateV2Modern3, ...) para os packs pagos da K4MB1. Os modelos não estão no stream/ deste recurso — os exports só funcionam se você adicionar os assets do pack ao servidor. Sem o modelo, o lib.requestModel trava a chamada.
Os packs referenciados no arquivo (cada bloco de exports tem o link em comentário):
Medium Housing V1 · Modern Housing V1 · Classic Housing V1 · Highend Housing V1 · Deluxe Housing V1 · Stash House · Garage · Office · Store · Warehouse · Highend Lab · Furnished Stash House · Furnished Housing · Furnished Motel · Furnished Modern Hotels · Drug Lab · Mansion Housing · Empty Hotel · Empty Motel · Default Shells V2 · Deluxe V2 · Highend V2 · Medium V2 · Modern V2 · Vinewood V2 · K4MB1 September Update
Todos os exports Create* de client/main.lua e client/optional.lua têm a mesma assinatura: recebem a coordenada de spawn e retornam { objects, POIOffsets }.
local result = exports.qbx_interior:CreateApartmentShell(vec4(x, y, z, h))local objects = result[1] -- lista de entidades criadas (para o despawn)local offsets = result[2] -- POIOffsets: exit (e clothes/stash/logout no CreateApartmentFurnished)
O shell é criado congelado na coordenada informada, a tela dá fade out/in e o jogador é teleportado para o ponto de saída (spawn + offset). Os POIOffsets são relativos ao ponto de spawn.
-- model aceita nome ou hashlocal result = exports.qbx_interior:CreateShell(spawn, exitXYZH, model)
exitXYZH deve ser uma tabela {x, y, z, h} (ex.: json.decode('{"x": 0.0, "y": 0.0, "z": 1.0, "h": 0.0}')).
Atenção: o CreateShell teleporta para um ponto fixo interno (+0.089, -2.677, +0.761, heading 270.76), não para o exitXYZH passado — este é apenas devolvido em POIOffsets.exit.
-- Interior com pontos de interesse (definido em config/server.lua > Apartments)local coords, shell = exports.qbx_interior:CreateDefaultApartment(source, apartmentName, routingBucket, coords)-- Interior simples (definido em config/server.lua > Interiors)local coords, shell = exports.qbx_interior:CreateDefaultInterior(source, interiorName, routingBucket, coords)
Ambos: fazem o fade de tela, teleportam o jogador, colocam o jogador (e o shell, quando criado) no routing bucket informado e retornam as coordenadas absolutas dos pontos de interesse. O segundo retorno (shell) só existe quando a chave é um hash de modelo. Passar um nome inexistente no config gera error.