Page 1 of 2

баг uo.findtype

Posted: 2006-04-19 12:26:56
by doomstar
я давно страдаю от одного бага, при котором обьекты изначально имеют правильный ID а потом вдруг имеют ID 0xFFFFFFFF.
Я решил подробнее разобраться с проблемой, вот мои результаты:

Кладу на землю кувшинчик:

Code: Select all

ID=0x400F4C9A Type=0x1F9D WUKWLMD Name=
Quantity: 1  Colour: 0x0000  Layer: 0  Has: 0
X=1426 Y=1695 Z=0 C=0xFFFFFFFF F=0x20


делаю в консоле ,ignore 0x400F4C9A. смотрим его опять:

Code: Select all

ID=0x400F4CA4 Type=0x0FF6 YUKWLMD Name=
Quantity: 1  Colour: 0x0000  Layer: 0  Has: 0
X=1427 Y=1696 Z=0 C=0xFFFFFFFF F=0x20 ignored


Теперь перетаскиваем этот кувшинчик себе в пак:

Code: Select all

ID=0xFFFFFFFF Type=0x0FF6 6? Name=
Quantity: 1  Colour: 0x0000  Layer: 0  Has: 1
X=129 Y=67 Z=0 C=0x40141BAA F=0x20 ignored


И видим ужасную вещь... ID кувшинчика почемуто решило умереть.
Этот глюк возникает иногда по непонятным причинам (тоесть не только при таскании кувшинчиков).

Пожалуйста разбиритесь, ибо ignore("finditem") такие ID не игнорит и цикл поиска через fyndtype зацикливается на этой веще до бесконечности...

А вообще в идеале, чтобы создавался массив FindItems[n]
Тогда проблем с зацикливанием не будет
Да и в перловом скрипт-модуле будет больше возможностей! )

Posted: 2006-04-19 12:32:55
by Scripts Writer
тип после игнора изменяется. Посмотри сам

Posted: 2006-04-19 12:35:52
by Scripts Writer
flake wrote:Скорее он изменяется после перетаскивания. Игнор никак не может изменить тип вещи.


я так понимаю автор ищет командой uo.FindType по первому типу, но по его кодам-во 2 ом и 3ем случае он изменённый.

Posted: 2006-04-19 12:36:48
by flake
Уже как то была похожая тема, там кто-то обьяснил эту проблему. Щас поищу.

Posted: 2006-04-19 14:38:47
by doomstar
ой, с выводами INFO запутался мальца, просто один кувшинчиков у меня была туча и некоторые были заполненые некоторые нет.
Но идея вобщем остаётся такойже.. если вещь заигнорена и её перетащить с земли в пак, то её ID умрёт

Posted: 2006-04-19 14:41:37
by doomstar
Пока разбирался с этой проблемой нашёл выход...
перед перетаскиванием в пак снять с вещи игнор, потом перетащить в пак, потом проверить наличие вещи в паке. Если вещи в паке нету - вернуть игнор на место.

Code: Select all

sub TakeAllFromGround() {
   uo::ignorereset();
   $bpack=uo::getserial('backpack');
   uo::set("finddistance","1");
   uo::findtype("-1","-1","ground");
   while(uo::findcount()) {
      $ser=uo::getserial("finditem");
      uo::print($ser);
      if($ser ne uo::getserial('self')) {
         uo::ignore($ser,"off");
         uo::grab(0,$ser);
         &wait(650);
      }
      if(uo::containerof($ser) ne $bpack) {
         uo::ignore("finditem","on");
         uo::print("Can't GET");
      }
      uo::findtype("-1","-1","ground");
   }
   uo::ignorereset();
}


Сори за синтаксис, перехожу на перловый script.dll :)
(кстати всем рекомендую)

Posted: 2006-04-19 14:51:39
by Grin
Скоро будудома;) добъю трасивовку%)

Posted: 2006-04-19 16:20:29
by admir

Code: Select all

uo::containerof($ser)

что это ?
все понял )
Возвращает параметр обьекта object (по умолчанию - персонажа игрока) - контейнер, в котором находится. 0xFFFFFFFF означает неизвестно или на земле.

Posted: 2006-04-19 16:51:42
by Destruction
Я чего скажу, после длительного поиска с игнором одних и тех же объектов в сумочке на полу, они стали иметь ID = 0xFFFFFFF и помог мне перезапуск Injection.

Массив найденных вещей я организовал тут: viewtopic.php?p=40604#40604

Posted: 2006-04-19 20:41:14
by Edred
Ресенд не пробовали в качестве лекарства?

Posted: 2006-04-19 21:25:59
by Destruction
Edred wrote:Ресенд не пробовали в качестве лекарства?

Не лечит. Пробывал.

Posted: 2006-04-20 21:13:14
by doomstar
угу, нелечит...
YOKO, замути нам командочку обнуления памяти инжекта, чтобы глюки оттуда убирать.
Типа обнуляем память, потом делаем resend, открываем все сумки заного и опана - инжа в здравой памяти ))

Posted: 2006-04-21 00:34:06
by Grin
для зануления когдато был такой форгет... но сработает ли...

Posted: 2006-04-21 00:47:15
by Destruction
Grin wrote:для зануления когдато был такой форгет... но сработает ли...

Форгет - забывает что-то там в инже, т.е. с параметром, а что я ему дам в качестве параметра?

Posted: 2006-04-21 00:51:10
by Grin
Так просили зануление вот и держите;)
может в в сочетании с игнором оно както работать будет более норм..
у меня нету "свежих" исходников...

Posted: 2006-04-21 00:52:49
by Destruction
Grin wrote:Так просили зануление вот и держите;)
может в в сочетании с игнором оно както работать будет более норм..
у меня нету "свежих" исходников...

Кто бы сомневался :-D

Нифига оно не поможет. Что мы будем забывать? FindItem? А он у нас 0xFFFFFFF...

Posted: 2006-04-21 00:56:24
by Grin
Эх..
Ну ты прежде чем игнорить зная обаге возми да и запомни серийник...
а можеи и за игнореное сразу забыть;)
а может...
Короче нужен штат людей что бы проверить все варианты;)

Posted: 2006-04-21 01:01:28
by Destruction
Grin wrote:Эх..
Ну ты прежде чем игнорить зная обаге возми да и запомни серийник...
а можеи и за игнореное сразу забыть;)
а может...
Короче нужен штат людей что бы проверить все варианты;)

Кароче этот штат людей всё проверил и отправляется в Request всем топиком.

Posted: 2006-04-21 23:31:10
by doomstar
А реально ваще промутить всё это дело, чтобы не терялис ID объектов в инже? А то стабильность макросов сильно снижается из-за этого лага... Вот у мя макрос только от этого дела и останавливается. Потомучто нистого ни ссиго обект с которым он работает теряет ID и всё ( имее зацикл.

Posted: 2006-04-21 23:45:02
by Grin
все реально только руки связаны;)