Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
01.06.2006 20:12

Davarg
Участник
Зарегистрирован: 01.06.2006
Сообщений: 8

Написание Демонов...

Добрый вечер(ну или что там у вас)всем читающим.
1.Подскажите как написать Демон для вывода простеньких сообщений в процессе игры (например "Вы чихнули" и так далее).
2.Как реализовать возможность броска некоторых предметов с последующими событиями(например бросок ножа в стену,при этом будут потом происходит определенные последствия).
3.Как отключить вывод сообщений после большого описания комнаты,что в комнате присутсвует некоторый предмет,при этом не пряча этот предмет никуда.

Неактивен

0    0    #2
02.06.2006 13:36

zerrr
Участник (+21, -5)
Откуда: Красноярск
Зарегистрирован: 20.11.2005
Сообщений: 567

Re: Написание Демонов...

1. До демонов, честно сказать, еще не добрался с разбором, но разве через запалы (fuse) нельзя организовать?
2. Через свойства ножа IoThrowAt (actor, obj) { if (obj=wall) = "....";} имхо можно реализовать.
3. Я тоже "парился", так и не нашел. isListed=nil конечно работает - предмет не видно, но его и не видно в инвентаре, после поднятия smile В итоге : создал два объекта один fixeditem, другой item без локации и при определенном действии над  fixeditem -  айтем переносится в инвентори.

Неактивен

0    0    #3
02.06.2006 17:19

Unreal
Участник (+3)
Зарегистрирован: 13.09.2002
Сообщений: 170

Re: Написание Демонов...

1. Как ни странно, но в "Блуждания в Окопный День" почти не употребляются демоны... Но берем продолжение этой игры "Бороздящий Просторы Вселенной" (Deep Space Drifter) и видим неплохие примеры использования демонов. Это для самостоятельного изучения, а короткий ответ на вопрос:

setdaemon( funcDaemon, nil ); — запускает демон
remdaemon( funcDaemon, nil ); — останавливает демон (возможно временно)

, где funcDaemon — имя функции, которая будет вызываться каждый ход.

3.  isListed=nil — неплохой вариант. Только при взятии предмета нужно настроить обработчик, чтобы предмет опять был isListed=true . По жаланию можно обрабатывать и такие события, как положить предмет.

А можно вот еще что сделать в свойствах объекта:

Код:

Lastik : item
    isListed = (
        if ( actor.isCarrying( self ) )
            return true;
        else
            return nil;
    )

А можно проверять объект на локацию игрока: Me.location .

Неактивен

0    0    #4
04.06.2006 18:14

Davarg
Участник
Зарегистрирован: 01.06.2006
Сообщений: 8

Re: Написание Демонов...

Запалы запускаются точно так же,как и демоны или по другому?
Демоны это функции,может ли у них быть тело функции содержащее switch( и тому подобное)?

Неактивен

0    0    #5
05.06.2006 16:44

Unreal
Участник (+3)
Зарегистрирован: 13.09.2002
Сообщений: 170

Re: Написание Демонов...

Запалы запускаются также, но вроде там можно установить время через сколько ходов произойдет запуск. Точно не помню — см. "Бороздящий Просторы Вселенной". И запалы можно остановить перед тем, как они сработают.

Функция-демон — это абсолютно обычная функция, которая может содержать все что угодно. Правда, входящих параметров она не имеет.

Неактивен

0    0    #6
11.06.2006 09:52

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Написание Демонов...

Очень рад, что сложилось самоподдерживающееся коммьюнити.

1.Подскажите как написать Демон для вывода простеньких сообщений в процессе игры (например "Вы чихнули" и так далее).

setdaemon(Daemon, nil);
Пример из моего неоконченного творения:

Код:

setdaemon(lifeDaemon, nil);                       // start the life daemon
lifeDaemon: function(parm)
{
local o;
o := firstobj(living); 
 while (o <> nil)
 {
  o.live;
  o := nextobj(o, living);
 }
}

Находит все живое и заставляет его действовать (ходить, сражаться, регенерировать и т.п.)

2.Как реализовать возможность броска некоторых предметов с последующими событиями(например бросок ножа в стену,при этом будут потом происходит определенные последствия).

zerrr ответил.

3.Как отключить вывод сообщений после большого описания комнаты,что в комнате присутсвует некоторый предмет,при этом не пряча этот предмет никуда.

В extendr.t есть класс unlisteditem. Думаю, он оптимален. Если человек взял эту вещь, то прятать её больше нельзя, т.к. игрок где-нибудь её кинет и забудет.

Код:

class unlisteditem:item
      isListed=nil
      doTake(actor)={self.isListed:=true; pass doTake;}
;

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru