Teleporte - zerodawnbr/zerodawntoolbox GitHub Wiki

O teleporte é o processo de mover instantaneamente um jogador, objeto ou entidade de uma posição a outra dentro do mapa, sem percorrer fisicamente o espaço entre os pontos.
Em jogos como DayZ, ele é usado para transporte rápido, administração de servidores, eventos, ou sistemas de acesso restrito a locais específicos.
O teleporte é um sistema modular projetado para definir e gerenciar múltiplos grupos de teleporte independentes no servidor.
Cada grupo possui destinos, objetos ativadores e permissões personalizados, permitindo controle granular sobre quem pode se teletransportar e para onde.
Para utilizar o teleporte, o jogador precisará de um cartão de acesso. Uma vez usado, o cartão é destruído e não poderá mais ser utilizado. Então o jogador precisar conseguir outro para continuar viajando pelo mapa usando teleporte.
Principais Componentes Lógicos:
-
Grupos (Maps): Conjuntos de destinos, objetos ativadores e permissões definidos no
Config.json. - Permissão (m_steamIDs): Filtra quais jogadores podem interagir com os objetos de um grupo.
- Ação Condicional: A ação "TELEPORTAR" só aparece se o jogador tiver permissão para o grupo exato ao qual o objeto está vinculado.
- Apenas uma viagem por cartão: Só é possível viajar pelo mapa utilizando cartão de viagem, porém, só funciona uma vez por viagem.
O arquivo de configuração principal gerencia as configurações globais e a matriz de grupos de teleporte.
| Chave | Tipo | Descrição | Exemplo |
|---|---|---|---|
| m_isEnable | int |
Ativa ou desativa o mod. 1 para ativo. |
1 |
| m_reloadCommands | array<string> |
Comandos de chat para recarregar as configurações em tempo real (requer admin). | ["\\telereload", "!telereload"] |
| m_messageCountdown | string |
Mensagem exibida ao jogador quando de Contagem regressiva. | "Aguarde:" |
| m_messageMaxPlayer | string |
Mensagem exibida quando o mapa de destino atingiu o limite de jogadores. | "Máximo de jogadores no mapa" |
| m_messageNoCard | string |
Mensagem avisando que o jogador precisa do cartão para acionar o teleporte | "Voce precisa de um cartão ZDBRCard em mãos para usar o teleporte." |
Cada objeto na matriz Maps representa um grupo de teleporte completo e isolado.
| Chave | Tipo | Descrição | Exemplo |
|---|---|---|---|
| m_mapName | string |
Nome do grupo, exibido no menu de teleporte. | "Grupo 1" |
| m_maxPlayer | int |
Limite de jogadores para este grupo. | 10 |
| m_useCard | int |
Define se precisa ou não do cartão de teleporte. Se 1 = obrigatório o uso, 0 = Passe livre, desde que o atributo m_steamIDs esteja vazio ou com o Steam ID do jogador |
1 |
| m_countdown | int |
Contagem regressiva para uso do teleporte em minutos. | 30 |
| m_active | int |
Ativa/desativa este grupo. 1 para ativo. |
1 |
| m_originalIndex | int |
Sequencial de grupos criados. Quando o arquivo json é criado, inicia com -1, mas deve ser alterado e inicializado com 0. Se tiver 5 grupos, inicia em 0,1,2,3,4. | 0 |
O atributo m_originalIndex é importante na criação dos grupos de teleporte, sempre comece com 0. Não mude a ordem e não pule a sequencia.
O sequencial correto é sempre de 0 (zero) até
Para 10 mapas, os valores devem ser: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Define os pontos de spawn que o jogador pode selecionar no menu.
| Chave | Descrição |
|---|---|
| m_name | Nome que aparece na lista de seleção. |
| m_description | Descrição exibida quando o destino é selecionado no menu. |
| m_position | Coordenadas [X, Y, Z] exatas do destino do teleporte. |
Define os objetos estáticos que o jogador deve interagir para abrir o menu.
| Chave | Descrição |
|---|---|
| m_classType | Classname do objeto a ser spawnado no mundo (ex: bldr_TrailMap_Enoch). |
| m_position | Coordenadas [X, Y, Z] de spawn do objeto ativador. |
| m_orientation | Vetor de orientação [Pitch, Yaw, Roll] do objeto. |
Lógica de Vinculação: O servidor associa o índice do grupo na matriz Maps (ex: 0 para "Grupo 1", 1 para "Grupo2") à variável ZeroDawnBRTeleporterID do objeto no mundo (BuildingBase.c e PlayerBase.c).
Controla quem pode ver e usar os objetos ativadores deste grupo.
| Condição | Efeito |
|---|---|
"m_steamIDs": [] |
Acesso Livre: O grupo está aberto a todos os jogadores. |
"m_steamIDs": ["ID1", "ID2"] |
Acesso Restrito: O grupo está acessível somente aos jogadores cujos SteamID64 estão listados. |
-
Recarregar Configurações: Utilize os comandos de reload definidos no
Config.json(ex:\telereload). Isso é essencial para aplicar alterações emm_steamIDsou nos limites de jogadores/contagem regressiva sem reiniciar o servidor. -
Limpeza de Permissão: Se a lista
m_steamIDsde um grupo for alterada para remover o jogador, o sistema cliente/servidor é projetado para limpar a lista de mapas permitidos e remover a ação "TELEPORTAR" para esse grupo, resolvendo problemas de dessincronização após reloads.
{
"m_version": "1.2",
"m_info": "Teleportation system used within the map.",
"m_isEnable": 1,
"m_reloadCommands": [
"\\telereload",
"!telereload"
],
"Maps": [
{
"m_mapName": "Grupo 1",
"m_maxPlayer": 10,
"m_countdown": 30,
"m_active": 1,
"m_locations": [
{
"m_name": "BALOTA",
"m_description": "Velha base aérea costeira, ponto de partida para muitos... e túmulo de outros tantos. Aviões caídos, destroços enferrujados e o cheiro salgado do mar criam uma atmosfera pesada. Balota é o limiar entre a esperança e o desespero.",
"m_position": [
4326.68994140625,
3.059999942779541,
2153.75
]
},
{
"m_name": "NOVODIMITROVSK",
"m_description": "A cidade dos gigantes. Prédios imensos, ruas desertas e ecos de uma civilização perdida. Novodimitrovsk é o paraíso para quem busca loot... e o inferno para quem não sabe o que está fazendo. Um labirinto urbano onde a morte ronda a cada esquina.",
"m_position": [
11622.400390625,
58.119998931884769,
14671.900390625
]
}
],
"m_Objects": [
{
"m_classType": "bldr_TrailMap_Enoch",
"m_position": [
11619.91015625,
59.150001525878909,
14669.8701171875
],
"m_orientation": [
140.3800048828125,
0.0,
0.0
]
},
{
"m_classType": "bldr_TrailMap_Enoch",
"m_position": [
4321.259765625,
4.25,
2151.5
],
"m_orientation": [
118.80000305175781,
0.0,
0.0
]
}
],
"m_steamIDs": ["76561198868988101"]
},
{
"m_mapName": "Grupo2",
"m_maxPlayer": 10,
"m_countdown": 30,
"m_active": 1,
"m_locations": [
{
"m_name": "AIRFIELD",
"m_description": "O lendário Airfield, símbolo da guerra e da decadência. O som do vento ecoa pelos hangares vazios e cada sombra parece esconder uma emboscada. Recursos militares valiosos, mas cada passo aqui pode ser o último — só os ousados sobrevivem neste campo amaldiçoado.",
"m_position": [
4943.81982421875,
333.8699951171875,
10409.849609375
]
},
{
"m_name": "STOROZH (ILHA DA PRISÃO)",
"m_description": "Antiga fortaleza transformada em prisão, agora isolada do continente. O som das ondas bate nas muralhas frias enquanto histórias de tortura e loucura ecoam nos corredores abandonados. Quem pisa aqui sente o peso do passado... e o olhar dos mortos.",
"m_position": [
2803.449951171875,
29.8799991607666,
1252.22998046875
]
}
],
"m_Objects": [
{
"m_classType": "bldr_TrailMap_Enoch",
"m_position": [
4942.18017578125,
335.0,
10408.740234375
],
"m_orientation": [
118.80000305175781,
0.0,
0.0
]
},
{
"m_classType": "bldr_TrailMap_Enoch",
"m_position": [
2794.85009765625,
30.780000686645509,
1272.3199462890626
],
"m_orientation": [
-46.790000915527347,
0.0,
0.0
]
}
],
"m_steamIDs": []
}
],
"m_messageCountdown": "Aguarde a próxima viagem em",
"m_messageMaxPlayer": "Máximo de jogadores no mapa",
"m_messageNoCard": "Voce precisa de um cartão ZDBRCard em mãos para usar o teleporte."
}