Conflitos — se outro recurso já adiciona os mesmos props ao door system, os portões podem ser registrados duas vezes com hashes diferentes. O Gate:New chama DoorSystemFindExistingDoor antes de criar, então portas já registradas são reaproveitadas em vez de duplicadas; ainda assim, evite dois recursos ajustando AutomaticRate do mesmo portão.
Arquivo: config/client.lua. A tabela Config é lida na inicialização e depois zerada da memória (Config = nil + collectgarbage()), então alterações exigem restart do recurso.
Campo
Tipo
Obrigatório
Descrição
Config.DefaultAutomaticDistance
número
Sim
Distância padrão de acionamento automático, usada quando o grupo não define options.distance. Padrão: 1.5
Config.DefaultAutomaticRate
número
Sim
Taxa padrão de abertura, usada quando o grupo não define options.rate. Padrão: 1.5
Config.Gates
tabela
Sim
Mapa [hash do modelo] = { options, locations }. A chave usa backticks ([`prop_sec_barrier_ld_01a`])
Confirme que o prop é de fato uma porta. Modelos parecidos podem não funcionar como porta — por exemplo, prop_sec_barier_02a tem aparência de cancela mas não é reconhecido pelo door system; o equivalente funcional é prop_sec_barrier_ld_02a.
Levante as coordenadas do prop no mapa com o CodeWalker.
Adicione o vector3 na lista locations do modelo correspondente em config/client.lua, ou crie uma nova entrada de modelo.
Comece com physicsController = false. Se o portão parar de responder ou perder o ajuste depois de um tempo, mude para true.
Na inicialização, cada modelo vira um GateGroup, e cada coordenada vira um Gate.
O Gate:New procura a porta existente com DoorSystemFindExistingDoor. Se não achar, registra uma nova com AddDoorToSystem usando um hash derivado do modelo e do índice (_GATE_<modelo>_CONTROLLER_<n>).
O Gate:Refresh aplica DoorSystemSetAutomaticDistance e DoorSystemSetAutomaticRate. É essa combinação que faz o portão passar a operar sozinho.
Grupos com physicsController = true rodam um loop a cada 2000 ms verificando DoorSystemGetIsPhysicsLoaded. Portões com física carregada entram no GateController, que reaplica distância e taxa a cada 100 ms. Portões sem física saem do controlador — assim o loop rápido só roda para o que está de fato perto do jogador.
cfx-anes-gates/├── client/│ ├── main.lua — cria um GateGroup por modelo e libera o Config da memória│ ├── gate.lua — classe Gate: registra a porta no door system e aplica distância/taxa│ ├── gate.group.lua — classe GateGroup: agrupa portões por modelo e roda o loop de física│ └── gate.controller.lua — GateController: loop de 100 ms que reaplica os ajustes nos portões em alcance├── config/│ └── client.lua — padrões globais e lista de modelos + coordenadas└── fxmanifest.lua