Pular para o conteúdo principal

Empacotador de Masmorras

webapp_banner.jpg

O que são masmorras?

Podes encontrar informação sobre masmorras, incluindo sobre as masmorras pré-feitas, aqui.


O que é o empacotador de masmorras?

O empacotador de masmorras permite aos administradores não só criar e empacotar masmorras, mas também empacotar qualquer tipo de conteúdo do EliteMobs. Isto inclui coisas como packs de eventos, packs de modelos, arenas, packs de NPCs, packs de itens, e por aí fora.

Porquê usar pacotes de masmorra?
  • Masmorras instanciadas! As masmorras instanciadas só podem ser criadas através do sistema de pacotes de masmorra.
  • Cópias de segurança seguras de Minidungeons! Se fizeres um Pacote de Masmorra, poderás implementá-lo e reimplementá-lo em qualquer servidor que queiras, a qualquer altura e por qualquer motivo.
  • Fácil de ligar e desligar! Podes sempre fazer /em setup e ligar ou desligar Pacotes de Masmorra, temporária ou permanentemente.
  • Fácil de partilhar! Se quiseres partilhar as tuas criações, basta comprimir os Pacotes de Masmorra num zip e enviá-los a outras pessoas. Existe uma sala no Discord dedicada às criações da comunidade, se tiveres interesse!
  • Teletransportes! Os pacotes de masmorra criam automaticamente localizações de teletransporte, acessíveis na página de Teleports do menu /em, o que pode ser muito útil em muitas configurações.

Criar Masmorras

As definições seguintes são usadas para criar um ficheiro de configuração que deve ir para a pasta content_packages. Estas definições servem especificamente para criar masmorras, e não são necessárias se apenas quiseres usar o empacotador de masmorras para distribuir conteúdo que não seja masmorra, como um pack de itens ou de eventos.

Plugins necessários

Nenhum. A proteção das masmorras é tratada pelo próprio EliteMobs: definir protect: true aplica ao mundo do pacote o conjunto de proteções por mundo do próprio EliteMobs, sem qualquer plugin de regiões envolvido.

O WorldGuard continua a ser uma dependência opcional (soft dependency). Quando está instalado, as flags de região específicas do EliteMobs ficam disponíveis, mas não é necessário para que um pacote de masmorra fique protegido.

Criar uma masmorra, passo a passo

O EliteMobs costumava ter dois grandes tipos de masmorras: baseadas em mundo e baseadas em schematic.

As masmorras baseadas em schematic estavam associadas a uma construção em schematic. Foram descontinuadas e já não são suportadas.

Todas as masmorras do EliteMobs são agora baseadas em mundo.

Ficheiro pack.meta obrigatório

O teu pacote de masmorra deve incluir um ficheiro pack.meta, que é simplesmente um ficheiro .txt renomeado com a extensão .meta. Este ficheiro deve conter apenas uma palavra, indicando a que plugin o pacote se destina (por exemplo, "elitemobs", escrito em minúsculas). O ficheiro pack.meta tem de estar no diretório raiz do teu pacote, junto de todas as outras pastas.


Valores globais

Os valores seguintes aplicam-se a todas as masmorras

isEnabled

Define se o pacote de masmorra está ativado.

ChaveValoresPredefiniçãoObrigatório
isEnabledBooleanfalse
Exemplo
isEnabled: true

name

Define o nome do conteúdo. Suporta Color Codes.

ChaveValoresPredefiniçãoObrigatório
nameStringnone
Exemplo
name: '&c[lvl 999] &aThe Green Dungeon'

create_packager_name.jpg


contentType

Define o tipo de masmorra.

ChaveValoresPredefiniçãoObrigatório
contentTypeOPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGEnenhum
Exemplo
contentType: INSTANCED_DUNGEON
O SCHEMATIC_DUNGEON está morto

O SCHEMATIC_DUNGEON continua a ser aceite pelo parser, mas as masmorras em schematic foram removidas no EliteMobs 9.0 e substituídas por masmorras em mundo. Um pacote que o use não carrega nada e imprime um aviso na consola a dizer-te para apagares a entrada. Se quiseres a experiência de schematic, usa antes o BetterStructures com os pacotes de elite shrines.


customInfo

Define a informação adicional que aparecerá no ecrã do /em setup. Apenas para efeitos informativos. Suporta Color Codes.

ChaveValoresPredefiniçãoObrigatório
customInfoString Listnenhum
Exemplo
customInfo:
- '&aThe best dungeon.'
- '&aMade by: CoolPlayer'

create_packager_custominfo.jpg


setupMenuDescription

Define a descrição que aparecerá no menu /em setup para este pacote de masmorra. Suporta Color Codes.

ChaveValoresPredefiniçãoObrigatório
setupMenuDescriptionString Listnenhum
Exemplo
setupMenuDescription:
- '&2A cool dungeon for levels 10-20!'
- '&2Features 3 bosses and custom loot!'

Define a ligação de transferência mostrada aos jogadores no menu /em setup quando o conteúdo ainda não foi transferido.

ChaveValoresPredefiniçãoObrigatório
downloadLinkStringstring vazia
Exemplo
downloadLink: http://www.example.org

create_packager_downloadlink.jpg


dungeonSizeCategory

Define a categoria de tamanho do pacote de masmorra. Apenas para efeitos informativos.

ChaveValoresPredefiniçãoObrigatório
dungeonSizeCategoryEspecial [1]nenhum
Exemplo
dungeonSizeCategory: MINIDUNGEON

create_packager_size.jpg

Especial [1]

Expandir Tabela
ChaveDescrição
LAIROs covis (lairs) são um tipo de masmorra pequena focada num grande combate de boss.
SANCTUMOs santuários são o equivalente instanciado dos covis. Ou seja, giram em torno de um enorme combate de boss.
MINIDUNGEONAs minidungeons são um tipo de masmorra de tamanho médio que normalmente contém 3-15 minibosses e um grande boss, bem como muitos mobs "trash" pensados para serem "farmados" pelos jogadores em busca de moedas e equipamento.
DUNGEONAs dungeons são o equivalente instanciado das minidungeons. É o tipo de masmorra mais tradicional dos MMORPG, em que os jogadores formam grupo e atravessam um corredor de mobs trash e minibosses até enfrentarem um boss final.
RAIDBrevemente!
ADVENTUREAs adventures são mapas de aventura completos. Incluem linhas de missões, NPCs, grandes quantidades de minibosses e bosses, e podem até conter as suas próprias arenas ou masmorras lá dentro.
ARENAAs arenas são áreas de sobrevivência baseadas em vagas, em que os jogadores são recompensados por derrotarem vagas.
OTHERQualquer outra coisa que não caiba nas categorias anteriores.
REALMOs realms são mundos grandes e persistentes, com conteúdo extenso e sistemas de progressão.

Para descrições mais detalhadas, consulta Masmorras


protect

Define se o mundo do pacote de masmorra deve ser protegido. Isto não usa o WorldGuard — o EliteMobs regista o mundo no seu próprio conjunto de proteções, que bloqueia partir e colocar blocos, queima/desvanecimento/ignição de blocos, decomposição de folhas, farinha de osso, baldes de líquidos, edição de placas, acesso a contentores (exceto baús de tesouro), abertura de portas/alçapões/portões, interação com ovos de dragão e vasos, manipulação de item frames e armor stands, e o spawn de mobs vanilla. Vários destes comportamentos são ainda ajustados por allowExplosionBlockDamage, allowLiquidFlow e allowElytra.

Quando protect é false, nada disto se aplica e o mundo comporta-se como um mundo normal qualquer.

ChaveValoresPredefiniçãoObrigatório
protectBooleantrue
Exemplo
protect: true

dungeonVersion

Define a versão do pacote de masmorra.

ChaveValoresPredefiniçãoObrigatório
dungeonVersionIntegernenhum
Exemplo
dungeonVersion: 1

playerInfo

Define a informação que aparece no menu. Suporta Color Codes.

Só funciona quando o /em está em modo livro, usando /em alt.

ChaveValoresPredefiniçãoObrigatório
playerInfoStringnenhum
Exemplo
playerInfo: 'Difficulty: &a1-man easy content!'

create_packager_playerinfo.jpg


regionEnterMessage

Define a mensagem que aparece quando um jogador entra na zona da masmorra. Suporta Color Codes.

ChaveValoresPredefiniçãoObrigatório
regionEnterMessageStringnenhum
Exemplo
regionEnterMessage: '&aYou have entered the dungeon!'

create_packager_enter.jpg


regionLeaveMessage

Define a mensagem que aparece quando um jogador sai da zona da masmorra. Suporta Color Codes.

ChaveValoresPredefiniçãoObrigatório
regionLeaveMessageStringnenhum
Exemplo
regionLeaveMessage: '&aYou have left the dungeon!'

create_packager_leave.jpg


hasCustomModels

Assinala que o pacote de masmorra inclui modelos personalizados (para o ModelEngine ou o FreeMinecraftModels). A chave é lida e escrita, mas nada no EliteMobs atua atualmente sobre ela — os modelos são instalados apenas por a pasta models estar presente no pacote. Trata-a como um marcador de documentação.

ChaveValoresPredefiniçãoObrigatório
hasCustomModelsBooleanfalse
Exemplo
hasCustomModels: false

dungeonConfigFolderName

Define o nome das pastas usadas para os ficheiros associados a esta masmorra.

Obrigatório para masmorras instanciadas!

ChaveValoresPredefiniçãoObrigatório
dungeonConfigFolderNameStringnenhum
Exemplo
dungeonConfigFolderName: my_dungeon_folder

anchorPoint

Define o ponto de referência a partir do qual o /em relativecoords <package> mede. Com um ponto de âncora definido, um administrador que esteja em qualquer sítio dentro do pacote instalado pode executar esse comando e obter as coordenadas do sítio onde está relativamente à âncora, que é o formato usado por coisas como os offsets de reforços e as localizações de scripts.

Se calculatedRotation for diferente de zero, o vetor devolvido é rodado em torno da âncora no eixo Y antes de ser mostrado, para que os números continuem corretos em colocações rodadas.

Sem um ponto de âncora, o comando informa o administrador de que o ponto de âncora é inválido e não faz mais nada.

ChaveValoresPredefiniçãoObrigatório
anchorPointLocationnenhum
calculatedRotationInteger (graus)0
Exemplo
anchorPoint: my_dungeon_world,100,64,100,0,0
calculatedRotation: 0

contentLevel

Define o nível de conteúdo que a masmorra deve apresentar no menu do EM.

ChaveValoresPredefiniçãoObrigatório
contentLevelIntegernenhum
Exemplo
contentLevel: 20

enchantmentChallenge

Define se a masmorra deve ser uma masmorra de Desafio de Encantamento.

ChaveValoresPredefiniçãoObrigatório
enchantmentChallengeBooleanfalse
Exemplo
enchantmentChallenge: false

song

Define se a masmorra deve ter uma banda sonora.

ChaveValoresPredefiniçãoObrigatório
songStringnone

name= É aqui que defines qual o ficheiro do resource pack que deve ser reproduzido.
length= A duração da banda sonora em milissegundos. O EliteMobs converte isto internamente para ticks, pelo que tem de ser a duração real do som, caso contrário a faixa reinicia demasiado cedo ou demasiado tarde.

As duas partes são separadas por um espaço. Podem encadear-se duas faixas com ->, caso em que a segunda entrada usa a mesma sintaxe name=/length=.

Exemplo
song: name=elitemobs:dark_cathedral.ambient length=93830

Forma com duas faixas:

song: name=elitemobs:intro length=12000->name=elitemobs:dark_cathedral.ambient length=93830

dungeonLockoutMinutes

Define um temporizador de bloqueio da masmorra depois de o boss da masmorra ter sido derrotado. O valor indicado é em minutos. A predefinição é 4320 (72 horas) desde o EliteMobs 10.3.1 e aplica-se a todos os pacotes de conteúdo pré-feitos — define isto como 0 no teu YAML para desativar o bloqueio num pacote específico, ou como outro número positivo para o substituir. Os jogadores bloqueados também não ganham XP de habilidade do boss para o qual estão em cooldown.

ChaveValoresPredefiniçãoObrigatório
dungeonLockoutMinutesInteger4320
Exemplo
dungeonLockoutMinutes: 1440

containedPackages

Define a lista de pacotes de masmorra contidos num meta-pacote. É usado quando o contentType está definido como META_PACKAGE, para listar todos os subpacotes que pertencem à masmorra maior.

ChaveValoresPredefiniçãoObrigatório
containedPackagesString Listnenhum
Exemplo
containedPackages:
- my_dungeon_adventure.yml
- my_dungeon_sanctum.yml
- my_dungeon_boss_fight.yml

customItemFilenames

Define a lista de ficheiros de itens personalizados de um pacote de itens. Definir este valor coloca automaticamente o contentType em ITEMS_PACKAGE.

ChaveValoresPredefiniçãoObrigatório
customItemFilenamesString Listnenhum
Exemplo
customItemFilenames:
- my_custom_sword.yml
- my_custom_armor.yml

customEventFilenames

Define a lista de ficheiros de eventos personalizados de um pacote de eventos. Definir este valor coloca automaticamente o contentType em EVENTS_PACKAGE.

ChaveValoresPredefiniçãoObrigatório
customEventFilenamesString Listnenhum
Exemplo
customEventFilenames:
- my_custom_event.yml

modelNames

Define a lista de nomes de modelos de um pacote de modelos. Definir este valor coloca automaticamente o contentType em MODELS_PACKAGE.

ChaveValoresPredefiniçãoObrigatório
modelNamesString Listnenhum
Exemplo
modelNames:
- my_custom_model

Chaves traduzíveis

Seis dos valores acima são registados no sistema de tradução quando o pacote é carregado: name, customInfo, playerInfo, regionEnterMessage, regionLeaveMessage e o name de cada entrada em difficulties. Num servidor a correr num idioma que não o inglês, estes são procurados no CSV desse idioma, e o texto que escreveres no YAML é aquilo com que a coluna inglesa é reconciliada. Escreve-os em inglês se quiseres que o teu pacote seja traduzível.


Pacotes de masmorra baseados em mundo

Os valores seguintes aplicam-se apenas a masmorras baseadas em mundo.


worldName

Define o nome do mundo que deve ser empacotado.

ChaveValoresPredefiniçãoObrigatório
worldNameStringnenhum
Exemplo
worldName: my_minecraft_world

wormholeWorldName

Esta função define o nome do mundo de wormholes, que serve de mundo secundário ligado ao mundo principal. É usado para funcionalidades como hubs de teletransporte ou câmaras de boss únicas.

ChaveValoresPredefiniçãoObrigatório
wormholeWorldNameStringnenhum
Exemplo
wormholeWorldName: my_minecraft_world_wormhole

environment

Define o ambiente do mundo.

ChaveValoresPredefiniçãoObrigatório
environmentEnvironmentnenhum
Exemplo
environment: NORMAL

teleportLocation

Define a localização de teletransporte do pacote de masmorra. É para aqui que os jogadores são teletransportados ao entrarem na masmorra.

ChaveValoresPredefiniçãoObrigatório
teleportLocationStringnenhum
Exemplo
teleportLocation: my_minecraft_world,-1.5,68,0.5,0.0,0.0

allowExplosionBlockDamage

Permite ou impede que as explosões danifiquem blocos numa masmorra. As explosões são consideradas explosões de elite, pelo que qualquer dano em blocos é regenerado no espaço de 2 minutos.

ChaveValoresPredefiniçãoObrigatório
allowExplosionBlockDamageBooleanfalse
Exemplo
allowExplosionBlockDamage: true

allowLiquidFlow

Define se os líquidos (água, lava) podem fluir na masmorra.

ChaveValoresPredefiniçãoObrigatório
allowLiquidFlowBooleantrue
Exemplo
allowLiquidFlow: false

allowElytra

Define se os jogadores podem planar com elytra dentro do mundo deste pacote de conteúdo. Quando é false (a predefinição), o EliteMobs cancela as tentativas de planar no mundo do pacote e reafirma o estado de não-planar a cada tick — útil para impedir que os jogadores saltem a travessia desenhada da masmorra.

ChaveValoresPredefiniçãoObrigatório
allowElytraBooleanfalse
Exemplo
allowElytra: true

listedInTeleports

Define se o pacote de masmorra aparece no menu de teletransportes. Quando definido como false, os jogadores não conseguem teletransportar-se para a masmorra através do menu de teleports do /em.

ChaveValoresPredefiniçãoObrigatório
listedInTeleportsBooleantrue
Exemplo
listedInTeleports: false

teleportLocationOffset

Define um offset para a localização de teletransporte do pacote de masmorra.

Esta chave é interpretada mas atualmente não é usada — nada no EliteMobs lê o offset resultante, pelo que defini-la não tem efeito no sítio onde os jogadores aterram. Ajusta antes o próprio teleportLocation.

ChaveValoresPredefiniçãoObrigatório
teleportLocationOffsetStringnenhum
Exemplo
teleportLocationOffset: my_minecraft_world,0.5,2,0.5,0.0,0.0

Masmorras instanciadas

As masmorras instanciadas criam um mundo novo de cada vez que um grupo de jogadores quer completar uma masmorra, e apagam-no quando terminam. Para isto funcionar corretamente, tens de colocar uma pasta com o nome indicado em dungeonConfigFolderName na pasta de configuração world_blueprints do EliteMobs.

Depois colocas dentro dessa pasta o mundo que vais usar, certificando-te de que o ficheiro session.lock do mundo é apagado.

Os valores seguintes aplicam-se apenas a masmorras instanciadas. Repara que todas as masmorras instanciadas são masmorras de mundo, pelo que também usam os valores das masmorras de mundo.


startLocation

Define a localização de teletransporte do ponto de partida da masmorra instanciada. É para aqui que os jogadores são teletransportados ao iniciarem a masmorra instanciada com /em start.

ChaveValoresPredefiniçãoObrigatório
startLocationStringnenhum
Exemplo
startLocation: my_minecraft_world,10.5,70,10.5,0.0,0.0

permission

Define a permissão necessária para entrar na instância da masmorra.

ChaveValoresPredefiniçãoObrigatório
permissionStringnenhum
Exemplo
permission: elitedungeon.mypermission

minPlayerCount

Define o número mínimo de jogadores necessário para iniciar uma masmorra.

ChaveValoresPredefiniçãoObrigatório
minPlayerCountInteger1
Exemplo
minPlayerCount: 1

maxPlayerCount

Define o número máximo de jogadores permitido numa masmorra.

ChaveValoresPredefiniçãoObrigatório
maxPlayerCountInteger5
Exemplo
maxPlayerCount: 5

dungeonObjectives

Define a lista de objetivos da masmorra necessários para que esta seja considerada concluída.

ChaveValoresPredefiniçãoObrigatório
dungeonObjectivesString Listnenhum
Exemplos

Existem atualmente dois tipos de objetivo de masmorra:

  • Matar um alvo: filename=boss.yml:amount=X
  • Limpar uma percentagem da masmorra: clearpercentage=X.Y
dungeonObjectives:
- filename=dungeon_final_boss.yml
- filename=dungeon_miniboss_one.yml
- filename=dungeon_miniboss_two.yml
dungeonObjectives: 
- clearpercentage=0.8

Um simples boss.yml sem o prefixo filename= continua a ser aceite e é silenciosamente tratado como filename=boss.yml, para que os pacotes mais antigos continuem a funcionar. Os pacotes novos devem usar a forma explícita.


difficulties

Define a lista de dificuldades da masmorra instanciada.

Obrigatório para masmorras instanciadas!

ChaveValoresPredefiniçãoObrigatório
difficultiesEspecial [1]nenhum
Exemplos
difficulties:
- levelSync: 25
id: 0
name: normal
- levelSync: 20
id: 1
name: hard
- levelSync: 15
id: 2
name: mythic

create_packager_difficulty.jpg

Especial [1]

Expandir Tabela

Definir as dificuldades da masmorra instanciada cria automaticamente diferentes opções de dificuldade ao entrar na masmorra.

Os nomes de dificuldade aqui definidos serão os usados na pasta de bosses personalizados, onde podes definir que poderes os bosses têm consoante a dificuldade.

As dificuldades estão em formato de lista e têm os seguintes campos:

ChaveDescriçãoValoresObrigatório
nameNome da dificuldade para os jogadores.String
idID da dificuldade, usado em bosses e itens personalizados para as funcionalidades baseadas em dificuldade.String
levelSyncDefine o nível do level sync, se existir. O level sync faz com que todo o equipamento dos jogadores fique limitado ao valor definido, tornando impossível aos jogadores estarem sobrenivelados para uma masmorra e mantendo-a relevante em corridas posteriores. Baseado no sistema de level sync do Final Fantasy 14.Nível absoluto (25) ou um valor relativo ao contentLevel (+5, -3)

Level sync relativo: um levelSync que comece por + ou - é aplicado sobre o contentLevel do pacote e limitado a um mínimo de 1. Por exemplo, contentLevel: 40 com levelSync: -5 sincroniza os jogadores para o nível 35. Numa masmorra dinâmica, cujo nível de conteúdo só é decidido quando a instância é criada, o valor relativo é resolvido nesse momento. Um valor que não possa ser interpretado desativa o level sync (0) e regista um aviso.

Masmorras dinâmicas

As masmorras dinâmicas são uma extensão das masmorras instanciadas, mas com uma diferença fundamental: permitem que o conteúdo da masmorra escale para o nível de dificuldade escolhido pelo jogador. As opções de nível disponíveis para o jogador são determinadas pelo nível de Guilda desbloqueado do jogador.

Ao desenhar bosses e mobs para uma masmorra dinâmica, usa a definição level: dynamic. Todo o loot em masmorras dinâmicas deve ser definido com scalability: scalable.

Os valores seguintes são necessários para as masmorras dinâmicas.
Como todas as masmorras dinâmicas são também masmorras instanciadas, usam adicionalmente todos os valores e definições das masmorras instanciadas.


contentType

Define o tipo de masmorra. Tem de estar definido como DYNAMIC_DUNGEON.

ChaveValoresPredefiniçãoObrigatório
contentTypeOPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUB / META_PACKAGE / ITEMS_PACKAGE / EVENTS_PACKAGE / MODELS_PACKAGEnenhum
Exemplo
contentType: DYNAMIC_DUNGEON

contentLevel

Define o nível de conteúdo que a masmorra deve apresentar no menu do EM. Tem de estar definido com o valor -1 para que a masmorra apareça como masmorra dinâmica.

ChaveValoresPredefiniçãoObrigatório
contentLevelIntegernenhum
Exemplo
contentLevel: -1

difficulties

Define a lista de dificuldades disponíveis e o level sync na masmorra dinâmica.

Obrigatório para masmorras instanciadas!

ChaveValoresPredefiniçãoObrigatório
difficultiesEspecial [1]nenhum
Exemplos
difficulties:
- levelSync: '+5'
name: normal
id: 0
- levelSync: '+0'
name: hard
id: 1
- levelSync: '-5'
name: mythic
id: 2

create_packager_difficulty.jpg

Especial [1]

Expandir Tabela

Definir as dificuldades da masmorra instanciada cria automaticamente diferentes opções de dificuldade ao entrar na masmorra.

Os nomes de dificuldade aqui definidos serão os usados na pasta de bosses personalizados, onde podes definir que poderes os bosses têm consoante a dificuldade.

Definir valores de levelSync positivos ou negativos entre aspas controla como o equipamento do jogador é sincronizado dentro da masmorra. Estes valores não afetam o nível da própria masmorra — o conteúdo da masmorra sincroniza sempre diretamente com o nível escolhido pelo jogador à entrada.

Por exemplo, se levelSync estiver definido como "+0", o equipamento do jogador será sincronizado para corresponder exatamente ao nível de conteúdo da masmorra.
Se estiver definido como "+5", o equipamento do jogador será sincronizado 5 níveis acima do conteúdo da masmorra.
Se estiver definido como "-5", o equipamento será sincronizado 5 níveis abaixo do conteúdo da masmorra.

As dificuldades estão em formato de lista e têm os seguintes campos:

ChaveDescriçãoValoresObrigatório
nameNome da dificuldade para os jogadores.String
idID da dificuldade, usado em bosses e itens personalizados para as funcionalidades baseadas em dificuldade.String
levelSyncDefine o nível de escalonamento do equipamento do jogador. Determina como o nível do equipamento de um jogador é ajustado em relação ao conteúdo da masmorra, permitindo que o equipamento fique alguns níveis acima ou abaixo da dificuldade de masmorra escolhida. Baseado no sistema de level sync do Final Fantasy 14.Integer

Usar o ficheiro de pacote meta_pack.yml para masmorras grandes.

Por vezes podes estar a trabalhar numa masmorra grande que inclui outras masmorras mais pequenas dentro de si, permitindo aos jogadores viajar entre elas através do mundo da masmorra principal. Um ótimo exemplo disto é a Adventure Dungeon Primis do EliteMobs.

A Primis apresenta um mundo vasto onde os jogadores podem explorar e completar missões, mas inclui também duas masmorras instanciadas dentro do seu mundo — uma das quais serve de combate contra o boss final. Em casos como este, existirão vários ficheiros de pacote de masmorra, embora todos pertençam à mesma masmorra global.

Para gerir isto, usamos um ficheiro de meta-pacote de masmorra. Este ficheiro funciona como um diretório central, indicando a masmorra principal e listando todo o conteúdo de masmorra adicional a ela associado.

Vejamos mais de perto como está estruturado o meta-pacote de masmorra da Primis:

isEnabled: true
name: '&2[000-020] The Primis Adventure!'
customInfo:
- The tutorial adventure for players
- new to EliteMobs!
downloadLink: https://discord.gg/9f5QSka
dungeonSizeCategory: LAIR
environment: NORMAL
protect: true
contentType: META_PACKAGE
containedPackages:
- primis_adventure.yml
- primis_blood_temple_sanctum.yml
- primis_gladius_invasion_dungeon.yml
setupMenuDescription:
- '&2A soft tutorial adventure for players between levels 0-20!'
- '&2Adventures are massive maps with quests,'
- '&2many bosses and npcs, among other things!'
- '&2Also has custom models!'
dungeonVersion: 21 #added dungeon meta package file

Como podes ver, o ficheiro de meta-pacote de masmorra é muito semelhante a um pacote de masmorra normal, com algumas diferenças importantes. O contentType: está definido como META_PACKAGE, e existe uma definição adicional chamada containedPackages:. Esta definição lista todos os outros pacotes de masmorra que fazem parte da masmorra maior.

Ao criares o teu meta-pacote, não te esqueças de incluir a definição containedPackages: e de listar todos os pacotes de masmorra que fazem parte da tua masmorra maior. Isto garante que tudo fica devidamente ligado e organizado dentro da estrutura global.

Ao versionares a tua masmorra, toda a gestão de versões deve ser feita através do meta-pacote. Isto porque o meta-pacote serve de pacote principal que determina a versão de toda a masmorra e é também o pacote usado para mostrar informação no menu /em setup.

Tem em conta que as masmorras individuais listadas no meta-pacote podem continuar a aparecer no menu de teleports do /em setup. Para evitar isso, terás de desativar manualmente as opções de teletransporte de cada uma dessas masmorras nos respetivos ficheiros de configuração.

Por exemplo, no caso da masmorra Primis:

Desativa as entradas de teletransporte no menu para primis_blood_temple_sanctum.yml e primis_gladius_invasion_dungeon.yml. Deixa as opções de teletransporte ativas para primis_adventure.yml, já que este serve de hub principal onde os jogadores começam a sua jornada e acedem às restantes masmorras. Esta configuração garante uma experiência fluida para os jogadores, mantendo a estrutura e a funcionalidade adequadas para o sistema de masmorras.

Ao dar nome ao ficheiro, recomendamos a seguinte convenção:

your_dungeon_name_meta_pack.yml


Valores de Boss Recomendados

Criar um mob de masmorra médio

Recomendamos deixar a definição normalizedCombat como true. Esta definição normaliza todos os mobs para escalarem de igual forma em vida e dano, independentemente do seu tipo de entidade.

Repara que, para conteúdo de masmorra, isto normalmente já está decidido por ti: enquanto normalizeRegionalBosses for true no MobCombatSettings.yml (a predefinição), todos os bosses regionais e todos os bosses de masmorras instanciadas são forçados a combate normalizado, independentemente do que diga o ficheiro do boss. Os multiplicadores abaixo são, portanto, os valores que realmente importam.

normalizedCombat: true
healthMultiplier: 1.0 #~3 sword hits to slay
damageMultiplier: 1.0 #1.5 hearts of dmg

Nota: dado que 1.0 é o valor predefinido para vida e dano, podes simplesmente omitir a definição de healthMultiplier ou damageMultiplier e definir normalizedCombat como true.

Criar grupos de trash

Os grupos de trash são numerosos mas não muito perigosos:

normalizedCombat: true
healthMultiplier: 0.7 #~2 sword hits to slay
damageMultiplier: 0.5 #0.5 hearts of dmg

Criar reforços

Os reforços devem morrer muito facilmente, mas representar um perigo em termos de dano (estes valores são recomendados para 4 ou mais entidades corpo a corpo; o uso real pode variar):

normalizedCombat: true
healthMultiplier: 0.25 #~1 sword hit to slay
damageMultiplier: 0.6 #1 heart of dmg

Criar minibosses

Os minibosses devem aguentar-se e representar um desafio de mecânicas para os jogadores. Deve ser um teste de perícia que dure algum tempo, mas não algo extremamente letal:

normalizedCombat: true
healthMultiplier: 3.0 #~10 sword hits to slay
damageMultiplier: 1.2 #2 hearts of dmg

Criar bosses

Os bosses são um verdadeiro desafio, o culminar de uma escalada numa masmorra e um verdadeiro teste de perícia com tudo em jogo. Os encontros devem ser longos e a morte deve ser uma ameaça presente.

normalizedCombat: true
healthMultiplier: 7.0 #~23 sword hits to slay
damageMultiplier: 1.4 #2.5 hearts of dmg

Estes valores recomendados são meras estimativas aproximadas, e os valores finais devem ser ajustados de acordo com os encontros específicos.

Isto é particularmente importante para os bosses finais de masmorra; podes querer ultrapassar significativamente o valor recomendado de 7.0 para o healthMultiplier, para dar ao último combate aquela sensação épica.

Atenção ao teto de vida antes de aumentares o healthMultiplier

A vida dos bosses é limitada pelo settings.attribute.maxHealth.max do servidor (2048 num servidor por predefinição) e o dano dos bosses não é limitado. Cada multiplicador tem, por isso, um nível a partir do qual o boss deixa de ganhar vida enquanto o seu dano continua a escalar — 7.0 atinge o limite no nível 36, 10.0 no nível 33, 40.0 no nível 23. Subir o multiplicador acima do ponto em que já atinge o limite não te dá nada além de um boss mais frágil. Consulta healthMultiplier para a tabela completa e para saberes como aumentar o teto.


Empacotar conteúdo do EliteMobs para distribuição

Por fim, provavelmente vais querer empacotar a tua masmorra, seja para arquivo, seja para distribuição.

O EliteMobs tem um sistema de importação que permite aos administradores importar, instalar e desinstalar conteúdo rapidamente. Podes ver como funciona aqui.

Distribuir Resource Packs de Masmorras

A partir do EliteMobs 9.6.0, as masmorras podem ser empacotadas e distribuídas com os seus próprios resource packs! Isto permite-te fazer coisas fixes, como usar texturas ou modelos personalizados para o loot largado na masmorra, ou acrescentar sons personalizados — como fizemos na nossa masmorra The Hallowed Haunt.

Para distribuir um resource pack com a tua masmorra, cria-o como qualquer resource pack normal. Se quiseres um modelo, podes usar como referência o resource pack predefinido do EliteMobs, que o EliteMobs exporta no arranque para plugins/EliteMobs/resource_pack/em_rsp_defaults/. O resource pack tem de ser distribuído descomprimido, por isso cria uma pasta com o nome da tua masmorra, por exemplo: my_cool_dungeon_rsp. Coloca dentro dessa pasta todos os ficheiros do resource pack que normalmente iriam para o zip. Depois, coloca essa pasta dentro de uma nova pasta chamada resource_pack — a mesma pasta que o EliteMobs usa para guardar o seu resource pack predefinido.

Não edites o próprio em_rsp_defaults: o EliteMobs calcula o checksum da cópia existente no seu jar a cada arranque e apaga e reexporta a pasta sempre que as duas divergem, pelo que as tuas alterações se perderiam.

Depois de organizares os ficheiros, a estrutura de diretórios deve ficar assim:

resource_pack
└── my_cool_dungeon_rsp
└── [resource pack files]

Uma vez concluído, o resource pack da tua masmorra deverá ser importado com sucesso quando a masmorra for instalada.

Recortar Mundos

Por vezes, pode ser necessário reduzir o tamanho do teu mundo Minecraft para o tornar mais leve e, consequentemente, mais fácil de distribuir. Isto pode ser conseguido através do plugin WorldBorder. Apesar de o plugin estar listado como suportando o MineCraft apenas até à versão 1.19, funciona sem problemas na versão mais recente do MineCraft à data de 25 de janeiro de 2024.

Details

Dica Se estás a fazer isto pela primeira vez, pode ser boa ideia criares uma cópia de segurança do teu mundo, caso algo corra mal.

Depois de instalares o plugin, dirige-te ao meio do mundo ou à área específica que queres recortar. Depois, executa o comando /wb set x, em que x representa o raio aproximado que queres para a tua área.

Details

Dica Se o /wb não estiver a funcionar, experimenta /worldborder:wb.

Depois de executares este comando, voa até aos limites do teu mundo para confirmares que a fronteira do mundo foi corretamente definida e cobre o tamanho pretendido. Vais perceber que chegaste ao limite quando fores empurrado para trás, acompanhado de uma mensagem no chat.

trim_pic_1.jpg

Na imagem acima, o objetivo é recortar o mundo em torno dos blocos roxos, deixando apenas alguns chunks à volta deles. Para isso, colocamo-nos no meio da área roxa, sobre os quadrados vermelhos, e executamos /wb set 50, definindo a fronteira do mundo logo a seguir à área roxa.

De seguida, usamos o comando /wb trim [freq] [pad], com a frequência definida como 200 e o pad como 20. O pad determina quantos chunks devem ficar à volta da fronteira do mundo (a área roxa), e a frequência determina quantos chunks devem ser processados por segundo. Depois de executar /wb trim 200 20, ser-nos-á pedido que confirmemos executando /wb trim confirm. Confirmamos a ação e, passado algum tempo, o nosso mundo ficará recortado, reduzindo o seu tamanho e tornando-o mais conveniente para distribuição.

Podes agora remover a fronteira do mundo com /wb clear all ou simplesmente deixá-la, se preferires.

Recortar a pasta do mundo

Existem vários ficheiros e pastas na pasta do teu mundo que podemos descartar, já que os plugins não usam todos. Isto reduz o tamanho do teu mundo e torna-o mais fácil de distribuir.

Para um ambiente de mundo NORMAL:

Para preparares o teu mundo, mantém os seguintes ficheiros e pastas:

  1. pasta region
  2. raids.dat de dentro da pasta data (certifica-te de que fica dentro da pasta data ao copiar)
  3. ficheiro level.dat

Podes apagar em segurança todos os outros ficheiros e pastas da pasta do mundo. Isto configura corretamente o teu mundo para o ambiente NORMAL.

Para os ambientes de mundo NETHER e THE_END:

Para preparares o teu mundo, mantém os seguintes ficheiros e pastas:

  1. pasta region dentro da pasta DIM-1 (certifica-te de que fica dentro da pasta DIM-1 ao copiar)
  2. raids.dat de dentro da pasta data (certifica-te de que fica dentro da pasta data ao copiar)
  3. ficheiro level.dat

Podes apagar em segurança todos os outros ficheiros e pastas da pasta do mundo. Isto configura corretamente o teu mundo para os ambientes NETHER e THE_END.

Executar o comando de empacotamento

O EliteMobs tem o comando /em package <dungeonName> <version>. Este comando procura uma subpasta chamada dungeonName dentro de cada uma das pastas de conteúdo abaixo e copia o que encontrar para exports/<dungeonName>/, comprimindo depois isso em exports/<dungeonName>_packaged.zip.

As pastas que analisa são, por ordem:

custombosses, customevents, npcs, customitems, customquests, customarenas, customspawns, customtreasurechests, wormholes, world_blueprints, powers

Tudo o que não conseguir encontrar imprime um aviso de "no subdirectory" e é ignorado, o que é normal num pacote que não usa todos os tipos de conteúdo.

Por esta razão, é altamente recomendável que mantenhas o conteúdo que queres empacotar em pastas com o mesmo nome do teu pacote. Caso contrário, terás de reunir e empacotar manualmente os ficheiros na estrutura adequada para distribuição.

Repara que o /em package não recolhe content_packages, worldcontainer, models nem resource_pack. Essas quatro têm de ser acrescentadas à pasta de exportação à mão antes de comprimires.

Adicionar o ficheiro do pacote de masmorra

Se estás a criar uma masmorra, terás de acrescentar manualmente o ficheiro do pacote de masmorra à pasta acabada de gerar na pasta exports. O teu ficheiro de configuração de pacote de masmorra deve seguir o formato descrito acima e ser colocado numa pasta chamada content_packages. Consulta a secção Estrutura de ficheiros abaixo para mais detalhes.

Não te esqueças de comprimir a tua masmorra quando terminares!

Estrutura de ficheiros

Se fizeste tudo corretamente, a estrutura de ficheiros deverá ser semelhante a este exemplo, em que chamámos à masmorra my_cool_dungeon:

Exemplo de estrutura de ficheiros de my_cool_dungeon
  • my_cool_dungeon.zip
    • content_packages
      • my_cool_dungeon.yml <- É aqui que vai o teu ficheiro de configuração do pacote de masmorra
    • worldcontainer
      • [As tuas pastas de mundo vão aqui]
    • wormholes
      • my_cool_dungeon
        • [Os teus wormholes vão aqui]
    • npcs
      • my_cool_dungeon
        • [Os teus NPCs vão aqui]
    • customtreasurechests
      • my_cool_dungeon
        • [Os teus baús de tesouro vão aqui]
    • customquests
      • my_cool_dungeon
        • [As tuas missões vão aqui]
    • customitems
      • my_cool_dungeon
        • [Os teus itens personalizados vão aqui]
    • custombosses
      • my_cool_dungeon
        • [Os teus bosses personalizados vão aqui]
    • customarenas
      • my_cool_dungeon
        • [As tuas arenas personalizadas vão aqui]
    • powers
      • my_cool_dungeon
        • [Os teus poderes personalizados vão aqui]
    • world_blueprints
      • my_cool_dungeon
        • [A tua pasta de mundo vai aqui, usada para masmorras instanciadas]
    • customevents
      • my_cool_dungeon
        • [Os teus eventos personalizados vão aqui]
    • customspawns
      • my_cool_dungeon
        • [Os teus spawns personalizados vão aqui]
    • models
      • [Os teus modelos em formato bbmodel vão aqui; aceita pastas]
    • scripts
      • [Os teus scripts Lua do FreeMinecraftModels vão aqui]
    • resource_pack
      • my_cool_dungeon_rsp
        • [Os ficheiros do teu resource pack vão aqui]

Isto permite que a maioria dos utilizadores arraste e largue os ficheiros diretamente no seu servidor e tenha tudo a funcionar de imediato.

Pastas de nível superior reconhecidas

O importador só reconhece um conjunto fixo de nomes de nível superior. Para um pacote do EliteMobs (pack.meta a conter elitemobs), são estes:

PastaOnde é instalada
content_packagesplugins/EliteMobs/content_packages
dungeonpackagesplugins/EliteMobs/content_packages (alias legado)
custombossesplugins/EliteMobs/custombosses
customitemsplugins/EliteMobs/customitems
customtreasurechestsplugins/EliteMobs/customtreasurechests
customeventsplugins/EliteMobs/customevents
customspawnsplugins/EliteMobs/customspawns
customquestsplugins/EliteMobs/customquests
customarenasplugins/EliteMobs/customarenas
npcsplugins/EliteMobs/npcs
wormholesplugins/EliteMobs/wormholes
powersplugins/EliteMobs/powers
world_blueprintsplugins/EliteMobs/world_blueprints
resource_packplugins/EliteMobs/resource_pack
worldcontainero contentor de mundos do servidor
models ou modelenginea pasta de modelos do FreeMinecraftModels se este estiver instalado; caso contrário, a pasta blueprints do ModelEngine
scriptsplugins/FreeMinecraftModels/scripts
pack.metanão é instalada em lado nenhum — é apenas lida para identificar o pacote

Qualquer outra coisa no nível superior do zip não é reconhecida e não será instalada, por isso mantém ficheiros readme soltos, capturas de ecrã e pastas __MACOSX fora da raiz do arquivo.

schematics é um caso especial: importá-la para o EliteMobs imprime um aviso a informar-te de que as masmorras em schematic foram removidas no EliteMobs 9.0.

Importante: ao empacotar para distribuição, certifica-te de que DESINSTALAS PRIMEIRO A MINIDUNGEON! Não queres distribuir minidungeons instaladas; queres que os administradores as configurem nos seus próprios servidores!

Partilhar com a comunidade os Pacotes de Masmorra que criaste

O Discord tem uma secção #community_dungeons onde as pessoas podem partilhar as suas criações de Minidungeons. Fica à vontade para contribuir!