Criar NPCs
Coloque as definições em plugins/EliteMobs/npcs/, com nomes de ficheiro únicos incluindo .yml. Guarde o ficheiro e execute /em reload antes de colocar um NPC novo. Um jogador com elitemobs.place.npc pode usar /em place npc <npcfilename.yml> na posição e direção desejadas. Um ficheiro pode conter várias posições.
Reutilizar outro ficheiro de NPC
Um ficheiro de NPC pode partir de outro ficheiro de NPC com extends e alterar apenas o que for diferente:
extends: my_base_npc.yml
name: "&aSecond Guard"
spawnLocations:
- my_world,20,64,20,90,0
O ficheiro herda todos os valores da base e substitui as chaves que define. As secções aninhadas, como patrol, são combinadas chave a chave; uma lista, como dialog, substitui a lista da base por inteiro. Indique a base apenas pelo nome do ficheiro, sem caminho de pasta. Tem de ser outro ficheiro em npcs, incluindo as respetivas subpastas, e pode estender outra base.
isEnabled, spawnLocation e spawnLocations nunca são herdados, pelo que cada ficheiro mantém os seus próprios posicionamentos. Uma base com isEnabled: false pode servir de modelo: os ficheiros que a estendem continuam a ser carregados. O EliteMobs não escreve valores predefinidos num ficheiro que usa extends. Uma base em falta, um caminho em extends ou um ciclo de referências extends desativa o ficheiro com um aviso na consola. O editor de patrulhas usa extends quando separa um posicionamento de um ficheiro que tem vários.
Definições
isEnabled
Ativa a definição quando as configurações são carregadas. Recarregue depois de alterar. Um SCROLL_APPLIER também depende de useEliteItemScrolls ativado para aparecer.
| Chave | Valores | Predefinição |
|---|---|---|
isEnabled | Booleano | true |
Exemplo
isEnabled: true
name
Define o nome apresentado e aceita códigos de cor. O EliteMobs regista o texto no CSV de traduções e usa a tradução do idioma configurado quando disponível.
| Chave | Valores | Predefinição |
|---|---|---|
name | Texto | texto vazio |
Exemplo
name: "&aEnn Peecee"

Disposição das etiquetas
O nome e o cargo usam uma disposição fixa. Não existem ajustes nameplateScale ou nameplateLineGap por NPC. As etiquetas de NPCs comuns e disfarçados seguem a altura do corpo ou do disfarce. Os modelos compatíveis do FreeMinecraftModels gerem as suas próprias etiquetas; o ModelEngine mantém o seu próprio nome enquanto o EliteMobs apresenta o cargo. Os indicadores pessoais de missão ficam acima.
Com apostas ativadas, o NPC especial gambling_den_owner.yml acrescenta os ganhos da casa às mesmas etiquetas e as atualiza aproximadamente a cada segundo.
scale
Define a escala do aldeão subjacente pelo atributo de tamanho do Minecraft. Um modelo ou disfarce pode controlar o seu próprio tamanho visual; este ajuste não garante que a sua aparência acompanhe o aldeão.
| Chave | Valores | Predefinição |
|---|---|---|
scale | Multiplicador | 1.0 |
Ao escalar, 1.0 representa o tamanho predefinido. Para tornar a entidade maior, aumente o valor (por exemplo, 1.2). Para tornar a entidade menor, diminua o valor (por exemplo, 0.8).
Exemplo
scale: 1.2
role
Define a etiqueta de cargo abaixo do nome. É apenas visual, aceita códigos de cor e é registada no CSV de traduções.
| Chave | Valores | Predefinição |
|---|---|---|
role | Texto | texto vazio |
Exemplo
role: "&c<Red Fellow>"

profession
Define a profissão do aldeão e a sua aparência quando não usa disfarce nem modelo personalizado.
| Chave | Valores | Predefinição |
|---|---|---|
profession | Profissão | NITWIT |
Exemplo
profession: NITWIT

greetings
Define as saudações tentadas quando uma verificação deteta pela primeira vez o jogador dentro de activationRadius. Uma entrada aleatória aparece como balão flutuante, visível apenas para esse jogador por cerca de 5 segundos. A lista é registada no CSV de traduções. Falar exige canTalk e o fim do intervalo partilhado entre diálogos.
| Chave | Valores | Predefinição |
|---|---|---|
greetings | Lista de textos | nenhuma |
A saudação só é tentada ao detetar a entrada. Se o intervalo partilhado a bloquear, permanecer dentro do raio não repete a tentativa.
Exemplo
greetings:
- Hi there!
- Good day.

dialog
Define as falas em balões flutuantes. Cada tentativa escolhe uma entrada aleatoriamente, sem seguir a ordem da lista. A lista é registada no CSV de traduções.
O momento em que é disparada depende do interactionType:
- Os NPCs
CHATtentam falar ao interagir, normalmente com o botão direito. O FreeMinecraftModels também encaminha cliques esquerdos no modelo para o processamento de interações. - Outros tipos tentam dialogar nas verificações posteriores enquanto o jogador permanece dentro de
activationRadius; a primeira verificação tenta uma saudação.
Um \n literal divide o balão em linhas empilhadas. Preserve-o com aspas simples no YAML, ou escreva \\n entre aspas duplas. Isto também se aplica a saudações e despedidas.
| Chave | Valores | Predefinição |
|---|---|---|
dialog | Lista de textos | nenhuma |
Exemplo
dialog:
- I like apples!
- Sure is hot.

farewell
Define despedidas escolhidas aleatoriamente para balões flutuantes. A lista é registada no CSV de traduções.
| Chave | Valores | Predefinição |
|---|---|---|
farewell | Lista de textos | nenhuma |
Fechar qualquer ecrã de inventário com título não vazio tenta ativar as despedidas dos NPCs próximos. A procura estende-se por 5 blocos em cada eixo à volta do jogador, sem se limitar ao dono do menu aberto. Vários NPCs podem falar. Sair de activationRadius não provoca uma despedida.
Exemplo
farewell:
- Until next time!
- Bye!

canTalk
Controla os balões integrados. false suprime greetings, dialog e farewell, mas não desativa menus, comandos, scripts Lua, diálogos de missão, deteção de proximidade nem indicadores de missão.
| Chave | Valores | Predefinição |
|---|---|---|
canTalk | Booleano | true |
Exemplo
canTalk: true
activationRadius
Define o raio, em blocos, no qual um NPC pode detetar a aproximação de um jogador.
| Chave | Valores | Predefinição |
|---|---|---|
activationRadius | Decimal | 3.0 |
A verificação acontece a cada 100 ticks, cerca de 5 segundos, usando distância tridimensional sem verificar a linha de visão. Os NPCs parados podem olhar para jogadores, saudá-los ao entrar e dialogar nas verificações seguintes. 0 ou menos desativa estas interações, incluindo os hooks Lua de proximidade. Os indicadores de QUEST_GIVER e CUSTOM_QUEST_GIVER usam um raio independente de 30 blocos e podem aparecer com activationRadius: 0; refletem as missões disponíveis e prontas para entrega de cada jogador.
A verificação e os balões são suspensos enquanto a patrulha se move ou é editada. patrol.pauseNearPlayersRadius e patrol.faceNearbyPlayers controlam pausas e orientação perto de jogadores; consulte Patrulhas.
Exemplo
activationRadius: 3.0
scripts
Define os scripts Lua anexados a este NPC. Os ficheiros de script são carregados de plugins/EliteMobs/npc_scripts/. A extensão .lua é opcional - é acrescentada automaticamente se a omitir.
| Chave | Valores | Predefinição |
|---|---|---|
scripts | Lista de textos | nenhuma |
O motor Lua partilhado do MagmaCore aceita on_spawn, on_game_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter e on_zone_leave. O hook de tick dos NPCs é on_game_tick. Cada NPC tem instâncias próprias; prioridades menores executam primeiro. Um script com apenas o hook de tick precisa também de on_spawn, que pode estar vazio, para inicializar. Consulte Scripts Lua de NPC para a API e exemplos.
Um nome sem uma definição de script carregada correspondente é ignorado com aviso; o NPC aparece normalmente. Respeite maiúsculas e minúsculas e recarregue depois de editar os scripts.
Um diálogo de missão pode consumir o clique antes de on_npc_interact. Caso contrário, esse hook executa antes da interação configurada e não a cancela.
Exemplo
scripts:
- wave.lua
interactionType
Define o tipo de interação que o NPC fará.
| Chave | Valores | Predefinição |
|---|---|---|
interactionType | Especial [1] | NONE |
Exemplo
interactionType: TELEPORT_BACK
noPreviousLocationMessage
Mensagem de TELEPORT_BACK quando não existe um destino de retorno guardado. Esse destino é a origem registada por um teletransporte do EliteMobs a partir de fora de um mundo do EliteMobs; não é a última posição ao caminhar nem o local de morte. O retorno usa o processo normal do EliteMobs, com atraso e regras de cancelamento configurados. A mensagem aceita códigos de cor e é registada no CSV de traduções.
| Chave | Valores | Predefinição |
|---|---|---|
noPreviousLocationMessage | Texto | texto vazio |
Exemplo
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

timeout
Minutos até remover um NPC que apareceu. 0 ou menos desativa o temporizador. Isto não apaga a posição guardada nem desativa a definição: o NPC pode voltar ao recarregar, reiniciar ou restaurar o chunk.
Para remover uma posição, ative /em remove, golpeie o NPC e execute /em remove novamente para sair do modo. Requer elitemobs.remove. Em listas, remove a entrada correspondente; uma definição antiga com posição única é desativada. Ao migrar para spawnLocations, apague a chave antiga spawnLocation, ou ela poderá voltar a aplicar-se quando a lista ficar vazia.
| Chave | Valores | Predefinição |
|---|---|---|
timeout | Decimal | 0 (nunca) |
Exemplo
timeout: 0
questFileName
Lista ficheiros de plugins/EliteMobs/customquests/, incluindo .yml, para CUSTOM_QUEST_GIVER. A chave singular aceita uma lista. O menu oferece missões elegíveis e aceita entregas atribuídas ao nome de ficheiro deste NPC. Um NPC de entrega pode ter a lista de ofertas vazia. Todas as posições do mesmo ficheiro partilham essa identidade. Os requisitos e permissões individuais de cada missão continuam válidos.
| Chave | Valores | Predefinição |
|---|---|---|
questFileName | Lista de textos | nenhuma |
Exemplo
questFileName:
- my_quest_one.yml
- my_quest_two.yml
disguise
Define o disfarce e requer LibsDisguises. Um modelo personalizado carregado com sucesso tem prioridade.
| Chave | Valores | Predefinição |
|---|---|---|
disguise | Formato LibsDisguises | nenhum |
Exemplo
disguise: SKELETON

customDisguiseData
Define os dados para um disfarce personalizado do LibsDisguises.
| Chave | Valores | Predefinição |
|---|---|---|
customDisguiseData | Formato LibsDisguises | nenhum |
Exemplo
disguise: custom:my_cool_disguise_name
customDisguiseData: player my_cool_disguise_name setskin {"id":"364acb6d-9050-46f7-b5fb-f8c3fd83a6fc","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTYxMTk4ODA4Nzc1NSwKICAicHJvZmlsZUlkIiA6ICJkZGVkNTZlMWVmOGI0MGZlOGFkMTYyOTIwZjdhZWNkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaXNjb3JkQXBwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliYmVkODQzNWY4YmYyNzhhZmUyNmU2NGZkOTI2YjhiMzc3MzJkODhlMzM0ODk3ZGJkNTI3ZDU2ZmY5MTk5MGUiCiAgICB9CiAgfQp9","signature":"ujLq1joYVktuQAp1xpFKlxQFUVinSePiDBiVCAxxix/mA5vP86i/eAOfb1mtGjaAZ6sO0l2olbzvycnGXNBtbAxgqprguROXY4tpWiePVTDmy3iD4GdOCxHAkYLoyMV5qTT4SNsldUFFuND8GSEgbNMltKDLmhNKwzm08iCigPfpeuYpwljgJPxu6ka54PKNaQu4doI0ZDZXKqq4hPhR3Bs2Sz9MI0SmdmQWwcCzUz3DFdVno27fmQ6LwqmT+eSoOv0EttVG/XMaTYQ5lhBY61mqf6WlJyYVUSfjJk1AbYsctu7dWM+sbY8jFq5ljvXJGGr5TyKi+fs8vHy06Z2go20QgTYOw+caFxFijAS6fgm3oY57VEO/+/9OLHdD+Z9BrWqQWcIIrVeIfxjue/yt4pyeVv9jX59hjNFjhcPEwotkxJ+vZ96WlTLWDG4BiqauDr2VeGyLlVaygO9ZU0wwsN65iSh91GI3tMIA5wbDR0Hts/9ABvt9eafHbowS+4SZXN0i9mYnKg7op1eiB8nMEAGsPJg3DwsmUrh3ACAapQ6eYHiJpo59RXDqKlRcXwo7wsEFp//5LgQWbPj0NP3nxnywdpozqSAeq6236qlhE9BT9eiyJ41V9sMelYFEWMlUAltR40NdbIrHB0J3nmfuLJz44/sTwWf6P1khOy//XX0="}],"legacy":false}

customModel
Define um modelo do FreeMinecraftModels ou ModelEngine. Instale-o no fornecedor selecionado antes de indicar o ID. O FreeMinecraftModels tem preferência quando ambos estão disponíveis; um modelo FMM em falta não seleciona o ModelEngine. Se nenhum modelo carregar, o NPC usa o disfarce configurado ou a aparência normal de aldeão. Consulte Modelos personalizados.
| Chave | Valores | Predefinição |
|---|---|---|
customModel | Texto | nenhum |
Exemplo
customModel: MY_MODEL_ONE
Treinadores de classe e transporte
Use interactionType: CLASS_TRAINER com classRoot para escolher a ramificação de classe. Comece pelas definições incluídas class_trainer_*.yml. Provas e progressão são explicadas em Advanced Combat System.
Em interactionType: TRANSPORT, transportRoutes lista IDs de rotas sem .yml; clicar abre a seleção de destinos. Consulte Rotas de transporte.
arena
Define o nome do ficheiro da arena para a qual o NPC abrirá um menu (requer o interactionType ARENA_MASTER).
| Chave | Valores | Predefinição |
|---|---|---|
arena | Nome de ficheiro | nenhum |
Exemplo
arena: my_arena.yml
command
Comando para COMMAND. Executa como o jogador que clicou, no tick seguinte, com as suas permissões normais. Omita a barra inicial (/). Este campo não substitui marcadores do jogador automaticamente nem usa o formato de comandos de consola do EliteMobs.
| Chave | Valores | Predefinição |
|---|---|---|
command | Texto | nenhum |
Exemplo
command: say Look at me running a command, how cool!
![]()
spawnLocation
Define uma única localização de spawn para o NPC. Esta é a chave legada de localização única: só é lida quando o spawnLocations está em falta ou vazio. As novas localizações colocadas no jogo são escritas no spawnLocations, por isso prefira essa chave.
O formato recomendado é world,x,y,z,yaw,pitch. O mundo deve estar carregado; este ajuste não o carrega.
| Chave | Valores | Predefinição |
|---|---|---|
spawnLocation | Texto | nenhum |
Exemplo
spawnLocation: my_world,10,50,10,0,0
spawnLocations
Define várias posições para o mesmo NPC. /em place npc <npcfilename.yml> acrescenta a sua posição e direção, arredondadas a duas casas decimais, e define isEnabled: true. Uma posição serializada idêntica não cria outra entrada. Os NPCs são restaurados quando os seus chunks podem processar entidades.
O formato de cada entrada é world,x,y,z,yaw,pitch.
| Chave | Valores | Predefinição |
|---|---|---|
spawnLocations | Lista de textos | nenhuma |
Exemplo
spawnLocations:
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0
instanced
Define se o NPC deve ser instanciado (para uso em masmorras instanciadas). Quando definido como true, o NPC não é gerado no mundo do blueprint; em vez disso, é registado como um modelo (template) e clonado para cada instância de masmorra, com cada clone a existir no mundo de instância correspondente.
| Chave | Valores | Predefinição |
|---|---|---|
instanced | Booleano | false |
Exemplo
instanced: false
syncMovement
Define se o modelo personalizado do NPC deve ter o seu movimento sincronizado com a entidade subjacente. Isto só tem efeito quando o customModel está definido e o modelo está carregado - é ignorado para NPCs simples e para NPCs com LibsDisguises.
Uma patrol válida ativa a sincronização mesmo pausada ou com esta opção em false. O ajuste continua útil para modelos sem patrulha.
| Chave | Valores | Predefinição |
|---|---|---|
syncMovement | Booleano | true |
Exemplo
syncMovement: true
patrol
Adiciona ao NPC uma rota nativa com pesquisa automática de caminhos. Os nós são deslocamentos desde o local de aparecimento definido para o NPC, ou coordenadas exatas no seu mundo com patrol.relative: false. Os troços longos são resolvidos e divididos automaticamente, e as patrulhas não forçam o carregamento de chunks. patrol.startNodeWaitSeconds faz o NPC descansar no primeiro nó uma vez por volta, patrol.pauseNearPlayersRadius (exclusivo de NPCs) pausa-o perto de jogadores, e patrol.faceNearbyPlayers vira-o para eles durante a pausa. Consulte Patrulhas de NPCs e bosses para o esquema, o editor, o comportamento de longa distância e os controlos Lua.
Exemplo de Configuração de NPC
isEnabled: true
name: "&cRed Rubin"
role: "&a<Generic NPC>"
profession: NITWIT
greetings:
- Hiya!
- Hello!
dialog:
- Great conversation!
- Pleasure talking with you!
farewell:
- Goodbye!
- Laters!
canTalk: true
activationRadius: 4
interactionType: CHAT
timeout: 0
spawnLocations:
- my_world,584,55,127,90,10

Especial [1]
A seguir está a lista de tipos de interação de NPC válidos:
| Tipo | Descrição |
|---|---|
GUILD_GREETER | Abre os bónus de habilidades de armas. Requer elitemobs.skill.npc. |
CLASS_TRAINER | Abre a ramificação de classRoot. Requer elitemobs.command. |
TRANSPORT | Abre os destinos de transportRoutes. |
CHAT | Tenta uma fala aleatória de dialog ao interagir. |
CUSTOM_SHOP | Abre a loja personalizada. Requer elitemobs.shop.custom.npc. |
PROCEDURALLY_GENERATED_SHOP | Abre a loja gerada. Requer elitemobs.shop.dynamic.npc. |
BAR | Não implementado. Informa o jogador de que o recurso virá em breve. |
ARENA | Não faz nada. Use ARENA_MASTER em vez disso. |
QUEST_GIVER | Abre missões geradas. Requer elitemobs.quest.npc. |
CUSTOM_QUEST_GIVER | Oferece missões elegíveis de questFileName e aceita entregas atribuídas. |
NONE | Sem ação integrada; scripts, proximidade e diálogos de missão ainda podem executar. |
SELL | Abre vendas. Requer elitemobs.shop.sell.npc. |
TELEPORT_BACK | Usa o retorno guardado pelo EliteMobs. Requer elitemobs.back.npc. |
SCRAPPER | Abre sucata. Requer elitemobs.scrap.npc. |
REPAIRMAN | Abre reparos. Requer elitemobs.repair.npc. |
ENCHANTER | Abre encantamentos. Requer elitemobs.enchant.npc. |
REFINER | SUBSTITUÍDO - Informa o jogador de que o recurso foi substituído; os administradores são instruídos a remover o NPC |
SMELTER | SUBSTITUÍDO - Informa o jogador de que o recurso foi substituído; os administradores são instruídos a remover o NPC |
ENHANCER | SUBSTITUÍDO - Informa o jogador de que o recurso foi substituído; os administradores são instruídos a remover o NPC |
UNBINDER | Abre desvinculação. Requer elitemobs.unbind.npc. |
ARENA_MASTER | Abre o menu da arena para a arena definida em arena |
COMMAND | Executa o comando definido em command |
SCROLL_APPLIER | Abre pergaminhos de item de elite. Requer elitemobs.scroll.npc; não aparece com useEliteItemScrolls desativado. |
ARROW_SHOP | Abre a loja de flechas. Requer elitemobs.shop.arrow.npc. |
GAMBLING_BLACKJACK | Abre blackjack. Requer elitemobs.gambling.npc. |
GAMBLING_COINFLIP | Abre cara ou coroa. Requer elitemobs.gambling.npc. |
GAMBLING_SLOTS | Abre as slots. Requer elitemobs.gambling.npc. |
GAMBLING_HIGHERLOWER | Abre maior/menor. Requer elitemobs.gambling.npc. |
Para mais informações sobre o que o SCRAPPER e tipos de interação semelhantes fazem, clique aqui.
Notas sobre o comportamento dos NPCs
O comportamento integrado também inclui:
- Movimento: normalmente ficam parados e olham para jogadores próximos. Patrulhas e scripts podem movê-los; a patrulha controla a rota em vez do comportamento normal do aldeão.
- Ordem de interação: um diálogo de missão pode consumir o clique antes de Lua e da ação integrada. Caso contrário, Lua executa primeiro, seguido da ação e das respetivas verificações de permissões. Uma proteção de um tick impede interações repetidas do mesmo jogador entre NPCs. Editar uma patrulha bloqueia interações; o seu movimento normal não.
- Proteção: os corpos não colidem normalmente. O EliteMobs cancela dano, transformações de aldeão e a abertura do comércio normal.
- Etiquetas: nome e cargo usam a disposição fixa descrita acima. Os NPCs comuns e disfarçados usam a sua altura atual; mudar a escala também pode deslocar as etiquetas. Os modelos FMM compatíveis gerem nome e cargo em conjunto.
- Bedrock: a apresentação depende da integração ativa de modelos e etiquetas. O renderizador atual não usa a chave mantida
bedrockNPCRoleYOffset. - Intervalo de diálogo: cada NPC partilha uma espera de 3 segundos entre todos os jogadores. Uma saudação para um pode impedir a de outro nesse intervalo. Os balões individuais desaparecem após cerca de 5 segundos.
- Invisibilidade: Um NPC sob o efeito de poção de invisibilidade não mostrará bolhas de chat.
- Chunks: os NPCs desaparecem quando o chunk descarrega e voltam quando ele pode processar entidades. As suas entidades não são guardadas no mundo; as posições vêm das definições.
- Renomeação: cliques direitos normais no aldeão com uma etiqueta de nome na mão principal são cancelados com uma mensagem. Os modelos usam os seus próprios callbacks; o FreeMinecraftModels encaminha cliques esquerdos e direitos para o processamento de interações do NPC.
