Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
28.12.2007 18:05

Phoenix849
Участник
Зарегистрирован: 24.12.2007
Сообщений: 7

Нубские вопросы

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

Как сделать какие-либо события в определенное (или случайное) время? Т.е. закрытая комната, например, начинаешь тыкаться везде, ничего не находишь, нервничаешь и, наконец, спустся 10 шагов через дверь вламывается кто-нибудь. Желательно без заумных скриптов, т.к. я ни разу не программист и на все смотрю с точки зрения казуала, а не мастера С++.

Неактивен

0    0    #2
28.12.2007 18:20

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Нубские вопросы

Запалы. Смотри в сторону функции setfuse().

UPD: посмотрел документацию, там ничего не написано (не переведена эта часть)

В общем, так. Пишешь функцию вида

Код:

myFuse: function(param) {
 "Тут дверь с грохотом распахнулась и в комнату ворвался <<param>>!";
 ... какой-то еще код ...
}

а в другом месте (где ты хочешь "заложить мину") пишешь

Код:

setfuse(myFuse, 10, "ОГРОМНЫЙ ТРОЛЛЬ");

Тогда, через 10 ходов у тебя в комнату ворвется "огромный тролль". smile

Если ты хочешь, чтобы у тебя каждый ход выполнялось некое действие, то используй не запал, а демон. Вместо setfuse() напиши setdaemon(<функция>, <параметр>). Но демоны, в отличие от запалов, не исчезают сами. Их надо удалять явно - выполнив remdaemon с теми же параметрами, что и setdaemon.

Отредактировано fireton (28.12.2007 19:52)

Неактивен

0    0    #3
28.12.2007 20:17

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Нубские вопросы

Есть еще более продвинутая функция notify.

Код:

notify(object, &message, turns)

Она работает как запал, с той только разницей, что она направлена на конкретный объект. Вот кусочек кода как пример:

Код:

bomb: item
    location = bombroom
    sdesc = "бомба"
    rdesc = "бомбы"
    ddesc = "бомбе"
    vdesc = "бомбу"
    tdesc = "бомбой"
    pdesc = "бомбе"
    noun = 'бомба' 'бомбы' 'бомбе' 'бомбу' 'бомбой' 'бомбою' 'бомбе#d' 'бомбой#t' 'бомбою#t'
    noun = 'bomb'
    ldesc =
    {
      "Похоже, на бомбе есть кнопка с надписью \"детонатор\". ";
      if (self.isActive) "Бомба громко тикает. ";
    }
    explode =
    {
      "Бомба взорвалась! ";
      self.moveInto(nil);
    }
  ;


 

  bombButton: buttonItem
    location = bomb
    sdesc = "кнопка детонатора"
    rdesc = "кнопки детонатора"
    ddesc = "кнопке детонатора"
    vdesc = "кнопку детонатора"
    tdesc = "кнопкой детонатора"
    pdesc = "кнопке детонатора"
    adjective = 'детонатора' 'детонатора#r'
    noun = 'кнопка' 'кнопки' 'кнопке' 'кнопку' 'кнопкой' 'кнопкою' 'кнопке#d' 'кнопкой#t' 'кнопкою#t'
    ldesc = "кнопка для детонатора"
    isHer = true
    doPush(actor) =
    {
      "Бомба начала тикать. ";
      notify(bomb, &explode, 3);              // Бомба взорвется через три хода
      bomb.isActive := true;
    }
  ;

Если количество ходов, заданных в notify равно 0, то она будет работать как демон, т.е. метод объекта будет вызываться каждый ход.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru