Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

Важное предисловие

В этом сборнике представлены наиболее часто задаваемые вопросы из темы "Как сделать ?" на форуме 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"]`.

Индексы есть практически у всех исчислимых элементов для удобства обращения. Например, каждый символ строки обладает собственным индексом (номером), каждый предмет, добавленный в окно предметов тоже. И т.д. Если вы встречаете фразу "элементы индексируются с единицы", это означает, что нумерация элементов начинается с числа 1. Элементы массивов индексируются с нуля.

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

if ваза_на_столе=1:
! если переменная-маркер ваза_на_столе равна 1

    
! создаём действие
    act "Взять вазу со стола":
        
! в действии изменяем значение переменной-маркера
        ваза_на_столе=0
        addobj "Ваза"
        goto $curloc
    end
end

`Системная переменная` — это зарезервированная в плеере переменная. Изменение её значения внутри игры изменяет настройки и поведение плеера. Например, системной является переменная nosave. Если её значение отлично от нуля, игрок не может пользоваться пунктами меню плеера "загрузить состояние игры" и "сохранить состояние игры":

nosave=1

Окна плеера могут называться по-разному:

  • `Окно основного описания` может называться `основным окном`, `окном основных описаний`, `главным окном`, или `окном игрока`.
  • `Окно дополнительного описания` может называться `дополнительным окном описаний`, `окном статистики` (статов), или `окном пользователя`.
  • `Окно предметов` может называться `окном инвентаря`, `инвентарём`, `списком предметов`, или `рюкзаком`.
  • `Окно действий` может называться `списком действий`.
  • `Окно с полем ввода` может называться `полем ввода`, `строкой ввода` и пр.
  • Диалоговое окно, вызываемое функцией `$input`, может называться `окном ввода`.
  • Диалоговое окно, вызываемое оператором `msg`, может называться `окном сообщения`.
  • Окно, в котором выводится изображение при использовании команды `view`, может называться `окном предпросмотра`, `окном просмотра изображения`.

В разделе "Зарезервированные слова, переменные и спецсимволы" используются обозначения:

  • [выражение] - значение выражения, которое может быть как текстового, так и числового типа.
  • [$выражение] - значение выражения, которое может быть только текстового (строкового) типа (но при необходимости движок автоматически переведёт число в строку).
  • [#выражение] - значение выражения, которое может быть только числового типа (если возможно, движок автоматически переведёт строку в число).

Примечение. Символ `#` использован в справочнике только чтобы разделить выражения произвольного и числового типов. К синтаксису QSP данный символ отношения не имеет.

В том же разделе: если для оператора или функции не указана общая запись, значит этот оператор или функцию нужно запускать без аргументов. Например, оператор `unselect`, функция `$curloc`.

Благодарности

Спасибо всему сообществу QSP, подписчикам моего канала, а так же всем, кто задавал вопросы по изложенным в сборнике статьям.

Отдельная благодарность `Nex`у, `NickoAilus`у, `Последнему из Гаяр`, `evp`, `newsash`у, `Олегусу`, `Storm`у, `Svartberg`у, `Oliver`у, `mkir`у, `svandrus`у, `Lisichk`е, `Ajent`е, `ejikplains`у, `Larson`у, `dmvikar`у, и всем прочим авторам, чьи наработки, примеры и кусочки кода послужили материалом для этих статей. Прошу прощения, кого забыл упомянуть.