База
Часть 1. Введение
Квесты в игре (официальные и кастомные) хранятся в .xml файлах
В Block Story один NPC может иметь сколько угодно квестов (разных файлов для одного NPC). Игрок при разговоре увидит их списком и сможет выбрать любой. Из отдельных квестов можно строить сетку зависимых друг от друга квестов (рассмотрим позже)
Куда закидывать квесты?
Кастомные квесты (именно XML-файлы, а не папку с квестами) нужно поместить в папку quest внутри директории (папки) сохранений игры. Важно: Игра не читает файлы из вложенных папок и архивов (т.е. если в папку quest вы добавите папки MyQuest и SuperQuest, то игра из них ничего не прочитает)
Путь зависит от платформы:
Windows (Steam): C:\Users\ВашеИмяПользователя\AppData\LocalLow\Mindblocks\Block Story\quest\
Быстро попасть в AppData можно так:
- Win + R
- %APPDATA%
- Вас перебросит в папку Roaming, выйдете из нее и перейдите в LocalLow
Android: /sdcard/Android/data/com.mindblocks.blocks/files/quest/ Начиная с Android 13, доступ к содержимому папки Android заблокирован. Придется подключать по проводу смартфон к компу\ноуту и скидывать через них, либо получать рут-права
Если папки quest нет — создайте её вручную.
ВАЖНО!!! На данный момент, в текущей версии игры (13.4.1) кастомные квесты на Android НЕ РАБОТАЮТ. В новой версии это будет исправлено. Произошло это из-за сломавшихся путей после переноса игры на Unity 6.
[ЭКСПЕРИМЕНТАЛЬНО] В старых версиях игры, сделанных до переноса на новую версию Unity, кастомные квесты на Android в теории могут заработать, но гарантий нет.
Последняя ПК версия, на которой квесты точно работают — 13.4.1. На будущей 13.4.3 квесты также будут работать и на Android, все изменения по ней можете посмотреть на официальном YouTube канале: https://www.youtube.com/@BlockStory1/videos или Сообществе ВК: https://vk.com/block_story
Часть 2. Начало Работы
На десктопах, для разработки кастомных квестов я рекомендую использовать Visual Studio Code (не путать с VS Studio). Для Android можете использовать любой редактор кода или специализированный XML редактор
Весь дальнейший «код» будет писаться в VS Code. Имейте это ввиду
Готовый XML-файл сохраняйте в кодировке UTF-8 без BOM.
Пояснение:
Тот же VS Code по умолчанию создает XML-файл в кодировке UTF-8 без BOM.
В остальных редакторах проверьте, что у вас выбрано просто «UTF-8»
Если написано «UTF-8 with BOM», то значит нужно преобразовать файл в обычный UTF-8. Делается легко: Либо при сохранении выберите «UTF-8» (без приписки BOM или с without BOM), либо с помощью внутренних средств редактора кода. Там будет что-то вроде:Кодировка —> Преобразовать в UTF-8 без BOM
Часть 3. Базовая Структура
Название XML-файла
Рекомендуется называть файлы без пробелов и только латинскими буквами. Каждое слово с Заглавной буквы. Например: Wave1.xml, а не «Волна 1.xml»
Начало файлов
Каждый XML-файл обязательно должен начинаться с декларации:
<?xml version="1.0" encoding="utf-8"?>
Подробно разбирать это не будем, просто пишите это в начале файла и будет вам счастье
Термины
Квест — один отдельный .xml-файл
Набор квестов — сборник из нескольких разных .xml файлов. Например, Intro.xml, Search.xml, End.xml
Дальше разберемся на примере пустого квеста:
<?xml version="1.0" encoding="utf-8"?>
<quest npc="Wizard" title="HelloWorld">
<step id="#start">
<desc>Привет, путник!</desc>
<option text="Ok" to="#end">
</option>
</step>
<step id="#end">
<finish>Квест завершён.</finish>
<option text="Закрыть" to="#close" />
</step>
</quest>
XML файлы состоят из тегов — команд в угловых скобках (<>). У каждого тега есть имя и у большинства есть ещё свои атрибуты со значениями. Некоторые теги могут содержать другие теги внутри себя
Все теги и атрибуты пишутся с маленькой буквы. Примеры: npc, title, quest, step
Рассмотрим на примере:
<quest npc="Wizard" title="HelloWorld">
…
</quest>
Где <quest> — тег, имя которого quest
npc и title — атрибуты (параметры)
"Wizard" и "HelloWorld" — значения атрибутов. Пишутся в кавычках (" ") после =
</quest> — закрывающая часть тега. Состоит из «/» и имени тега
Всё, что находится между <quest> и </quest> является его содержимым (вложенной частью). Всё, что находится внутри (в данном случае <step>) — дочерние элементы