Вход
Приветствую Вас Гость
 

easy.dialog

Подробное руководство по использованию модуля, с примерами. Страница пятая

Чуть более сложные диалоги

Названия действий

по умолчанию, в качестве названия действия выступает полный текст реплики. Это не всегда удобно. Иногда нужно вывести очень длинную реплику, полный текст которой будет смотреться неуместно в названии действия. На такой случай в модуле предусмотрена конструкция act-name: :act-name. Текст, помещённый между этими двумя тегами, будет использоваться в качестве названия действия. Пример:


 {:
   Как вас зовут?
   [:
   act-name:Вася:act-name
   Вообще моё имя - Василий. Но друзья зовут меня - Вася...
   :]
:}

В этом диалоге на экран сначала выведется реплика "Как вас зовут?" и действие с названием "Вася". При щелчке по действию, на экране появится реплика "Вообще моё имя - Василий. Но друзья зовут меня - Вася...".

Всё довольно просто. Когда нам нужно вывести название действия, отличное от произносимой реплики, используем эту конструкцию.

Эту же конструкцию следует использовать, если в узле действия Вы использовали конструкцию вывода блока фраз frase-block: :frase-block. Однако здесь можно написать и обыкновенную реплику без тегов act-name: :act-name, и она выведется в названии действия. Чтобы было понятнее, пример, когда в качестве названия действия выводится реплика:


 {:
   Как вас зовут?
   [:
   Меня зовут Вася.
   :]
   [:
   Я стесняюсь...
   frase-block:
      <hero-name>Мне так неловко...
      <npc-name>Отчего же?
      <hero-name>Моё имя так необычно звучит...
      <npc-name>Ну же, смелее!
      <hero-name>Вартасахан Бздюльгахаев!
      <hero-name>Можно просто: Вася.
   :frase-block
   :]
:}

Пример, когда в качестве названия действия, будет выведен текст, помещённый между act-name: :act-name:


 {:
   Как вас зовут?
   [:
   act-name:Вася:act-name
   Меня зовут Вася.
   :]
   [:
   act-name:Мне неловко...:act-name
   Я стесняюсь...
   frase-block:
      <hero-name>Мне неловко...
      <npc-name>Отчего же?
      <hero-name>Моё имя так необычно звучит...
      <npc-name>Ну же, смелее!
      <hero-name>Вартасахан Бздюльгахаев!
      <hero-name>Можно просто: Вася.
   :frase-block
   :]
:}

Пример, когда название у действия будет, но реплику герой не произнесёт:


 {:
   Как вас зовут?
   [:
   act-name:Вася:act-name
      {:npc="name::name"
      
      Он бы мог сказать, что его зовут Вася. Но на самом деле его звали Вартасахан.
      
      :}
   :]
:}

И напоследок. Блок фраз, который не появится в виде действия, потому что неоткуда извлечь название действия:


 {:
   Как вас зовут?
   [:
   frase-block:
      <hero-name>Мне неловко...
      <npc-name>Отчего же?
      <hero-name>Моё имя так необычно звучит...
      <npc-name>Ну же, смелее!
      <hero-name>Вартасахан Бздюльгахаев!
      <hero-name>Можно просто: Вася.
   :frase-block
   :]
:}

Комментирование реплик

Все реплики можно комментировать. Комментарии записываются так же, как записываются в обычном html-документе, т.е. внутри конструкции <!-- -->. Перед выводом реплик все подобные конструкции будут удалены. Комментарии главным образом предназначены для помещения в них настроек и прочих текстов, которые не должны входить в реплику. Конечно, настройки можно указывать и не в комментариях, но если разместить их внутри комментария, обработка каждой реплики сократится на несколько миллисекунд. При больших уровнях вложенности это может существенно сократить время вывода всех реплик на экран. Все конструкции, расширяющие реплику, такие как frase-block: :frase-block, act-name: :act-name, iffing: :iffing, и др., можно и нужно размещать в комментариях. Лучше всего всё это уместить в одном комментарии.

Запрещено вкладывать комментарии в конструкции iffing: :iffing и dynamic-code: :dynamic-code, а так же вкладывать комментарии в комментарии. Вот пример неправильного размещения комментариев (подсвечены красным цветом):


 <!-- npc="
name:Ведущий:name
ncolor:008888<!-- цвет имени неписи -->
fcolor:008888
"
hero="
name:Вася Пупкин:name
"
-->

{:
   Как вас зовут?
   [:

   hero="ncolor:008800"
      Меня зовут Вася.
      {:
      iffing:a=0<!-- реплика выводится, если "a" равно нулю -->:iffing
      dynamic-code:a=1:dynamic-code<!-- изменяем значение "a", чтобы реплика больше не выводилась -->
      Вас зовут Вася?
         [:
         npc="fcolor:880000"
         Да, меня зовут Вася.
            {:да ну нафиг:}
            [:
            нет. чистая правда
            :]
         :]
         [:Нет, никто меня так не зовёт:]
      :}
      {:
      iffing:a>0:iffing<!-- реплика выводится, если "a" больше нуля -->
      dynamic-code:if a<5: a+=1<!-- изменяем значение "a", чтобы реплика больше не выводилась -->
:dynamic-code
         Это правда, что вас зовут Васей?
         [:Правда
         :]
         [:Неправда:]
      :}
   :]
:}

Сами реплики в комментарии не помещаются.

Если комментарий разместить, например, в блоке фраз, то он будет проигнорирован html-рендерером, поскольку написан по правилам комментариев в html.

Заключение

     Если Вы прочитали данное руководство залпом и составление диалогов для интерпретации модулем easy.dialog показалось Вам слишком сложным, ознакомьтесь с другими возможностями составления диалогов в QSP. Чуть ниже даны ссылки на примеры от WladySpb и y4ndexx, а так же на пример реализации сложного диалога с помощью движка от Olegus.t.Gl. Может быть Вам подойдёт что-нибудь из этого. Или перечитайте руководство ещё раз, и ознакомьтесь с примерами диалогов, составленных для модуля, в файле game.easy.dialog.qsp, чтобы лучше усвоить как и что работает. Так же вы можете обратиться к составленному для easy.dialog краткому описанию, где в общих чертах раскрываются термины, понятия, структуры и принципы конструирования диалогов.

     В тексте руководства использованы реплики из киносценариев и пьес разных авторов.

     Огромное спасибо WladySpb и y4ndexx, подготовившим примеры диалогов для QSP, добавленные в официальные материалы для разработчиков. Они мне очень помогли, когда я только познакомился с QSP. А так же - Olegus t.Gl за реализацию "диалога Чешира", откуда я почерпнул немало идей и решений. Диалоги, реализованные в примерах, а так же "диалог Чешира", я постарался воспроизвести в примере использования модуля. Смотри файл "game.easy.dialog.qsp" в архиве.

Наверх