Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Работа с предметами в контейнере

тут можно задать вопрос по скриптингу
frant
Neophyte
Neophyte
Posts: 28
Joined: 18.06.2012 17:48

Re: Работа с предметами в контейнере

Post by frant »

кажется нашел проблему свою))) забыл игнор контейнера поставить аж самому смешно :D
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: Работа с предметами в контейнере

Post by nepopus »

Code: Select all

const
  containerID = $00000000;

begin
  useobject(containerID);
  checklag(10000);
  wait(300);

  while findtypeex($FFFF, $FFFF, containerID, true) > 0 do begin
    ignore(finditem);

    if iscontainer(finditem) then begin
      useobject(finditem);
      checklag(10000);
      wait(300);
      continue;
    end;
    
    addtosystemjournal('$' + inttohex(finditem, 8));
  end;
end.
Как обещал. Собсно с какого ответа сообщение началось с того и закончилось)
<( o_O<) <( O_O )> (>O_o )>
frant
Neophyte
Neophyte
Posts: 28
Joined: 18.06.2012 17:48

Re: Работа с предметами в контейнере

Post by frant »

спасибо, но он не подходит)

вот пример моего скрипта, не могу понять в чем проблема:

Code: Select all

procedure searching;
begin
useobject(finditem);
wait(500);
while findtype($ffff, lastcontainer) > 0 do begin
clickonobject(finditem);
wait(500);
if iscontainer(finditem) then searching;
itemname:= getname(finditem);
addtosystemjournal(getname(finditem));
ignore(finditem);
clearjournal;
ignore(lastcontainer);
end;
end;


Begin
useobject(container); //ID родительского контейнера, в котором происходит поиск
wait(500);
while findtype($ffff, $4001D20E) > 0 do begin
searching;
end;
End.
хочу в скрипте некую рекурсию сделать, дабы не дублировать код...кто может помочь, он зацикливается
frant
Neophyte
Neophyte
Posts: 28
Joined: 18.06.2012 17:48

Re: Работа с предметами в контейнере

Post by frant »

Для наглядности, схема что ниже, это случай, с которым я мучаюсь уже который день...)
Прямоугольники- контейнеры, окружности- предметы соответственно...

Image

и причем эта иерархия может быть и больших порядков...
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: Работа с предметами в контейнере

Post by nepopus »

У вас в цикле может открываться по нескольку контейнеров, а игнор стоит лишь на последний.

Не думаю, что вы дождетесь нужного ответа, если будете, не вникнув, отбрасывать правильные решения и скрытым умыслом просить отполировать ваш костыль.
Что вы хотите получить? Названия предметов? Тогда прочтите еще раз моё прошлое сообщение.

П.С. ваши картинки меня уже достали : )
<( o_O<) <( O_O )> (>O_o )>
frant
Neophyte
Neophyte
Posts: 28
Joined: 18.06.2012 17:48

Re: Работа с предметами в контейнере

Post by frant »

nepopus wrote:У вас в цикле может открываться по нескольку контейнеров, а игнор стоит лишь на последний.

Не думаю, что вы дождетесь нужного ответа, если будете, не вникнув, отбрасывать правильные решения и скрытым умыслом просить отполировать ваш костыль.
Что вы хотите получить? Названия предметов? Тогда прочтите еще раз моё прошлое сообщение.

П.С. ваши картинки меня уже достали : )
я не отбрасываю Ваш скрипт, он работает бесспорно, но не в моем случае, где подсумков более чем 2 порядка, поэтому я и нарисовал схему что в подсумках есть тоже подсумки и в тех тоже есть, их много)
yuras
Novice
Novice
Posts: 142
Joined: 11.01.2011 10:34

Re: Работа с предметами в контейнере

Post by yuras »

Code: Select all

Procedure OpenAll(Box:cardinal);
var
BoxID:array[0..200] of cardinal;
x,y,z,BoxIDC,fbox:integer;
List:TstringList;
begin
BoxIDC:=0;
ignorereset;
repeat
//  For x:=0 to BoxIDC-1 do
//    Ignore(BoxID[x]); 
  FindTypeEx($FFFF,$FFFF,Box,true);
  List:=TStringList.Create;
  GetFindedList(List);
  fbox:=0;
  For x:=0 to List.count-1 do
    If IsContainer(StrToInt('$'+List.strings[x])) then 
      begin
      z:=0;
      For y:=0 to BoxIDC-1 do
        If BoxID[y]=StrToInt('$'+List.strings[x]) then z:=1;
      if z=0 then
      begin  
        UseObject(StrToInt('$'+List.strings[x]));
        BoxID[BoxIDC]:=StrToInt('$'+List.strings[x]);
        BoxIDC:=BoxIDC+1;
        checklag(10000);
        wait(500);
        fbox:=1;
        AddToSystemJournal('Box ' + IntToStr(BoxIDC));
      end;
      end;
  List.Free;
until fbox=0; 
end;
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

Re: Работа с предметами в контейнере

Post by nepopus »

Прошу прощения, не знал, что findtypeex работает только до 2го уровня папок =) Сказали бы, мы бы время сэкономили, но ошибка моя :)
Доделал ваш код:

Code: Select all

const
  containerID = $4026416B;
  
var
  i: integer;

procedure fi(container: cardinal);
  begin
    useobject(container);
    checklag(10000);
    wait(300);

    while findtype($FFFF, container) > 0 do begin
      ignore(finditem);

      if iscontainer(finditem) then begin
        fi(finditem);
        continue;
      end;
    
      i := i+1;
      addtosystemjournal(inttostr(i) + ': $' + inttohex(finditem, 8));
    end;
  end;

begin
  ignorereset;
  fi(containerID);
end.
<( o_O<) <( O_O )> (>O_o )>
frant
Neophyte
Neophyte
Posts: 28
Joined: 18.06.2012 17:48

Re: Работа с предметами в контейнере

Post by frant »

Спасибо nepopus, Ваш скрипт работает :)
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Работа с предметами в контейнере

Post by GeeZeR »

Ловко, вызов самой себя для каждого открытого ею же контейнера. Сам сидел мучился, вы сэкономили мне кучу времени, спасибо.
Last edited by GeeZeR on 01.06.2017 12:59, edited 1 time in total.
Stealth 8.10.2 | Клиент: 7.0.13.4
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Работа с предметами в контейнере

Post by nah nah »

Не заметил второй страницы темы :roll:
Разве InSub не идёт по всем подсумкам глубже чем 2-ой уровень?
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Работа с предметами в контейнере

Post by GeeZeR »

В Стелсе нельзя посмотреть что в сумке пока не открыл её, поэтому тут последовательное открытие всех вложенных.
Stealth 8.10.2 | Клиент: 7.0.13.4
Post Reply