Перейти к основному содержимому

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

В этом сборнике представлены наиболее часто задаваемые вопросы из темы "Как сделать?" на форуме 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'у, и всем прочим авторам, чьи наработки, примеры и кусочки кода послужили материалом для этих статей. Прошу прощения, кого забыл упомянуть.