Решение возникающих проблем¶
Когда скрипт не работает и непонятно, почему¶
Итак, вы написали скрипт, загрузили его — и… ничего! Он либо вообще не работает, либо делает что-то не то, что вы задумывали. Что делать?
Отладочная консоль¶
Одна из самых важных и любимых возможностей Denizen — полная автоматическая отладка! Всё, что делают ваши скрипты, попадает в отладочные логи (пока вы не отключите отладку для этого скрипта ключом debug: false). Это волшебный инструмент, который поможет вам найти проблему гораздо быстрее, чем вы смогли бы без него.

Как читать отладочный вывод¶
Отладочная консоль показывает каждую выполненную команду в том порядке, в котором они отработали. Для каждой команды выводится сама команда, как были разобраны её аргументы, и иногда — результат её выполнения (если это применимо). Все разобранные теги также отображаются рядом с теми командами, в которых они встретились. Группы одновременно выполняющихся команд помечаются своей очередью (у неё уникальное имя и своя цветовая схема, чтобы их было легче визуально различать).
Тяжёлый путь¶
В некоторых случаях, когда всё идёт не совсем так, как вы ожидали, приходится читать команды одну за другой и искать место, в котором поведение начало отклоняться от ожидаемого (например: вы можете обнаружить, что какой-то тег вернул zombie_pigman, хотя вы рассчитывали на pigzombie, — и тогда логика, зависящая от этого значения, не сработает, а дальше всё посыпется как карточный домик).
Ошибки¶
Нередко вам везёт, и проблему ловит сама система — тогда в логах появляется ярко-красный текст с «ERROR!» и пояснением, что именно сломалось.
В ряде таких случаев сообщение об ошибке прямо говорит, что не так. Например, если вы случайно вписали имя тега из документации, а не настоящий тег — вроде <PlayerTag.name> вместо нужного <player.name>, — сообщение об ошибке будет довольно понятным: 'ObjectTag' notation is for documentation purposes, and not to be used literally. An actual object must be inserted instead.
В других случаях сообщение об ошибке указывает на проблему в общих чертах, но не говорит точно, где именно вы ошиблись и что делать. Например, если вы забыли кавычки вокруг многословного аргумента команды, в логах просто несколько раз подряд появится (какое-то слово) is an unknown argument!. Причина в том, что движок скриптов не может угадать, что вы имели в виду, — он может сказать только, что именно не сработает во введённых вами данных (учтите, впрочем, что движок часто как минимум пытается угадать, когда речь идёт о распространённых ошибках наподобие приведённой в примере: в современных версиях Denizen это конкретное сообщение прямо спросит, не забыли ли вы кавычки). В таких случаях разобраться, что именно нужно поменять, уже ваша задача. Как правило, искомое место почти всегда находится очень близко (по номерам строк) к тому сообщению об ошибке, которое появилось первым, и как минимум тесно связано с тем, на что это сообщение указывает. Также имейте в виду: то, что отлаживается непосредственно перед сообщением об ошибке, обычно и есть причина ошибки, а не то, что после. Но что если разобраться всё равно никак не получается?
Банка с глазами¶
Иногда задача слишком запутанная, чтобы разобраться в одиночку; в других случаях вам просто нужен ещё один взгляд со стороны, чтобы заметить что-то очевидное, мимо чего вы пробежали глазами.
Лучшее место в такой ситуации — Discord. В Discord'е есть открытый канал поддержки (#denizen), где вам могут помочь другие пользователи Denizen. Там же есть несколько чат-ботов, которые умеют искать по документации (попробуйте !help), и много чего ещё — в канале для взаимодействия с ботами (#bot-spam).
Когда просите помощи со скриптом, лучше всего приложить ссылку на ваш скрипт через сервис paste для скриптов, а также копию отладочного лога — его можно записать, набрав в игре /denizen debug -r, затем запустив скрипт, а потом набрав /denizen submit — это сгенерирует ссылку на записанный отладочный лог, которую можно кинуть рядом со ссылкой на скрипт, чтобы помощники могли всё посмотреть.
Когда заходите в Discord, прежде чем что-либо писать, обязательно прочитайте правила (в канале #rules) — чтобы с самого начала не наступить на мину. В Discord'е в целом довольно расслабленная и дружелюбная атмосфера, но правила всё-таки действуют (в мягкой форме: за случайный проступок вас никто не забанит — не переживайте. В большинстве случаев нарушения просто фиксируются предупреждением… ничего серьёзнее не происходит, если только кто-то систематически не нарушает одни и те же правила снова и снова).
Правда, будьте готовы к тому, что в поддержке иногда проскакивает «любовь построже» — особенно когда чинят совсем уж запущенные скрипты. Если вы выложите скрипт, в котором ошибка на ошибке, вполне вероятно, что в ответ прилетит длинный, на вид сердитый список всех проблем и способов их исправить. Не принимайте тон близко к сердцу (учитывайте, что в текстовом общении интонация легко теряется, и сообщения звучат резче, чем были задуманы) — мы делаем развёрнутые разборы, потому что хотим, чтобы вы учились и писали скрипты как можно лучше. Если бы мы на вас реально сердились, мы бы, скорее всего, вообще не отвечали.
