Pular para o conteúdo

Regras de Spawn de NPC

Visao Geral

Arquivos de regras de spawn vinculam roles de NPC a localizacoes e condicoes do mundo. O sistema possui tres mecanismos de spawn: Beacon spawns gerenciam pontos de spawn dinamicos vinculados a tags de ambiente com controles de ciclo de vida; World spawns sao tabelas mais simples vinculadas a tags de ambiente e janelas opcionais de horario do dia; Marker spawns sao colocados diretamente no mundo e referenciam nomes especificos de NPCs com timers de respawn.

Localizacao dos Arquivos

  • Assets/Server/NPC/Spawn/Beacons/**/*.json — Spawners por beacon
  • Assets/Server/NPC/Spawn/World/**/*.json — Spawners de ambiente do mundo
  • Assets/Server/NPC/Spawn/Markers/**/*.json — Spawners por marker posicionado
  • Assets/Server/NPC/Spawn/Suppression/**/*.json — Volumes de supressao de spawn

Como o Spawn de NPC Funciona

flowchart TD;
A[World Loads Chunk] --> B{Check Spawn Sources};
B --> C[Beacon Spawns];
B --> D[World Spawns];
B --> E[Marker Spawns];
C --> F["Environment<br>Matches?"];
F -->|"Yes"| G["Player in<br>Range?"];
F -->|"No"| Z[Skip];
G -->|"Yes"| H["Light Level<br>OK?"];
G -->|"No"| Z;
H -->|"Yes"| I[Select NPC by Weight];
H -->|"No"| Z;
D --> J["Environment<br>Matches?"];
J -->|"Yes"| K["DayTimeRange<br>OK?"];
J -->|"No"| Z;
K -->|"Yes"| L[Select NPC by Weight];
K -->|"No"| Z;
E --> M["Player Near<br>Marker?"];
M -->|"Yes"| N["Respawn Timer<br>Ready?"];
M -->|"No"| Z;
N -->|"Yes"| O[Spawn Specific NPC];
N -->|"No"| Z;
I --> P["MaxSpawnedNPCs<br>Reached?"];
P -->|"No"| Q[Spawn NPC];
P -->|"Yes"| Z;
L --> Q;
O --> Q;
Q --> R["Flock<br>Defined?"];
R -->|"Yes"| S["Spawn Group<br>Size: min-max"];
R -->|"No"| T[Spawn Single NPC];
style A fill:darkgreen,color:white;
style Q fill:rebeccapurple,color:white;
style Z fill:darkred,color:white;

Zonas de Supressao

flowchart LR;
A["NPC Tries to Spawn"] --> B["Inside Suppression<br>Volume?"];
B -->|"No"| C[Spawn Allowed];
B -->|"Yes"| D["NPC Group in<br>SuppressedGroups?"];
D -->|"No"| C;
D -->|"Yes"| E[Spawn Blocked];
style C fill:darkgreen,color:white;
style E fill:darkred,color:white;

Schema

Beacon Spawn

FieldTypeRequiredDefaultDescricao
Environmentsstring[]SimIDs de tags de ambiente onde este beacon esta ativo.
NPCsarraySimLista de entradas de NPC (veja a tabela de entrada de NPC abaixo).
MinDistanceFromPlayernumberNaoDistancia minima do jogador para spawnar, em blocos.
MaxSpawnedNPCsnumberNaoMaximo de NPCs vivos que este beacon mantera.
ConcurrentSpawnsRange[number, number]NaoMin/max de NPCs a spawnar em um unico evento de spawn.
SpawnAfterGameTimeRange[string, string]NaoFaixa de duracao ISO 8601 antes do primeiro spawn (ex: ["PT20M", "PT40M"]).
NPCIdleDespawnTimenumberNaoSegundos que um NPC ocioso persiste antes de desaparecer.
BeaconVacantDespawnGameTimestringNaoDuracao ISO 8601 — quanto tempo um beacon vazio espera antes de desaparecer.
BeaconRadiusnumberNaoRaio da area gerenciada pelo beacon, em blocos.
SpawnRadiusnumberNaoRaio dentro do qual os NPCs sao spawnados, em blocos.
TargetDistanceFromPlayernumberNaoDistancia ideal de spawn em relacao ao jogador.
LightRangesobjectNaoRestricoes de nivel de luz do bloco, ex: { "Light": [0, 2] }.

World Spawn

FieldTypeRequiredDefaultDescricao
Environmentsstring[]SimIDs de tags de ambiente onde esta tabela de spawn esta ativa.
NPCsarraySimLista de entradas de NPC (veja a tabela de entrada de NPC abaixo).
DayTimeRange[number, number]NaoFaixa de horas do jogo quando o spawn e permitido, ex: [6, 18] para apenas durante o dia.

Marker Spawn

FieldTypeRequiredDefaultDescricao
ModelstringSimO ID do modelo do marker (tipicamente "NPC_Spawn_Marker").
NPCsarraySimLista de entradas de NPC (veja a tabela de entrada de NPC abaixo).
ExclusionRadiusnumberNaoOutros markers dentro deste raio nao spawnarao tambem, em blocos.
RealtimeRespawnbooleanNaofalseSe true, NPCs respawnam em um timer de tempo real.
MaxDropHeightnumberNaoDistancia maxima acima do chao onde o NPC pode ser colocado.
DeactivationDistancenumberNaoDistancia do jogador na qual este marker para de simular, em blocos.

Volume de Supressao

FieldTypeRequiredDefaultDescricao
SuppressionRadiusnumberSimRaio da zona de supressao, em blocos.
SuppressedGroupsstring[]SimIDs de grupos de NPC suprimidos dentro desta zona (ex: ["Aggressive", "Passive"]).
SuppressSpawnMarkersbooleanNaofalseSe true, tambem suprime markers de spawn dentro da zona.

Entrada de NPC (usada no array NPCs)

FieldTypeRequiredDefaultDescricao
Id / NamestringSimID do role do NPC a spawnar. Beacons usam Id; markers usam Name.
WeightnumberNaoPeso relativo de spawn ao selecionar entre multiplos candidatos.
Flockstring | objectNaoID do grupo de bando (string) ou especificacao inline de tamanho de bando { "Size": [min, max] }.
SpawnBlockSetstringNaoTag de conjunto de blocos onde o NPC deve spawnar (ex: "Volcanic", "Portals_Oasis_Soil").
SpawnFluidTagstringNaoTag de fluido necessaria perto do ponto de spawn (ex: "Water").
RealtimeRespawnTimenumberNaoSegundos antes deste NPC respawnar (spawns por marker).
SpawnAfterGameTimestringNaoDuracao ISO 8601 antes desta entrada se tornar elegivel (ex: "P1D").

Exemplos

Beacon spawn (goblins de caverna)

{
"Environments": ["Env_Zone1_Caves_Goblins"],
"MinDistanceFromPlayer": 15,
"MaxSpawnedNPCs": 3,
"ConcurrentSpawnsRange": [1, 2],
"SpawnAfterGameTimeRange": ["PT20M", "PT40M"],
"NPCIdleDespawnTime": 60,
"BeaconVacantDespawnGameTime": "PT15M",
"BeaconRadius": 50,
"SpawnRadius": 40,
"TargetDistanceFromPlayer": 25,
"NPCs": [
{ "Weight": 60, "SpawnBlockSet": "Volcanic", "Id": "Goblin_Scrapper" },
{ "Weight": 20, "SpawnBlockSet": "Volcanic", "Id": "Goblin_Lobber" },
{ "Weight": 20, "SpawnBlockSet": "Volcanic", "Id": "Goblin_Miner" }
],
"LightRanges": {
"Light": [0, 2]
}
}

World spawn (animais de oasis, apenas de dia)

{
"Environments": ["Env_Portals_Oasis"],
"NPCs": [
{
"Weight": 15,
"SpawnBlockSet": "Portals_Oasis_Soil",
"SpawnFluidTag": "Water",
"Id": "Flamingo",
"Flock": "Group_Small"
},
{
"Weight": 10,
"SpawnBlockSet": "Portals_Oasis_Soil",
"Id": "Tortoise"
}
],
"DayTimeRange": [6, 18]
}

Marker spawn (urso, respawn em tempo real)

{
"Model": "NPC_Spawn_Marker",
"NPCs": [
{
"Name": "Bear_Grizzly",
"Weight": 100,
"RealtimeRespawnTime": 420
}
],
"ExclusionRadius": 20,
"RealtimeRespawn": true,
"MaxDropHeight": 4,
"DeactivationDistance": 150
}

Volume de supressao

{
"SuppressionRadius": 45,
"SuppressedGroups": ["Aggressive", "Passive", "Neutral"],
"SuppressSpawnMarkers": true
}

Paginas Relacionadas

  • NPC Roles — Arquivos de role referenciados por Id / Name nas entradas de spawn
  • NPC Groups — IDs de grupo usados em Flock e supressao
  • NPC Attitudes — Como NPCs spawnados se relacionam entre si