Page 1 of 1

Как переместить вещь с контейнера чару в бекпак?

Posted: 15.01.2007 5:36
by MAXHO
Собсно мне надо взять кирки с сундука. Я пишу так:
MoveItem(FindType($0E85, $620BB10A), 1, backpack, 0, 0, 0);

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

Posted: 15.01.2007 10:14
by Acronym
1)чтоб искать в контейнере - контейнер должен быть открыт
2)перед перемещением лучше убедиться что предмет есть

типа этого

Code: Select all

UseObject($620BB10A); // Открываю контейнер с ресурсами
FindType($0E85, $620BB10A); // ищем нужный предмет 
if FindCount > 0 then // если нашли - перемещаем
MoveItem(FindItem, 1, backpack, 0, 0, 0);

Posted: 15.01.2007 13:55
by Edred
После открытия контейнера желательно поставить паузу (размер зависит от шарда) и чексэйв.

Posted: 15.01.2007 17:10
by MAXHO
Это все я делал. И сундук открывал и паузу ставил.
Я даже сделал пошаговую отладку. Тоесть после каждого действия отправляет в журнал отчет. Тоесть когда он нашел кирку скрипт отправил отчет найдена кирка и серийник ее. Далее чар берет ее на курсор. И после этого макра простаивает.

Posted: 15.01.2007 17:23
by Acronym
Немного не похоже, судя по выдаваемой ошибке, но может дело ... в настоящей версии вылез глюк с перемещением предметов
http://stealth.od.ua/forum/viewtopic.php?t=913

Posted: 15.01.2007 17:56
by MAXHO
У меня RC1

Posted: 15.01.2007 18:48
by MAXHO

Code: Select all

18:49:18 [MAXH0]: Script: error drag item. drag timeout

Вот такую фигню пишет.

Posted: 15.01.2007 21:03
by MAXHO
18:49:18 [MAXH0]: Script: error drag item. drag timeout

Просьба уменьшите таймаут. Написал скрипт работает все, но изза этого таймаута чар долго стоит без дела.
Сделал все через драгитем и дропитем.

Posted: 15.01.2007 23:46
by Edred
MAXHO wrote:18:49:18 [MAXH0]: Script: error drag item. drag timeout
Вот это самое и у меня на RC1 лезло изо всех щелей. Побеждается циклом, выход из которого - наличие предмета в паке. Раза 3-4 ругнется (иногда и 20), потом все-таки возьмет.

Posted: 15.01.2007 23:51
by MAXHO
В том то и прикол что надо брать предмет если его в паке нет :D

Posted: 15.01.2007 23:54
by Edred
Еще раз перечитай мой пост. Именно взятие в пак. И это взятие засунуто в цикл, выход из которого - когда количество данного типа и цвета больше 0 (в ряде случаев - больше того кол-ва, которое было до входа в цикл).

Posted: 15.01.2007 23:56
by MAXHO
Я ничего не понял :)
Это пофиксить как-то можно?
Можешь привести пример цыкла. Если будут коменты так вообще здорово :)

Posted: 16.01.2007 9:52
by Acronym

Code: Select all

UseObject($620BB10A); // Открываю контейнер с ресурсами
wait(2000); // Смотря сколько открывает на шарде, лаги...
CheckSave; // Если будет СейвВорлд 
FindType($0E85, $620BB10A); // ищем нужный предмет 
if FindCount > 0 then // если нашли - перемещаем
begin
   repeat
     MoveItem(FindItem, 1, backpack, 0, 0, 0);
     wait(3000); // Задержка между попытками MoveItem
     FindType($0E85, backpack); // ищем уже в сумке
   until FindCount > 0 // > 0, значит переместили
end;
тут есть момент, так сразу и не скажу:
"FindType - Возвращает ID вещи, либо 0 при неудачном поиске. "
FindType($0E85, backpack); = 0 не обнулит ли перемещаемый FindItem?
Если так то, с предварительным обьявлением mItem, вроде так:

Code: Select all

UseObject($620BB10A); // Открываю контейнер с ресурсами
wait(2000); // Смотря сколько открывает на шарде, лаги...
CheckSave; // Если будет СейвВорлд 
FindType($0E85, $620BB10A); // ищем нужный предмет 
if FindCount > 0 then // если нашли - перемещаем
begin
   mItem:=FindItem;
   repeat
     MoveItem(mItem, 1, backpack, 0, 0, 0);
     wait(3000); // Задержка между попытками MoveItem
     FindType($0E85, backpack); // ищем уже в сумке
   until FindCount > 0 // > 0, значит переместили, прекращаем MoveItem
end;

Posted: 16.01.2007 19:38
by Edred
Ну примерно так. Я предпочитаю открытие туда же в цикл засунуть:

Code: Select all

repeat
	waitconnection(3000);
	UseObject(Sunduk);
	wait(1000);
	checksave;
	UseObject(BagPickaxe1);
	wait(1000);
	checksave;
	tmpser := findtype(Pickaxe1,BagPickaxe1);
	if tmpser = 0 then tmpser := findtype(Pickaxe2,BagPickaxe1);
	if tmpser <> 0 then
	begin
		Grab(tmpser,1);
		wait(1000);
		checksave;
	end;
until (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0);
Тут сразу на два типа кирок, с одним чуть упростится. Вот такой цикл надежно берет кирку из сундука (рано или поздно) и на RC1 и на RC2. Если что, поругается 2-10 раз, но возьмет.