Где же лучше расставить эти такты?
P.S. Пока тупо повесил 1 такт на каждое интерактивное действие с объектами и такие же взаимодействия между ними.
Действие — это когда игрок тычет мышкой в объект и выбирает пункт из меню (это действие) — и что-то происходит.
Взаимодействие — это когда в меню одного объекта игрок выбирает пункт "что-нибудь сделать с ним", затем щёлкает на втором объекте и в появившемся меню выбирает, что конкретно он хочет сделать с этими двумя объектами, — и опять же что-то происходит.
В принципе, если хочется накрутить счётчик тактов, то в каждом модуле действия/взаимодействия (который необходимо прописывать, чтобы что-то происходило) можно просто вставлять что-то типа:
°ПрошлоВремени=5
и при отработке счётчик прокрутится не на 1, а на 5 тактов.
Неактивен
К вопросу о тактах — когда же запускать обработчик этих самых тактов? Самый очевидный способ — после отработки действий игрока. А есть ли ещё варианты?
Неактивен
Добавил события по таймеру (тактам игры). Упрощённо, такт — это одно действие игрока (осмотреться, что-нибудь сделать и т.п.)
Теперь с помощью такой команды:
…СобытиеПоТаймеру, 'ВетерНаЧердаке', 'ЛестницаНаЧердак, Чердак', '', '(2-5)', '', '', { …ТекстНаЭкран,'п. Сквозь щели в стенах врывается промозглый ветер, заставляя вас плотнее кутаться в шинель...' }
можно дать команду движку, чтобы, когда игрок находится в локациях "ЛестницаНаЧердак" или "Чердак", на каком-то случайном такте в диапазоне от 2 до 5 на экран выводилась надпись про "промозглый ветер".
А в это время независимо ни от чего за каждый ход игрока свойство "УровеньВоды" локации "Подвал" увеличивается на единицу:
…СобытиеПоТаймеру, 'ЗатоплениеПодвала', '', '', 1, '', '', { °УровеньВоды = …Получить('Подвал:УровеньВоды') …Установить, 'Подвал:УровеньВоды', °УровеньВоды + 1 }
Как-то так.
Неактивен
Известный каверзными, но очень симпатичными задачками Чешир задал следующий вопрос:
09:27 cheshire олегус, вот у тебя события могут быть привязаны только к локации,а как же предметы?
09:28 cheshire например
09:28 cheshire клетка с попугаем, которую можно таскать с собой и оставлять где-нибудь
09:28 cheshire раз, там, в 10 ходов попугай говорит "Кеша хороший"
09:29 cheshire сможет Аз это обработать?
В самом простом варианте это будет выглядеть так:
…СобытиеПоТаймеру, 'КешаХороший', '', '', 10, '', '', { if …Содержится(0, 'Кеша', ЛОКАЦИЯ, ДА) or …Содержится(0, 'Кеша', ИНВЕНТАРЬ, ДА): …ТекстНаЭкран, 'п. Попугай в клетке взъерошил перья и пробурчал: "Кеша хороший!"' end }
В результате этой команды у нас появляется событие "КешаХороший", которое вызывается каждый 10-й такт (ход). В модуле события прописано, что если объект "Кеша" находится в той же локации, что и игрок (служебная переменная ЛОКАЦИЯ), или же в инвентаре игрока (служебная переменная ИНВЕНТАРЬ), то на экран выводится: "Попугай в клетке взъерошил перья и пробурчал: "Кеша хороший!""
Неактивен
А если надо, чтобы Кеша болтал не каждый 10-й ход, как робот, а каждый 8-16, по рандому?
Отредактировано Нафанин (21.05.2012 10:29)
Неактивен
Нафанин написал:
А если надо, чтобы Кеша болтал не каждый 10-й ход, как робот, а каждый 8-16, по рандому?
Если случайно либо на 8-й, либо на 16-й ход, то:
…СобытиеПоТаймеру, 'КешаХороший', '', '', '(8,16)', '', '', …
Если случайно в диапазоне от 8 до 16, то:
…СобытиеПоТаймеру, 'КешаХороший', '', '', '(8-16)', '', '', …
P.S. Это всё рабочие примеры.
Неактивен
Переделал синтаксис команды под синтаксис строковых запросов. Стало немного легче.
Было:
…СобытиеПоТаймеру, 'ВетерНаЧердаке', 'ЛестницаНаЧердак, Чердак', '', '(2-5)', '', '', { …ТекстНаЭкран,'п. Сквозь щели в стенах врывается промозглый ветер, заставляя вас плотнее кутаться в шинель...' }
Стало:
…СобытиеПоТаймеру, 'ВетерНаЧердаке: ИГРОК В (ЛестницаНаЧердак, Чердак)', '(2-5)', { …ТекстНаЭкран,'п. Сквозь щели в стенах врывается промозглый ветер, заставляя вас плотнее кутаться в шинель...' }
Ну и кроме того добавил возможность отработки события не только при нахождении игрока в определённых локациях, но и других персонажей тоже.
Неактивен
Для решения одной задачи увеличил количество таймеров: помимо общеигрового теперь есть таймер, отсчитывающий "время" пребывания игрока в текущей локации. Данный таймер обнуляется при заходе игрока в локацию, так что можно смотреть, "как долго" игрок был в той или иной локации в последний раз.
Синтаксис получения общеигрового таймера:
…ПолучитьТаймер()
Синтаксис получения времени пребывания игрока в локации "Подвал":
…ПолучитьТаймер('ИГРОК В Подвал') …ПолучитьТаймер('В Подвал') …ПолучитьТаймер('Подвал')
Неактивен