Forum.iFiction.Ru

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

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

Вы не зашли.

   #1
19.12.2014 07:38

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Rinform. Именование объектов.

Здравствуйте, форумчане. Решил разобраться с Rinform-ом. Составил небольшую программку, но не склоняет она у меня объекты. Поставил наименования из демо-игр - они склоняются, а мои - никак не хотят склоняться. Если ставлю косую черту, то при выводе списка видимых объектов в локации - наименования выводятся до косой черты.

Object flint "кусок кремня" plato
   has male,
  with name 'крем' 'кремен' 'минерал',

       description "Он очень острый!";


Object stone "камень" plato
  has male,
  with name 'камен' 'камн',
description "Это небольшой и гладкий булыжник.";


И что означают нежеследующие строки?

    casegen [ beg end csID;
    return ICVowel (csID, beg, end, 'о', 0);
    ],


Вот код, где выводятся склоняемые объекты:



    before [;
! команда ОТРЕЗАТЬ КАНАТ
         Cut:
         if (second == nothing) { print "Чем?"; rtrue; }
           else
           {    if (second == flint)
                    {if (flint in player)
                        {if (self.state == ROPE_STATE)
                            {self.state = CROPE_STATE;
                            print_ret (CCNom) self, " отрезан кремнем.";
                            }
                         else print "Он уже отрезан.";
                        }
                    else print "Кремня у меня нет.";
                    }
                else  print_ret "Я ", (cIns) second,  " не смогу отрезать.";
            };

           
! команда ВЗЯТЬ КАНАТ            
        Take: if (self.state == ROPE_STATE)

                 "Я не могу взять свисающий канат.";                        
        ];

Отредактировано Vladimir (19.12.2014 08:34)


Прикрепленные файлы:
Planet_of_death.inf, Размер: 6,394 байт, Скачано: 113

Неактивен

   #2
19.12.2014 08:47

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Rinform. Именование объектов.

Вставил ваш код, заработало, спасибо. Но, не понимал команду ВЗЯТЬ КУСОК. Когда добавил 'кус' к 'кремн' 'кремен' 'минерал', то программа стала на команду
ВЗЯТЬ КУСОК КРЕМНЯ выводить "Чем вы хотите взять кусок кремня из?". Я так понял, что, возможно, есть системное слово КУСОК и на взятие КУСКА ЧЕГО-ЛИБО она таким образом реагирует.

Неактивен

   #3
04.01.2015 09:49

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Rinform. Именование объектов.

Проблема возникла (решена уже, смотри в самом конце) по двойному имени объекта. Может кто знает как исправить ниже приведенный код:

Object flint "кус/о/к/ кремня" plato
    has male,
    with name  'кусок' 'куск' 'кремня' 'минерал' 'кремен' 'кремнем',
    description "Он очень острый!",
    casegen [ beg end csID;
        return ICVowel (csID, beg, end, 'о', 0);
    ];


Дело в том, что программа понимает команду взять кремень, отрезать канат куском (прочный канат отрезан кремнем), но не понимает отрезать канат кремнем (Этого предмета здесь нет), отрезать канат куском кремня (из команды понятно только: резать прочный канат кусок кремня)

         Cut:
         if (second == nothing) { print "Чем?"; rtrue; }
           else
           {    if (second == flint)
                    {if (flint in player)

                           
                        {if (self.state == 0)
                            {self.state = 1;                            
                           
                            print_ret (CCNom) self, " отрезан кремнем.";
                            }
                         else print "Он уже отрезан.";
                        }
                    else print "Кремня у меня нет.";
                    }
                else  print_ret "Я ", (cIns) second,  " не смогу отрезать.";
            };


В библиотеке RussiaG.h изменена команда "резать" для того, чтобы можно было резать и предметом из инвентаря  (  * cAcc_noun  cIns_held    -> Cut;)

! "резать"
Verb    'рез' 'реж'
                * cAcc_noun        -> Cut
                * cAcc_noun  cIns_held    -> Cut;


Object "резать" VerbDepot
    with name 'рез' 'реж';


В стандартной библиотеке команда "резать" такая:

! "резать"
Verb    'рез' 'реж'
                * cAcc_noun            -> Cut;

Object "резать" VerbDepot
    with name 'рез' 'реж';

И если её не изменить, то после команды "отрезать канат кремнем" или "отрезать канат куском"  выведется (из команды понятно только: резать прочный канат )

Попробовал сейчас вставить предмет с одним именем

Object flint "крем/е/н/ь" plato
    has male,
    with name 'кремня' 'минерал' 'кремен' 'кремнем',
    description "Он очень острый!",
    casegen [ beg end csID;
        return ICVowel (csID, beg, end, 'е', 0);
    ];

Но при команде "отрезать канат кремнем" выводит: Этого предмета здесь нет. А кремень находится в инвентаре. Может в программе команды CUT ошибка или в библиотеке что нужно подправить?

Просмотрел библиотеку и нашел, что кроме cIns_held есть ещё cAcc_held. Заменив cIns_held в команде "резать" на cAcc_held в библиотеке,  заработала команда "отрезать канат кремнем"  и выводит (прочный канат отрезан кремнем). Проверил с именем "кусок кремня" и работает также. Ошибка была в библиотечном файле RussiaG.h, где в команде "резать" нужно было добавить строчку                 * cAcc_noun  cAcc_held    -> Cut;

Отредактировано Vladimir (04.01.2015 10:25)

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru