hiervard logo Что это такое? |  Особенности
Правила |  Проекту требуются...
Кто в игре? telnet://hiervard.ru:4000
telnet://193.41.218.12:4000
другие порты
Hiervard MUD

Информация
О мире
Об авторе мира.
О проекте.
Участники
Особенности
Карта мира
Требуются...
Статистика
Расы и профессии
Кто в игре
Загрузка сервера
Игрокам
ЧТО ЭТО?
ПРАВИЛА
FAQ
Термины
Справка
Навыки
Настройка zmud
Мультиподключения
Выбор имени
Транслит
Галерея
Подключение
Билдерам
13 правил
Анкета билдера
Зоны
[О принципах]
Правила
Временной срез
AI
Умения
DG-Script
Триггеры!
Погода
Богам
Слава и удача
Правила богов
Разное
Интересные факты
Проблема "Я"
Пожертвования
IRC канал
Ссылки

DG Script

Итак, откроем еще один раздел сайта.

Что же такое DG Script? Этот скрипт используется во множестве мадов и помогает сделать мир интереснее и увлекательней. С помощью скриптов можно сделать множество квестов, различных действий и просто фоновых деталей, которые приблизят мир к реальности. На этом сайте я постараюсь подробно рассказать о скриптах, научить вас их создавать (если вы начинающий пользователь) и приведу множество триггеров с объяснениями.

Вступление

DG Script можно сравнить с языком программирования, хотя по сути, это он и есть. Если вы занимались программированием, написание скриптов не составит для вас труда, ознакомьтесь со списком переменных и операторов, приведенных здесь и просмотрите приведенные скрипты, если же вы впервые услышали это словосочетание, то я бы вам порекомендовал не пропускать абзацы, а читать все подряд. Постараюсь ввести вас в курс дела.

Скрипты

Языки программирования бывают нескольких типов: Объектно ориентированного программирования (ООП) - это Visual C, Borland C++ Duilder, Delphi и прочие; низкого уровня: Ассемблер; скрипты: VB Script, Java Script и тот, который нас интересует - DG Script.

Отличие скриптов от более привычных языков программирования - это отсутствие визуальных компонентов (К примеру формы, на которую вы наносите кнопки, поля и прочее). Скрипт представляет собой обычный текст, который интерптетатор (в данном случае движок мада) воспримет как команды и воплотит задуманную вами идею в жизнь.

Переменные

Что такое переменная, я думаю объяснять не нужно. В DG Script они бывают следующих типов:

  • Локальные - действуют только внутри триггера, в котором заданы.
  • Глобальные - действуют в множестве триггеров, прикрепленных к определенному объекту (мобу, комнате). Доступны для любого триггера из этого множества. (Множество триггеров, прикрепленных к какому-то объекту называется сценарием. Задает поведение объекта при различных ситуациях)
  • Мировые - это глобальные переменные, не ограниченные сценарием. То есть доступны всегда и везде.

Типы данных

В DG Script существует несколько типов данных и некоторые из них (такие как UID) я раньше не встречал, но в принципе, если не лезть в дебри, их использовать не сложно, а можно и вообще без них обойтись. Но с другой стороны эти специфические типы данных - просто частные случаи более общих, изачем их надо было выделять в отдельные - для меня загадка.

Строки - Этот тип данных содержит любую последовательность символов и работа с ним осуществляется через строковые функции.

Числа - Этот тип данных содержит любое число. Соответственно числовые функции, математические действия и прочее.

Направление - Этот один из специфических типов, частный случай строки. Возвращает (содержит) одно из шести слов: north, east, south, west, up, down.

UID - Еще один из специфических типов, частный случай толи числа, толи строки. Возвращает уникальный ID объекта.

Список - И еще один из специфических типов, частный случай строки. Представляет собой что-то вроде массива, каждый элемент которого - это слово внутри строки. (под словом понимается последовательность символов, ограниченная пробелами с двух сторон)

Операторы

Представьте, что вы собираете башню из кубиков. Кубик за кубиком и ваша башня все выше и выше. А теперь проведем несколько параллелей: башня - это триггер, а кубик - это оператор. Другими словами операторы - это кусочки, из которых шаг за шагом складывается триггер.

Операторы цикла

Очень часто бывает необходимо, чтобы какая-то последовательность действий (каждое из них задается определенным оператором) повторялась несколько раз. К примеру необходимо уменьшать количество жизни персонажа, пока по его венам течет яд. Для этих целей используют операторы цыклов. В DG Script их два.

while {условие}
   {операторы}
done

Этот цикл будет выполняться до тех пор, пока {условие} истинно. Что это значит? Рассмотрим на примере: while %counter%!=2 этот цикл будет выполняться, если переменная counter содержит значение отличное от 2.

eval counter 5
while (%counter%!=2)
   msend %actor% цикл выполняется
   eval counter (%counter%-1)
done

В результате выполнения скрипта мы получим 3 строки "цикл выполняется". Действия по порядку:

  1. Объявляем переменную counter и ее значение делаем равным 5.
  2. Проверяем, не равно ли значение переменной counter двум. 5 не равно 2 истина.
  3. Выполняем операторы внутри цикла (вывод строки и уменьшение значения переменной counter на 1)
  4. Пункты 2 и 3 повторяются, пока counter не равно 2.
  5. Значение переменной counter равно 2
  6. Проверяем, не равно ли значение переменной counter двум. 2 не равно 2 ложь.
  7. Цикл не выполняется и триггер начинает выполнять операторы после слова done.
foreach {переменная} {список}
   {операторы}
done

Цикл будет выполняться до тех пор, пока переменная не примет последнее значение из списка.

set countermassiv A B C D
foreach counter %countermassiv% 
   msend %actor% цикл выполняется
   %echo% %counter%
done

Результатом выполнения данного триггера будет такой текст:

Цикл выполняется
A
Цикл выполняется
B
Цикл выполняется
C
Цикл выполняется
D

Как вы видите, цикл повторился 4 раза, при этом каждый раз значение переменной counter меняется и принимает следующее значение в списке countermassiv. Если бы до начала цикла значение переменной counter было бы равно какому-то элементу списка ciuntermassiv, то цикл бы начался именно с него. Если значение counter отсутствует, то оно автоматически изменяется на первое из списка cоuntermassiv при начале цикла.

Операторы условия и выбора

При написании триггеров циклы применяются редко, немного таких ситуаций где они действительно необходимы, совершенно по другому обстоят дела с операторами условия и выбора. Если ваш триггер не ограничивается подмигиванием трактирщика при входе в комнату, а, к примеру, Трактирщик говорит вам одно из 10 заранее придуманных вами приветствий, то без операторов условия (или выбора) не обойтись.

Для начинающих пользователей сразу оговорюсь: оператор выбора и оператор условия - это не одно и то же, хотч они и похожи. Под оператором выбора понимается некая совокупность операторов условий, где один и тот же аргумент проверяется по нескольким условиям.

Не буду рассписывать их здесь подробно, так как они достаточно просты, и вы можете быстро их освоить на примере скриптов приведенных в соответствующем разделе.

Итак, я могу выделить 3 оператора. 1 - это оператор условия и 2 и 3 - это операторы выбора (Хотя можете со мной не согласиться. Но я считаю, что 1 и 2 - это не 1 оператор, так как функции у них несколько различны. При написании больших триггеров поймете):

1.
if {условие}
{операторы}
end

Этот оператор проверяет истинность условия и если условие истинно, то выполняются операторы, которые идут после If, если же условие ложно, то операторы игнорируются и начинает выполняться то, что находится после end. В данном операторе end обязателен, не забывайте о нем. Стоит отметить, что в условиях так же может присутствовать Булева логика. Если вы не знакомы с этим понятем, то читайте соответствующий раздел на этой странице.

2.
if {условие1}
{операторы}
elseif {условие2}
{операторы}
elseif {условие3}
{0операторы}
else
{операторы}
end

Данный оператор - это несколько усовершенствованный предыдущий оператор. Этот оператор предлагает вам выбрать действия, которые будут выполняться при определенных условиях.

Количество блоков elseif зависит только от ваших целей, он может быть один, его может вообще не быть или же их может быть очень много. Блок else только один, но и он не обязателен. Внимание: end обязателен.

3.
switch {переменная}
case {значение1}
{операторы}
break
case {значение2}
{операторы}
break
default
{операторы}
break
done

А этот оператор предназначен специально для выбора. Вам достаточно указать переменную и соответствующий блок булет выполняться только при соответствии значения значению переменной. Блок Default выполняется только в том случае, если переменная не соответствует ни одному из указанных вами значений.

количество конструкций case.......break определяется вами. Блок default является аналогом else в предыдущем операторе.

Переменные

Если вы объявляете переменную или делаете ее счетчиком цикла, то переменная должна иметь вид word, то есть слово набранное символами кириллицы или латиницы, но если вам необходимо получить значение переменной, то переменную нужно заключить в символы %, то есть %word%.

Далее я бы привел таблицы, которые вы так же можете найти в документации DG info 4. Но не стану, смотрите их в DGinfo4, так как они займут много места.

Существуют 3 типа триггеров, поддерживаемых движком. Это триггеры для комнат, мобов и объектов. Некоторые команды имеют свой синтаксис в каждом из этих типов.

переменная       мобы          предметы      комнаты
%send%           msend         osend         wsend
%echo%           mecho         oecho         wecho
%echoaround%     mechoaround   oechoaround   wechoaround
%door%           mdoor         odoor         wdoor
%force%          mforce        oforce        wforce
%load%           mload         oload         wload
%purge%          mpurge        opurge        wpurge
%teleport%       mteleport     oteleport     wteleport
%damage%         mdamage       odamage       wdamage
%skillturn%      mskillturn    oskillturn    wskillturn
%skilladd%       mskilladd     oskilladd     wskilladd
%spellturn%      mspellturn    ospellturn    wspellturn
%spelladd%       mspelladd     ospelladd     wspelladd
%spellitem%      mspellitem    ospellitem    wspellitem
%portal%         mportal       oportal       wportal

Для каждого типа триггера следует использовать определенную команду. Если триггер для мобов и вы напишете команды msend, wsend и osend, то выполнится только msend, остальные проигнорируются.

Булева логика

Итак, если вы проверяете какое-то условие, то в результате вы получите результат Истина - условие верно или Ложь - условие не верно. Но если вам необходимо проверить несколько условий и выполнить действие когда все они верны или же когда верно хотя бы одно из них, вам придет на помощь булева логика.

истина && истина = истина
истина && ложь = ложь
ложь && истина = ложь
ложь && ложь = ложь
истина || истина = истина
истина || ложь = истина
ложь || истина = истина
ложь || ложь = ложь
!ложь = истина
!истина = ложь
если вам необходимо проверить пять условий и выполнить оператор, если хотя бы одно из них истинно пишите так:
if (условие1)||(условие2)||(условие3)||(условие4)||(условие5)
операторы
end
==       равенство
!=       неравенство 
<=       меньше или равно 
>=       больше или равно
>        больше 
<        меньше
-        разность 
+        сумма 
/        частное 
*        произведение

(c) Былины (вероятно)







Portions, © 2006-2017, NEON2 NCC
Все права принадлежат
Нику Перумову
????