Мы с важной новостью: с 28 февраля 2025 года сервис Хабр Фриланс прекратит свою работу.

Купить услуги можно до 28 февраля 2025, но пополнить баланс уже нельзя. Если на вашем счете остались средства, вы можете потратить их на небольшие услуги — служба поддержки готова поделиться бонусами, на случай, если средств немного не хватает.
R50 5feefc6454c55873d32ea9cb0e32943e
Автоматизирую рутинные задачи

Интерпретатор текстовых квестов с поддержкой HTML и JavaScript

Добавлено 14 июл 2018 в 12:15
Кратко о PolyQuest:
PolyQuest является модификацией проекта UrqW: https://github.com/narmiel/UrqW/ и, соответственно, обладает всеми возможностями UrqW.

Дополнительные возможности PolyQuest обеспечивают:
  • Поддержку веб-разметки через тэги <html>...</html>.
    Можно использовать все те же возможности html, что и для операторов
    печати, плюс гиперссылки в стиле AkURQ:

<a href="btn:метка">


(подробнее см. здесь: http://urq.plut.info/system/files/AkURQ.rar)



  • Поддержку выполнения кода JavaScript, который заключается внутри
    тэгов <script>...</script>. Все описываемые тэги могут
    находиться на месте очередного оператора URQL.



  • Возможность изменения html-содержимого текущей (работающей)
    странички. Реализуется несколькими возможными тэгами: <appendContent
    ... > ... </appendContent>, <appendScript ... > ...
    </appendScript>, <appendStyle ... > ...
    </appendStyle>, добавляющими к указанному элементу,
    соответственно, html-код, js-код и css-разметку. Внутри открывающего
    тэга указывается один из двух текстовых атрибутов: либо element,
    значением которого может быть "head" или "body", либо elementId,
    указывающий id конкретного элемента страницы, к которому добавляется
    содержимое, расположенное между открывающим и закрывающим тэгами.



  • Возможность внедрения переменных URQL в выполняемые фрагменты
    JavaScript. Объявляются такие переменные с помощью нового оператора let,
    имеющего вид:

    let <переменная>=<значение>

    или

    let <переменная>

  • При каждом создании такой переменной её имя заносится в список
    переменных, доступных для js-кода. При входе в выполняемый участок js-
    кода значения всех таких переменных передаются внутри JavaScript, а при
    выходе из него результирующие значения вновь заносятся в одноимённые
    переменные URQL. Также переменные URQL и JavaScript синхронизируются при
    каждом входе в поток выполнения кода URQL (в направлении JavaScript
    -> URQL) и при выходе из него и передаче управления пользователю (в
    обратном направлении URQL -> JavaScript).



  • Возможность управления последовательностью проигрывания музыки. С
    этой целью введена системная локация endmusicloop, заход на которую
    осуществляется в момент окончания проигрывания музыкальной композиции (с
    помощью оператора music или js-метода MusicPlay - см. ниже). Таким
    образом можно зациклить не одну музыкальную композицию, а сразу
    несколько, выбирая каждую следующую последовательно или случайным
    образом.



  • Возможность осуществления дополнительных действий при сохранении и
    загрузке игры. Заход на локацию onsave осуществляется до момента
    сохранения, а заход на локацию onload -- до момента восстановления
    состояния игры, соответственно. После выполнения всех действий по
    восстановлению состояния также может осуществляться заход на локацию
    afterload. Целью подобных действий может быть, например, инициализация
    каких-то переменных внутри JavaScript, прорисовка графического инвентаря
    и др.



  • Ряд вспомогательных функций JavaScript, осуществляющих взаимодействие с URQL-частью. К ним относятся




  • readParagraph -- переход на локацию;



  • UrqExec -- выполнение заданного в качестве параметра кода URQL;



  • UrqEval -- оценка значения URQL-выражения, заданного в качестве параметра. Работает аналогично выражению if, но внутри скрипта;



  • MusicPlay -- проигрывание музыкальной композиции (если указан параметр); возобновление проигрывания музыки (если без параметра);



  • MusicStop -- остановка музыки;



  • SoundPlay -- проигрывание звукового фрагмента;



  • SoundStop -- остановка звука.


    Надо отметить, что музыка и звуки проигрываются двумя различными
    потоками. При каждом начале проигрывания звукового фрагмента (оператором
    sound или js-функцией SoundPlay) музыка приостанавливается, а по его
    окончании возобновляется вновь.
3e61007bb8 B04f6df343