Хм, столкнулся с проблемой. У протагониста уже есть предмет, пусть "пузырек с ядом". Исследуя отдаленные районы квеста он находит второй точно такой же "пузырек с ядом". Предметы по идее абсолютно идентичны (массовое производство приводит к этому), более того это контейнеры, и их содержимое отличается (в одном из пузырьков на самом деле простая вода), однако об этом нельзя узнать, если не попробовать (а умный протагонист не станет пить из пузырька с ядом, чтоб не почувствовать легкого недомогания).
Собственно есть ли выход из ситуации:
Вы имеете в виду "пузырек с ядом" или "пузырек с ядом"?
Кроме как поменять сценарий?
Самое страшное - таких предметов на самом деле на два, а четыре
Неактивен
Есть класс нумерованных предметов - numberedObject. Никогда не использовал, но судя по описанию, может подойти.
Указанный метод тоже может пройти, но только сам подумай - если они одинаковые, как их различает ГП?
Неактивен
С нумерацией все понятно - лучше всего вводить в момент входа в локацию с пузырьком (вбить скрипт в функцию осмотра комнаты). Впрочем, дело вкуса.
А вот нумерация может появляться если у игрока в кармане есть маркер. Это даже можно сделать пазлом. А ещё, актер может отказываться брать пузырек, мотивируя риском ошибки. Тут очень много вариантов, которые могут сделать игру только интереснее!
Неактивен
Пример манипуляций с лексемами и пару других фишек из Дримора.
class monster: Actor,living ... death(killer)= // !!!!!!!!!!!!!!! DEATH !!!!!!!!!!!!!!! { // создаем объект класса "труп" local corp := new trup; // список существительных local nnouns:=[]; // список прилагательных и пара переменных local adj:=[],z,i; // вынос трупа на сцену corp.moveInto(self.location); // уносим актера self.moveInto(nil); //обозначаем кем был этот труп corp.monstr:=self; // вес трупа зависит от макс хитов хозяина corp.weight:=self.mhp/4; // сообщение о смерти в зависимости от персонажей, оружия и оверкила killer.curweapon.killmess(killer,self,self.hp*(-1)); // скока лута в актере z:=length(self.contents); // перебрасываем лут в труп for(i:=1; i<=z;i++) self.contents[1].moveInto(corp); // берем список имен погибшего nnouns:=getwords(self, &noun); // присваиваем их свежему трупу for (i:=1;i<=length(nnouns);i++) addword(corp,&noun,nnouns[i]) ; // собираем список прилагательных adj:=getwords(self, &adjective); // их тоже приписываем тушке for (i:=1;i<=length(adj);i++) addword(corp,&adjective,adj[i]) ; // тельце будет отзывается на "он, она, оно" по обстоятельствам // ударить его -> Злодей умер -> ударить его -> Он уже мертв. setit(corp); } ; class trup: surface //!!!!!!!!!!!!!!!!!Trup!!!!!!!!!!!!!!!! ... monstr= nil sdesc ="труп <<monstr.rdesc>>" ... pdesc ="трупе <<monstr.rdesc>>" noun ='трупа' 'трупу' 'трупу#d' 'труп' 'трупом' 'трупом#t' 'трупе' 'тело' 'тела' 'телу' 'телу#d' 'телом' 'телом#t' 'теле' adjective='трупа' 'трупа#r' isHim = true ;
По аналогии с addword() работает и delword()
Неактивен
uux написал:
Эту конструкцию ГрАнд специально придумал для случаев, когда определяющее существительное в родительном падеже следует за определяемым (конструкции вида "дверь гаража", которая будет заменена на "дверь of гаража"). Поэтому тут-то как раз никаких предлогов (с точки зрения русского человека, а не TADS;) не требуется. Больше такое представление, насколько я понимаю, нигде не используется.
To GrAnd: Андрей, поправь меня, если я ошибаюсь.
Совершенно верно. ТАДС по умолчанию ожидает увидеть определяемое существительное после прилагательного, и делает исключение лишь при наличии предлога 'of'. В русском языке на его месте могут быть самые разные предлоги, что задается в specialWords строкой 'of'='для'='против'='типа'='из'='под'='от'='на'='в'='с'. Но предлога может не быть, так как он будет "заложен" в родительном падеже определения. Для этих случаев создается дополнительная лексема прилагательного с меткой #r. Предпарсер переделывает такие конструкции к виду "существительное для прилагательное" К сожалению, парсер все предлоги приводит к одному коду, и может вернуть только 'of'. Уж коль пошла такая пьянка, то можно сохранть предлоги для дальнейшего использования, но у меня уже голова идет кругом от последних программерских изысков
Неактивен