Важное предисловие
В этом сборнике представлены наиболее часто задаваемые вопросы из темы "Как сделать?" на форуме QSP.su. Статьи разбиты на тематические разделы для удобства навигации по вопросам. В конце справочника представлены ссылки на материалы по каждому вопросу, некоторые из них могут работать некорректно в связи с перемещением ряда вопросов в тему "Как сделать?". К сожалению это не подлежит исправлению, однако для удобства поиска к ссылкам добавлена информация об авторе, дате и номере сообщения в теме.
Так же следует помнить, что все представленные в сборнике примеры даны в целях обучения. Не стоит тупо копировать их в свою игру, а потом бегать с претензиями типа "А вот я скопировал код отсюда, но он почему-то не работает", или "делает что-то не то". Важно прочитать статью и разобрать то, как работает пример. Ещё лучше, сначала самому попытаться решить поставленную задачу, а уже после обращаться к "F.A.Q". Данный сборник не является перечнем готовых решений.
Если вы нашли ошибку, опечатку или неточность, а так же если у вас есть замечания к статьям, или желание написать более развёрнутую и подробную их версию, пишите на aleksversus@mail.ru , либо в "ВК" https://vk.com/id40090736.
Все статьи сборника актуализированы для плееров версии 5.8.0. Если вам нужен справочник по плеерам версии 5.7.0, скачайте оффлайн-версию на странице релизов.
Разъяснения и термины
-
Обработка локации, посещение локации — под этими терминами понимаются следующие процессы: выполнение кода из поля "Выполнить при посещении" указанной локации, добавление в окно основного описания базового описания указанной локации, а так же добавление в окно действий базовых действий указанной локации. Обработка локации происходит в двух случаях: в случае "перехода" на локацию с помощью операторов
gotoиxgoto, или в случае "вызова" локации с помощью операторовgosub,menu, функцииfuncили в качестве обработчика события в автоматическом режиме. С понятиями "переход на локацию" и "вызов локации" вы можете подробнее ознакомиться в разделе "Разница междуgotoиgosub". -
индекс — в контексте данного справочника под индексом подразумевается указатель на какой-либо элемент. Например, у каждой ячейки массива есть собственный числовой индекс. Если массив состоит из пяти элементов, то его элементы нумеруются от нуля до четырёх — эти числа и являются индексами элементов. Для того, чтобы обратиться к какому-то конкретному элементу массива, нужно указать название этого массива, а за названием в квадратных скобках - индекс:
*pl mass[3] & ! выводим на экран значение элемента массива mass под индексом 3У элементов массивов могут быть текстовые индексы:
mass["35,56"], а так же "многомерные" индексыmass[13, 37].Индексы есть практически у всех исчислимых элементов для удобства обращения. Например, каждый символ строки обладает собственным индексом (номером), каждый предмет, добавленный в окно предметов тоже. И т.д. Если вы встречаете фразу "элементы индексируются с единицы", это означает, что нумерация элементов начинается с числа 1. Элементы массивов индексируются с нуля.
-
Переменная-маркер — это пользовательская (не системная) переменная, которую мы вводим, чтобы отмечать изменение события или состояния в игре. Например, переменной-маркером можно назвать переменную, обозначающую размещение предмета на локации:
if ваза_на_столе=1:
! если переменная-маркер ваза_на_столе равна 1
! создаём действие
act "Взять вазу со стола":
! в действии изменяем значение переменной-маркера
ваза_на_столе=0
addobj "Ваза"
goto $curloc
end
end -
Системная переменная — это зарезервированная в плеере переменная. Изменение её значения внутри игры изменяет настройки и поведение плеера. Например, системной является переменная
nosave. Если её значение отлично от нуля, игрок не может пользоваться пунктами меню плеера "загрузить состояние игры" и "сохранить состояние игры":nosave = 1
Окна плеера могут называться по-разному:
- Окно основного описания может называться основным окном, окном основных описаний, главным окном, или окном игрока.
- Окно дополнительного описания может называться дополнительным окном описаний, окном статистики (статов), или окном пользователя.
- Окно предметов может называться окном инвентаря, инвентарём, списком предметов, или рюкзаком.
- Окно действий может называться списком действий.
- Окно с полем ввода может называться полем ввода, строкой ввода и пр.
- Диалоговое окно, вызываемое функцией
$input, может называться окном ввода. - Диалоговое окно, вызываемое оператором
msg, может называться окном сообщения. - Окно, в котором выводится изображение при использовании команды
view, может называться окном предпросмотра, окном просмотра изображения.
В разделе "Зарезервированные слова, переменные и спецсимволы" используются обозначения:
[выражение]- значение выражения, которое может быть как текстового, так и числового типа.[$выражение]- значение выражения, которое может быть только текстового (строкового) типа (но при необходимости движок автоматически переведёт число в строку).[#выражение]- значение выражения, которое может быть только числового типа (если возможно, движок автоматически переведёт строку в число).
Примечение. Символ # использован в справочнике только чтобы разделить выражения произвольного и числового типов. К синтаксису QSP данный символ отношения не имеет.
В том же разделе: если для оператора или функции не указана общая запись, значит этот оператор или функцию нужно запускать без аргументов. Например, оператор unselect, функция $curloc.
Благодарности
Спасибо всему сообществу QSP, подписчикам моего канала, а так же всем, кто задавал вопросы по изложенным в сборнике статьям.
Отдельная благодарность Byte'у, Werewolf'у, Fering'у, HronoStranger'у, Nex'у, NickoAilus'у, Последнему из Гаяр, evp, newsash'у, Олегусу, Storm'у, Svartberg'у, Oliver'у, mkir'у, svandrus'у, Lisichk'е, Ajent'е, ejikplains'у, Larson'у, dmvikar'у, и всем прочим авторам, чьи наработки, примеры и кусочки кода послужили материалом для этих статей. Прошу прощения, кого забыл упомянуть.