Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
18.01.2008 22:54

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

Тон

Новая версия библиотеки?

Что скажешь, ГрАнд?
Уже достаточно изменений накопилось, по-моему...

Неактивен

0    0    #2
05.02.2008 19:36

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Такая неприятная особенность (было и раньше):

(примерно так)
>осм дубину стража
Который "дубину of стража" вы имеете в виду, "левый скипетр стража" или "правый скипетр стража"?


Диковато выглядит "of", и сочетание "Который дубину" (дубина описана как скипетр и имеет признак isHim).

И еще (вроде раньше обсуждали? не могу найти):

>ударить гоблина топором
Я не вижу здесь объект "гоблина топором".


Топор находится в инвентаре.

Неактивен

0    0    #3
06.02.2008 12:55

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Код:

commonAxe: item
    location = nil
    sdesc = "топор"
    rdesc = "топора"
    ddesc = "топору"
    vdesc = "топор"
    tdesc = "топором"
    pdesc = "топоре"
    noun = 'топор' 'топора' 'топору' 'топором' 'топоре' 'топору#d' 'топором#t'
    ldesc = "Обычный топор."
    isHim = true
    verIoAttackWith (a) = {}
    ioAttackWith (a, i) = { "Ты атаковал <<i.rdesc>> <<self.tdesc>>."; }
;

deadGoblin: fixeditem
    location = citadelCorridor
    sdesc = "мертвый гоблин"
    rdesc = "мертвого гоблина"
    ddesc = "мертвому гоблину"
    vdesc = "мертвого гоблина"
    tdesc = "мертвым гоблином"
    pdesc = "мертвом гоблине"
    adjective = 'мертвый' 'мертвый#t' 'мертвого' 'мертвому' 'мертвому#d' 'мертвым' 'мертвым#t' 'мертвом' 
         'труп' 'труп#t' 'трупа' 'трупу' 'трупу#d' 'трупом' 'трупом#t' 'трупе'
    noun = 'гоблин' 'гоблина' 'гоблину' 'гоблином' 'гоблине' 'гоблину#d' 'гоблином#t' 
           'труп' 'труп#t' 'трупа' 'трупу' 'трупу#d' 'трупом' 'трупом#t' 'трупе'
    verDoAttackWith (a, i) = {}
    ldesc = "Описание гоблина"
;

По определенным причинам, гоблин уже мертв. Но это не должно влиять на команду. Топор изначально в nil -- переносится в комнату програмно. Я его подобрал, топор в инвентаре. Гоблин в комнате.

"Упоминая "дубину стража", вы имели в виду: ...  "

Такой вариант лучше. Хотя и звучит вычурней, но избавит игрока от непредусмотренных несуразностей. Эх, насколько же проще английский язык... %)

Отредактировано Gremour (06.02.2008 12:58)

Неактивен

0    0    #4
18.03.2008 15:17

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Из moveableActor:

Код:

    verGrab(item) =
    {
        "<<ZAG(self,&sdesc)>> <<glok(self,'нести')>> <<item.vdesc>> и
        не да<<self.isThem?"дут":"ст">> <<parserGetMe().ddesc>> взять <<item.itobjdesc>>. ";
    }

Некорректно работает.

>взять бутылку
Печальный владелец бутылку вина и не даст тебе взять её.

Неактивен

0    0    #5
19.03.2008 15:57

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

В последней выложенной тобой версии (http://rtads.org/libr25beta.rar) баг есть. Вот исходник для примера:

Код:

#include <advr.t>
#include <errorru.t>
#include <stdr.t>

startroom: room
    ldesc = "Стартовая комната"
;


shopkeeper: Actor
    location = startroom
    sdesc = "торговец"
    rdesc = "торговца"
    ddesc = "торговцу"
    vdesc = "торговца"
    tdesc = "торговцом"
    pdesc = "торговце"
    noun = 'торговец' 'торговца' 'торговцу' 'торговцом' 'торговце' 'торговцу#d' 'торговцом#t'
    ldesc = " торговец"
    isHim = true
    actorDesc = "торговец с булкой в руках стоит здесь. "
;

bread: item
    location = shopkeeper
    sdesc = "булка"
    rdesc = "булки"
    ddesc = "булке"
    vdesc = "булку"
    tdesc = "булкой"
    pdesc = "булке"
    noun = 'булка' 'булки' 'булке' 'булку' 'булкой' 'булкою' 'булке#d' 'булкой#t' 'булкою#t'
    ldesc = " булка"
    isHer = true
;

>взять булку
Торговец булку и не даст тебе взять её.

Неактивен

0    0    #6
09.04.2008 16:21

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Вывод генератора:

Код:

1му  - стол  сто$1а  сто$1у(#d)  сто$1  сто$1ом(#t)  сто$1е  стол (-)

Объект:

Код:

table: fixeditem, surface
    location = lightRoom
    isHim = true
    adjective = 'изящный/1м'
    noun = 'стол/1м'
    ldesc = "Описание стола. "
;

Лексемы какие-то странные. Так и надо, или я опять что-то неправильно делаю? smile

С прилагательным вроде порядок.

Неактивен

0    0    #7
09.04.2008 17:40

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Генератор на прилагательном adjective = 'восточное/с' зависает.

Некорректно воспроизводятся лексемы 'землЯ/1ж' (в В.П. даже пробел посреди слова!).

И ещё: sdesc, я так понял, автоматом не генерится? Было бы удобно, если бы для объекта, у которого не задан sdesc, он автоматом составлялся из первого существительного (возможно, первое прилагательное плюс первое существительное).

P.S. Слова типа "ставень" (ставня) надо руками прописывать?

Отредактировано Gremour (09.04.2008 18:07)

Неактивен

0    0    #8
09.04.2008 18:04

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Итак, список некорректно обрабатываемых слов (буду дополнять):

восточное
старинное
стол
земля
город
лес

Отредактировано Gremour (09.04.2008 18:08)

Неактивен

0    0    #9
10.04.2008 16:22

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

По-прежнему 'восточное/1с' и 'старинное/1с' дают слом генератора (выход за границы массива).

Очень хочется автоматической генерации *desc и флагов isHim, isHer, isThem. Делаю пока самостоятельно. Но работает как-то странно. Некоторые прилагательные для И.П. почему-то теряются sad

Код:

modify thing
    autoAdj = true // Признак автогенерации прилагательного 
    descnoun = [ '', '', '', '', '', '' ]
    descadj =  [ '', '', '', '', '', '' ]
    assembleDescription(n) =
    {
        if (autoAdj && descadj[n] != '')
        {
            say (descadj[n]); " ";
        }
        say (descnoun[n]);
    }
    sdesc = { self.assembleDescription(1); }
    rdesc = { self.assembleDescription(2); }
    ddesc = { self.assembleDescription(3); }
    vdesc = { self.assembleDescription(4); }
    tdesc = { self.assembleDescription(5); }
    pdesc = { self.assembleDescription(6); }
    printDescs =
    {
        "\n"; "sdesc={"; sdesc; "}";
        "\n"; "rdesc={"; rdesc; "}";
        "\n"; "ddesc={"; ddesc; "}";
        "\n"; "vdesc={"; vdesc; "}";
        "\n"; "tdesc={"; tdesc; "}";
        "\n"; "pdesc={"; pdesc; "}";
    }
;

В generator.t (метод start(...):

Код:

          // перебираем склонения
           
          res:=generate(obj, nouns[i], 0, 1, true);
          
          for (sklon:=1; res<>nil && sklon<=length(res); ++sklon)
          {
           local same:=nil;
           local new_nouns:= getwords(obj, &noun);          
           
           if (sklon >= 1 and sklon <= 6)            // +++++++++++++++++++
              obj.descnoun[sklon] := res[sklon][1];  // +++++++++++++++++++

           // пополняем список лексем
           if (find(new_nouns,res[sklon][1])=nil) addword(obj, &noun, res[sklon][1]);
           else same:=true;

           <...>

      // СКЛОНЯЕМ ПРИЛАГАТЕЛЬНЫЕ
      for (i:=1; i<=al; ++i)
      {
        local res, sklon;
        
        if (find(adjs[i],'/')) 
        {

          res:=generate(obj, adjs[i], 0, 2, true);
          
          for (sklon:=1; res<>nil && sklon<=length(res); ++sklon)
          {
           local same:=nil;
           local new_adjs:= getwords(obj, &adjective);          
           
           if (sklon >= 1 and sklon <= 6)            // +++++++++++++++++++++++
              obj.descadj[sklon] := res[sklon][1];   // +++++++++++++++++++++++

           if (find(new_adjs, res[sklon][1])=nil) addword(obj, &adjective, res[sklon][1]);
           else same:=true;

Неактивен

0    0    #10
14.04.2008 15:11

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

1жп     - выгоревшая    выгоревшой    выгоревшой(-)(#d)    выгоревшую    выгоревшой(-)(#t)    выгоревшой(-)    выгоревшою(#t)    выгоревшаяю   

2жу    - ромашки    ромашек    ромашок(#d)    ромашк    ромашкам(#t)    ромашки(-)    ромашками(#t)    ромашках   


И ещё, описания 'ложка/ж' и 'ложка/1ж' дают разные лексемы. Хотя не должны, по идее. Если число не указано, должно предполагаться единственное.

Update: (с васильками всё в порядке, не поставил род)

Отредактировано Gremour (14.04.2008 15:21)

Неактивен

0    0    #11
14.04.2008 15:29

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Генератор -- это один из альтернативных вариантов. Если для некоторых слов он не срабатывает, можно прописать лексемы вручную. Я пользуюсь. Ибо облегчает. Заодно найдём места, где он работает неправильно, и ГрАнд их исправит (надеюсь smile.

Неактивен

0    0    #12
17.04.2008 20:17

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

ГрАнд, ОГРОМНАЯ просьба сделать автогенерацию sdesc, rdesc ... pdesc. Без автогенерации desc'ов от генератора проку не много. Всё равно приходится использовать внешний (чтобы не прописывать desc'и руками).

Моё решение (приведено выше) не всегда однозначно выбирает слово, если есть синонимы. Иногда берётся первое слово. Иногда последнее. А иногда прилипает к одному из синонимов и берёт только его, независимо от положения слова в списке синонимов.

Я не вникал глубоко в алгоритм. Видимо ты разбираешь слова не подряд. Можно внести дополнительный флаг, который помечает синоним, который будет использоваться в desc'ах. Например 'рог/1м=' 'рожок/1м' 'загогулина/1ж'. Если флага нет, брать первый (или последний). То же самое с прилагательными. Флаги isHim/isHer/isThem генерить согласно выбранному синониму.

Неактивен

0    0    #13
18.04.2008 19:05

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Прилагательное 'голубое/1с' вызывает слом (выход за границы массива).

Неактивен

0    0    #14
07.05.2008 14:27

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Korwin,

В текущей версии генератора Гранда *desc-и не создаются. Автоматическое создание *desc-ов -- моих рук дело (правку generator.t я постил выше; у тебя подправленная мной версия генератора). Но это всего лишь быстрое решение. Алгоритм у Гранда сложнее, чем мне казалось, и выдаёт лексемы в странном порядке (не в той очерёдности, в какой они прописаны в свойстве noun объекта). Будет лучше, если Гранд сделает создание *desc-ов сам, как автор генератора.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru