Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
29.07.2007 14:49

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

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

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

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

Неактивен

0    0    #2
30.07.2007 07:45

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

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

Я бы сделал так. Реализовал бы это через демон (или запал, если актер должен ломиться через определенное число ходов).

Демон запускаешь когда тебе надо: он должен выводить сообщения о том, что кто-то ломиться в дверь. По событии открытия двери, демон останавливается и актер с соответствующим сообщением попадает внутрь. Далее просто помещаешь в комнату заранее созданного актера.

ЗЫ Сейчас сижу на работе, тадса нет под рукой. Если что непонятно - говори, напишу примерный код потом.

Отредактировано - VampirE - (30.07.2007 07:45)

Неактивен

0    0    #3
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    #4
01.12.2007 15:49

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

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

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

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

Неактивен

0    0    #5
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    #6
02.12.2007 21:42

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

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

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

Неактивен

0    0    #7
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