Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
30.01.2008 14:38

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

Тон

Поверхности и контейнеры

А почему поверхность при ее осмотре не выписывает список предметов, которые лежат на ней? И контейнеры тоже...
Гранд, может, доточить библиотеку? Какое-то глобальное упущение.

Пример. На столике лежит ключ. Если я напишу осмотреть столик, то выведется ldesc столика, но не напишется, что "на столике лежит ключ". Что, в целом, неправильно...

Неактивен

0    0    #2
02.02.2009 17:40

noname
Участник (+36, -9)
Зарегистрирован: 04.04.2008
Сообщений: 729

noname

Re: Поверхности и контейнеры

когда кладу НА сейф ключ, он перестаёт быть не только виден, но и  доступен. библиотек не редактировал.

Код:

/* Это просто комментарий, такой же, как, например, в языке Си */ 
/* Эти две строчки разрешают использовать возможности HTML в нашей игре */
#define USE_HTML_STATUS
#define USE_HTML_PROMPT
#include <advr.t>            /* включить файл с основными определениями объектов для текстовых квестов (русская версия)*/
#include <stdr.t>            /* включить файл определений стандартных функций, вызываемых при старте (русская версия) */
#include <errorru.t>         /* включить файл с русскими сообщениями об ошибках */
/************** поля *************************************************************************************************/
startroom: room                 /* по умолчанию, игра начинается в комнате с названием startroom */
  sdesc = "<b>стартовая локация (a1)</b>"            /* краткое опиание комнаты (от английского Short DESCription) */
  ldesc = "Это моя первая локация."
  north = a2room
  east  = b1room
;
a2room:room
  sdesc = "<b>северная локация (a2)</b>"
  ldesc = "Вот мои первые объекты:"
  south = startroom
  east  = b2room
;
b1room:room
  sdesc = "<b>восточная локация (b1)</b>"
  ldesc = "Ещё одна заморочка- ксиззи."
  west  = startroom
  north = b2room
;
b2room:room
  sdesc = "<b>северо-восточная локация (b2)</b>"
  ldesc = "Комната для роботов, которым нечем заняться."
  west  = a2room
  south = b1room
  enterRoom( actor ) =
  {
    if ( not self.isseen )
      notify( robot, &actorDaemon, 0 );
    pass enterRoom;
  }
;

/************************************** качели ************************************************************************/
table_wood: surface, fixeditem
   sdesc = "дубовый стол"
   rdesc = "дубового стола"
   ddesc = "дубовому столу"
   vdesc = "дубовый стол"
   tdesc = "дубовым столом"
   pdesc = "дубовом столе"
   noun = 'стол' 'стола' 'столу' 'столом' 'столе' 'столу#d' 'столом#t'
   adjective = 'дубовый' 'дубового' 'дубовому' 'дубовым' 'дубовом' 'дубовому#d' 'дубовым#t'
   isListed = true
   isHim = true
   location = a2room
   ldesc =
   {
     "Стол представляет из себя квадратную крышку на четырёх ножках.";
     inherited.ldesc;
   }
;
table_glass: surface, fixeditem
   sdesc = "стеклянный стол"
   rdesc = "стеклянного стола"
   ddesc = "стеклянному столу"
   vdesc = "стеклянный стол"
   tdesc = "стеклянным столом"
   pdesc = "стеклянном столе"
   noun = 'стол' 'стола' 'столу' 'столом' 'столе' 'столу#d' 'столом#t'
   adjective = 'стеклянный' 'стеклянного' 'стеклянному' 'стеклянным' 'стеклянном' 'стеклянному#d' 'стеклянным#t'
   isListed = true
   isHim = true
   location = a2room
   ldesc =
   {
     "Уродливый лабораторный массивный стол. Толстое мутное стекло имеет зеленоватый оттенок.";
     inherited.ldesc;
   }
;
box: keyedLockable, container, surface, fixeditem, openable
   sdesc = "надёжный сейф"
   rdesc = "надёжного сейфа"
   ddesc = "надёжному сейфу"
   vdesc = "надёжный сейф"
   tdesc = "надёжным сейфом"
   pdesc = "надёжном сейфе"
   noun = 'сейф' 'сейфа' 'сейфу' 'сейфом' 'сейфе' 'сейфу#d' 'сейфом#t'
   adjective = 'надежный' 'надежного' 'надежному' 'надежным' 'надежном' 'надежному#d' 'надежным#t'
   isListed = true
   mykey= key
   isHim = true
   isopen = nil
   islocked = true
   location = table_wood
;
/********* вещи ****************************************************************************************************/
apple_green: item
   sdesc = "зелёное яблоко"
   rdesc = "зелёного яблока"
   ddesc = "зелёному яблоку"
   vdesc = "зелёное яблоко"
   tdesc = "зелёным яблоком"
   pdesc = "зелёном яблоке"
   noun = 'яблоко' 'яблока' 'яблоку' 'яблоком' 'яблоку#d' 'яблоком#t' 'яблоке' 
   adjective = 'зеленое' 'зеленого' 'зеленому' 'зеленым' 'зеленом' 'зеленому#d' 'зеленым#t'
   isHim = true
   location = box
;
apple_red: item
   sdesc = "красное яблоко"
   rdesc = "красного яблока"
   ddesc = "красному яблоку"
   vdesc = "красное яблоко"
   tdesc = "красным яблоком"
   pdesc = "красном яблоке"
   noun = 'яблоко' 'яблока' 'яблоку' 'яблоком' 'яблоку#d' 'яблоком#t' 'яблоке' 
   adjective = 'красное' 'красного' 'красному' 'красным' 'красном' 'красному#d' 'красным#t'
   isHim = true
   location = box
;
key: keyItem
   sdesc = "стальной ключ"
   rdesc = "стального ключа"
   ddesc = "стальному ключу"
   vdesc = "стальной ключ"
   tdesc = "стальным ключом"
   pdesc = "стальном ключе"
   noun = 'ключ' 'ключа' 'ключу' 'ключом' 'ключу#d' 'ключом#t' 'ключе' 
   adjective = 'стальной' 'стального' 'стальному' 'стальным' 'стальном' 'стальному#d' 'стальным#t'
   isHim = true
   location = b2room
;
/********************************** актёры ****************************************************************************/
robot: Actor
    noun = 'робот' 'робота' 'роботу' 'роботом' 'роботе' 'роботу#d' 'роботом#t'
    adjective = 'скрипучий' 'скрипучего' 'скрипучему' 'скрипучим' 'скрипучем' 'скрипучему#d' 'скрипучим#t'
    sdesc = "скрипучий робот"
    rdesc = "скрипучего робота"
    ddesc = "скрипучему роботу"
    vdesc = "скрипучего робота"
    tdesc = "скрипучим роботом"
    pdesc = "скрипучем роботе"
    isHim = true
    isawake = true
    location = b2room
    actorDaemon =
    {
        if ( self.location <> Me.location or not self.isawake ) return;//!!!!!!!!!!!!! вычислять вместо Me
        "\b";
        switch( rand( 5 ) )
        {
         case 1:
            "робот ходит туда-сюда.";
            break;
         case 2:
            "робот насвистывает какую-то мелодию.";
            break;
         case 3:
            "робот напевает популярную песенку.";
            break;
         case 4:
            "робот выстукивает чечётку. ";
        break;
         case 5:
            "робот тихонько поскрипывает.";
            break;
         }
     }
   ;
/********************************* особые команды ********************************************************************/
magicVerb_1: deepverb
  verb = 'xyzzy' 'ксиззи'
  sdesc = "xyzzy"
  action( actor ) =
  {
      if ( actor.location = b1room )
      {
        "Внезапно пещеру заволакивает облаком оранжевого дыма. 
        Когда оно рассеивается, ты внезапно обнаруживаешь, 
        что находишься в комнате b2!";
        actor.moveInto(b2room);
      }
      else if (actor.location = b2room)
      {
        "Внезапно ты чувствуешь головокружение, а комната 
        все быстрее и быстрее начинает вращаться вокруг тебя. 
        Более-менее придя в себя, ты обнаруживаешь, что находишься
        в комнате b1! ";
        actor.moveInto( b1room );
      }
      else
        "Ничего не происходит.";
  }
;
magicVerb_2: deepverb
  verb = 'глаголы' 'список глаголов'
  sdesc = "глаголы"
  action( actor ) =
  {
    local o := firstobj(deepverb);
    "Список глаголов:\n";
    while (o<>nil)
    {
     "\n<<o.sdesc>>\n";
     o := nextobj(o, deepverb);
    }
  }
;

Неактивен

0    0    #3
02.02.2009 18:13

noname
Участник (+36, -9)
Зарегистрирован: 04.04.2008
Сообщений: 729

noname

Re: Поверхности и контейнеры

хм... В запертый сейф положить ничего нельзя, а НА него- можно. если НА него положить ключ- кранты. С не-запертым сейфом- проще:


северная локация (a2)
Ты видишь здесь дубовый стол и стеклянный стол. На дубовом столе ты видишь надёжный сейф.

>отпереть сейф
(с помощью стального ключа)
Ты открыл надёжный сейф стальным ключом.

>открыть сейф
Открыв надёжный сейф, ты обнаружил зелёное яблоко и красное яблоко.

>положить ключ на сейф
Готово.

>осм
северная локация (a2)
Вот мои первые объекты:
Ты видишь здесь дубовый стол и стеклянный стол. На дубовом столе ты видишь надёжный сейф. На надёжном сейфе ты видишь зелёное яблоко, красное яблоко и стальной ключ.

>осм сейф
Надёжный сейф открыт. В надёжном сейфе ты видишь зелёное яблоко, красное яблоко и стальной ключ.

в-общем, видимо, контейнер имеющий поверхность, невозможно сделать?

Неактивен

0    0    #4
03.02.2009 19:48

noname
Участник (+36, -9)
Зарегистрирован: 04.04.2008
Сообщений: 729

noname

Re: Поверхности и контейнеры

спасибо. действительно, список классов был избыточен. положить что-либо НА сейф, В котором есть что-то другое, можно вполне корректно, если представить сейф двумя объектами: сейф_поверхн и сейф_контейн. как конкретно организовать обработку такого случая- пока не разобрался. видимо, придётся переопределять какие-то библиотечные функции.

собственно, почему я к этому сейфу 'привязался'- на данном этапе мне интересно просто 'ковырять' движок. идей по созданию игры пока нет. а так, конечно, на РТАДСе можно реализовать, видимо, любую идею: лёгкие 'особенности' движка- не помеха. он прост в использовании и имеет достаточно широкие возможности.

Неактивен

0    0    #5
06.02.2009 00:39

noname
Участник (+36, -9)
Зарегистрирован: 04.04.2008
Сообщений: 729

noname

Re: Поверхности и контейнеры

GrAndrey написал:

Да, нужны два объекта - "сейф" и "сейфовая ячейка". Некоторые действия над сейфом переадресовывать ячейке, а многие над ячейкой - сейфу.

а насколько это сложно? не будет ли затруднительно выложить пример, где сейф можно отпереть/запереть, открыть/закрыть, ложить ключи и яблоко  как В сейф, так и НА него?

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru