跳到主要内容

创建事件

webapp_banner.jpg

本指南适用于 EliteMobs 10 及更高版本

什么是自定义事件?

这里所说的自定义事件指的是在游戏中随机发生的事件,无论是基于玩家行为还是采用定时触发。插件预装了若干自定义事件,举几个例子,比如炎魔(Balrog)事件、海妖(Kraken)事件和宝藏哥布林(Treasure Goblin)事件。

之所以称这个系统为 自定义 事件,是因为这些事件不仅可以被自定义,还可以从零开始创建。下面是一份关于如何创建和自定义你自己的事件的指南。

创建你的自定义事件

自定义事件配置文件应创建在: plugins/EliteMobs/customevents/

文件必须使用 .yml 格式。文件名(不含 .yml 扩展名)即成为事件的标识符。

示例:my_cool_event.yml 被引用为 my_cool_event

通用配置设置

以下设置可以 / 应该同时用于动作事件和定时事件。


isEnabled

设置事件是否启用。

默认值
isEnabled布尔值true
示例
isEnabled: true

eventType

设置事件的类型。

默认值
eventTypeBREAK_BLOCK / FISH / TILL_SOIL / TIMEDDEFAULT

请注意,BREAK_BLOCKFISHTILL_SOIL 属于 动作事件,而 TIMED 属于 定时事件

eventType 是必填项。 DEFAULT 只是当该设置缺失、或者取值与上面任何一种类型都不匹配时 EliteMobs 所回退到的占位值。停留在 DEFAULT 的事件会记录一条警告,并且根本不会被注册,因此它下面的所有设置甚至都不会被读取。

示例
eventType: BREAK_BLOCK

bossFilenames

设置将被生成的 Boss 列表。必填!

默认值
bossFilenames字符串列表
示例
bossFilenames:
- balrog.yml
- my_event_boss.yml

announcementPriority

设置 公告优先级

默认值
announcementPriority整数0
示例
announcementPriority: 1

startMessage

设置事件开始时发送的消息。

默认值
startMessage字符串
示例
startMessage: An event has started!

create_events_start_message.jpg


endMessage

设置事件结束时发送的消息。

默认值
endMessage字符串
示例
endMessage: An event has ended!

create_events_end_message.jpg


eventStartCommands

设置在事件开始时运行的命令。

默认值
eventStartCommands字符串列表
示例
eventStartCommands:
- say The event now starts!!
- "$chance=0.5$ say What a spawn!"

create_events_start_commands.jpg


eventEndCommands

设置在事件结束时运行的命令。

默认值
eventEndCommands字符串列表
示例
eventEndCommands:
- say The event ends, so sad.
- "$chance=0.5$ say Too slow bud!"

create_events_end_commands.jpg


minimumPlayerCount

设置事件开始前所需的最少在线玩家数量。

此项只会针对动作事件进行检查。定时事件会忽略它 —— 它们只要求至少有一名玩家在线。

默认值
minimumPlayerCount整数1
示例
minimumPlayerCount: 5

事件配置示例
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!

完整定时事件示例
isEnabled: true
eventType: TIMED
bossFilenames:
- "my_timed_boss.yml"
announcementPriority: 3
startMessage: "A timed event has started!"
endMessage: "The timed event has ended!"
eventStartCommands:
- say The timed event began!
eventEndCommands:
- say The timed event concluded!
spawnType: "my_spawn_location.yml"
localCooldown: 120
globalCooldown: 30
weight: 100
eventDuration: 15
endEventWithBossDeath: true
minimumPlayerCount: 1

动作事件

当特定动作(例如破坏方块或钓鱼)发生时,有一定几率运行的事件。

注意:动作事件会自动应用一个针对每名玩家的冷却,以防止同一玩家反复触发事件。该冷却默认为 4 分钟,可通过 events.yml 中的 actionEventMinimumCooldownMinutes 进行配置。也可以在同一文件中把 actionEventsEnabled 设为 false,在全服范围内关闭动作事件。

三种动作类型的触发方式如下:

eventType触发条件
BREAK_BLOCK玩家破坏一个方块。先掷 chance,然后把被破坏的方块与 breakableMaterials 比对。
FISH玩家收线钓上东西。空钩的抛竿永远不会触发该事件。
TILL_SOIL玩家手持任意锄具右键 DIRTGRASS_BLOCK

在所有情况下,该位置都必须位于 EliteMobs 已启用的世界中,不能位于 EliteMobs 地下城世界或正在进行的实例内,并且必须通过 WorldGuard 的 elitemobs-events 旗标检查。

chance

设置当动作发生时事件发生的几率。

默认值
chance0.01.0 之间的值0
示例
chance: 0.001

breakableMaterials

设置当动作被设为 BREAK_BLOCK 时要检查的材质列表。

默认值
breakableMaterials材质 列表
示例
breakableMaterials:
- BEEHIVE
- BIRCH_WOOD

配置示例
chance: 0.001
breakableMaterials:
- COAL_ORE

假设事件类型为 BREAK_BLOCK,则设置为:当破坏一个煤矿石方块时有 0.1% 的几率运行该事件。


完整动作事件示例
isEnabled: true
eventType: BREAK_BLOCK
bossFilenames:
- "mining_boss.yml"
announcementPriority: 2
startMessage: "You've awakened something..."
chance: 0.001
breakableMaterials:
- DIAMOND_ORE
- EMERALD_ORE

定时事件

定时事件是在可配置的时间间隔发生的事件。一旦某个定时事件的冷却结束,就会根据事件的权重从定时事件列表中随机选取一个定时事件。

当服务器上没有玩家在线时不会选取任何事件,并且已经在运行中的事件绝不会被第二次选中。可以在 events.yml 中把 timedEventsEnabled 设为 false,在全服范围内关闭定时事件。

spawnType

设置事件所使用的 自定义生成,它定义了 Boss 可以在哪里生成。

默认值
spawnType文件名
示例
spawnType: nether_spawn.yml

localCooldown

设置在该事件可以被再次选中之前的时间量(以分钟为单位)。

默认值
localCooldown双精度0
示例
localCooldown: 120

globalCooldown

设置在下一个事件被选中之前的时间量(以分钟为单位)。

默认值
globalCooldown双精度0
示例
globalCooldown: 60

weight

设置事件的权重,影响它相对于其他事件被选中的几率。推荐值:100

权重系统决定了事件被选中的相对概率。例如:

  • 权重为 100 的事件 A 对比权重为 50 的事件 B = 事件 A 被选中的可能性是事件 B 的两倍
  • 权重越高 = 被选中的几率越高
  • 定时事件调度器在服务器启动约 5 分钟后开始,之后每分钟检查一次全局冷却是否已过去且是否可以选取事件
默认值
weight双精度0
示例
weight: 60.5

eventDuration

设置事件的最大持续时间(以分钟为单位)。

默认值
eventDuration双精度0
示例
eventDuration: 30

endEventWithBossDeath

设置事件是否随 Boss 死亡而结束。

默认值
endEventWithBossDeath布尔值true
示例
endEventWithBossDeath: true

eventEndTime

设置事件结束时的游戏内时间(以游戏刻为单位)。使用 Minecraft 的时间系统,其中 0=黎明,6000=正午,12000=黄昏,18000=午夜,23000=深夜。设为 -1 可禁用基于时间的结束。

默认值
eventEndTime整数(0-24000,-1 表示禁用)-1
示例
eventEndTime: 23000


请注意,事件会进入队列,意味着它们只会在 spawnType 中定义的条件满足后才开始。

事件配置示例
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!
spawnType: "myCoolSpawn.yml"
localCooldown: 30
globalCooldown: 15
weight: 100
eventDuration: 20
endEventWithBossDeath: true
eventEndTime: 10000
minimumPlayerCount: 5

手动触发一个事件

/em event <event filename>

把一个定时事件排入队列,让它在下一个有效的时间和地点开始,效果与调度器自己挑中它完全相同。它需要 elitemobs.event.start 权限,必须由玩家执行,并且只接受 eventTypeTIMED 的已启用事件的文件名。

如果该事件无法排队,你会收到原因说明:未设置 spawnTypespawnType 没有指向一个有效的自定义生成文件、bossFilenames 中没有任何一个有效,或者事件被另一个插件取消。

全服事件设置

这些设置位于 ~/plugins/EliteMobs/events.yml 中,对每一个事件都生效:

说明默认值
actionEventsEnabled动作事件是否会发生true
timedEventsEnabled定时事件是否会发生true
actionEventMinimumCooldownMinutes动作事件触发之后,针对每名玩家的冷却(分钟)4
timedEventMinimumCooldownMinutes一个定时事件开始之后,到允许下一个定时事件开始之间的最短时间(分钟)4
announcementBroadcastWorldOnly事件公告是否仅限于事件发生所在的世界false