у мну тут весьма специфическая трабла...Мне позарез нужен актер, но опять-таки: то, что написал сам не пашет...
Ситуация:
Актер находится перед закрытой дверью...пока игрок не найдет способ открыть ее, мне надо, чтобы актер как-бы совершал попытки сломать дверь, при этом у него ничего не должно получаться( неплохо было бы сделать, чтобы сообщения выводились независимо от местанахождения игрока )...затем актер должен пройти внутрь, упасть там в обморок( ну соотсветсвенно с ним ни разговаривать ниче сделать низя) и выронил предмет...все...
Неактивен
Я бы сделал так. Реализовал бы это через демон (или запал, если актер должен ломиться через определенное число ходов).
Демон запускаешь когда тебе надо: он должен выводить сообщения о том, что кто-то ломиться в дверь. По событии открытия двери, демон останавливается и актер с соответствующим сообщением попадает внутрь. Далее просто помещаешь в комнату заранее созданного актера.
ЗЫ Сейчас сижу на работе, тадса нет под рукой. Если что непонятно - говори, напишу примерный код потом.
Отредактировано - 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)
Неактивен