Инструменты пользователя

Инструменты сайта


help:service_locations

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:service_locations [2023/01/02 16:39]
aleks_versus переписано
help:service_locations [2024/11/09 03:20] (текущий)
byte [Служебные локации]
Строка 1: Строка 1:
- 
 [[help:​jump|Назад:​ Переходы внутри локации]] [[help:​jump|Назад:​ Переходы внутри локации]]
  
 ====== Служебные локации ====== ====== Служебные локации ======
  
- +В **QSP** существует возможность привязать вызов некоторых локаций к определённым событиям. Например,​ к выделению предмета в окне предметов,​ или к переходу на новую локацию с помощью операторов ''​%%GOTO%%''/''​%%XGOTO%%''​.
-В **QSP** существует возможность привязать вызов некоторых локаций к определённым событиям. Например,​ к выделению предмета в окне предметов,​ или к переходу на новую локацию с помощью операторов ''​**GOTO**''/''​**XGOTO**''​.+
  
 Чтобы привязать вызов локации к определённому событию,​ нужно прописать название этой локации в ту или иную системную переменную,​ предназначенную для связки события с локацией. Чтобы привязать вызов локации к определённому событию,​ нужно прописать название этой локации в ту или иную системную переменную,​ предназначенную для связки события с локацией.
Строка 18: Строка 16:
 </​sxh>​ </​sxh>​
  
-Когда событие происходит,​ указанная локация вызывается точно так же, как если бы мы вызывали её с помощью оператора ''​**[[help:​organizing|GOSUB]]**''​.+**Примечание:​** При использовании операторов "''​%%KILLALL%%'',​ ''​%%KILLVAR%%''"​ очищаются также все системные переменные. В том числе и переменные,​ через которые назначаются локации-обработчики. 
 + 
 +Когда событие происходит,​ указанная локация вызывается точно так же, как если бы мы вызывали её с помощью оператора ''​**[[help:​organizing|GOSUB]]**''​, с тем исключением,​ что на всех служебных локациях восстанавливаются глобальные переменныеПример:​ 
 + 
 +<sxh qsp> 
 +# start 
 +$ongsave = '​ogs'​ 
 +i = 99 
 + 
 +act 'Save Game':​ 
 +    local i = 17 
 +    ! на экран будет выведено значение 99 
 +    savegame '​1.sav'​ 
 +end 
 + 
 +act 'Print i': 
 +    local i = 137 
 +    ! на экран будет выведено 137 
 +    gosub '​ogs'​ 
 +end 
 +-- 
 + 
 +# ogs 
 +*pl i 
 +-- 
 +</​sxh>​
  
-**Примечание:** При использовании операторов "''​KILLALL''​''​KILLVAR''​" очищаются ​также ​все системные переменные. В том числе и переменныечерез которые назначаются локации-обработчики.+В этом примере при сохранении игры на экран будет выведено число 99 из глобальной переменной ''​%%i%%''​. Если же локация ​''​%%ogs%%'' ​вызывается ​не как служебная, на неё транслируются значения локальной ​переменной ''​%%i%%''​, объявленной в действии.
  
 ===== События в QSP ===== ===== События в QSP =====
Строка 28: Строка 51:
 ==== Загрузка состояния игры ==== ==== Загрузка состояния игры ====
  
-''​**$ONGLOAD**''​ —  содержит название локации-обработчика события "​загрузка состояния игры"​ (далее "​обработчик загрузки состояния"​). Иными словами,​ в эту переменную записывается название локации,​ код которой будет выполняться всякий раз после того, как был загружен файл состояния игры ("​файл сохранения"​) с помощью команды ''​**OPENGAME**''​. Название локации может быть любым.+''​%%$ONGLOAD%%''​ — содержит название локации-обработчика события "​загрузка состояния игры"​ (далее "​обработчик загрузки состояния"​). Иными словами,​ в эту переменную записывается название локации,​ код которой будет выполняться всякий раз после того, как был загружен файл состояния игры ("​файл сохранения"​) с помощью команды ''​%%OPENGAME%%''​. Название локации может быть любым. 
 + 
 +Назначаем в качестве обработчика загрузки состояния локацию "''​%%on_game_load%%''":​
  
-Назначаем в качестве обработчика загрузки состояния локацию "''​on_game_load''":​ 
 <sxh qsp> <sxh qsp>
 $ongload="​on_game_load"​ $ongload="​on_game_load"​
 </​sxh>​ </​sxh>​
  
-Теперь сразу после выполнения команды ''​**OPENGAME**''​ плеер будет автоматически вызывать локацию "''​on_game_load''"​.+Теперь сразу после выполнения команды ''​%%OPENGAME%%''​ плеер будет автоматически вызывать локацию "''​%%on_game_load%%''"​. 
 + 
 +Чтобы отключить обработчик загрузки состояния,​ нужно задать переменной ''​%%$ONGLOAD%%''​ пустое значение:​
  
-Чтобы отключить обработчик загрузки состояния,​ нужно задать переменной ''​**$ONGLOAD**''​ пустое значение:​ 
 <sxh qsp> <sxh qsp>
 $ongload=""​ $ongload=""​
Строка 44: Строка 69:
 ==== Сохранение состояния игры ==== ==== Сохранение состояния игры ====
  
-''​**$ONGSAVE**''​ - содержит название локации-обработчика события "​сохранение состояния игры"​ (далее "​обработчик сохранения состояния"​). Иными словами,​ в эту переменную записывается название локации,​ код которой будет выполняться всякий раз после того, как ​было ​записано состояние игры в новый, или уже существующий,​ файл состояния игры ("​файл сохранения"​) с помощью команды ''​**SAVEGAME**''​. Название локации может быть любым.+''​%%$ONGSAVE%%''​ - содержит название локации-обработчика события "​сохранение состояния игры"​ (далее "​обработчик сохранения состояния"​). Иными словами,​ в эту переменную записывается название локации,​ код которой будет выполняться всякий раз перед ​тем, как записать состояние игры в новый, или уже существующий,​ файл состояния игры ("​файл сохранения"​) с помощью команды ''​%%SAVEGAME%%''​. Название локации может быть любым.
  
-Назначаем в качестве обработчика сохранения состояния локацию "''​on_game_save''":​+Назначаем в качестве обработчика сохранения состояния локацию "''​%%on_game_save%%''":​
  
 <sxh qsp> <sxh qsp>
Строка 52: Строка 77:
 </​sxh>​ </​sxh>​
  
-Теперь сразу после выполнения команды ''​**SAVEGAME**''​ плеер будет автоматически вызывать локацию "''​on_game_save''"​.+Теперь сразу после выполнения команды ''​%%SAVEGAME%%''​ плеер будет автоматически вызывать локацию "''​%%on_game_save%%''"​. 
 + 
 +Чтобы отключить обработчик сохранения состояния,​ нужно задать переменной ''​%%$ONGSAVE%%''​ пустое значение:​
  
-Чтобы отключить обработчик сохранения состояния,​ нужно задать переменной ''​**$ONGSAVE**''​ пустое значение:​ 
 <sxh qsp> <sxh qsp>
 $ongsave=""​ $ongsave=""​
Строка 61: Строка 87:
 ==== Добавление предмета в окно предметов ==== ==== Добавление предмета в окно предметов ====
  
-''​**$ONOBJADD**''​ —  содержит название локации-обработчика события "​добавление предмета в окно предметов"​ (далее "​обработчик добавления предмета"​). Иными словами,​ в эту переменную записывается название локации,​ код которой выполняется всякий раз после добавления предмета в окно предметов с помощью команды ''​**ADDOBJ**''​. Название локации может быть любым.+''​%%$ONOBJADD%%''​ — содержит название локации-обработчика события "​добавление предмета в окно предметов"​ (далее "​обработчик добавления предмета"​). Иными словами,​ в эту переменную записывается название локации,​ код которой выполняется всякий раз после добавления предмета в окно предметов с помощью команды ''​%%ADDOBJ%%''​. Название локации может быть любым.
  
-При добавлении предмета этой локации-обработчику передаются два аргумента,​ значения которых можно получить из ''​$ARGS[0]''​ и ''​$ARGS[1]''​ соответственно:​+При добавлении предмета этой локации-обработчику передаются два аргумента,​ значения которых можно получить из ''​%%$ARGS[0]%%''​ и ''​%%$ARGS[1]%%''​ соответственно:​
  
- * ''​$ARGS[0]''​ - название добавленного предмета +  ​* ''​%%$ARGS[0]%%''​ - название добавленного предмета 
- * ''​$ARGS[1]''​ - путь к картинке добавленного предмета+  * ''​%%$ARGS[1]%%''​ - путь к картинке добавленного предмета
  
 Данная локация полезна,​ к примеру,​ для ограничения вместительности рюкзака. Данная локация полезна,​ к примеру,​ для ограничения вместительности рюкзака.
  
-Назначаем в качестве обработчика добавления предмета локацию "''​on_object_add''":​+Назначаем в качестве обработчика добавления предмета локацию "''​%%on_object_add%%''":​ 
 <sxh qsp> <sxh qsp>
 $onobjadd="​on_object_add"​ $onobjadd="​on_object_add"​
 </​sxh>​ </​sxh>​
  
-Теперь сразу после выполнения команды ''​**ADDOBJ**''​ плеер будет автоматически вызывать локацию "''​on_object_add''"​.+Теперь сразу после выполнения команды ''​%%ADDOBJ%%''​ плеер будет автоматически вызывать локацию "''​%%on_object_add%%''"​. 
 + 
 +Чтобы отключить обработчик добавления предмета,​ нужно задать переменной ''​%%$ONOBJADD%%''​ пустое значение:​
  
-Чтобы отключить обработчик добавления предмета,​ нужно задать переменной ''​**$ONOBJADD**''​ пустое значение:​ 
 <sxh qsp> <sxh qsp>
 $onobjadd=""​ $onobjadd=""​
Строка 84: Строка 112:
 ==== Удаление предмета из окна предметов ==== ==== Удаление предмета из окна предметов ====
  
-''​**$ONOBJDEL**''​ —  содержит название локации-обработчика события "​удаление предмета"​ (далее "​обработчик удаления предмета"​). Иными словами,​ в эту переменную записывается название локации,​ код которой вполняется всякий раз при удалении предмета с помощью команды ''​**DELOBJ**''​. Если воспользоваться командой ''​**KILLOBJ**'',​ то это будет аналогично серии команд ''​**DELOBJ**'',​ соответственно и локация-обработчик будет вызвана столько раз, сколько предметов будет удалено с помощью ''​**KILLOBJ**''​. Название локации может быть любым.+''​%%$ONOBJDEL%%''​ — содержит название локации-обработчика события "​удаление предмета"​ (далее "​обработчик удаления предмета"​). Иными словами,​ в эту переменную записывается название локации,​ код которой выполняется всякий раз после ​удаления предмета с помощью команды ''​%%DELOBJ%%''​. Если воспользоваться командой ''​%%KILLOBJ%%'',​ то это будет аналогично серии команд ''​%%DELOBJ%%'',​ соответственно и локация-обработчик будет вызвана столько раз, сколько предметов будет удалено с помощью ''​%%KILLOBJ%%''​. Название локации может быть любым.
  
-При использовании команды ''​**KILLALL**''​ локация-обработчик удаления предмета не вызывается,​ поскольку системная переменная ''​**$ONOBJDEL**'' ​также ​уничтожается.+При использовании команды ''​%%KILLALL%%''​ локация-обработчик удаления предмета не вызывается,​ поскольку системная переменная ''​%%$ONOBJDEL%%''​ уничтожается ​раньше удаления предметов.
  
-При удалении предмета обработчику удаления предмета передаётся аргумент,​ значение которого можно получить из ''​$ARGS[0]'':​+При удалении предмета обработчику удаления предмета передаётся аргумент,​ значение которого можно получить из ''​%%$ARGS[0]%%'':​
  
- * ''​$ARGS[0]''​ - название удалённого предмета+  ​* ''​%%$ARGS[0]%%''​ - название удалённого предмета 
 + 
 +Назначаем в качестве обработчика удаления предмета локацию "''​%%on_object_del%%''":​
  
-Назначаем в качестве обработчика удаления предмета локацию "''​on_object_del''":​ 
 <sxh qsp> <sxh qsp>
 $onobjdel="​on_object_del"​ $onobjdel="​on_object_del"​
 </​sxh>​ </​sxh>​
  
-Теперь сразу после выполнения команды ''​**DELOBJ**''​ плеер будет автоматически вызывать локацию "''​on_object_del''"​. А сразу после выполнения команды ''​**KILLOBJ**''​ локация "''​on_object_del''"​ будет вызвана столько раз, сколько предметов удалено этой командой.+Теперь сразу после выполнения команды ''​%%DELOBJ%%''​ плеер будет автоматически вызывать локацию "''​%%on_object_del%%''"​. А сразу после выполнения команды ''​%%KILLOBJ%%''​ локация "''​%%on_object_del%%''"​ будет вызвана столько раз, сколько предметов удалено этой командой.
  
 Данная локация полезна,​ к примеру,​ для проверки возможности удаления предмета:​ Данная локация полезна,​ к примеру,​ для проверки возможности удаления предмета:​
 +
 <sxh qsp> <sxh qsp>
 ! например есть предмет,​ который нам пригодится по сюжету ! например есть предмет,​ который нам пригодится по сюжету
 if $args[0]="​Важный артефакт":​ if $args[0]="​Важный артефакт":​
- ! восстанавливаем предмет +    ​! восстанавливаем предмет 
- addobj $args[0]+    addobj $args[0]
 end end
 </​sxh>​ </​sxh>​
-Чтобы отключить обработчик удаления предмета,​ нужно задать переменной ''​**$ONOBJDEL**''​ пустое значение:​+ 
 +Чтобы отключить обработчик удаления предмета,​ нужно задать переменной ''​%%$ONOBJDEL%%''​ пустое значение:​ 
 <sxh qsp> <sxh qsp>
 $onobjdel=""​ $onobjdel=""​
Строка 114: Строка 146:
 ==== Выделение предмета в окне предметов ==== ==== Выделение предмета в окне предметов ====
  
-''​**$ONOBJSEL**''​ —  содержит название локации-обработчика события "​выделение предмета"​ (далее "​обработчик выделения предмета"​). Иными словами,​ в этой переменной указывается название локации,​ код на которой выполняется всякий раз при выделении предмета. Выделение предмета происходит непосредственно при "​нажатии"​ на предмет (щелчок мышью по предмету). Название локации может быть любым.+''​%%$ONOBJSEL%%''​ — содержит название локации-обработчика события "​выделение предмета"​ (далее "​обработчик выделения предмета"​). Иными словами,​ в этой переменной указывается название локации,​ код на которой выполняется всякий раз при выделении предмета. Выделение предмета происходит непосредственно при "​нажатии"​ на предмет (щелчок мышью по предмету). Название локации может быть любым. 
 + 
 +Назначаем в качестве обработчика выделения предмета локацию "''​%%on_object_select%%''":​
  
-Назначаем в качестве обработчика выделения предмета локацию "''​on_object_select''":​ 
 <sxh qsp> <sxh qsp>
 $onobjsel="​on_object_select"​ $onobjsel="​on_object_select"​
 </​sxh>​ </​sxh>​
  
-Теперь всякий раз после щелчка мышью на предмете будет выполняться код локации "''​on_object_select''"​.+Теперь всякий раз после щелчка мышью на предмете будет выполняться код локации "''​%%on_object_select%%''"​
 + 
 +Данная локация полезна,​ к примеру,​ для вывода информации о предмете,​ или для вызова меню предмета. Получить название выбранного предмета можно через функцию ''​%%$SELOBJ%%''​.
  
-Данная локация полезна,​ к примеру,​ для вывода информации о предмете,​ или для вызова меню предмета. Получить название выбранного предмета можно через функцию ''​**$SELOBJ**''​. 
 <sxh qsp> <sxh qsp>
 if $selobj = '​чайник':​ if $selobj = '​чайник':​
- p '​Cамый обычный чугунный чайник.'​+    ​p '​Cамый обычный чугунный чайник.'​
 end end
 </​sxh>​ </​sxh>​
-При выборе играющим какого-либо предмета,​ он остаётся выделенным. Повторно выделить уже выделенный предмет нельзя. Снять выделение можно командой ''​**UNSELECT**''​.+ 
 +При выборе играющим какого-либо предмета,​ он остаётся выделенным. Повторно выделить уже выделенный предмет нельзя. Снять выделение можно командой ''​%%UNSELECT%%''​.
  
 <sxh qsp> <sxh qsp>
 if $selobj = '​нож':​ if $selobj = '​нож':​
-  ​*p '​Этим ножом даже хлеба не нарежешь.'​+    ​*p '​Этим ножом даже хлеба не нарежешь.'​
 end end
 unselect &! или UNSEL unselect &! или UNSEL
Строка 140: Строка 175:
 ==== Переход на новую локацию ==== ==== Переход на новую локацию ====
  
-''​**$ONNEWLOC**''​ —  содержит название локации-обработчика перехода на новую локацию (далее "​обработчик перехода"​). Иными словами,​ в эту переменную записывается название локации,​ код которой выполняется каждый раз после выполнения кода локации,​ на которую был осуществлён переход с помощью операторов ''​**GOTO**''​ или ''​**XGOTO**''​. Управление игрой передаётся игроку уже после выполнения кода на этой локации-обработчике. Название локации может быть любым.+''​%%$ONNEWLOC%%''​ — содержит название локации-обработчика перехода на новую локацию (далее "​обработчик перехода"​). Иными словами,​ в эту переменную записывается название локации,​ код которой выполняется каждый раз после выполнения кода локации,​ на которую был осуществлён переход с помощью операторов ''​%%GOTO%%''​ или ''​%%XGOTO%%''​. Управление игрой передаётся игроку уже после выполнения кода на этой локации-обработчике. Название локации может быть любым. 
 + 
 +Назначаем в качестве обработчика перехода локацию "''​%%on_goto_newloc%%''":​
  
-Назначаем в качестве обработчика перехода локацию "''​on_goto_newloc''":​ 
 <sxh qsp> <sxh qsp>
 $onnewloc="​on_goto_newloc"​ $onnewloc="​on_goto_newloc"​
 </​sxh>​ </​sxh>​
  
-Теперь всякий раз после выполнения кода локации,​ на которую был осуществлён переход с помощью операторов ''​**GOTO**''​ или ''​**XGOTO**'',​ будет автоматически вызываться локация "''​on_goto_newloc''"​.+Теперь всякий раз после выполнения кода локации,​ на которую был осуществлён переход с помощью операторов ''​%%GOTO%%''​ или ''​%%XGOTO%%'',​ будет автоматически вызываться локация "''​%%on_goto_newloc%%''"​.
  
-Получить название локации,​ на которую был осуществлён переход,​ можно с помощью функции ''​**$CURLOC**''​. +Получить название локации,​ на которую был осуществлён переход,​ можно с помощью функции ''​%%$CURLOC%%''​. 
-<sxh qsp> + 
 +<sxh qsp>
 if $curloc = '​дом':​ кошка = 1 if $curloc = '​дом':​ кошка = 1
 </​sxh>​ </​sxh>​
  
-Чтобы отключить обработчик перехода,​ нужно задать переменной ''​**$ONNEWLOC**''​ пустое значение:​+Чтобы отключить обработчик перехода,​ нужно задать переменной ''​%%$ONNEWLOC%%''​ пустое значение:​ 
 <sxh qsp> <sxh qsp>
 $onnewloc=""​ $onnewloc=""​
Строка 161: Строка 199:
 ==== Выделение действия ==== ==== Выделение действия ====
  
-''​**$ONACTSEL**''​ —  содержит название локации-обработчика события "​выделение действия"​ (обработчик выделения действий). Иными словами,​ в этой переменной указывается название локации,​ код на которой срабатывает,​ когда одно из выведенных на экран действий выделяется. Название локации может быть любым.+''​%%$ONACTSEL%%''​ — содержит название локации-обработчика события "​выделение действия"​ (обработчик выделения действий). Иными словами,​ в этой переменной указывается название локации,​ код на которой срабатывает,​ когда одно из выведенных на экран действий выделяется. Название локации может быть любым.
  
 Следует помнить,​ что выделение действия происходит при наведении на него указателя мыши, а не при непосредственном нажатии. Следует помнить,​ что выделение действия происходит при наведении на него указателя мыши, а не при непосредственном нажатии.
Строка 169: Строка 207:
 Важно! При управлении действиями с цифровой клавиатуры,​ выделение действий может "​прыгать",​ из-за чего работа обработчика выделения действий может быть некорректна. Важно! При управлении действиями с цифровой клавиатуры,​ выделение действий может "​прыгать",​ из-за чего работа обработчика выделения действий может быть некорректна.
  
-Назначаем в качестве обработчика выделения действий локацию "''​on_mouse''":​+Назначаем в качестве обработчика выделения действий локацию "''​%%on_mouse%%''":​ 
 <sxh qsp> <sxh qsp>
 $onactsel="​on_mouse"​ $onactsel="​on_mouse"​
 </​sxh>​ </​sxh>​
  
-Теперь всякий раз при наведении указателя мыши на любое из действий в окне действий,​ будет вызываться локация "''​on_mouse''"​.+Теперь всякий раз при наведении указателя мыши на любое из действий в окне действий,​ будет вызываться локация "''​%%on_mouse%%''"​
 + 
 +Данная локация полезна,​ к примеру,​ для вывода изображений или проигрывания звуков при выборе действий. Получить название выбранного действия можно через функцию ''​%%$SELACT%%''​.
  
-Данная локация полезна,​ к примеру,​ для вывода изображений или проигрывания звуков при выборе действий. Получить название выбранного действия можно через функцию ''​**$SELACT**''​. 
 <sxh qsp> <sxh qsp>
 if instr(1,​$selact,'​пойти'​):​ play '​sounds\walk.mp3'​ if instr(1,​$selact,'​пойти'​):​ play '​sounds\walk.mp3'​
 </​sxh>​ </​sxh>​
-Чтобы отключить обработчик выделения действий,​ нужно задать переменной ''​**$ONACTSEL**''​ пустое значение:​+ 
 +Чтобы отключить обработчик выделения действий,​ нужно задать переменной ''​%%$ONACTSEL%%''​ пустое значение:​ 
 <sxh qsp> <sxh qsp>
 $onactsel=""​ $onactsel=""​
Строка 187: Строка 229:
 ==== Ввод в строке ввода ==== ==== Ввод в строке ввода ====
  
-''​**$USERCOM**''​ —  содержит название локации-обработчика строки ввода (поля ввода) (далее "​обработчик ввода"​). Код данной локации-обработчика выполняется,​ если курсор установлен в строку ввода в момент нажатия клавиши "​Enter"​. Название локации может быть любым.+''​%%$USERCOM%%''​ — содержит название локации-обработчика строки ввода (поля ввода) (далее "​обработчик ввода"​). Код данной локации-обработчика выполняется,​ если курсор установлен в строку ввода в момент нажатия клавиши "​Enter"​. Название локации может быть любым. 
 + 
 +Назначаем в качестве локации-обработчика строки ввода локацию "''​%%user_command_line%%''":​
  
-Назначаем в качестве локации-обработчика строки ввода локацию "''​user_command_line''":​ 
 <sxh qsp> <sxh qsp>
 $usercom="​user_command_line"​ $usercom="​user_command_line"​
 </​sxh>​ </​sxh>​
  
-Теперь,​ если игрок установит курсор в строку ввода и начнёт нажимать клавишу "​Enter",​ всякий раз при нажатии клавиши "​Enter"​ будет вызываться локация "''​user_comand_line''"​.+Теперь,​ если игрок установит курсор в строку ввода и начнёт нажимать клавишу "​Enter",​ всякий раз при нажатии клавиши "​Enter"​ будет вызываться локация "''​%%user_comand_line%%''"​.
  
-Полезна при организации парсера (управление игрой с помощью строки ввода),​ или для организации отладчика. Получить текст, введённый игроком в поле ввода, можно с помощью функции ''​**$USER_TEXT**''​.+Полезна при организации парсера (управление игрой с помощью строки ввода),​ или для организации отладчика. Получить текст, введённый игроком в поле ввода, можно с помощью функции ''​%%$USER_TEXT%%''​.
  
 Пример кода для локации-обработчика:​ Пример кода для локации-обработчика:​
 +
 <sxh qsp> <sxh qsp>
 ! если введённый текст соответствует названию существующей локации ! если введённый текст соответствует названию существующей локации
 if (loc $user_text)=-1:​ if (loc $user_text)=-1:​
- ! осуществляем переход на эту локацию +    ​! осуществляем переход на эту локацию 
- goto $user_text+    goto $user_text
 elseif instr($user_text,'>'​)=1:​ elseif instr($user_text,'>'​)=1:​
- ! если первый символ в строке ввода это ">"​ , +    ​! если первый символ в строке ввода это ">"​ , 
- ! выполняем введённый в строку текст, как код +    ! выполняем введённый в строку текст, как код 
- dynamic $mid($user_text,​2)+    dynamic $mid($user_text,​2)
 end end
 </​sxh>​ </​sxh>​
-Чтобы отключить обработчик ввода, нужно задать переменной ''​**$USERCOM**''​ пустое значение:​+ 
 +Чтобы отключить обработчик ввода, нужно задать переменной ''​%%$USERCOM%%''​ пустое значение:​ 
 <sxh qsp> <sxh qsp>
 $usercom=""​ $usercom=""​
Строка 221: Строка 267:
 Локация-счётчик не является обработчиком какого-то события,​ как такового. Она вызывается через примерно равные промежутки времени,​ поэтому здесь мы выделяем её в отдельную группу. Тем не менее, всё, что справедливо для локаций-обработчиков событий,​ справедливо и для локации-счётчика. Локация-счётчик не является обработчиком какого-то события,​ как такового. Она вызывается через примерно равные промежутки времени,​ поэтому здесь мы выделяем её в отдельную группу. Тем не менее, всё, что справедливо для локаций-обработчиков событий,​ справедливо и для локации-счётчика.
  
-''​**$COUNTER**''​ —  содержит название локации-счётчика. Локация-счётчик может использоваться для реалтаймовых событий (то есть событий,​ происходящих в действительном времени);​ например,​ плавное изменение цвета фона, постепенный вывод текста на экран, плейлист для постоянного проигрывания музыки и другие. Название локации может быть любым.+''​%%$COUNTER%%''​ — содержит название локации-счётчика. Локация-счётчик может использоваться для реалтаймовых событий (то есть событий,​ происходящих в действительном времени);​ например,​ плавное изменение цвета фона, постепенный вывод текста на экран, плейлист для постоянного проигрывания музыки и другие. Название локации может быть любым.
  
-Локация-счетчик вызывается ​через ​одинаковые промежутки ​времени,​ по умолчанию каждые 500 мст.е. 2 раза в секунду. Автоматическое обновление интерфейса срабатывает с той же частотой. Промежутки задаются оператором ''​**SETTIMER**''​ в миллисекундах.+Как правило, чтобы не путаться, локацию называют так же, как и служебную переменную — "​Counter":​
  
-**Внимание!!!** Период,​ выставляемый через ''​**SETTIMER**''​ — это очень условная величина. Он показывает только примерное время, когда локация-счётчик будет добавлена на выполнение в очередь. Непосредственно выполниться локация-счётчик может чуть позже, а то и сильно позже. Будьте бдительны. 
- 
-Если ваша локация-счётчик называется "''​on_time''",​ на самой первой локации в игре нужно написать:​ 
 <sxh qsp> <sxh qsp>
-$counter='​on_time'+$counter='​Counter'
 </​sxh>​ </​sxh>​
  
-Теперь,​ если вы не использовали оператор ''​**SETTIMER**'',​ примерно каждые 500 миллисекунд будет вызываться локация "''​on_time''​".+Чтобы отключить выполнение локации-счётчика, нужно задать ​пустое значение переменной ​''​%%$COUNTER%%''​:
  
-Как правило,​ чтобы не путаться,​ локацию называют так же, как и служебную переменную — "​Counter":​ 
-<sxh qsp>  
-$counter='​Counter'​ 
-</​sxh>​ 
-Чтобы отключить выполнение локации-счётчика,​ нужно задать пустое значение переменной ''​**$COUNTER**'':​ 
 <sxh qsp> <sxh qsp>
 $counter=""​ $counter=""​
 </​sxh>​ </​sxh>​
 +
 +==== SETTIMER ====
 +
 +Локация-счетчик вызывается через одинаковые промежутки времени,​ по умолчанию каждые 500 мс, т.е. 2 раза в секунду. Автоматическое обновление интерфейса срабатывает с той же частотой. Промежутки задаются оператором ''​%%SETTIMER%%''​ в миллисекундах.
 +
 +**Внимание!!!** Период,​ выставляемый через ''​%%SETTIMER%%''​ — это очень условная величина. Он показывает только примерное время, когда локация-счётчик будет добавлена на выполнение в очередь. Непосредственно выполниться локация-счётчик может чуть позже, а то и сильно позже. Будьте бдительны.
 +
 +Если ваша локация-счётчик называется "''​%%on_time%%''",​ на самой первой локации в игре нужно написать:​
 +
 +<sxh qsp>
 +$counter='​on_time'​
 +</​sxh>​
 +
 +Теперь,​ если вы не использовали оператор ''​%%SETTIMER%%'',​ примерно каждые 500 миллисекунд будет вызываться локация "''​%%on_time%%''"​.
  
 Примеры выставления таймера:​ Примеры выставления таймера:​
 +
 <sxh qsp> <sxh qsp>
 SETTIMER 1000/​частота_в_герцах SETTIMER 1000/​частота_в_герцах
 </​sxh>​ </​sxh>​
 +
 <sxh qsp> <sxh qsp>
 SETTIMER 1000*период_в_секундах SETTIMER 1000*период_в_секундах
Строка 259: Строка 313:
 Эта задача решается двумя способами. Эта задача решается двумя способами.
  
- * Назначаем в качестве локации-обработчика какого-либо события одну локацию,​ а уже из неё с помощью ''​**GOSUB**''​ вызываем необходимые локации,​ на которых мы разместили фрагменты кода:<​sxh qsp> +  ​* Назначаем в качестве локации-обработчика какого-либо события одну локацию,​ а уже из неё с помощью ''​%%GOSUB%%''​ вызываем необходимые локации,​ на которых мы разместили фрагменты кода: <sxh qsp> 
- ! самая первая локация в игре +     ​! самая первая локация в игре ​    ​$counter='​counter'​
- $counter='​counter'​+
 </​sxh><​sxh qsp> </​sxh><​sxh qsp>
- ! локация counter +! локация counter 
- gosub '​playlist'​ +gosub '​playlist'​ 
- gosub '​rabbit_hole','​animation'​+gosub '​rabbit_hole','​animation'​
 </​sxh>​ </​sxh>​
- * Используем системную переменную,​ в которую обычно прописываем название локации-обработчика,​ как массив,​ и прописываем локации,​ на которых мы разместили фрагменты кода, в ячейки этого массива:<​sxh qsp> + 
- $counter[0]='​playlist'​ +  ​* Используем системную переменную,​ в которую обычно прописываем название локации-обработчика,​ как массив,​ и прописываем локации,​ на которых мы разместили фрагменты кода, в ячейки этого массива:​ <sxh qsp> 
- $counter[1]='​rabbit_hole'​ +     ​$counter[0]='​playlist' ​    ​$counter[1]='​rabbit_hole'​ 
-</​sxh>​В данном случае плеер будет последовательно одну за другой вызывать локации,​ прописанные в этом массиве,​ пока массив не кончится,​ или пока плеер не встретит пустую ячейку (пустую строку в ячейке).+</​sxh>​ В данном случае плеер будет последовательно одну за другой вызывать локации,​ прописанные в этом массиве,​ пока массив не кончится,​ или пока плеер не встретит пустую ячейку (пустую строку в ячейке).
  
 Обратите внимание на преимущества и недостатки каждого способа. Обратите внимание на преимущества и недостатки каждого способа.
Строка 279: Строка 332:
  
 [[help:​dynamical|Вперёд:​ Динамический код]] [[help:​dynamical|Вперёд:​ Динамический код]]
- 
  
help/service_locations.1672677582.txt.gz · Последние изменения: 2023/01/02 16:39 (внешнее изменение)