跳到主要内容

Dungeon Packager

webapp_banner.jpg

什么是地下城?

您可以在这里找到关于地下城的信息,包括预制地下城的信息。


什么是 dungeon packager?

dungeon packager 允许管理员不仅创建和打包地下城,还可以打包任何类型的 EliteMobs 内容。这包括事件包、模型包、竞技场、NPC 包、物品包等。

为什么使用 dungeon packages?
  • Instanced dungeons! Instanced dungeons 只能通过 dungeon package 系统创建。
  • Minidungeons 的安全备份! 如果您创建了一个 Dungeon Package,您将能够随时随地在任何服务器上部署和重新部署它。
  • 轻松开关! 您可以随时使用 /em setup 临时或永久地打开或关闭 Dungeon Packages。
  • 轻松分享! 如果您想分享您的创作,Dungeon Packages 可以直接压缩并发送给其他人。如果您感兴趣,Discord 上有一个专门的社区创作频道!
  • 传送点! Dungeon packages 会自动创建传送位置,可以在 /em 菜单的传送页面中访问,这在很多设置中可能非常有用。

创建地下城

以下设置用于创建应放入 content_packages 文件夹的配置文件。这些设置专门用于创建地下城,如果您只想使用 dungeon packager 来分发非地下城内容(如物品包或事件),则不需要这些设置。

必需的插件

为了使用 Dungeon Packager,您需要以下插件:

WorldGuard - 保护 Minidungeon

逐步创建地下城

EliteMobs 过去有两种主要的地下城类型:基于世界的和基于原理图的。

基于原理图的地下城与原理图构建相关联。它们现在已被淘汰且不再受支持。

所有 EliteMobs 地下城现在都是基于世界的。

必需的 pack.meta 文件

您的 dungeon package 应该包含一个 pack.meta 文件,这只是一个重命名的 .txt 文件,扩展名为 .meta。此文件应该只包含一个单词,表示该包适用于哪个插件(例如,"elitemobs",以小写字母书写)。pack.meta 文件必须位于包的根目录中,与所有其他文件夹并列。


全局值

以下值适用于所有地下城

isEnabled

设置是否启用 dungeon package。

KeyValuesDefaultMandatory
isEnabledBooleanfalse
示例
isEnabled: true

name

设置内容的名称。支持颜色代码

KeyValuesDefaultMandatory
nameStringfalse
示例
name: '&c[lvl 999] &aThe Green Dungeon'

create_packager_name.jpg


dungeonLocationType

设置地下城使用的位置类型。

KeyValuesDefaultMandatory
dungeonLocationTypeWORLD / INSTANCEDnone
示例
dungeonLocationType: WORLD

contentType

设置地下城的类型。

KeyValuesDefaultMandatory
contentTypeOPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEONS / HUBnone
示例
contentType: INSTANCED_DUNGEON

customInfo

设置将在 /em setup 屏幕中显示的附加信息。仅用于信息目的。支持颜色代码

KeyValuesDefaultMandatory
customInfoString Listnone
示例
customInfo:
- '&a最好的地下城。'
- '&a制作者:CoolPlayer'

create_packager_custominfo.jpg


设置内容未下载时的下载链接。仅用于信息目的。

KeyValuesDefaultMandatory
downloadLinkStringnone
示例
downloadLink: http://www.example.org

create_packager_downloadlink.jpg


dungeonSizeCategory

设置 dungeon package 的大小类别。仅用于信息目的。

KeyValuesDefaultMandatory
dungeonSizeCategorySpecial [1]none
示例
dungeonSizeCategory: MINIDUNGEON

create_packager_size.jpg

Special [1]

展开表格
Key描述
LAIRLairs 是一种小型地下城,专注于一场大型首领战斗。
SANCTUMSanctums 是 instanced Lairs 的等价物。这意味着它们专注于一场大型首领战斗。
MINIDUNGEONMinidungeons 是一种中等大小的地下城,通常包含 3-15 个小首领和一个大首领,以及大量的"垃圾"怪物,旨在让玩家"刷"金币和装备。
DUNGEONDungeons 是 instanced Minidungeons 的等价物。这是最传统的 MMORPG 类型的地下城,玩家组队穿过一系列垃圾怪物和小首领,最后挑战最终首领。
RAID即将推出!
ADVENTUREAdventures 是完整的冒险地图。它们包括任务线、NPC、大量小首领和首领,甚至可以包含自己的竞技场或地下城。
ARENAArenas 是基于波次的生存区域,玩家击败波次后会获得奖励。
OTHER任何不属于以上类别的其他内容。

有关更详细的描述,请参阅 Dungeons


protect

设置 dungeon package 是否应该受到 WorldGuard 保护。

KeyValuesDefaultMandatory
protectBooleantrue
示例
protect: true

dungeonVersion

设置 dungeon package 的版本。

KeyValuesDefaultMandatory
dungeonVersionIntegernone
示例
dungeonVersion: 1

playerInfo

设置出现在菜单中的信息。支持颜色代码

仅在使用 /em alt/em 设置为书本模式时有效。

KeyValuesDefaultMandatory
playerInfoStringnone
示例
playerInfo: 'Difficulty: &a1-man easy content!'

create_packager_playerinfo.jpg


regionEnterMessage

设置玩家进入地下城区域时显示的消息。支持颜色代码

KeyValuesDefaultMandatory
regionEnterMessageStringnone
示例
regionEnterMessage: '&a您已进入地下城!'

create_packager_enter.jpg


regionLeaveMessage

设置玩家离开地下城区域时显示的消息。支持颜色代码

KeyValuesDefaultMandatory
regionLeaveMessageStringnone
示例
regionLeaveMessage: '&a您已离开地下城!'

create_packager_leave.jpg


hasCustomModels

设置 dungeon package 是否有自定义模型(用于 ModelEngine 或 FreeMinecraftModels)。

KeyValuesDefaultMandatory
hasCustomModelsBooleannone
示例
hasCustomModels: false

dungeonConfigFolderName

设置与此地下城相关联的文件所使用的文件夹名称。

对于 instanced dungeons 是必需的!

KeyValuesDefaultMandatory
dungeonConfigFolderNameStringnone
示例
dungeonConfigFolderName: my_dungeon_folder

contentLevel

设置地下城应该在 EM 菜单中显示的内容等级。

KeyValuesDefaultMandatory
contentLevelIntegernone
示例
contentLevel: 20

enchantmentChallenge

设置地下城是否应该是 Enchantment Challenge 地下城。

KeyValuesDefaultMandatory
enchantmentChallengeBooleanfalse
示例
enchantmentChallenge: false

song

设置地下城是否应该有配乐。

KeyValuesDefaultMandatory
songStringnone

name= 这里定义应该播放资源包中的哪个文件。 length= 配乐的长度,以毫秒为单位。

示例
song: name=elitemobs:dark_cathedral.ambient length=93830

dungeonLockoutMinutes

在击败地下城的首领后设置地下城锁定计时器。指定的值以分钟为单位。

KeyValuesDefaultMandatory
dungeonLockoutMinutesIntegernone
示例
dungeonLockoutMinutes: 1440

基于世界的 dungeon packages

以下值仅适用于基于世界的地下城。


worldName

设置应该打包的世界名称。

KeyValuesDefaultMandatory
worldNameStringnone
示例
worldName: my_minecraft_world

womholeWorldName

此功能设置虫洞世界的名称,它作为与主世界链接的次要世界。它用于传送中心或独特的首领房间等功能。

KeyValuesDefaultMandatory
womholeWorldNameStringnone
示例
womholeWorldName: my_minecraft_world_wormhole

environment

设置世界的环境。

KeyValuesDefaultMandatory
environmentEnvironmentnone
示例
environment: NORMAL

teleportLocation

设置 dungeon package 的传送位置。这是玩家进入地下城时将被传送到的位置。

KeyValuesDefaultMandatory
teleportLocationStringnone
示例
teleportLocation: my_minecraft_world,-1.5,68,0.5,0.0,0.0

allowExplosionBlockDamage

允许或阻止爆炸对地下城中的方块造成伤害。爆炸被视为精英爆炸,因此对方块的任何伤害都将在 2 分钟内恢复。

KeyValuesDefaultMandatory
allowExplosionBlockDamageBooleanfalse
示例
allowExplosionBlockDamage: true

Instanced dungeons

Instanced dungeons 在每次一组玩家想要完成地下城时创建一个新世界,并在完成后删除它。为了使其正常工作,您必须在 EliteMobs 的 world_blueprints 配置文件夹中放置一个遵循 dungeonConfigFolderName 的文件夹。

然后您将要使用的世界放置在您创建的文件夹中,确保删除世界的 session.lock 文件。

以下值仅适用于 instanced dungeons。请注意,所有 instanced dungeons 都是世界地下城,因此它们也使用世界地下城的值。


startLocation

设置 instanced dungeon 起点的传送位置。这是玩家使用 /em start 开始 instanced dungeon 时将被传送到的位置。

KeyValuesDefaultMandatory
startLocationStringnone
示例
startLocation: my_minecraft_world,10.5,70,10.5,0.0,0.0

permission

设置进入 dungeon instance 所需的权限。

KeyValuesDefaultMandatory
permissionStringnone
示例
permission: elitedungeon.mypermission

minPlayerCount

设置开始地下城所需的最少玩家数量。

KeyValuesDefaultMandatory
minPlayerCountInteger1
示例
minPlayerCount: 1

maxPlayerCount

设置开始地下城所需的最少玩家数量。

KeyValuesDefaultMandatory
maxPlayerCountInteger5
示例
maxPlayerCount: 5

dungeonObjectives

设置地下城被视为完成所需的地下城目标列表。

KeyValuesDefaultMandatory
dungeonObjectivesString Listnone
示例

目前有两种地下城目标类型:

  • 击杀目标:filename=boss.yml:amount=X
  • 击杀地下城的百分比:clearpercentage=X.Y
dungeonObjectives:
- filename=dungeon_final_boss.yml
- filename=dungeon_miniboss_one.yml
- filename=dungeon_miniboss_two.yml
dungeonObjectives:
- clearpercentage=0.8

difficulties

设置 instanced dungeon 中的难度列表。

对于 instanced dungeons 是必需的!

KeyValuesDefaultMandatory
difficultiesSpecial [1]none
示例
difficulties:
- levelSync: 25
id: 0
name: normal
- levelSync: 20
id: 1
name: hard
- levelSync: 15
id: 2
name: mythic

create_packager_difficulty.jpg

Special [1]

展开表格

设置 instanced dungeon 难度将在进入地下城时自动创建不同的难度选项。

这里设置的难度名称将在自定义首领文件夹中使用,您可以根据难度设置首领拥有哪些能力。

难度采用列表格式,具有以下字段:

Key描述ValuesMandatory
name玩家的难度名称。String
id难度的 ID,在自定义首领和自定义物品中用于基于难度的功能。String
levelSync设置等级同步的等级(如果有)。等级同步使所有玩家装备最高达到设置的值,使玩家无法在地下城中等级过高,并使其在后续运行中保持相关性。基于《最终幻想 14》的等级同步系统。Integer

Dynamic dungeons

Dynamic dungeons 是 instanced dungeons 的扩展,但有一个关键区别:它们允许地下城的内容根据玩家选择的难度等级进行缩放。玩家可用的等级选项由玩家解锁的公会等级决定。

在为 dynamic dungeon 设计首领和怪物时,使用设置 level: dynamic。dynamic dungeons 中的任何战利品都应该设置为 scalability: scalable

dynamic dungeons 需要以下值。 由于所有 dynamic dungeons 也都是 instanced dungeons,它们还使用 instanced dungeons 的所有值和设置。


contentType

设置地下城的类型。这必须设置为 DYNAMIC_DUNGEON

KeyValuesDefaultMandatory
contentTypeOPEN_DUNGEON / INSTANCED_DUNGEON / DYNAMIC_DUNGEON / HUBnone
示例
contentType: DYNAMIC_DUNGEON

contentLevel

设置地下城应该在 EM 菜单中显示的内容等级。这需要设置为 -1 的值,以便将地下城显示为 dynamic dungeon。

KeyValuesDefaultMandatory
contentLevelIntegernone
示例
contentLevel: -1

difficulties

设置 dynamic dungeon 中可用的难度列表和等级同步。

对于 instanced dungeons 是必需的!

KeyValuesDefaultMandatory
difficultiesSpecial [1]none
示例
difficulties:
- levelSync: '+5'
name: normal
id: 0
- levelSync: '+0'
name: hard
id: 1
- levelSync: '-5'
name: mythic
id: 2

create_packager_difficulty.jpg

Special [1]

展开表格

设置 instanced dungeon 难度将在进入地下城时自动创建不同的难度选项。

这里设置的难度名称将在自定义首领文件夹中使用,您可以根据难度设置首领拥有哪些能力。

levelSync 值设置为带引号的正数或负数可以控制玩家装备在地下城内的同步方式。这些值不会影响地下城本身的等级——地下城内容始终在进入时直接同步到玩家的等级选择。

例如,如果 levelSync 设置为 "+0",玩家的装备将同步到与地下城内容等级完全匹配。 如果设置为 "+5",玩家的装备将同步到高于地下城内容 5 个等级。 如果设置为 "-5",他们的装备将同步到低于地下城内容 5 个等级。

难度采用列表格式,具有以下字段:

Key描述ValuesMandatory
name玩家的难度名称。String
id难度的 ID,在自定义首领和自定义物品中用于基于难度的功能。String
levelSync设置玩家装备缩放的等级。这决定了玩家的装备等级相对于地下城内容如何调整,允许装备比所选地下城难度高几个等级或低几个等级。基于《最终幻想 14》的等级同步系统。
Integer

为大型地下城使用 meta_pack.yml dungeon package 文件。

有时,您可能正在制作一个包含其他较小地下城的大型地下城,允许玩家通过主地下城世界在它们之间旅行。这方面的一个很好的例子是 EliteMobs Adventure Dungeon Primis。

Primis 拥有一个广阔的世界,玩家可以在其中探索和完成任务,但它的世界内还包括两个 instanced dungeons——其中一个作为最终首领战。在这种情况下,将有多个 dungeon package 文件,尽管它们都属于同一个总体地下城。

为了管理这一点,我们使用 meta dungeon package 文件。此文件充当中央目录,指定主地下城并列出与其关联的所有其他地下城内容。

让我们仔细看看 Primis meta dungeon package 的结构:

isEnabled: true
name: '&2[000-020] The Primis Adventure!'
customInfo:
- The tutorial adventure for players
- new to EliteMobs!
downloadLinkV2: 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

如您所见,meta dungeon package 文件与常规 dungeon package 非常相似,但有一些关键区别。contentType: 设置为 META_PACKAGE,还有一个名为 containedPackages: 的附加设置。此设置列出了属于较大地下城的所有其他 dungeon packages。

创建 meta package 时,请确保包含 containedPackages: 设置并列出属于您的较大地下城的每个 dungeon package。这确保了一切都在总体结构中正确链接和组织。

在对地下城进行版本控制时,所有版本控制都应该通过 meta package 进行管理。这是因为 meta package 充当主要包,确定整个地下城的版本,也是用于在 /em setup 菜单中显示信息的包。

请记住,meta package 中列出的各个地下城可能仍会出现在 /em teleport 菜单中。为了防止这种情况,您需要在每个地下城的相应配置文件中手动禁用传送选项。

例如,在 Primis 地下城的情况下:

primis_blood_temple_sanctum.ymlprimis_gladius_invasion_dungeon.yml 的菜单中禁用传送条目。 为 primis_adventure.yml 启用传送选项,因为这是玩家开始旅程并访问其他地下城的主中心。 此设置确保了玩家的流畅体验,同时保持地下城系统的正确结构和功能。

在命名文件时,我们建议使用以下命名约定:

your_dungeon_name_meta_pack.yml


推荐的首领数值

创建普通地下城怪物

我们建议将设置 normalizedCombat 设置为 true。此设置使所有怪物在生命值和伤害方面平等缩放,无论它们的实体类型如何。

normalizedCombat: true
healthMultiplier: 1.0 #4 次击杀
damageMultiplier: 1.0 #1.5 颗心的伤害

当然,这是保留清晰度和格式的修订版本:

注意:鉴于 1.0 是生命值和伤害的默认值,您可以简单地省略定义 healthMultiplierdamageMultiplier,并将 normalizedCombat 设置为 true

创建垃圾包

垃圾包数量众多但不是很危险:

normalizedCombat: true
healthMultiplier: 0.7 #3 次击杀
damageMultiplier: 0.5 #0.5 颗心的伤害

创建增援

增援应该很容易死亡,但在伤害方面构成威胁(这些值推荐用于 4+ 近战实体,实际使用可能会有所不同):

normalizedCombat: true
healthMultiplier: 0.25 #1 次击杀
damageMultiplier: 0.6 #1 颗心的伤害

创建小首领

小首领应该坚守阵地,并对玩家构成机制挑战。它应该是持续一段时间的技能测试,但不是极其致命的东西:

normalizedCombat: true
healthMultiplier: 3.0 #10 次击杀
damageMultiplier: 1.2 #2 颗心的伤害

创建首领

首领是真正的挑战,是地下城中积累的结论,是真正的技能测试,一切都岌岌可危。遭遇应该很长,死亡应该是一个当前的威胁。

normalizedCombat: true
healthMultiplier: 7.0 #23 次击杀
damageMultiplier: 1.4 #2.5 颗心的伤害

这些推荐值只是粗略的估计,最终值应该根据具体的遭遇进行调整。

这对于最终地下城首领尤其重要;您可能希望大大超过推荐的 7.0 值的 healthMultiplier,以给最后的战斗带来史诗般的感觉。


打包 EliteMobs 内容以进行分发

最后,您可能希望打包您的地下城以进行存储或分发。

EliteMobs 有一个导入系统,允许管理员快速导入、安装和卸载内容。您可以在这里看到它是如何工作的。

分发 Dungeon Resource Packs

从 EliteMobs 9.6.0 开始,地下城可以与它们自己的资源包一起打包和分发!这允许您做一些很酷的事情,比如为地下城中掉落的战利品使用自定义纹理或模型,或者添加自定义声音——就像我们在地下城 The Hallowed Haunt 中所做的那样。

要使用地下城分发资源包,请像创建任何标准资源包一样创建它。如果您想要一个模板,可以参考 EliteMobs 默认资源包。资源包必须以未压缩的方式分发,因此创建一个以您的地下城命名的文件夹,例如:my_cool_dungeon_rsp。将通常放入 zip 中的所有资源包文件放入此文件夹中。然后,将此文件夹放入名为 resource_pack 的新文件夹中——这是 EliteMobs 用于存储其默认资源包的同一个文件夹。

组织文件后,目录结构应如下所示:

resource_pack
└── my_cool_dungeon_rsp
└── [资源包文件]

完成后,您的地下城资源包应该在安装地下城时成功导入。

修剪世界

有时,您可能需要减小 Minecraft 世界的大小以使其更轻,从而更容易分发。这可以通过使用 WorldBorder plugin 来实现。尽管插件被列为仅支持 MineCraft 到版本 1.19,但它在截至 2024 年 1 月 25 日的最新 MineCraft 版本上无缝运行。

Details

提示 如果您是第一次这样做,最好创建一个世界的备份,以防出现问题。

安装插件后,导航到世界的中心或您希望修剪的特定区域。然后,执行命令 /wb set x,其中 x 表示您希望的区域的大致半径大小。

Details

提示 如果 /wb 对您不起作用,请尝试 /worldborder:wb

执行此命令后,飞到世界的边缘以验证世界边界已正确设置并覆盖预期的大小。当您被推回并在聊天中收到消息时,您将认识到到达世界边界边缘。

trim_pic_1.jpg

在上面的图像中,我们的目标是修剪紫色方块周围的世界,只在它们周围留下几个区块。为了实现这一点,我们站在红色方块上的紫色区域中间并执行 /wb set 50,将世界边界设置在紫色区域之外。

接下来,我们使用 /wb trim [freq] [pad] 命令,频率设置为 200,填充设置为 20。填充确定应该在世界边界(紫色区域)周围留下多少个区块,频率确定每秒应该处理多少个区块。运行 /wb trim 200 20 后,我们将被提示通过执行 /wb trim confirm 来确认。我们确认操作,经过一段时间后,我们的世界将被修剪,减小其大小并使其更便于分发。

您现在可以使用 /wb clear all 删除世界边界,或者如果您愿意,可以保留它。

修剪世界文件夹

世界文件夹中有几个文件和文件夹,我们可以丢弃,因为插件不使用所有这些文件。这将减小世界的大小并使其更容易分发。

对于 NORMAL 世界环境:

要准备您的世界,请保留以下文件和文件夹:

  1. region 文件夹
  2. raids.datdata 文件夹内(确保在复制时将其放置在 data 文件夹内)
  3. level.dat 文件

您可以安全地删除世界文件夹中的所有其他文件和文件夹。这将为 NORMAL 环境正确设置您的世界。

对于 NETHER 和 THE_END 世界环境:

要准备您的世界,请保留以下文件和文件夹:

  1. DIM-1 文件夹内的 region 文件夹(确保在复制时将其放置在 DIM-1 文件夹内)
  2. raids.datdata 文件夹内(确保在复制时将其放置在 data 文件夹内)
  3. level.dat 文件

您可以安全地删除世界文件夹中的所有其他文件和文件夹。这将为 NETHER 和 THE_END 环境正确设置您的世界。

运行打包命令

EliteMobs 有 /em package <dungeonName> <version> 命令。此命令遍历 EliteMobs 的所有配置文件夹,并自动将与 dungeonName 匹配的文件夹中的所有内容打包到 EliteMobs 的 exports 文件夹中的压缩文件和普通文件夹中。

因此,强烈建议您将要打包的内容保存在与包名称相同的文件夹中。 否则,您将不得不手动收集和打包文件到文件结构中以进行分发。

添加 dungeon package 文件

如果您正在创建地下城,您需要手动将 dungeon package 文件添加到导出文件夹中新生成的文件夹中。您的 dungeon package 配置文件应遵循上述格式,并放置在名为 content_packages 的文件夹中。查看文件结构以了解更多信息。

完成后确保压缩您的地下城!

文件结构

如果您正确完成了所有操作,文件结构应该类似于此示例,我们将地下城称为 my_cool_dungeon

my_cool_dungeon 文件结构示例
  • my_cool_dungeon.zip
    • content_packages
      • my_cool_dungeon.yml <- 这是您的 dungeon package 配置文件的位置
    • worldcontainer
      • [您的世界文件夹放在这里]
    • wormholes
      • my_cool_dungeon
        • [您的虫洞放在这里]
    • npcs
      • my_cool_dungeon
        • [您的 NPC 放在这里]
    • customtreasurechests
      • my_cool_dungeon
        • [您的宝藏箱放在这里]
    • customquests
      • my_cool_dungeon
        • [您的任务放在这里]
    • customitems
      • my_cool_dungeon
        • [您的自定义物品放在这里]
    • custombosses
      • my_cool_dungeon
        • [您的自定义首领放在这里]
    • customarenas
      • my_cool_dungeon
        • [您的自定义竞技场放在这里]
    • powers
      • my_cool_dungeon
        • [您的自定义能力放在这里]
    • world_blueprints
      • my_cool_dungeon
        • [您的世界文件夹放在这里,用于 instanced dungeons]
    • customevents
      • my_cool_dungeon
        • [您的自定义事件放在这里]
    • customspawns
      • my_cool_dungeon
        • [您的自定义生成放在这里]
    • models
      • [您的 ModelEngine bbmodel 格式模型放在这里,接受文件夹]

这允许大多数用户将文件直接拖放到他们的服务器上并立即使其工作。

重要提示:打包进行分发时,请确保您首先卸载了 MINIDUNGEON!您不想分发已安装的 minidungeons,您希望管理员在他们的服务器上设置它们!

分享您创建的 Dungeon Packages 给社区

Discord 包含一个 #community_dungeons 部分,人们可以在那里分享他们的 Minidungeon 创作。随意贡献!