Добрый вечер(ну или что там у вас)всем читающим.
1.Подскажите как написать Демон для вывода простеньких сообщений в процессе игры (например "Вы чихнули" и так далее).
2.Как реализовать возможность броска некоторых предметов с последующими событиями(например бросок ножа в стену,при этом будут потом происходит определенные последствия).
3.Как отключить вывод сообщений после большого описания комнаты,что в комнате присутсвует некоторый предмет,при этом не пряча этот предмет никуда.
Неактивен
1. До демонов, честно сказать, еще не добрался с разбором, но разве через запалы (fuse) нельзя организовать?
2. Через свойства ножа IoThrowAt (actor, obj) { if (obj=wall) = "....";} имхо можно реализовать.
3. Я тоже "парился", так и не нашел. isListed=nil конечно работает - предмет не видно, но его и не видно в инвентаре, после поднятия В итоге : создал два объекта один fixeditem, другой item без локации и при определенном действии над fixeditem - айтем переносится в инвентори.
Неактивен
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 .
Неактивен
Запалы запускаются также, но вроде там можно установить время через сколько ходов произойдет запуск. Точно не помню — см. "Бороздящий Просторы Вселенной". И запалы можно остановить перед тем, как они сработают.
Функция-демон — это абсолютно обычная функция, которая может содержать все что угодно. Правда, входящих параметров она не имеет.
Неактивен
Очень рад, что сложилось самоподдерживающееся коммьюнити.
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;} ;
Неактивен