MobArena/docs/user/setting-up-waves.rst

494 lines
20 KiB
ReStructuredText

################
Setting up waves
################
**On this page:** \* `About
Modules <./Setting-up-the-waves#wiki-about-modules>`__ \* `Wave
Branches <./Setting-up-the-waves#wiki-wave-branches>`__ \* `Common
Nodes <./Setting-up-the-waves#wiki-common-nodes>`__ \*
```recurrent`` <./Setting-up-the-waves#wiki-recurrent-waves>`__ \*
```single`` <./Setting-up-the-waves#wiki-single-waves>`__ \* `Wave
Types <./Setting-up-the-waves#wiki-wave-types>`__ \*
```default`` <./Setting-up-the-waves#wiki-default-waves>`__ \*
```special`` <./Setting-up-the-waves#wiki-special-waves>`__ \*
```swarm`` <./Setting-up-the-waves#wiki-swarm-waves>`__ \*
```supply`` <./Setting-up-the-waves#wiki-supply-waves>`__ \*
```upgrade`` <./Setting-up-the-waves#wiki-upgrade-waves>`__ \*
```boss`` <./Setting-up-the-waves#wiki-boss-waves>`__ \* `A Sample
Setup <./Setting-up-the-waves#wiki-sample-config-file-setup>`__
**Note: If you are impatient, go to the bottom of this page for an
example config-file setup to see what the waves could look like. Modify
them as you please, but make sure to read this page before asking any
questions!**
Make sure to check out `Agnate's MobArena Bosses and Waves
Thread <http://forums.bukkit.org/threads/mobarena-boss-and-wave-thread.31797/>`__
if you need inspiration for adding some cool bosses to your arenas!
About Modules
-------------
The new MobArena waves-system is extremely modular, meaning every time
you plug in a new wave, you only have to provide the nodes required by
the specific modules you are using. The modules can be broken into *wave
branches* and *wave types*. The structure of the waves-section in
config-file is the following:
::
waves:
recurrent: <-- Wave branch
<wave name>:
type: <wave type> <-- Wave type
frequency: #
priority: #
single: <-- Wave branch
<wave name>:
type: <wave type> <-- Wave type
wave: #
Wave Branches
-------------
The waves are split into two branches, ``recurrent`` and ``single``.
*Recurrent waves* (may) occur more than once (as in, they repeat), given
a frequency (how often they occur) and a priority (how "important" they
are, i.e. which wave should spawn if two recurrent waves clash). *Single
waves* occur just once, on the given wave (and always occur over
recurrent waves, should they clash).
Common Nodes
~~~~~~~~~~~~
As you can see, the two branches have one thing in common, the
``type``-node. Other than that, their other nodes differ. However, there
are two additional nodes that can be used regardless of branch and type
(doesn't work for boss waves, though):
``amount-multiplier: <decimal value>`` (optional) minimum value of 0.1,
this multiplier helps determine how many monsters spawn per wave
(minimum 1). If 8 mobs are supposed to spawn, and the value is ``0.5``,
only 4 mobs will spawn. If the value is ``3``, 24 will spawn.
``health-multiplier: <decimal value>`` (optional) minimum value of 0.1,
this multiplier helps determine the health for each monster in a wave.
If a zombie spawns with the default of 20 health points and the value is
``0.5``, the zombie will have 10 health points. If the value is ``4``,
it will be 80 health points.
These two common nodes can be used to greatly customize the difficulty
of the monsters in each wave. If you want more monsters, just set the
amount-multiplier higher than 1, and maybe adjust the health with the
health-multiplier accordingly. If you want the monsters to be tougher to
kill, just up the health-multiplier.
An additional node can be used to help determine where enemies will
spawn:
``spawnpoints: <semi-colon separated list of spawnpoints>``
For example, we can make a swarm wave spawn monsters only on spawns
``5,53,198``, ``-16,54,185``, and ``-7,53,179`` if players are in range:
::
swarm3:
type: swarm
wave: 11
monster: zombie_pigman
spawnpoints: 5,53,198; -16,54,185; -7,53,179
Note that these spawnpoints must exist in the ``spawnpoints``-list of
the ``coords``-section to work.
Recurrent Waves
~~~~~~~~~~~~~~~
``type: [default|special|swarm|supply|upgrade|boss]`` (required)
determines the wave type. Read the **Wave types** section further down
for more details.
``frequency: #`` (required) determines how often the wave will/can
spawn. With a frequency of 1, the wave can potentially spawn on every
single wave number. The implicit default waves in MobArena have a
frequency of 1, and the implicit special waves have a frequency of 4,
which means the default waves (can) spawn every wave, and the special
waves (can) spawn every 4th wave.
``priority: #`` (required) determines how "important" the wave is. If
two recurrent waves clash, the wave with the highest priority will
spawn. The implicit default waves in MobArena have a priority of 1, and
the implicit special waves have a priority of 2, which means if the
default and special waves clash, the special waves will spawn because
their priority is higher.
``wave: #`` (optional) determines the first wave number on which this
wave can/will spawn. This is useful for offsetting waves with similar
frequencies. Note that if no wave is specified, it will default to the
value of the (required) frequency-node. The implicit default waves in
MobArena have wave value of 1, and the implicit special waves have a
wave value of 4 (same as the frequency), which means the default waves
may begin spawning from wave 1, and the special waves may begin spawning
from wave 4.
Single Waves
~~~~~~~~~~~~
``type: [default|special|swarm|supply|upgrade|boss]`` (required)
determines the wave type. Read the **Wave types** section further down
for more details.
``wave: #`` (required) determines the wave on which this wave *will*
spawn. No matter what priority a recurrent wave have, if it clashes with
a single wave, the single wave will always spawn instead of the
recurrent waves. Single waves are good for extraordinary waves like
"swarm" waves, "boss" waves or even normal waves with specific monster
types, for instance.
Wave Types
----------
All MobArena waves must specify a *wave type*, which must be either
``default``, ``special``, ``swarm``, ``supply``, ``upgrade`` or
``boss``. These different wave type modules introduce some new required
and optional nodes. Note that no matter what the wave type is, any wave
*must* adhere to the requirements of the wave branch (read above).
Default Waves
~~~~~~~~~~~~~
Default waves are waves that spawn an amount of monsters picked
semi-randomly from an optional list of monsters. The amount of monsters
grow at a configurable (but optional) rate. If no growth or monster-list
is specified, default waves will consist of 5 different monster types
(zombie, skeleton, spider, creeper, wolf), all equally likely to spawn,
spawned at the "old" growth rate (player count + wave number). Nodes:
``growth: [old|slow|medium|fast|psycho]`` (optional) determines how fast
the monster count grows with every wave. ``old`` means (player count +
wave number), but the other four use a mathematical function to
determine the monster count, also based on player count and wave number.
See [[Formulas]] for more info.
``monsters: <list of <monster>: <probability>>`` (optional) determines
[[monster types]], and their individual probabilities of spawning on
each wave. Note that the probabilities are just that, probabilities.
They do not specify exact amounts, but only chance of spawning. The
following sample will statistically spawn twice as many zombies as
skeletons:
::
monsters:
zombies: 10
skeletons: 5
``fixed: [true|false]`` (optional) the probability values in the
monsters list becomes amount values instead, such that the above wave
will spawn exactly 10 zombies and 5 skeletons, regardless of player
count and wave number.
Special Waves
~~~~~~~~~~~~~
Special waves are waves that spawn *one type* of monster, and always a
fixed amount. Unlike with *default waves*, the (optional) monster list
with probabilities determines which monster out of the entire list
should spawn. The monsters-node's notation is identical to that of
*default waves*.
``monsters: <list of <monster>: <probability>>`` (optional) determines
[[monster types]], and their probabilities of spawning on each wave. The
following sample will statistically spawn powered-creepers twice as
often as slimes:
::
monsters:
powered-creepers: 4
slimes: 2
Swarm Waves
~~~~~~~~~~~
Like *special waves*, swarm waves spawn just *one type* of monster, but
in a configurable (but optional) amount. The swarm wave monsters only
have *1 health point*, meaning they will die with just one blow from
anything. Their numbers are vast compared to default and special waves,
however, so they may be a bit hard on some servers. Use with caution!
``monster: <monster>`` (required) which [[monster types]] the swarm
consists of. Note that this is different from special waves, in that
only one type is specified, and no probability value.
``amount: [low|medium|high|psycho]`` (optional) how many monsters should
spawn. Defaults to low (which is still a lot). See [[Formulas]] for more
info.
Supply Waves
~~~~~~~~~~~~
These waves spawn one monster per player, and will drop a random item
from a customized drop list (same notation as the class items). The
monster list notation is identical to that of default and special waves.
::
drops: grilled_pork, cooked_chicken, cooked_beef, cooked_fish:2
Upgrade Waves
~~~~~~~~~~~~~
These waves don't spawn any monsters, but will give or upgrade items.
The class names are optional (you don't have to give items to all
classes), and it is possible to use the ``all`` identifier to specify
items that will be given to all players regardless of class. The
``give-all-items`` flag determines if all items in the list should be
given, or just a random item off the list (like with rewards and supply
waves).
**Legacy setup**: In the following example, all players get a healing
potion, and on top of that, all Archers get 64 arrows, and all Oddjobs
get either 2 TNT or a Netherrack:
::
upgrades:
all: potion:8197:1
Archer: arrow:64
Oddjob: tnt:2, netherrack
give-all-items: false
**Advanced setup**: Since MobArena v0.95, the Upgrade Waves can be set
up to upgrade/replace certain weapons and armor, as well as add/remove
permissions. The setup follows the setup of the classes-section. In the
following example, the Knight class gets its diamond sword enchanted and
its iron chestplate replaced with a diamond chestplate. The Archer just
gets some more arrows (legacy setup) while the Wizard class gets the
permission to cast the Forcepush spell from MagicSpells:
::
classes:
Knight:
armor: iron_helmet, iron_chestplate, iron_leggings, iron_boots
items: diamond_sword
...
arenas:
...
waves:
...
upgrades:
Archer: arrow:64
Knight:
armor: diamond_chestplate
items: diamond_sword 16:2
Wizard:
permissions:
- magicspells.cast.forcepush
give-all-items: true
Explanation: Items listed in the ``armor`` node will be considered
armor, and (if valid) will replace any item currently in the armor slots
of the players. Items in the ``items`` node will be checked if they are
weapons or not; if they are weapons, then MobArena will search through
the players' inventories for weapons with the same ID, and then replace
the first weapon that matches it (automatic upgrades). If no weapon is
found, it will default to a generic item, which will just be added to
the inventory.
Boss Waves
~~~~~~~~~~
Boss waves consist of *one monster* with a configurable (but optional)
amount of health, and a configurable (but optional) list of special
abilities. The health of a boss monster is significantly higher than
that of normal monsters, and thus take much longer to kill. The special
abilities help increase the difficulty (and fun!) of a boss wave.
``monster: <monster>`` (required) the boss [[monster types]]. Note that
only one monster will spawn.
``name: <name>`` (optional) the name of the boss. Shows the given name
in a name tag above the boss' head.
``health: <amount>|[verylow|low|medium|high|veryhigh|psycho]``
(optional) how much health the boss has. Can be either a flat value,
e.g. 40 or 800, or one of the scaling values. Defaults to the scaling
value medium. See [[Formulas]] for more info about the scaling values.
``reward: <item>`` (optional) a reward for getting the killing blow on
the boss. This reward will only be given to one player (the killer, if
any).
``drops: <item list>`` (optional) a comma-separated list of items
dropped by the boss when killed. The boss will drop exactly the items
listed. This could be used to have the boss drop a "key" to advance in
the arena, or to gain access to a shed full of weapon chests or
something wonderful like that. The item syntax is the same as the one
for Supply Waves.
``potions: <potion list>`` (optional) a comma-separated list of potion
effects that will be applied to the boss when it spawns. Use this to
slow down or speed up bosses that don't move at quite the speed you
want, or perhaps to give a boss the wither effect to limit the amount of
time it will stay alive. The potion syntax is
``<effect>:<amplifier>:<seconds>``. The amplifier and duration are
optional, and will default to 0 (level 1) and pseudo-infinity,
respectively. Note that ``slow``, ``slow:0``, and ``slow:0:600`` are
identical, except the last one will only last 10 minutes (600 seconds).
Check the sample config-file at the bottom for more examples.
``abilities: <comma-separated list of boss abilities>`` (optional)
determines which (if any) boss abilities this boss has. The boss can
have several abilities; just separate each ability with a comma (e.g.
``arrows, fire-aura, throw-target``). Note that the abilities happen in
a cycle every few seconds, so the more abilities, the longer it takes
before each ability is used again. Here is an overview of the different
abilities bosses can have:
::
NAME DESCRIPTION
arrows Shoots arrows
fireballs Hurls fireballs
fire-aura Burns all nearby (5 blocks radius) players
lightning-aura Strikes lightning 4 places around itself (3-block radius)
living-bomb A random player is set on fire, and explodes after 3 seconds
obsidian-bomb Spawns an Obsidian block which explodes after 4 seconds
chain-lightning Lightning strikes the target and jumps to a nearby player
disorient-target Spins the target around 45-315 degrees
disorient-nearby Spins all nearby (5 blocks radius) players
disorient-distant Spins all distant (8+ blocks) players
root-target Locks the target in place for a couple of seconds
warp-to-player Picks a random player in the arena to warp to
shuffle-positions Swaps everyone's (including the boss) positions around
flood Places a water block on a random player's location
throw-target Throws the target backwards (if in distance)
throw-nearby Throws all nearby (5 blocks radius) players
throw-distant Throws all distant (8+ blocks) players
pull-target Pulls the target towards the boss' location
pull-nearby Pulls all nearby (5 blocks radius) players towards the boss' location
pull-distant Pulls all distant (8+ blocks) players towards the boss' location
fetch-target Warps the target to the boss' location
fetch-nearby Warps all nearby (5 blocks radius) players to the boss' location
fetch-distant Warps all distant (8+ blocks) players to the boss' location
``ability-announce: [true|false]`` (optional) should boss abilities be
announced to arena players? Defaults to true.
``ability-interval: <seconds>`` (optional) time between each ability.
Defaults to 3.
Sample config-file setup
------------------------
If you want to try a sample setup, here's one that you can use. Simply
copy this block of text, and paste it into your own config-file,
replacing the waves-section.
::
waves:
recurrent:
def1:
type: default
priority: 1
frequency: 1
monsters:
zombies: 10
skeletons: 4
exploding_sheep: 5
def2:
type: default
priority: 2
frequency: 1
wave: 5
monsters:
zombies: 10
skeletons: 6
creepers: 4
spec1:
type: special
priority: 5
frequency: 4
wave: 4
monsters:
powered_creepers: 10
angry_wolves: 10
zombie_pigmen: 10
upgrade1:
type: upgrade
priority: 7
frequency: 10
wave: 10
upgrades:
all: potion:8197:2
Archer: arrow:64
Oddjob: tnt:2, netherrack
give-all-items: true
single:
swarm1:
type: swarm
wave: 7
monster: slimes
amount: medium
boss1:
type: boss
wave: 9
monster: spider
health: medium
abilities: fire-aura, disorient-target, fireballs, throw-nearby
potions: speed:3:20, wither, increase_damage:1
ability-interval: 5
boss2:
type: boss
wave: 13
monster: zombie_pigman
health: high
abilities: root-target, arrows, fetch-distant, fire-aura
drops: lever, stone_button
upgrade2:
type: upgrade
wave: 14
upgrades:
all: potion:8197:2
Knight:
armor: diamond_helmet
items: diamond_sword 16:2;19:1
Tank:
items: iron_sword 19:3
Oddjob:
armor: iron_chestplate, iron_leggings
Wizard:
permissions:
- magicspells.cast.ChainLightning
give-all-items: true
boss3:
type: boss
wave: 16
monster: wolf
health: psycho
abilities: warp-to-player, fire-aura, throw-nearby, fireballs, fetch-target, arrows
potions: slow:1
ability-interval: 1
reward: diamond_chestplate
supply1:
type: supply
wave: 19
monsters:
cows: 10
pigs: 5
drops: grilled_pork, cooked_chicken, cooked_beef, cooked_fish:2
boss4:
type: boss
wave: 20
monster: blaze
health: low
abilities: fire-aura, throw-nearby
potions: speed
reward: diamond_helmet