у мну тут весьма специфическая трабла...Мне позарез нужен актер, но опять-таки: то, что написал сам не пашет...
Ситуация:
Актер находится перед закрытой дверью...пока игрок не найдет способ открыть ее, мне надо, чтобы актер как-бы совершал попытки сломать дверь, при этом у него ничего не должно получаться( неплохо было бы сделать, чтобы сообщения выводились независимо от местанахождения игрока )...затем актер должен пройти внутрь, упасть там в обморок( ну соотсветсвенно с ним ни разговаривать ниче сделать низя) и выронил предмет...все...
Неактивен
Я бы сделал так. Реализовал бы это через демон (или запал, если актер должен ломиться через определенное число ходов).
Демон запускаешь когда тебе надо: он должен выводить сообщения о том, что кто-то ломиться в дверь. По событии открытия двери, демон останавливается и актер с соответствующим сообщением попадает внутрь. Далее просто помещаешь в комнату заранее созданного актера.
ЗЫ Сейчас сижу на работе, тадса нет под рукой. Если что непонятно - говори, напишу примерный код потом.
Отредактировано - VampirE - (30.07.2007 07:45)
Неактивен
masterofshadows написал:
Хмм...что-то я запутался...Как заставить спросить у актера про место, в котором находишься?...И ваще мона пжлста хотя б маленький пример диалога?... а то торможу...
ИМХО проще всего присвоить локации какое-то имя, которое будут отображаться в статусной строке, а потом реализовать предмет класса thing с таким же названием.
Кроме того, я как-то делал ради интереса модуль меню. Меню активируется при входе в режим диалога, система собственно напоминает собой ту что была использована в игре Remeses. В аплоаде на urq.allquests.ru исходник до сих пор лежит. Можешь использовать его. Разобраться там просто.
С меню Гранада я так и не смог толком разобраться. Вернее разобрался, но как заставить этот модуль корректно работать в конкретной игре так и не понял.
Отредактировано - VampirE - (21.11.2007 17:39)
Неактивен
Довел до ума систему меню. Можно конструировать в игре диалоги любой сложности.
Если кому интересно, то http://file.raid.ru/get.php?f=f795c0c4e … fb08a133c5. ![]()
Неактивен
Вообще-то advr.t не используется. Просто для полноты добавил.
Уникален только menu.t, можно вставлять в любую разработку и свободно пользовать.
Так что может кому и понадобиться, буду только рад. Что касается своих возможных игр, планирую что именно эту систему буду использовать в диалогах.
Отредактировано - VampirE - (01.12.2007 19:57)
Неактивен
Это заморочки с примером. Вставь menu.t в любой проект и увидишь как все прекрасно заработает. ![]()
Неактивен
Пожелания учел, выкладываю исправленное содержимое файла menu.t. ![]()
/*
Правила использования:
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)
Неактивен