Pular para o conteúdo principal

Craft Engine

Blocos, móveis e itens do CraftEngine em missões, além de zonas de missão por jogador.

Pagasv1.1Integrações
RequerTypeWriter0.9CraftEngineQuest (TypeWriter extension)

Visão geral​

O Craft Engine conecta o CraftEngine ao TypeWriter. Seus blocos, móveis e itens personalizados passam a ser coisas às quais uma quest pode reagir: eventos quando um jogador os quebra, coloca ou clica neles, objectives que os contam, facts e variáveis que leem o que um jogador segura ou observa, e actions que os colocam, substituem ou removem.

A segunda metade da extensão é a quest zone. Uma quest zone dá a cada jogador a sua própria versão de uma área. O que um jogador quebra, coloca ou altera é registrado apenas para ele, enviado a ele como pacotes e devolvido quando ele retorna. O mundo real nunca é gravado, então sair de uma zona não custa nada e nada fica pela metade se o servidor parar no meio de uma quest. Uma zona também pode ser compartilhada por um grupo, para que uma party limpe uma sala em conjunto.

A extensão é escrita para Paper e Folia: toda alteração de mundo ou de inventário é executada na região que a contém.

Recursos​

  • Eventos de blocos e móveis — reaja a blocos e móveis personalizados sendo quebrados, colocados, interagidos ou atingidos, inclusive colocações recusadas.
  • Regras de colocação — recuse uma colocação ou um golpe a menos que o jogador tenha uma permissão ou corresponda a criteria.
  • Objectives de contagem — quebre, coloque ou substitua blocos e móveis personalizados como objective de quest; cada posição conta uma vez por jogador.
  • Actions de mundo — coloque, remova ou substitua um bloco ou um móvel e armazene seus próprios dados em móveis colocados.
  • Quest zones — uma visão por jogador (ou por grupo) de blocos e móveis, lembrada entre as visitas.
  • Troca de inventário — retire o inventário inteiro de um jogador, ou apenas itens escolhidos, ao entrar em uma zona e devolva-o ao sair.
  • Audience de blocos falsos — mostre um conjunto fixo de blocos e móveis a uma audience sem registrar nada.
  • Ferramentas de itens — dê ou remova itens do CraftEngine por id e reaja a pegá-los, soltá-los ou comê-los.
  • Facts, variáveis e audiences — leia o item na mão, o bloco ou móvel observado, cooldowns e agrupe jogadores pelo que seguram ou em que estão sentados.

Instalação​

  1. Instale o CraftEngine no seu servidor. A extensão é compilada contra o CraftEngine 26.8.
  2. Confirme que a extensão Quest do TypeWriter está instalada. Ela fornece as entries de quest e de objective usadas pelos objectives.
  3. Baixe a extensão nas lojas (veja os botões no painel acima) e coloque o JAR em plugins/Typewriter/extensions/.
  4. Reinicie o servidor. No log você deve ver [CraftEngine] CraftEngineExtension initialized successfully.

Primeiros passos​

Este passo a passo dá a cada jogador o seu próprio selo quebrável em uma sala de puzzle.

  1. No painel web, abra uma página de manifest e adicione um Quest State Artifact. Deixe artifactId como gerado.
  2. Adicione uma Quest Zone Audience e defina artifact com o artifact que você acabou de criar. Deixe zoneId vazio para usar o id da entry e mantenha trackBlocks ativado.
  3. Aninhe a zone audience sob a audience que decide quem está na sala (por exemplo, uma audience de área ou de quest). Os jogadores que entram recebem sua própria visão.
  4. Em uma página de sequence, adicione um evento On Block Interact para o seu bloco de selo. Ele dispara uma action Set Quest Block.
  5. Na action, defina artifact e zoneId com os mesmos valores da zona (copie o id da entry da zona), associe location à posição do evento e defina blockId como o selo quebrado (namespace:broken_seal). Deixe vazio para mostrar ar.
  6. Adicione uma action Clear Quest State onde a quest termina, para que a sala possa ser resolvida novamente.
  7. Clique em Publish e verifique com dois jogadores: cada um abre o seu próprio selo e o outro continua vendo o seu intacto.
dica

Para uma tarefa simples de contagem, você não precisa de uma zona: adicione um objective Break Block, preencha item com o id do bloco e defina amount.

Como funciona​

Uma alteração feita em uma zona é um desvio: um bloco enviado a um jogador por cima do real, uma peça de móvel do mundo ocultada de um jogador, ou um fantasma, uma peça de móvel que existe apenas para aquele jogador. Um fantasma pode ser clicado com o botão direito e quebrado por quem o vê, mas não tem colisão para ninguém.

A colisão sempre segue o mundo. Um bloco que um jogador quebrou ainda o bloqueia, um bloco que ele colocou pode ser atravessado e um móvel do mundo ocultado ainda impede o jogador que não consegue vê-lo. Construa zonas em que a alteração seja algo para ver e usar, não algo para pisar.

O estado é gravado no artifact alguns segundos após a última alteração, e imediatamente quando um jogador sai de uma zona ou o servidor para. Um servidor que é encerrado à força em vez de parado pode perder os últimos segundos.

Configuração​

A extensão não tem arquivo de configuração. O texto das linhas de objective pode ser alterado com snippets do TypeWriter:

SnippetPadrão
craftengine.objective.display<display> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>)
craftengine.objective.completed<green>✔</green> <st><display></st> <dark_gray>(<gray><current><dark_gray>/<gray><required><dark_gray>)

Entries​

49 entradas, geradas a partir do código-fonte da extensão.

Ações10
Eventos13
Objetivos5
Fatos8
Audiências5
Variáveis6
Sons1
Artefatos1

Solução de problemas​

Uma quest zone não mostra nada e nenhum erro aparece. As actions e a audience devem indicar o mesmo artifact, zoneId e group. Uma alteração registrada sob outro nome é gravada corretamente, mas ninguém a lê. Quando zoneId está vazio na audience, é o id da própria entry da audience que você deve copiar.

O Set Quest Block não faz nada e o log diz "has no zone configured". zoneId está vazio na action. Defina-o. O mesmo vale para o Set Quest Furniture.

O log diz "cannot resolve" um id. O blockId não é um bloco do CraftEngine, um móvel do CraftEngine nem um material vanilla. Verifique o id com Registry IDs. Com kind definido como FURNITURE, um id que não é de móvel é recusado em vez de ser exibido como bloco.

Todos na zona veem a mesma alteração. A action gravou o mundo. As actions Place e Remove, e o Replace Block definido como WORLD, alteram o bloco real. Dentro de uma zona, use Set Quest Block, Set Quest Furniture ou Replace Block com audience em AUTO ou QUEST_ZONE.

O Replace Block não faz nada para um jogador em duas zonas. Com várias zonas sobrepostas e sem zoneId, a action recusa e escreve uma linha no log. Defina zoneId com a zona que você quer dizer.

Uma alteração volta a piscar após uma longa caminhada. Um cliente que recarrega um chunk recebe novamente o mundo real, e a zona reenvia sua visão a cada refreshInterval ticks dentro de refreshRadius blocos. Reduza refreshInterval ou aumente refreshRadius.

Os eventos de bloco não disparam para um bloco quebrado em uma zona. Com trackBlocks ativado, a zona assume a ação: a quebra ou a colocação é cancelada e registrada como um desvio. Avance a quest a partir dos eventos de interação ou do Set Quest Block.

Extensões relacionadas​

  • Nexo e ItemsAdder — o mesmo tipo de integração para os outros plugins de conteúdo personalizado.