Автор Тема: Умение "выследить" иногда срабатывает странным образом  (Прочитано 1719 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дадж

  • Завсегдатай
  • *
  • Сообщений: 63
  • Карма: 0
    • http://www.sevenleaves.ru
На один из двух имеющихся в ДП кустов тальника я получил квест и пошел его выслеживать. Выследив первый куст, понял, что этот не мой, собрался выслеживать второй, но команда "выследить" непреклонно сообщала мне, что тот, кого я ищу прямо передо мной.

[size=9]Начало записи лога: 16.09.2005 13:55
см
На берегу.
Плавный песчаный откос спускаетсЯ тут на запад к реке. Вокруг все заросло
ивнЯком и неизвестным вам низким кустарником. На севере на вершине обрыва
поднимаетсЯ к небу светлый сосновый лес.
Выходы: север восток юг запад.
Куст тальника наклонилсЯ над водой и ронЯет в нее свои листьЯ.

[308/308 319/319 320/409 2238973][..S]
где тальник
тальник                      На берегу.
тальник                      На берегу.

[308/308 319/319 320/409 2238973][..S]
выслед тальник
Похоже, тот, кого вы ищете, совсем рЯдом!

[308/308 319/319 320/409 2238973][..S]
выслед 2.тальник
Похоже, тот, кого вы ищете, совсем рЯдом!
[/size]
Очень немногие не могут продолжать жить лишившись души

Оффлайн Barkett

  • Любимец Богов
  • ***
  • Сообщений: 1318
  • Карма: -6
Рипни лишний и вся недолга. А по хорошему там и без выследить можно быстро кним придти.
если у вас совесть чиста, значит ваш друг - Бог. (с) Е.Ачилова

http://klanz.ru/ref/user_4535

Оффлайн Дадж

  • Завсегдатай
  • *
  • Сообщений: 63
  • Карма: 0
    • http://www.sevenleaves.ru
Barkett
Не буду выражать свою глубокую благодарность за помощь в решении поиска второго тальника, ибо сам так и сделал. НО умение от этого корректно работать не будет, так? ;)
Очень немногие не могут продолжать жить лишившись души

Оффлайн aldaril

  • Постоялец
  • *
  • Сообщений: 170
  • Карма: 2
  • Пол: Мужской
попробуй набрать
выследить 2.тальник

Оффлайн Дадж

  • Завсегдатай
  • *
  • Сообщений: 63
  • Карма: 0
    • http://www.sevenleaves.ru
aldaril
Цитировать
попробуй набрать
выследить 2.тальник


в приведенном логе я это набирал. разве что не "выследить 2.тальник" а "выслед 2.тальник"
Очень немногие не могут продолжать жить лишившись души

Оффлайн Siddhart

  • Лесной Полк
  • Победитель нежити
  • **
  • Сообщений: 593
  • Карма: 1
    • 360desktop.com
правится легко:
если подобное сообщение появляется, то надо просто отойти в сторонку от моба, в соседнюю комнату.
Вероятнее всего, там ошибки с проверкой на наличие моба в текущей клетке.
Исправлять это никто не будет, бага очень старая, я ее уже года три как помню. Может больше.
Мыши — это мысли, которые в голове. Многочисленные коты их едят.
http://garfield-daily.ru/c43/
Come to dark side... we have cookies
360desktop

Оффлайн aldaril

  • Постоялец
  • *
  • Сообщений: 170
  • Карма: 2
  • Пол: Мужской
Дадж, я просто не заметил в логе что ты уже выполнял такие действия.
А Сиддха прав.
Еще раз пересмотрел как это все работает....
Ситуация вот в чем. В начале смотрим возможных мобов в комнате, если не нашли, а для случая 2.тальник не найдут, то смотрят всех мобов, что есть в мире. И тут как раз камень претконовения, а именно, если наш тальник, который нам не нужен, в списке глобальных мобов действительно стоит вторым по сечту, то на него и приведут следы.
Поэтому Сиддха прав, надо отойти в локацию, где нет моба что мы ищем и повторить поиск.
Можно ли исправить ситуацию, в принципе можно, если поменять алгоритм поиска мобов (get_char_world).
В части кода, где мы начинаем поиск по всему списку персонажей в мире, ставить проверку, что моб не должен находиться в этой комнате.
Ну, короче тот кто захочет просмотреть ту функцию, поймет что к чему....

(Добавление)
поэкспериментировал я немного с этим куском кода...
вот, что должно быть в get_char_world

часть 1, поиск по полному названию
поиск в комнате
   for ( wch = ch->in_room->first_person; wch; wch = wch->next_in_room )
/* пропускаем, ползет ниже */
count = 0;
меняем на
   /* count = 0; */
т.е. счетчик поиска не обнуляем
   for ( wch = first_char; wch; wch = wch->next )
добавляем в условия
       &&  wch->in_room != ch->in_room

часть 2, посик по сокращенному названию
поиск в комнате пропускаем
   /* count  = 0; */
счетчки не анулируем
поиск по всему списку
   for ( wch = first_char; wch; wch = wch->next )
добавлем условие
       if ( wch->in_room == ch->in_room )
           continue;

проверил, работает

к слову, это изменение не относится к конкретно к track xx.name_mob
а вообще к поиску мобов в мире, например для функции mstat, mset для иммортлов

аналогично стоит сделать для поиска предметов в мире
get_obj_world


mell

  • Гость
По-моему, выслеживать деревья несколько маразматично. Только не надо отмазываться существованием энтов. Стационарная растительность тоже существует, и преобладает.