Продвинутый
Часть 10. Спавн и Ко
До этого мы использовали мобов, которых игра спавнила «естественным» образом, но что делать, если мы хотим заспавнить нужного моба здесь и сейчас? Для этого мы будем использовать <spawn>
Спавн
Синтаксис
<spawn mob="ИмяМоба" distance="15" angry="false" />
| Атрибут | Обязательный | Значение |
|---|---|---|
| mob | Да | Системное имя моба |
| distance | Нет (неявно = “5”) | Расстояние в блоках, на котором появится моб. Всегда в направлении взгляда игрока, изменить это нельзя |
| angry | Нет (неявно = “false”) | Если = “true”, то абсолютно ВСЕ нейтральные мобы становятся агрессивными. Даже те, которые заспавнились «естественным» путем. Используйте в сочетании с <clearmobs />В игре: Используется в битве с Алхимиком за Свиток Забвения |
В минимальном рабочем виде тег выглядит так: <spawn mob="ИмяМоба" />
Важно
1. Используется только внутри <option>
2. Выносите спавн и выдачу заданий в отдельные шаги:
<step id="spawn_step">
<option auto="hunt_step" check="0.5">
<spawn mob="Spider" distance="3" />
<spawn mob="Spider" distance="5" />
<spawn mob="Spider" distance="7" />
</option>
</step>
<step id="hunt_step">
<info>
<label>Убейте 3 пауков:</label>
<kill enemy="Spider" count="3" />
</info>
<option auto="reward_step" check="0.5">
<kill enemy="Spider" count="3" />
</option>
</step>
3. Спавн тоже лучше делить на отдельные шаги, спавнящие мобов пачками по 3 штуки:
<step id="spawn_spider_step">
<option auto="spawn_skeleton_mage_step" check="0.5">
<spawn mob="Spider" distance="3" />
<spawn mob="Spider" distance="5" />
<spawn mob="Spider" distance="7" />
</option>
</step>
<step id="spawn_skeleton_mage_step">
<option auto="spawn_other_mobs_step" check="0.5">
<spawn mob="SkeletonMage" distance="1" />
<spawn mob="SkeletonMage" distance="6" />
<spawn mob="SkeletonMage" distance="9" />
</option>
</step>
<step id="spawn_other_mobs_step">
<option auto="hunt_step" check="0.5">
<spawn mob="SnowBigWorm" distance="4" />
<spawn mob="SwampSnake" distance="8" />
<spawn mob="Snake" distance="12" />
</option>
</step>
4. Гарантированно заспавнить за раз можно только 3 мобов одного типа. Если попытаться последовательно заспавнить 4+ (даже в разных шагах) мобов, то заспавнится случайное количество от 3 до указанного кол-ва мобов. Следовательно, не спавните больше 3 штук, если не хотите лишних проблем
5. Если мобы всё еще не спавнятся, то добавьте задержку (<delay sec="ВремяВСекундах" />) перед каждым <spawn />
Очистка мобов
Для очистки ВСЕХ мобов используем тег без атрибутов <clearmobs />. Нужен, чтобы очистить мобов в мире и чтобы не упереться в лимит мобов.
Размещать его можно как в кнопке:
<step id="prebattle_dialog_step">
<desc>Привет!</desc>
<option to="battle_spawn_step">
<clearmobs />
</option>
</step>
Так и перед спавном мобов:
<step id="spawn_spider_step">
<option auto="spawn_other_mobs_step" check="0.5">
<clearmobs />
<spawn mob="Spider" distance="3" />
<spawn mob="Spider" distance="5" />
<spawn mob="Spider" distance="7" />
</option>
</step>
<step id="spawn_other_mobs_step">
<option auto="hunt_step" check="0.5">
<spawn mob="SnowBigWorm" distance="4" />
</option>
</step>
Управление естественным спавном
Справка
С помощью тега <spawnmobs /> можно включать\отключать «естественный» спавн мобов в мире, т.е. тех, что спавнятся сами по себе. С помощью <spawn /> своих мобов все еще можно спавнить
Имеет только 1 атрибут: value со значениями true или false, гдеtrue — включить естественный спавнfalse — отключить естественный спавн
Пример
<spawnmobs value="false" />
<spawnmobs value="true" />
Важно
1. Используется только внутри <option>
2. Не забудьте включить спавн обратно, иначе мир навсегда останется пустым
Использование
Отлично работает в сочетании с <clearmobs /> по схеме:
1. Очищаем всех мобов (<clearmobs />)
2. Отключаем естественный спавн (<spawnmobs value="false" />)
<step id="spawn_spider_step">
<option auto="spawn_other_mobs_step" check="0.5">
<clearmobs />
<spawnmobs value="false" />
<spawn mob="Spider" distance="3" />
<spawn mob="Spider" distance="5" />
<spawn mob="Spider" distance="7" />
</option>
</step>
<step id="spawn_other_mobs_step">
<option auto="hunt_step" check="0.5">
<spawn mob="SnowBigWorm" distance="4" />
</option>
</step>
Проверка наличия моба
Для проверки, жив ли моб, используется тег <existmobs/> внутри <option>. С помощью него можно узнать, сбежал ли босс, или не убили ли квестового NPC
| Атрибут (или тег) | Обязательный | Значение |
|---|---|---|
| name | Да | Системное имя моба |
| inverse | Нет (это пустой вложенный тег) | Инвертирует условие. Если указан, то условие выполнится, когда целевого моба НЕТ Это вложенный тег, а не атрибут! |
Использование:
Сработает, если в видимых (прогруженных) чанках есть живая Паула
<option auto="paula_alive" check="0.5">
<existmobs name="FemaleWarrior" />
</option>
Сработает, когда Паулы нет в видимых чанках (Например, если её убили. Не важно кто, даже если агрессивный моб или сама умерла)
<option auto="paula_dead" check="0.5">
<existmobs name="FemaleWarrior">
<inverse/>
</existmobs>
</option>
Задания
1. Скелеты
Создайте квест от Паулы, в котором по нажатию кнопки «БОЙ» спавнятся: 3 Скелета-Мага, 3 Скелета-Потрошителя и 3 Скелета-Рыцаря. Перед их спавном отключается естественный спавн мобов и очищаются все мобы. За победу дается 250 опыта и 15 Зелий Маны. После победы повторно очищается арена и включается спавн мобов
2. Три Дракона
Сделайте квест-битву от Теда с 3 драконами: Ашкор, Ледяной и Огненный (Адский). Если один из этих мобов уже присутствует в мире, то выведите уведомление: «В мире есть [ИмяДракона]», после чего очистите мобов. Если драконов несколько, то выводится несколько уведомлений подряд. После вывода всех уведомлений, очистите всех мобов и начните битву (спавн всех троих + задание на убийство каждого из них)
Если ни одного из драконов нет, то выведите уведомление: «Драконов нет» и начните битву
Награда: 50 Гравитона и 400 опыта
3. Герой
Сделайте квест от Женщины-крестьянки. Она просит защитить мужа (мужчина-крестьянин) от нескольких волн оборотней. После принятия квеста, очищаются все мобы, отключается спавн мобов, спавнится мужчина-крестьянин и Первая Волна оборотней.
Если мужчина-крестьянин умирает, то квест проваливается, выводится уведомление «Квест провален», после чего квест завершается без права на перепрохождение. Можно использовать несколько отдельных .XML файлов
Волны:
1. 3 Оборотня
2. 3 Оборотня и 1 Темный Оборотень
3. 3 Оборотня и 3 Темных Оборотня
Награда: 40 хлеба и 200 опыта