Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
12.03.2012 22:43

Olegus t.Gl.
Участник (+1055, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Az: Таймер (и события по таймеру) в игре

Где же лучше расставить эти такты?

P.S. Пока тупо повесил 1 такт на каждое интерактивное действие с объектами и такие же взаимодействия между ними.

Действие — это когда игрок тычет мышкой в объект и выбирает пункт из меню (это действие) — и что-то происходит.

Взаимодействие — это когда в меню одного объекта игрок выбирает пункт "что-нибудь сделать с ним", затем щёлкает на втором объекте и в появившемся меню выбирает, что конкретно он хочет сделать с этими двумя объектами, — и опять же что-то происходит.

В принципе, если хочется накрутить счётчик тактов, то в каждом модуле действия/взаимодействия (который необходимо прописывать, чтобы что-то происходило) можно просто вставлять что-то типа:

Код:

°ПрошлоВремени=5

и при отработке счётчик прокрутится не на 1, а на 5 тактов.

Неактивен

0    0    #2
12.03.2012 23:30

Olegus t.Gl.
Участник (+1055, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Таймер (и события по таймеру) в игре

К вопросу о тактах — когда же запускать обработчик этих самых тактов? Самый очевидный способ — после отработки действий игрока. А есть ли ещё варианты?

Неактивен

0    0    #3
19.05.2012 00:54

Olegus t.Gl.
Участник (+1055, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Таймер (и события по таймеру) в игре

Добавил события по таймеру (тактам игры). Упрощённо, такт — это одно действие игрока (осмотреться, что-нибудь сделать и т.п.)

Теперь с помощью такой команды:

Код:

…СобытиеПоТаймеру, 'ВетерНаЧердаке', 'ЛестницаНаЧердак, Чердак', '', '(2-5)', '', '', {
    …ТекстНаЭкран,'п. Сквозь щели в стенах врывается промозглый ветер, заставляя вас плотнее кутаться в шинель...'
    }

можно дать команду движку, чтобы, когда игрок находится в локациях "ЛестницаНаЧердак" или "Чердак", на каком-то случайном такте в диапазоне от 2 до 5 на экран выводилась надпись про "промозглый ветер".

А в это время независимо ни от чего за каждый ход игрока свойство "УровеньВоды" локации "Подвал" увеличивается на единицу:

Код:

…СобытиеПоТаймеру, 'ЗатоплениеПодвала', '', '', 1, '', '', {
    °УровеньВоды = …Получить('Подвал:УровеньВоды')
    …Установить, 'Подвал:УровеньВоды', °УровеньВоды + 1
    }

Как-то так.

Неактивен

0    0    #4
21.05.2012 10:00

Olegus t.Gl.
Участник (+1055, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Таймер (и события по таймеру) в игре

Известный каверзными, но очень симпатичными задачками Чешир задал следующий вопрос:

09:27    cheshire    олегус, вот у тебя события могут быть привязаны только к локации,а как же предметы?
09:28    cheshire    например
09:28    cheshire    клетка с попугаем, которую можно таскать с собой и оставлять где-нибудь
09:28    cheshire    раз, там, в 10 ходов попугай говорит "Кеша хороший"
09:29    cheshire    сможет Аз это обработать?

В самом простом варианте это будет выглядеть так:

Код:

…СобытиеПоТаймеру, 'КешаХороший', '', '', 10, '', '', {
    if …Содержится(0, 'Кеша', ЛОКАЦИЯ, ДА) or …Содержится(0, 'Кеша', ИНВЕНТАРЬ, ДА):
        …ТекстНаЭкран, 'п. Попугай в клетке взъерошил перья и пробурчал: "Кеша хороший!"'
    end
    }

В результате этой команды у нас появляется событие "КешаХороший", которое вызывается каждый 10-й такт (ход). В модуле события прописано, что если объект "Кеша" находится в той же локации, что и игрок (служебная переменная ЛОКАЦИЯ), или же в инвентаре игрока (служебная переменная ИНВЕНТАРЬ), то на экран выводится: "Попугай в клетке взъерошил перья и пробурчал: "Кеша хороший!""

Неактивен

0    0    #5
21.05.2012 10:28

Нафанин
Модератор (+87, -8)
Откуда: Москва
Зарегистрирован: 17.03.2004
Сообщений: 175
Вебсайт

Прокрастинация и отвага.

Re: Az: Таймер (и события по таймеру) в игре

А если надо, чтобы Кеша болтал не каждый 10-й ход, как робот, а каждый 8-16, по рандому?

Отредактировано Нафанин (21.05.2012 10:29)

Неактивен

0    0    #6
21.05.2012 10:31

Olegus t.Gl.
Участник (+1055, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Таймер (и события по таймеру) в игре

Нафанин написал:

А если надо, чтобы Кеша болтал не каждый 10-й ход, как робот, а каждый 8-16, по рандому?

Если случайно либо на 8-й, либо на 16-й ход, то:

Код:

…СобытиеПоТаймеру, 'КешаХороший', '', '', '(8,16)', '', '', …

Если случайно в диапазоне от 8 до 16, то:

Код:

…СобытиеПоТаймеру, 'КешаХороший', '', '', '(8-16)', '', '', …

P.S. Это всё рабочие примеры.

Неактивен

0    0    #7
17.04.2013 00:03

Olegus t.Gl.
Участник (+1055, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Таймер (и события по таймеру) в игре

Переделал синтаксис команды под синтаксис строковых запросов. Стало немного легче.

Было:

Код:

…СобытиеПоТаймеру, 'ВетерНаЧердаке', 'ЛестницаНаЧердак, Чердак', '', '(2-5)', '', '', {
    …ТекстНаЭкран,'п. Сквозь щели в стенах врывается промозглый ветер, заставляя вас плотнее кутаться в шинель...'
    }

Стало:

Код:

…СобытиеПоТаймеру, 'ВетерНаЧердаке: ИГРОК В (ЛестницаНаЧердак, Чердак)', '(2-5)', {
    …ТекстНаЭкран,'п. Сквозь щели в стенах врывается промозглый ветер, заставляя вас плотнее кутаться в шинель...'
    }

Ну и кроме того добавил возможность отработки события не только при нахождении игрока в определённых локациях, но и других персонажей тоже.

Неактивен

0    0    #8
12.05.2013 18:47

Olegus t.Gl.
Участник (+1055, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Таймер (и события по таймеру) в игре

Для решения одной задачи увеличил количество таймеров: помимо общеигрового теперь есть таймер, отсчитывающий "время" пребывания игрока в текущей локации. Данный таймер обнуляется при заходе игрока в локацию, так что можно смотреть, "как долго" игрок был в той или иной локации в последний раз.

Синтаксис получения общеигрового таймера:

Код:

…ПолучитьТаймер()

Синтаксис получения времени пребывания игрока в локации "Подвал":

Код:

…ПолучитьТаймер('ИГРОК В Подвал')
…ПолучитьТаймер('В Подвал')
…ПолучитьТаймер('Подвал')

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru