Saltar para o conteúdo principal

Criar NPCs

webapp_banner.jpg

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.

ChaveValoresPredefinição
isEnabledBooleanotrue
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.

ChaveValoresPredefinição
nameTextotexto vazio
Exemplo
name: "&aEnn Peecee"

create_npc_name.jpg


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.

ChaveValoresPredefinição
scaleMultiplicador1.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.

ChaveValoresPredefinição
roleTextotexto vazio
Exemplo
role: "&c<Red Fellow>"

create_npc_role.jpg


profession​

Define a profissão do aldeão e a sua aparência quando não usa disfarce nem modelo personalizado.

ChaveValoresPredefinição
professionProfissãoNITWIT
Exemplo
profession: NITWIT

create_npc_profession.jpg


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.

ChaveValoresPredefinição
greetingsLista de textosnenhuma

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.

create_npc_greetings.jpg


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 CHAT tentam 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.

ChaveValoresPredefinição
dialogLista de textosnenhuma
Exemplo
dialog:
- I like apples!
- Sure is hot.

create_npc_dialog.jpg


farewell​

Define despedidas escolhidas aleatoriamente para balões flutuantes. A lista é registada no CSV de traduções.

ChaveValoresPredefinição
farewellLista de textosnenhuma

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!

create_npc_farewell.jpg


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.

ChaveValoresPredefinição
canTalkBooleanotrue
Exemplo
canTalk: true

activationRadius​

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

ChaveValoresPredefinição
activationRadiusDecimal3.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.

ChaveValoresPredefinição
scriptsLista de textosnenhuma

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á.

ChaveValoresPredefinição
interactionTypeEspecial [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.

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

create_npc_noteleportlocation.jpg


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.

ChaveValoresPredefinição
timeoutDecimal0 (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.

ChaveValoresPredefinição
questFileNameLista de textosnenhuma
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.

ChaveValoresPredefinição
disguiseFormato LibsDisguisesnenhum
Exemplo
disguise: SKELETON

create_npc_disguise.jpg


customDisguiseData​

Define os dados para um disfarce personalizado do LibsDisguises.

ChaveValoresPredefinição
customDisguiseDataFormato LibsDisguisesnenhum
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 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.

ChaveValoresPredefinição
customModelTextonenhum
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).

ChaveValoresPredefinição
arenaNome de ficheironenhum
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.

ChaveValoresPredefinição
commandTextonenhum
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á 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.

ChaveValoresPredefinição
spawnLocationTextonenhum
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.

ChaveValoresPredefinição
spawnLocationsLista de textosnenhuma
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.

ChaveValoresPredefinição
instancedBooleanofalse
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.

ChaveValoresPredefinição
syncMovementBooleanotrue
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

create_npc_npc.jpg


Especial [1]​

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

TipoDescrição
GUILD_GREETERAbre os bónus de habilidades de armas. Requer elitemobs.skill.npc.
CLASS_TRAINERAbre a ramificação de classRoot. Requer elitemobs.command.
TRANSPORTAbre os destinos de transportRoutes.
CHATTenta uma fala aleatória de dialog ao interagir.
CUSTOM_SHOPAbre a loja personalizada. Requer elitemobs.shop.custom.npc.
PROCEDURALLY_GENERATED_SHOPAbre a loja gerada. Requer elitemobs.shop.dynamic.npc.
BARNão implementado. Informa o jogador de que o recurso virá em breve.
ARENANão faz nada. Use ARENA_MASTER em vez disso.
QUEST_GIVERAbre missões geradas. Requer elitemobs.quest.npc.
CUSTOM_QUEST_GIVEROferece missões elegíveis de questFileName e aceita entregas atribuídas.
NONESem ação integrada; scripts, proximidade e diálogos de missão ainda podem executar.
SELLAbre vendas. Requer elitemobs.shop.sell.npc.
TELEPORT_BACKUsa o retorno guardado pelo EliteMobs. Requer elitemobs.back.npc.
SCRAPPERAbre sucata. Requer elitemobs.scrap.npc.
REPAIRMANAbre reparos. Requer elitemobs.repair.npc.
ENCHANTERAbre encantamentos. Requer elitemobs.enchant.npc.
REFINERSUBSTITUÍDO - Informa o jogador de que o recurso foi substituído; os administradores são instruídos a remover o NPC
SMELTERSUBSTITUÍDO - Informa o jogador de que o recurso foi substituído; os administradores são instruídos a remover o NPC
ENHANCERSUBSTITUÍDO - Informa o jogador de que o recurso foi substituído; os administradores são instruídos a remover o NPC
UNBINDERAbre desvinculação. Requer elitemobs.unbind.npc.
ARENA_MASTERAbre o menu da arena para a arena definida em arena
COMMANDExecuta o comando definido em command
SCROLL_APPLIERAbre pergaminhos de item de elite. Requer elitemobs.scroll.npc; não aparece com useEliteItemScrolls desativado.
ARROW_SHOPAbre a loja de flechas. Requer elitemobs.shop.arrow.npc.
GAMBLING_BLACKJACKAbre blackjack. Requer elitemobs.gambling.npc.
GAMBLING_COINFLIPAbre cara ou coroa. Requer elitemobs.gambling.npc.
GAMBLING_SLOTSAbre as slots. Requer elitemobs.gambling.npc.
GAMBLING_HIGHERLOWERAbre 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.