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
30.07.2007 10:34

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

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

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

последние 2 предложения( или 3 ) понятно...не могу только представить код демона...

Неактивен

0    0    #4
30.07.2007 18:19

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

меньше слов

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

делается это примерно так:

Код:

replace init: function
{
    ......   // покоцано много-много
    setdaemon(lifeDaemon, nil);                       // запускаем демона жизни!
    .....
}

lifeDaemon: function(parm)                             // Оживляем Васю!
{
    if (Vasya.location=lift)
    if (liftdoor.isopen)
    {
        "Из открытой теперь двери лифта донесся дикий рев \"Порву суку на грелки!  Я тебе %№"* покажу, как меня запирать!\";
        if (vodka.location=etazh12) 
         {
            “\n Но вскоре крик затих - видимо, он нашел водку. "; 
            vasya.moveInto(nil); 
            vasyavdym.moveInto(etazh12);
            ogurec.moveInto(etazh12);
         }
        else
        global.achtung:=true;       
    }
    else
    {
     switch (triedToBreakin)
     {
       case 0: "От шахты лифта донеслась гулкая и невнятная, но явно нецензурная брань. "; break;
       case 1: "Откуда-то сверху донеслись глухие удары. Морзянка, сэр."; break;
       ....
       default: "Меланхоличный стук повторяется несколько раз и затихает. ";
     }
      triedToBreakin++;
    }
}

Также приведу жуткий пример из Дримора:

Код:

replace init: function
{
    ......   // покоццано много-много
    setdaemon(lifeDaemon, nil);                       // запускаем демона жизни!
    .....
}

lifeDaemon: function(parm)                             // Оживляем всех к тому пригодных
{
local o;
o := firstobj(living); 
 while (o <> nil)
 {
  o.live;
  o := nextobj(o, living);
 }
}


class living: object  //Живое
cons=true // изначально в сознании
enemy=[]  // изначально у него нет врагов
live=
{
 local o,enlist,i;
 enlist:=[];
 // Если есть враги, и они здесь, то создадим их список
 if (self.enemy!=nil && self.enemy!=[] && self.cons)
 for ( i:=1; i<=length(self.enemy); i++ )
 if (self.enemy[i].isReachable(self)) enlist+=self.enemy[i];

 // если бежали, "чекаем мораль"
 if (enlist!=[] && self.isflee)
  if (self.moralcheck(Me))
  {
    self.backToFightMes;
    self.isflee:=nil;
  }
  else self.flee;
    

 // если не бежим, деремся
 if (!self.isflee)
 {
    // случайным образом выбираем противника
    if (enlist!=[]) self.fight(enlist[rand(length(enlist))]); 
 }
}
;

Неактивен

0    0    #5
31.07.2007 11:43

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

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

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

спс...теперь более-менее понятно, хотя не мог бы объяснить, что делает global.achtung....

Неактивен

0    0    #6
31.07.2007 19:49

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

меньше слов

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

masterofshadows написал:

спс...теперь более-менее понятно, хотя не мог бы объяснить, что делает global.achtung....

В стандартных библиотеках ничего, этот параметр такая-же фантазия как объекты vasya, etazh12 и другое.

Неактивен

0    0    #7
01.08.2007 07:20

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

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

masterofshadows написал:

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

Приношу извинения за неоперативность ответа, но теперь наконец-то цепочка событий, не пускавшая меня на форум, если и не завершилась, то хотя бы временно прервалась. Вот мой вариант (в строгом соответствии с ТЗ спрашивавшего;):

Код:

Lady1: Actor
// Девушка, ломящаяся в дверь
sdesc="девушка"
ldesc="Если бы ты встретился с такой девушкой в иной обстановке - на вечеринке, спектакле или хотя бы в электричке - 
       ты бы обязательно попытался познакомиться с ней поближе. Однако сейчас она с такой целеустремленностью 
       и остервенением ломится в запертую дверь почты, не видя никого и ничего вокруг, что ты понимаешь - 
       лучше к ней не соваться."
// Запрещаем разговаривать с дамой
verDoAskAbout(actor, iobj)={"Пытаться начать праздный разговор с женщиной в таком состоянии означает как 
                             минимум нарваться на грубость.";}
// Точно также можно определить verDoTellAbout, а также actorAction (с exit), чтобы пресечь все попытки 
// коммуникации;)
actorDesc={"";} // Чтобы персонаж не отображался в описании комнаты - эту работу возьмет на себя демон
Lady1Daemon={if(parserGetMe().location=self.location) // Сообщения для случая, когда главный герой в 
                                                      // одной комнате с девушкой
               {switch(rand(5))
                  {case 1: "Девушка рвет на себя ручку двери, бормоча, \"и надо же было забыть его на работе...\"";
                           break;
                   case 2: "\"Сейчас прорвемся,\" выдыхает девушка и бросается на дверь всем своим хрупким телом,
                            пытаясь выбить ее. На дверь это не производит ровным счетом никакого впечатления.";
                           break;
                   // Ну, и так далее - случайные сообщения
                  }
               }
              else // Сообщения для случая, когда главный герой - в другой комнате (не видит девушку)
                {switch(rand(5))
                   {case 1: "Со стороны почты доносятся глухие удары и чертыхание - никак не оставит девушка 
                             своих попыток!";
                            break;
                    // И т. д., и т. п.
                   }
                }
             }
; // Конец определения девушки

// Нижеследующий кусок кода, по задумке, вставляется в метод/функцию, отвечающий за открывание двери.
// (Про то, как именно будет реализовано открывание двери, Мастер не спрашивал;).)
//
{"Видя, что ты собираешься открыть дверь, девушка отходит в сторону, нервно пританцовывая на месте со 
  взглядом, полным надежд и сомнений. Как только дверь распахивается, она тенью проносится мимо тебя 
  внутрь. Ты слышишь какой-то шелест, затем сдавленный вскрик: \"А! И здесь его нет!\", и глухой шлепок,
  после чего наконец наступает тишина."; 
  unnotify(Lady1, &LadyDaemon); // Отключаем сообщения о попытках сломать дверь
  Lady1.moveInto(nil); // Заменяем ломящуюся девушку...
  Lady2.moveInto(PostOffice); // ...на девушку в обмороке (PostOffice - это помещение, 
                              // куда ведет запертая дверь)
;
// Объект "девушка в обмороке"
Lady2: Actor 
Examined=nil // Флаг, показывающий, осматривал ли игрок девушку или нет
ldesc={"Давешняя девушка лежит посреди комнаты. Похоже, она в глубоком обмороке.";
       if(not self.Examined)
         {// При первом осмотре находим предмет, который выронила девушка при падении
          //
          "Рядом с телом девушки ты замечаешь мобильный телефон, который она, должно быть, 
           выронила при падении.";
          MobilePhone.moveInto(PostOffice);
          // Устанавливаем флаг, чтобы не находить мобильный телефон при каждом осмотре
          // девушки
          self.Examined:=true;
         }
      }
actorDesc="Посреди комнаты неподвижно лежит девушка."
;

Замечу, что инициировать демона необходимо командой notify, как показано у ГрАнда.

Кроме того, если игрок не может попасть в запертое здание почты каким-либо иным путем, кроме как открыв дверь, то перемещать объект Lady2 в общем-то не нужно, достаточно сразу определить его со свойством
location=PostOffice. Это исключительно дело личного вкуса и предпочтений программиста;).

Отредактировано uux (01.08.2007 07:25)

Неактивен

0    0    #8
01.08.2007 12:32

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

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

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

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

Неактивен

0    0    #9
01.08.2007 21:38

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

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

masterofshadows написал:

О тогда пока вы все расщедрились и охотно помогаете... не подскажете ли как убрать стандартное сообщение о нахождении прежмета в контейнере или в комнате  (  ну открываешь шкаф а тадс сам пишет, что ты нашел в нем то и то)...

Сейчас подробно разбирать нет времени. Можно попробовать так:

Код:

  MyContainer: openable, qcontainer
   ldesc =
    {
        ZAG(self,&sdesc); " "; 
        if (self.isopen)
        {
            " открыт"; yao(self); ". ";
            pass ldesc;
        }
        else
        {
            " закрыт"; yao(self); ". ";
        }    
     // В стандартном openable далее идет опись содержимого, мы ее выкидываем
    }
    isopen = true
    verDoOpen(actor) =
    {
        if (self.isopen)
        {
        ZAG(self,&sdesc); " уже открыт"; yao(self); "! ";
        }
    }
    doOpen(actor) =
    {"Ты открываешь <<self.sdesc>>.";
      // Опять-таки, перечисление содержимого выкинуто
    }
   // qcontainer - это контейнер, "не разглашающий" свое содержимое в описании локации
   // Вроде бы при таком раскладе содержимое можно будет увидеть только по команде "заглянуть в"/"обыскать", но лучше проверить самому

masterofshadows написал:

так же мну раздражает, что когда находишь "спрятанную " вещь она автоматом берется...

О! Это совсем просто: определяешь объект как потомка одного из классов hider и назначаешь ему свойство autoTake =nil.

Но хочу предостеречь: эксперимент, поставленный мной на игроках (правда, англоязычных), показал, что большинство из них раздражается как раз тогда, когда найденный объект не перемещается автоматически в инвентарьwink.

Неактивен

0    0    #10
02.08.2007 10:54

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

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

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

спс еще раз...ща буду копить новые вопросы=)

Неактивен

0    0    #11
06.08.2007 10:07

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

меньше слов

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

Просьба, создавать темы для отдельных вопросов и указывать проблему в их названии.

Неактивен

0    0    #12
08.08.2007 16:17

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

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

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

Я решил не захламлять форум новой темой и написать в старой, тем более, что вопросы незначительные( я надеюсь ).
У мну проблемы с обыском "актера без сознания". Я последовал совету uux-а и при открытии дверей просто заменил актера на "актера без сознания", но в игре при вводе скажем:
- осм актера без сознания
мне выдает, что не знает слова "без". Я пробовал перефразировать, но бесполезно...
=====
И еще маленький вопрос - мот кто знает есть ли в стандартной библиотеке "SitDown" или же самому определять надо?

Неактивен

0    0    #13
08.08.2007 16:29

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

меньше слов

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

masterofshadows написал:

У мну проблемы с обыском "актера без сознания". Я последовал совету uux-а и при открытии дверей просто заменил актера на "актера без сознания", но в игре при вводе скажем:
- осм актера без сознания
мне выдает, что не знает слова "без". Я пробовал перефразировать, но бесполезно...
=====
И еще маленький вопрос - мот кто знает есть ли в стандартной библиотеке "SitDown" или же самому определять надо?

1. Нужно добавить предлог-связку в специальные слова.

specialWords
   'of'='для'='против'='типа'='из'='под'='от'='на'='в'='с' ='без' ,

2. Есть только "сесть на"

Неактивен

0    0    #14
08.08.2007 20:56

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

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

GrAndrey написал:

masterofshadows написал:

У мну проблемы с обыском "актера без сознания". Я последовал совету uux-а и при открытии дверей просто заменил актера на "актера без сознания", но в игре при вводе скажем:
- осм актера без сознания
мне выдает, что не знает слова "без". Я пробовал перефразировать, но бесполезно...
=====
И еще маленький вопрос - мот кто знает есть ли в стандартной библиотеке "SitDown" или же самому определять надо?

1. Нужно добавить предлог-связку в специальные слова.

specialWords
   'of'='для'='против'='типа'='из'='под'='от'='на'='в'='с' ='без' ,

... или определить
compoundWord 'без' 'сознания' 'безсознания';

И определить для актера

UnconsciousActor: Actor
noun='актер'
adjective='безсознания' 'безсознания#r'
;

Неактивен

0    0    #15
26.08.2007 14:10

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

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

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

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

Неактивен

0    0    #16
26.08.2007 19:26

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

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

masterofshadows написал:

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

А это, похоже, небольшой глючок перевода системных библиотек. В файле advr.t найди класс hider, в нем - метод searchObj, а в этом методе - следующие строчки:

Код:

       /* note what we found, and move it to destination */
        "<<ZAG(parserGetMe(),&sdesc)>> наш<<ella(actor)>> ";
        tot := length(found);
        i := 1;
        while (i <= tot)
        {
            found[i].sdesc;

Замени found[i].sdesc; на found[i].vdesc;, и наступит счастье;).

Небольшой офф-топик: мне чего-то пришло в голову, что мое объяснение сильно напоминает русскую народную сказку про Кащея Бессмертного: найди остров, на нем дуб, на дубе сундук и т. д.

Неактивен

0    0    #17
27.08.2007 06:50

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

меньше слов

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

uux написал:

мое объяснение сильно напоминает русскую народную сказку про Кащея Бессмертного: найди остров, на нем дуб, на дубе сундук и т. д.

... игла в яйце, яйцо в утке, утка в зайце, заяц в шоке...

Баг пофиксю!

Неактивен

0    0    #18
27.08.2007 11:07

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

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

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

Ну вот, хоть какая-то от меня польза...

Неактивен

0    0    #19
16.09.2007 12:08

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

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

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

Проблема мешает мне писать дальше игру и ваще выводит из себя...Я еще в начале игры создал комнату:
===============================
stuffroom: room
sdesc = "Чулан"
ldesc = "Комната завалена всяческим хламом. Ты приглядываешься - ага вон на востоке еще дверь...Тут тебе определенно не нравилось -  воздух в помещении был какой-то тяжелый, создавалось ощущение, будто тебя хотят вдавить в пол.
east = importantroom
north = startroom
;
===============================
затем совершенно забыл про нее и уже когда дописывал локацию и отлаживал интерактивность добавил предметов туда:
===============================
hlam: fixeditem
location = stuffroom
sdesc ="хлам"
rdesc ="хлама"
ddesc ="хламу"
vdesc ="хлам"
tdesc ="хламом"
pdesc ="хламе"
noun ='хлама' 'хламу' 'хлам' 'хламом' 'хламе' 'хламом#t' 'хламе#d'
isHim = true
ldesc = "Тут свалено множество тех объектов домашнего обихода, которые по разным причинам уже не могут выполнять поставленные их создателями задачи. Короче, здесь свален всяческий хлам - от кофемолки до бензопилы"
verDoTake( actor ) =
{
"Дотрагиваться до уже гниющей куче мусора совсем не хочется";
}
;

kofemolka: fixeditem
location = stuffroom
sdesc ="кофемолка"
rdesc ="кофемолки"
ddesc ="кофемолке"
vdesc ="кофемолку"
tdesc ="кофемолкой"
pdesc ="кофемолке"
noun ='кофемолка' 'кофемолки' 'кофемолку' 'кофемолкой' 'кофемолке' 'кофемолке#d' 'кофемолкой#t'
ldesc = "Хорошая была кофемолка, хоть ты камни перемалывай( насколько ты помнишь именно они привели ее в такое состояние )."
verDoTake( actor ) =
{
"Этот хлам тебе абсолютно не нужен, именно поэтому ты держишь его здесь.";
}
isHer = true
;

benzopila: fixeditem
location = stuffroom
sdesc ="бензопила"
rdesc ="бензопилы"
ddesc ="бензопиле"
vdesc ="бензопилу"
tdesc ="бензопилой"
pdesc ="бензопиле"
noun ='бензопила' 'бензопилы' 'бензопилу' 'бензопилой' 'бензопиле' 'бензопиле#d' 'бензопилой#t'
isHer = true
ldesc = "Гроза и истребитель местных елочек, видимо, была побеждена обычной влагой  - бензопилу покрывал сплошной слой ржавчины."
verDoTake( actor ) =
{
"Как священник, ты не имеешь никакого права брать в руки неисправное оружие=)";
}
verDoClean( actor ) =
{
"На это уйдут годы...";
}
;
==============================
после того как я добавил ети штуки сразу появились следущие ошибки=
==============================
warning: possible unterminated string(65)
C:\Program Files\TADS Tools\priest.t(68): error TADS-100: invalid token
C:\Program Files\TADS Tools\priest.t(68): error TADS-100: invalid token

замечу что ети ошибки выводит для комнаты строка 65 это sdesc...строка 68 это точка с запятой=)
==============================
вот такой ужас...или у мну как всегда что-то с руками

Неактивен

0    0    #20
16.09.2007 13:17

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

меньше слов

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

masterofshadows написал:

Проблема мешает мне писать дальше игру и ваще выводит из себя...Я еще в начале игры создал комнату:
===============================
stuffroom: room
sdesc = "Чулан"
ldesc = "Комната завалена всяческим хламом. Ты приглядываешься - ага вон на востоке еще дверь...Тут тебе определенно не нравилось -  воздух в помещении был какой-то тяжелый, создавалось ощущение, будто тебя хотят вдавить в пол.
east = importantroom
north = startroom
;

Если текст именно такой, то проблема тут:

ldesc = "Комната завалена всяческим хламом. ..*покоцано*... в пол. "
east = importantroom

Т.е. не закрыты кавычки.

Неактивен

0    0    #21
16.09.2007 22:24

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

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

masterofshadows написал:

Проблема мешает мне писать дальше игру и ваще выводит из себя...
<SNIP>
==============================
вот такой ужас...или у мну как всегда что-то с руками

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

Меня самого такого рода ошибки компиляции в начальных и не очень стадиях освоения TADS доводили до белого каления, заставляя практически биться головой о монитор и проклинать долбаный компилятор. Что характерно - компилятор всегда оказывался прав;). Когда счет таких случаев перевалил где-то за пятый десяток, я стал относиться к подобным ситуациям философски (опечатки будут встречаться всегда, пока программером будет оставаться человек) и даже выработал свои методы их выявления.

Итак, если интересно, то я борюсь с этим так. Всегда добавляю новый код сравнительно небольшими порциями (максимум - один объект) и перекомпилирую игру. Если вылезает подобная непонятная ошибка, которую при беглом взгляде на код выявить зачастую сложно, начинаю выкомменчивть "спорный" код символами /**/ мелкими участками (по две-три строки) до тех пор, пока ошибка при компиляции не исчезнет. Место, после выкомменчивания которого ошибка пропадает, просматриваю с пристрастием, если нужно (и возможно), разбиваю его комментами на еще более мелкие куски. И так до выявления ошибки.

(Правда, я и отлаживаю код таким же образом - после добавления максимум одного объекта/локации, но это, сознаюсь, на любителя, другой стиль программирования может предполагать и другие подходы к работе в этом плане).

Отредактировано uux (16.09.2007 22:30)

Неактивен

0    0    #22
17.09.2007 01:12

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

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

Можно использовать IDE с подсветкой синтаксиса. Забытые кавычки будет сразу видно. Я использую Imaginate.

Неактивен

0    0    #23
17.09.2007 05:32

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

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

Gremour написал:

Можно использовать IDE с подсветкой синтаксиса. Забытые кавычки будет сразу видно. Я использую Imaginate.

Да, это тоже отличный способ, хотя, наверное, не панацея. Я об этом не подумал - просто слишком уж прикипел душой не к "Блокноту" даже, а к edit'у (хорошо, что не к edlin'у).

Эх... пора менять привычки

Неактивен

0    0    #24
18.09.2007 19:17

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

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

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

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

Неактивен

0    0    #25
19.09.2007 05:18

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

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

masterofshadows написал:

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

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

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru