Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #26
20.09.2007 00:43

Xlomid[оманад]
Участник (+85, -7)
Зарегистрирован: 21.06.2007
Сообщений: 178

Re: Помогите - актер и скриптование демонами

Ну, это разновидность моего подхода... Хотя выкомменчивать всяко эффективнее, чем удалять - не потребуется потом заново вводить то, что потер.

А как же многократный undo, без которого жизнь стала бы куда тяжелее?.. )) Я вообще обычно предпочитаю логику, хотя по причине гуманитарных склонностей и не очень с ней дружу. К способу, который так понравился Мастеру, прибегаю только в совершенно безнадежных случаях или когда меня вынуждают искать баг в коде на незнакомом мне языке (ТАДС, напримерsmile).

Неактивен

0    0    #27
20.09.2007 06:32

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Помогите - актер и скриптование демонами

Xlomid[оманад] написал:

А как же многократный undo, без которого жизнь стала бы куда тяжелее?.. ))

А в моем любимом edit'е его нет. Не, точно, блин, пора менять привычки;).

Неактивен

0    0    #28
09.11.2007 00:11

masterofshadows
Участник
Откуда: Кресло
Зарегистрирован: 22.07.2007
Сообщений: 29

Тихо, тихо ползи,
Улитка, по склону Фудзи,
Вверх, до самых высот!

Re: Помогите - актер и скриптование демонами

Вот я и вернулся!...долго меня не было - все учеба проклятая!...и сразу небольшое дополнение насчет актеров...Как мона реализовать актера, который при определенном условии ( скажем наличии предмета в инвентаре итп )...имеет в этом случае новую тему для диалога..после которого перемещается в другую комнату и не желает с тобой разговаривать пока ты не совершишь опр действие или не принесешь другой предмет...фух ..надеюсь более-менее понятно объяснилю

Неактивен

0    0    #29
09.11.2007 01:56

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Помогите - актер и скриптование демонами

masterofshadows написал:

Вот я и вернулся!...долго меня не было - все учеба проклятая!...и сразу небольшое дополнение насчет актеров...Как мона реализовать актера, который при определенном условии ( скажем наличии предмета в инвентаре итп )...имеет в этом случае новую тему для диалога..после которого перемещается в другую комнату и не желает с тобой разговаривать пока ты не совершишь опр действие или не принесешь другой предмет...фух ..надеюсь более-менее понятно объяснилю

В качестве ответа приведу вымышленный фрагмент игры с капитаном Жегловым в главной роли и Груздевым в качестве NPCя. Первый предмет, о котором будем спрашивать - орудие убийства - именной пистолет Груздева. Второй (который надо принести, чтобы актер соблаговолил вновь с тобой заговорить) - ордер на арест. Заранее прошу прощения у людей, помнящих сериал "Место встречи изменить нельзя" наизусть, а также у поборников исторической достоверности - я не помню в деталях, как развивалась эта сцена в фильме, и у меня нет уверенности, что ордер на арест выписывается в канцелярии, а в 2 часа ночи мОзги уже почти не работают.

Код:

Grusdev: actor
noun='груздев'
sdesc="Груздев"
location=ThisRoom
GunAsked=nil    // Флаг, показывающий, спрашивали ли Груздева про пистолет
// В стандартной библиотеке RTADS ответы персонажей выбираются в зависимости от конкретного слова,
// которое использовал игрок, а не от объекта; такой подход позволяет избежать путаницы, когда 
// в игре имеется много объектов с одинаковыми или пересекащимися лексическими свойствами
// (например, несколько домов, машин и т. д.). Однако в данном случае я предлагаю выбор ответов 
// все-таки в зависимости от объекта - просто потому, что на первых порах он проще и нагляднее.
doAskAbout(actor, iobj)={if(not self.GunAsked)
                           {// Еще не спрашивали про пистолет; персонаж готов общаться
                            switch(iobj)
                              {case Gun: if(actor.isCarrying(Gun))
                                           {// Оружие у нас; можем задать вопрос
                                            "Ты достаешь из кармана пистолет и суешь Груздеву под нос.
                                             \"Из этого оружия была убита Лариса Груздева. Узнаете?\"\n 
                                            Груздев вскакивает, с ужасом (вероятнее всего, притворным) 
                                            глядя на револьвер. \"Откуда это у вас? Этого не может быть!\"
                                            кричит он почти в истерике и бросается в другую комнату.";
                                            // Устанавливаем флаг, показывающий, что про пистолет уже 
                                            // спрашивали
                                            self.GunAsked:=true;
                                            // Перемещаем Груздева в другую комнату
                                            self.moveInto(OtherRoom);
                                           }
                                         else
                                           {// Пистолета у нас нет; блокируем вопрос
                                            "Тебе не терпится спросить у Груздева про орудие убийства, но 
                                             ты сдерживаешься: для пущего эффекта надо бы дождаться 
                                             результатов баллистической экспертизы, которые должны вот-вот 
                                             поступить.";
                                           }
                                        break;
                               default: "\"Товарищ Жеглов, какое это имеет отношение к убийству моей жены?\"";
                                        break;
                              }
                           }
                         else
                           {// Уже спрашивали про пистолет; блокируем общение с Груздевым, пока не 
                            // получим ордер на его арест
                            if(not actor.isCarrying(Order_Na_Arest))
                              {"На твой взгляд, реакция Груздева на то, что Лариса была убита из его
                                пистолета, вполне доказывает его вину. Теперь ты будешь допрашивать его
                                как подозреваемого - вот только сначала надо послать Шарапова в канцелярию 
                                за ордером на арест.";
                              }
                            else
                              {// Ордер у нас; появляются новые темы для разговора (добавить по вкусу)
                               switch(iobj)
                                 {case Gun: ...
                                  // и т. д.
                                 }
                              }
                           }
                        }
;

Отредактировано uux (09.11.2007 01:59)

Неактивен

0    0    #30
20.11.2007 22:31

masterofshadows
Участник
Откуда: Кресло
Зарегистрирован: 22.07.2007
Сообщений: 29

Тихо, тихо ползи,
Улитка, по склону Фудзи,
Вверх, до самых высот!

Re: Помогите - актер и скриптование демонами

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

Неактивен

0    0    #31
20.11.2007 23:37

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

Re: Помогите - актер и скриптование демонами

Диалоги можно сделать двумя принципиально разными способами:
1) Меню с предконструированными частями разговора;
2) Задать обработчики действий "спросить о" и "рассказать о" для набора предметов (которые могут фигурировать в качестве темы разговора).

Для реализации первого способа есть библиотека "меню" для TADS (http://rtads.org), которой я, впрочем ещё не пользовался. При желании, можно написать самому.

Если пользуешься вторым способом, чтобы не нарушать билль о правах игрока, не стоит привязывать к диалогам, которые инициирует сам игрок, критические для прохождения события. К тому же, по хорошему, темы разговора должны быть логичными и приходить на ум сами собой.

Неактивен

0    0    #32
21.11.2007 05:16

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Помогите - актер и скриптование демонами

masterofshadows написал:

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

Хмммм... про место, в котором находишься, видимо, лучше действительно спрашивать, используя менюшную систему. "Спросить Васю о месте, в котором находишься" - задолюаешься реализовывать парсерными средствами, даже если ты опытный автор, да и мало кто из игроков догадается ввести именно такую команду.

К сожалению, как и Gremour, библиотекой менюшных диалогов я никогда не пользовался. ГрАнд, вся надежда на тебя!wink

Неактивен

0    0    #33
21.11.2007 09:51

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

меньше слов

Re: Помогите - актер и скриптование демонами

Вопрос не совсем конкретный.
В прямом виде спрашивать о месте где находишься (вась, скажи, а где я нахожусь?), нельзя в силу ограничений парсера и ожиданий игрока от него. Но можно и нужно, чтобы персонаж отвечал на вопросы о названии локации или её характерных особенностях. В ответе прописать описания для случая когда игрок в локации, и вовне.

Неактивен

0    0    #34
21.11.2007 10:14

masterofshadows
Участник
Откуда: Кресло
Зарегистрирован: 22.07.2007
Сообщений: 29

Тихо, тихо ползи,
Улитка, по склону Фудзи,
Вверх, до самых высот!

Re: Помогите - актер и скриптование демонами

Хмм...А будут ли такие переходы из парсера в меню адекватно влиять на играбельность, геймплей и на общий вид игры? Или тут смотря как сделаешь?

Неактивен

0    0    #35
21.11.2007 12:19

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

Re: Помогите - актер и скриптование демонами

Сделай переход в режим меню по команде "(по)говорить с". Не забудь упомянуть о таком способе общения с актёрами в хелпе (по команде "помощь"). В некоторых местах можно переходить автоматически (если актёр сам затевает диалог).

Выход назад в парсер, естественно, одним из вариантов диалога.

Неактивен

0    0    #36
21.11.2007 17:38

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Помогите - актер и скриптование демонами

masterofshadows написал:

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

ИМХО проще всего присвоить локации какое-то имя, которое будут отображаться в статусной строке, а потом реализовать предмет класса thing с таким же названием.

Кроме того, я как-то делал ради интереса модуль меню. Меню активируется при входе в режим диалога, система собственно напоминает собой ту что была использована в игре Remeses. В аплоаде на urq.allquests.ru исходник до сих пор лежит. Можешь использовать его. Разобраться там просто.

С меню Гранада я так и не смог толком разобраться. Вернее разобрался, но как заставить этот модуль корректно работать в конкретной игре так и не понял.

Отредактировано - VampirE - (21.11.2007 17:39)

Неактивен

0    0    #37
21.11.2007 20:46

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Помогите - актер и скриптование демонами

- VampirE - написал:

masterofshadows написал:

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

ИМХО проще всего присвоить локации какое-то имя, которое будут отображаться в статусной строке, а потом реализовать предмет класса thing с таким же названием.

ИМХО в рамках диалоговой системы "спросить про/рассказать про" это все равно будет, мягко говоря, неинтуитивно. Как раз тот случай когда меню имеет преимущество перед парсером.

Неактивен

0    0    #38
22.11.2007 00:31

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

меньше слов

Re: Помогите - актер и скриптование демонами

uux написал:

- VampirE - написал:

masterofshadows написал:

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

ИМХО проще всего присвоить локации какое-то имя, которое будут отображаться в статусной строке, а потом реализовать предмет класса thing с таким же названием.

ИМХО в рамках диалоговой системы "спросить про/рассказать про" это все равно будет, мягко говоря, неинтуитивно. Как раз тот случай когда меню имеет преимущество перед парсером.

Позволю не согласиться. Находясь во дворце, вполне логично "спросить про дворец", или попав на ферму, расспросить о ней хозяина. Это делать можно и тоньше, не акцентируя внимание на формальном названии локации, а на характерных для неё объектах.
НЕ заморачивайтесь на технических аспектах! Во многих случаях простое решение будет легче для вас и игрока. Как пример - обход использования трех объектов в команде, отказ от наречий в пользу сопутствующих действий и т.п.

masterofshadows, пожалуйста, уточни, что ты же ты имел в виду?

Неактивен

0    0    #39
24.11.2007 01:25

masterofshadows
Участник
Откуда: Кресло
Зарегистрирован: 22.07.2007
Сообщений: 29

Тихо, тихо ползи,
Улитка, по склону Фудзи,
Вверх, до самых высот!

Re: Помогите - актер и скриптование демонами

я всего-то навсего хотел спросить как можно технически реализовать вопрос, адресованный актеру, касающийся не объекта итп а локации или местности...А также потом еще спросил как реализовать диалог можно..т.е. у мну был не адин замороченный вопрос..а два отдельных...если слишком пространственно выразился тогда и сейчас..извиняюсь=)

Неактивен

0    0    #40
24.11.2007 02:00

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

Re: Помогите - актер и скриптование демонами

Создай объект (свойство location оставь неопределённым) и присвой ему все синонимы, которые приходят в голову при мысли о локации. И разговаривай об этом объекте. То есть, то, что сказал Vampire.

Неактивен

0    0    #41
24.11.2007 08:43

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Помогите - актер и скриптование демонами

masterofshadows написал:

я всего-то навсего хотел спросить как можно технически реализовать вопрос, адресованный актеру, касающийся не объекта итп а локации или местности...А также потом еще спросил как реализовать диалог можно..т.е. у мну был не адин замороченный вопрос..а два отдельных...если слишком пространственно выразился тогда и сейчас..извиняюсь=)

Не совсем понятно со вторым вопросом, про пример диалога. Конкретнее, что нужно? Транскрипт диалога? Пример реализации диалога при парсерном общении (спросить о/рассказать о) - а чем в таком случае не устраивает пример про Жеглова с Груздевым? Или пример реализации менюшного диалога?

Отредактировано uux (24.11.2007 09:08)

Неактивен

0    0    #42
24.11.2007 16:24

masterofshadows
Участник
Откуда: Кресло
Зарегистрирован: 22.07.2007
Сообщений: 29

Тихо, тихо ползи,
Улитка, по склону Фудзи,
Вверх, до самых высот!

Re: Помогите - актер и скриптование демонами

хмм...в последнем сообщение я уже фактически ничего не спрашивал=)...все возможные пути решения мне уже предложили, я лишь сижу думаю, каким бы лучше...меня попросили разъяснить, что я имел ввиду своим вопросом, ну вот я из вежливости написал=)

Неактивен

0    0    #43
01.12.2007 15:49

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Помогите - актер и скриптование демонами

Довел до ума систему меню. Можно конструировать в игре диалоги любой сложности.

Если кому интересно, то http://file.raid.ru/get.php?f=f795c0c4e … fb08a133c5. smile

Неактивен

0    0    #44
01.12.2007 18:37

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Re: Помогите - актер и скриптование демонами

Посмотрел меню. Да, работает smile
Думаю пользоваться им врядли кто-то кроме тебя будет, просто потому, что используется измененный advr.t, да еще и старой сборки.

Неактивен

0    0    #45
01.12.2007 19:54

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Помогите - актер и скриптование демонами

Вообще-то advr.t не используется. Просто для полноты добавил. smile Уникален только menu.t, можно вставлять в любую разработку и свободно пользовать.

Так что может кому и понадобиться, буду только рад. Что касается своих возможных игр, планирую что именно эту систему буду использовать в диалогах.

Отредактировано - VampirE - (01.12.2007 19:57)

Неактивен

0    0    #46
01.12.2007 20:29

goraph
Участник (+647, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

Re: Помогите - актер и скриптование демонами

Не знаю уж используется или не используется, но со стандартным advr.t пример не хочет компилироваться

Неактивен

0    0    #47
02.12.2007 21:42

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Помогите - актер и скриптование демонами

Это заморочки с примером. Вставь menu.t в любой проект и увидишь как все прекрасно заработает. smile

Неактивен

0    0    #48
03.12.2007 00:16

Hind
Участник
Откуда: Балашиха
Зарегистрирован: 24.10.2007
Сообщений: 135
Вебсайт

Не нервируйте меня! Мне скоро негде будет прятать трупы!

Re: Помогите - актер и скриптование демонами

Хорошо и просто. Только при нажатии клавиши, отличной от цифры, все же не нужно выпадать в ошибку...
Должна быть защита от дурака smile

Я так понимаю, есть ограничение на 9 вариантов, из которых 1 занят выходом из диалога?

Неактивен

0    0    #49
03.12.2007 12:28

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Помогите - актер и скриптование демонами

Пожелания учел, выкладываю исправленное содержимое файла menu.t. smile

Код:

/*
Правила использования:

dyevushka : Actor
    location = startroom
    sdesc = "девушка"
    rdesc = "девушки"
    ddesc = "девушке"
    vdesc = "девушку"
    tdesc = "девушкой"
    pdesc = "девушке"
    noun = 'девушка' 'девушки' 'девушке' 'девушкой' '
    девушку' 'девушке#d' 'девушкой#t' 'девушкою#t'
    ldesc = "Красивая девушка. Блондинка."
    isHer = true
    verDoTalk(actor) = {}
    doTalk(actor) = {
                    "Девушка оценивающе смотрит на вас.";
                    answers([
                            '- Привет.' hello
                            '- Как тебя зовут?' name
                            '- Нет. Ничего.' ext
                            ]);
                    }
; 

hello: menu
action = {
            "- Привет."; 
            name.hide := nil;
         }
;

name: menu
hide = true
action = {
            "- Аня.";
            self.hide := true;
         }
;

Функцию answers возможно вставлять в любой метод. 
ext - стандартный выход из диалога,
если вам нужно, что бы персонаж, к примеру,
тоже прощался в ответ - достаточно вписать
вместо ext свой метод.
*/

answers: function;

menu: object
hide = nil //спрятать пункт меню? true - да, nil - нет
was = 0 //был ли вызов пункта меню? если да, то сколько раз?
action={} //ну, соответсвенно, содержимое диалога
isreturn = true; //выводит последние ответы
;

ext: menu //заглушка по умолчанию для завершения разговора
isreturn=nil
action={}
was=0
;

answers: function (Buttons)
{    
    local i, j, arr;
    
    arr := [];
    j := 0;
    
    "\b";
    
    for (i:=2; i <= length(Buttons); i+=2)
    {
        if (Buttons[i].hide = nil)
        {
        j++;
        say(j); ") "; say(Buttons[i-1]); "\n";
        arr := arr + Buttons[i];
        }
    }
    
    Handler:
    
    if (j < 10)
        i := cvtnum(inputkey());
    else
        {
        "\bВаш выбор: "; 
        i := cvtnum(input());
        }
    
    if (i > j or i = 0) goto Handler;
    
    "\b";
    
    arr[i].action;
    arr[i].was++;
    if (arr[i].isreturn = true) answers(Buttons);
}

Отредактировано - VampirE - (03.12.2007 12:33)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru