Pular para o conteúdo principal

Criar NPCs

webapp_banner.jpg

Configurações

isEnabled

Define se um NPC está ativado.

ChaveValoresPadrão
isEnabledBooleantrue
Exemplo
isEnabled: true

name

Define o nome de exibição de um NPC. Suporta Códigos de Cor e chaves de tradução para servidores multilíngues.

ChaveValoresPadrão
nameStringnenhum
Exemplo
name: "&aEnn Peecee"

create_npc_name.jpg


scale

Define a escala (tamanho) do NPC. Isto é aplicado através do atributo vanilla generic_scale na entidade subjacente.

ChaveValoresPadrão
scaleMultiplier1.0

Ao escalar, 1.0 representa o tamanho padrão. 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 o cargo (role) do NPC, sob o nome. Apenas visual. Suporta Códigos de Cor e chaves de tradução para servidores multilíngues.

ChaveValoresPadrão
roleStringnenhum
Exemplo
role: "&c<Red Fellow>"

create_npc_role.jpg


profession

Define a profissão do NPC, que define sua skin quando não está usando um disfarce.

ChaveValoresPadrão
professionProfessionNITWIT
Exemplo
profession: NITWIT

create_npc_profession.jpg


greetings

Define a lista de saudações que o NPC pode dizer quando um jogador entra pela primeira vez no seu activationRadius. Uma entrada é escolhida aleatoriamente e mostrada como uma bolha de chat flutuante acima do NPC (visível apenas para esse jogador, durante cerca de 5 segundos). Suporta chaves de tradução para servidores multilíngues.

ChaveValoresPadrão
greetingsString Listnenhum

Uma saudação só é disparada ao entrar no raio, e não repetidamente enquanto o jogador permanece dentro dele.

Exemplo
greetings:
- Hi there!
- Good day.

create_npc_greetings.jpg


dialog

Define as linhas que o NPC pode dizer como bolha de chat flutuante. Uma entrada é escolhida aleatoriamente de cada vez (a lista não é lida por ordem). Suporta chaves de tradução para servidores multilíngues.

O momento em que é disparada depende do interactionType:

  • Os NPCs CHAT dizem uma linha de diálogo quando um jogador clica com o botão direito neles.
  • Todos os outros interactionType dizem uma linha de diálogo em cada varredura de proximidade enquanto um jogador permanece dentro do activationRadius.

Um \n literal dentro de uma linha divide-a em linhas de bolha empilhadas.

ChaveValoresPadrão
dialogString Listnenhum
Exemplo
dialog:
- I like apples!
- Sure is hot.

create_npc_dialog.jpg


farewell

Define as mensagens de despedida do NPC. Uma entrada é escolhida aleatoriamente e mostrada como uma bolha de chat flutuante. Suporta chaves de tradução para servidores multilíngues.

ChaveValoresPadrão
farewellString Listnenhum

As despedidas são disparadas quando um jogador fecha um menu de inventário estando a menos de 5 blocos do NPC - tipicamente logo após fechar um menu de loja, de quest ou de arena. Não são disparadas quando um jogador simplesmente sai do activationRadius.

Exemplo
farewell: 
- Until next time!
- Bye!

create_npc_farewell.jpg


canTalk

Define se o NPC pode falar. Quando definido como false, o NPC nunca mostra uma bolha de chat, pelo que greetings, dialog e farewell ficam todos suprimidos.

ChaveValoresPadrão
canTalkBooleantrue
Exemplo
canTalk: true

activationRadius

Define o raio, em blocos, no qual um NPC pode detectar a aproximação de um jogador.

ChaveValoresPadrão
activationRadiusDouble3.0

A proximidade é varrida a cada 5 segundos. Enquanto um jogador está dentro do raio, o NPC roda para ficar virado para ele, os indicadores de quest são mostrados (para NPCs QUEST_GIVER / CUSTOM_QUEST_GIVER) e os greetings / dialog são acionados. Definir isto como 0 (ou menos) desativa completamente a deteção de proximidade para esse NPC.

Exemplo
activationRadius: 3.0

scripts

Define os scripts Lua anexados a este NPC. Os arquivos de script são carregados de plugins/EliteMobs/npc_scripts/. A extensão .lua é opcional - é acrescentada automaticamente se você a omitir.

ChaveValoresPadrão
scriptsString Listnenhum

Os scripts de NPC correm no motor Lua partilhado do MagmaCore e suportam os seguintes hooks: on_spawn, on_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter e on_zone_leave. Consulte Scripts Lua de NPC para a API completa e exemplos.

Um nome de arquivo de script que não corresponda a nenhum arquivo em npc_scripts/ é ignorado com um aviso; o NPC continua a spawnar.

Exemplo
scripts:
- wave.lua

interactionType

Define o tipo de interação que o NPC fará.

ChaveValoresPadrão
interactionTypeEspecial [1]NONE
Exemplo
interactionType: TELEPORT_BACK

noPreviousLocationMessage

Quando um NPC Transportador não tem uma localização anterior para a qual possa teleportar um jogador, ele exibirá esta mensagem. Aceita Códigos de Cor e chaves de tradução para servidores multilíngues.

ChaveValoresPadrão
noPreviousLocationMessageStringnenhum
Exemplo
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

create_npc_noteleportlocation.jpg


timeout

Define a quantidade de tempo, em minutos, antes de um NPC desaparecer permanentemente.

ChaveValoresPadrão
timeoutDouble0 (nunca)
Exemplo
timeout: 0

questFileName

Define as quests personalizadas que o NPC oferece. Requer o interactionType CUSTOM_QUEST_GIVER. Note que a chave está no singular (questFileName) mesmo que aceite uma lista.

ChaveValoresPadrão
questFileNameString Listnenhum
Exemplo
questFileName:
- my_quest_one.yml
- my_quest_two.yml

disguise

Define o disfarce do LibsDisguises que o NPC tem.

ChaveValoresPadrão
disguiseLibsDisguises formatnenhum
Exemplo
disguise: SKELETON

create_npc_disguise.jpg


customDisguiseData

Define os dados para um disfarce customizado do LibsDisguises.

ChaveValoresPadrão
customDisguiseDataLibsDisguises formatnenhum
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}

create_npc_custom_disguise.jpg


customModel

Define o modelo customizado do ModelEngine que o NPC usará.

ChaveValoresPadrão
customModelStringnenhum
Exemplo
customModel: MY_MODEL_ONE

arena

Define o nome do arquivo da arena para a qual o NPC abrirá um menu (requer o interactionType ARENA_MASTER).

ChaveValoresPadrão
arenaFilenamenenhum
Exemplo
arena: my_arena.yml

command

Define o comando que o NPC executará (requer o interactionType COMMAND). Os comandos são executados como o jogador, não como o console. Não inclua a barra inicial (/).

ChaveValoresPadrão
commandStringnenhum
Exemplo
command: say Look at me running a command, how cool!

create_npc_command.jpg


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á ausente ou vazio. As novas localizações colocadas no jogo são escritas no spawnLocations, por isso prefira essa chave.

O formato é world,x,y,z,yaw,pitch.

ChaveValoresPadrão
spawnLocationStringnenhum
Exemplo
spawnLocation: my_world,10,50,10,0,0

spawnLocations

Define as localizações de spawn do NPC. O mesmo arquivo de NPC pode ser colocado em vários pontos; é gerado um NPC por cada entrada. Você deve definir isto através do comando /em place npc <npcfilename.yml>, que acrescenta a sua localização atual (incluindo a direção para onde está virado) a esta lista e também define isEnabled: true.

O formato de cada entrada é world,x,y,z,yaw,pitch.

ChaveValoresPadrão
spawnLocationsString Listnenhum
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 dungeons 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 dungeon, com cada clone existindo no mundo de instância correspondente.

ChaveValoresPadrão
instancedBooleanfalse
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.

ChaveValoresPadrão
syncMovementBooleantrue
Exemplo
syncMovement: true

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
questFileName:
- my_quest.yml #npc interactionType must be set to CUSTOM_QUEST_GIVER
disguise: SKELETON
customDisguiseData: #used when a custom libsdisguise is being set
customModel: MODEL_ONE
arena: my_arena.yml #npc interactionType must be set to ARENA_MASTER
command: say Hello World! #npc interactionType must be set to COMMAND (do not include the leading slash)
spawnLocation: my_world,584,55,127,90,10 #remember that NPCs use pitch and yaw to set where they are looking at. this is also automatically set when running the /em place npc <npcfilename.yml> command, so make sure you pose where you want the NPC to be facing when running the command.

create_npc_npc.jpg


Especial [1]

A seguir está a lista de tipos de interação de NPC válidos:

TipoDescrição
GUILD_GREETERAbre o menu de seleção de bônus de habilidade de arma
CHATClicar com o botão direito diz uma linha aleatória do dialog
CUSTOM_SHOPAbre o menu da loja customizada
PROCEDURALLY_GENERATED_SHOPAbre a loja gerada proceduralmente
BARNão implementado. Informa ao jogador que o recurso virá em breve.
ARENANão faz nada. Use ARENA_MASTER em vez disso.
QUEST_GIVERAbre o menu de quests geradas proceduralmente
CUSTOM_QUEST_GIVERAbre o menu de quest para uma quest específica definida em questFileName
NONESem interações
SELLAbre o menu de venda
TELEPORT_BACKTeleporta os jogadores de volta para a última localização em que estiveram em um mundo que não seja do elitemobs
SCRAPPERAbre o menu de sucata
REPAIRMANAbre o menu de reparo
ENCHANTERAbre o menu de encantamento
REFINERSUBSTITUÍDO - Informa ao jogador que o recurso foi substituído; os administradores são instruídos a remover o NPC
SMELTERSUBSTITUÍDO - Informa ao jogador que o recurso foi substituído; os administradores são instruídos a remover o NPC
ENHANCERSUBSTITUÍDO - Informa ao jogador que o recurso foi substituído; os administradores são instruídos a remover o NPC
UNBINDERAbre o menu de desvinculação
ARENA_MASTERAbre o menu da arena para a arena definida em arena
COMMANDExecuta o comando definido em command
SCROLL_APPLIERAbre o menu de pergaminhos de item de elite. O NPC não spawna de forma alguma enquanto o useEliteItemScrolls estiver desativado
ARROW_SHOPAbre o menu da loja de flechas
GAMBLING_BLACKJACKAbre o jogo de apostas de blackjack
GAMBLING_COINFLIPAbre o jogo de apostas de cara ou coroa
GAMBLING_SLOTSAbre o jogo de apostas de caça-níquel
GAMBLING_HIGHERLOWERAbre o jogo de apostas de maior/menor

Para mais informações sobre o que o SCRAPPER e tipos de interação semelhantes fazem, clique aqui.

Notas sobre o Comportamento dos NPCs

Os NPCs têm vários comportamentos codificados que não podem ser configurados:

  • IA Desativada: Os NPCs não podem se mover nem calcular caminhos. Eles permanecem em sua localização de spawn. Rodam sim no lugar para ficar virados para um jogador que esteja dentro do activationRadius.
  • Exibição do Cargo: O texto do role é renderizado em uma entidade de text display flutuante acima do NPC. O deslocamento vertical depende de como o NPC é renderizado - 2.52 para um NPC simples, 2.30 para um NPC com LibsDisguises e 2.3 para um que use um customModel.
  • Etiqueta de Cargo no Bedrock: Os clientes Bedrock não conseguem renderizar text displays, por isso um NPC disfarçado recebe adicionalmente um armor stand marcador invisível que carrega o texto do cargo, mostrado apenas a jogadores Bedrock e escondido dos jogadores Java. A sua altura é definida pelo bedrockNPCRoleYOffset no config.yml (padrão 2.2). Esta alternativa requer o Geyser ou o Floodgate no servidor de backend; uma configuração de Geyser apenas no proxy desativa-a.
  • Cooldown de Diálogo: Os NPCs esperam 3 segundos entre eventos de fala para evitar mensagens sobrepostas. As bolhas de chat são texto flutuante por jogador que desaparece após cerca de 5 segundos, e não mensagens de chat.
  • Invisibilidade: Um NPC sob o efeito de poção de invisibilidade não mostrará bolhas de chat.
  • Ciclo de Vida do Chunk: Os NPCs desaparecem quando seu chunk é descarregado e reaparecem quando ele é recarregado. As entidades de NPC nunca são guardadas no mundo - são recriadas a partir do seu arquivo de configuração.
  • Renomeação Bloqueada: Clicar com o botão direito em um NPC segurando uma name tag é cancelado, e o jogador é informado de que o NPC não pode ser renomeado.