Flags

Материал из IFВики
Перейти к навигации Перейти к поиску
flags
Тип Библиотеки RTADS
Разработчик(и) Антон Жучков
Языки интерфейса
Операционные системы TADS 2
Написано на TADS 2
Язык разработки
Читаемые форматы файлов
Создаваемые форматы файлов
Дата первого выпуска
Последняя версия
Дата последней версии 12 августа 2008
Состояние
Лицензия Freeware
Сайт


Общая информация

Часто бывает необходимым выдать некий текст в зависимости от состояния игры (флага). Иногда удобно сосредоточить все флаги в одном месте. Чаще всего, это делается на объекте global.

Я написал несколько удобных для меня функций, которыми можно легко управлять флагами, выводить текст и начислять очки в зависимости от значения того или иного флага. Конечно, есть и другие способы "помечать" состояния игры, но мне показалось, что эти функции могут быть полезны.

Итак, в первую очередь необходимо скачать сам модуль и вставить его в код игры директивой #include.

Флаги будут храниться в объекте global в виде списка строк flags. Если перед началом игры требуется, чтобы какие-то флаги были установлены по умолчанию, то в описание объекта global нужно вставить их определение:

global: object
...
flags = ['isDrunk' 'isHeadache']
;

Далее, приведу описание функций модуля.

isFlag

Формат: isFlag(flag)

Возвращает значение флага flag. flag - строковое значение (в одинарных кавычках).

setFlag

Формат: setFlag(flag)

Устанавливает флаг flag.

unsetFlag

Формат: unsetFlag(flag)

Сбрасывает флаг flag.

ifFlagSay

Формат: ifFlagSay(flag, message [doUnset, score])

Выводит сообщение message, если флаг flag установлен. При этом, если doUnset = true (по умолчанию nil), то сбрасывает флаг flag. Если параметр score определен, то начисляет количество очков, равное его значению.

ifNotFlagSay

Формат: ifNotFlagSay(flag, message [doSet, score])

Выводит сообщение message, если флаг flag НЕ установлен. При этом, если doSet = true (по умолчанию nil), то устанавливает флаг flag. Если параметр score определен, то начисляет количество очков, равное его значению.

sayOnce

Формат: sayOnce(flag, message [, score])

Полностью аналогична функции ifNotFlagSay с параметром doSet = true. Определена для удобства "единичного" вывода текста. Для той же цели определен символ:

#define _FL __FILE__+cvtstr(__LINE__)

Т.е., если требуется вывести текст один раз за всю игру, то достаточно написать:

sayOnce(_FL, 'Глядя на все это, ты чувствуешь себя как-то неуютно...');

В этом случае, флагом будет служить название файла исходника и номер строки, из которой производился вызов sayOnce. Как видно, символ _FL очень удобен для таких "одноразовых" флагов.