Page 1 of 2

FindDistance, Ignore

Posted: 17.07.2008 18:00
by -=JoKeR=-
1) Какое максимальное значение FindDistance, чтобы оно нормально видело объекты ?
2) Если я заигнорил объект:

Code: Select all

		  FindType(Corpse,ground);
		  Ignore(FindItem);
то стэлс при следующем поиске не видит его уже вообще ?

Posted: 17.07.2008 18:16
by grundick
1.вообще навреное от сервера зависит, но мне кажется везде на 21 тайл видит.
2.а как стелс по твоему определяет что предмет в игноре?:%)

Posted: 17.07.2008 23:36
by -=JoKeR=-
Такс, мне так не подходит...
Жду конкретных ответов от Edred-а например.

Re: FindDistance, Ignore

Posted: 18.07.2008 0:45
by Unholy
-=JoKeR=- wrote: 2) Если я заигнорил объект:

Code: Select all

		  FindType(Corpse,ground);
		  Ignore(FindItem);
то стэлс при следующем поиске не видит его уже вообще ?
Обьект добавляеться в список игнорируемых обьектов при поиске.
То есть при следующем FindType(Corpse,ground) именно этот обьект оно не найдет.

Posted: 18.07.2008 15:53
by -=JoKeR=-
Unholy, спс)

Posted: 18.07.2008 18:01
by grundick
Если он его не найдет, то как он определит что это именно тот предмет ,что был в игноре?:)

Posted: 18.07.2008 18:04
by -=JoKeR=-
Так он его не найдёт, ему нечего определять :)

Posted: 18.07.2008 23:14
by Edred
grundick wrote:Если он его не найдет, то как он определит что это именно тот предмет ,что был в игноре?:)
А как по-твоему работает поиск в стелсе или инжекте? Неужели ты думаешь, что он на самом деле что-то ищет вокруг чара или в паке чара? Все объекты, полученные в пакетах от сервера, сидят в индексированном списке в стелсе. Именно в этом индексированном списке и идет "поиск". А сам поиск есть просто перебор всех элементов списка с тупым сравнением - подходит объект под указанные характеристики или нет. И игнор - это просто еще одна характеристика этого объекта. Соответственно, стелс при переборе списка объект с игнором просто пропустит, не будет даже сравнивать подходит он под параметры или нет.

Posted: 18.07.2008 23:17
by grundick
Дэ факто он обращается к этому обьекту! Вот что я имел ввиду.

Posted: 18.07.2008 23:20
by Edred
Ты хоть прочитал, что я написал? Ни к какому объекту стелс не обращается, он работает только со списком в своей памяти. А обращение к объекту - это уже пакет на сервер.

Posted: 18.07.2008 23:24
by grundick
Чел спросил ,видит ли стелс объект после игнора.Вообще фраза дурацкая, но тем не менее... Стелс видит все обьекты.Они в списке.При поиске идет перебор всех обьектов и проверка их свойств.Стелс видит заигноренный обьект.Вот что я имею ввиду.

Posted: 19.07.2008 0:08
by -=JoKeR=-
Edred, а по FindDistance не ответил...
По поводу игнора: я спросил потому, что в моей процедуре стэлс находит труп, забирает что нужно, игнорит труп и при повторном поиске опять таки его находит (игнор я не снимаю нигде, потому, что мне тот труп уже не нужен). Видимо или игнор кривой, или моя процедура :)

Posted: 19.07.2008 22:50
by Edred
-=JoKeR=- wrote:Видимо или игнор кривой, или моя процедура :)
Скрипт в студию.

Posted: 20.07.2008 13:52
by -=JoKeR=-
Три процедуры, которые идут друг за другом в главной программе.
Ответь по FindDistance пожалуста :)

Code: Select all

// <============================= Ищем труп ================================>
  procedure Find_Corpse;
  begin
    repeat
	  begin
        FindDistance := 2;
        FindType(Corpse,ground);
	    If FindCount > 0 then
	      begin
	        AddToSystemJournal('-= Найден труп =-');
	      end
	    else
	      begin
	        wait(1000);
	      end;
	  end;
	until GetQuantity(Finditem) > 0;
  end;

// <======================== Ищем золото в трупе =========================>
  procedure Get_Gold;
  var tmpgold : cardinal;
      tmpgoldcount : integer;
    begin
	  FindType(Corpse,ground);
	  tmpcorpse := FindItem;
	  checksave;
	  UseObject(FindItem);
	  checklag;
	  wait(2000);
	  tmpgold := FindType(Gold_Coins,tmpcorpse);
	  If FindCount >= 1 then
	    begin
		  tmpgoldcount := GetQuantity(FindItem);
		  checklag;
		  wait(500);
		  MoveItem(tmpgold,tmpgoldcount,backpack,0,0,0);
		  AddToSystemJournal('-= Золото найдено, положил в backpack =-');
		end
	  else
	    begin
		  AddToSystemJournal('-= Нет золота в трупе о_0 , шота тут не то... =-');
		end;
	end;

// <======================== Ищем заточку в трупе =======================>	
  procedure Get_Enchant_Scroll;
  var tmpes : cardinal;
    begin
	  FindType(Corpse,ground);
	  checksave;
	  UseObject(FindItem);
	  checklag;
	  wait(2000);
	  tmpes := FindType(Enchant_Scroll,tmpcorpse);
	  If FindCount >= 1 then
	    begin
		  checklag;
		  wait(500);
		  MoveItem(tmpes,1,backpack,0,0,0);
		  AddToSystemJournal('-= Заточка найдена, положил в backpack =-');
		  wait(500);
		  FindType(Corpse,ground);
		  Ignore(FindItem);
		end
	  else
	    begin
		  AddToSystemJournal('-= Нет заточки в трупе =-');
		end;
	end;

Posted: 20.07.2008 14:25
by Edred
1. По файнддистанс отвечать просто нечего - это зависит от шарда. О каком радиусе вокруг чара сервер присылает клиенту инфу, такова и finddistance. Обычно это от 15 до 21 клетки.

2. По скриптам. Кривые они, конечно... И кривизна именно в поиске. В каждой процедуре ты заново ищешь труп. Зачем? Ты не задумывался, что в разных процедурах стелс будет находить тебе разные трупы? То есть первый поиск - первый труп, процедура напишет что труп найден. Во второй процедуре новый поиск - если трупов несколько - совсем не факт, что стелс тебе выдаст тот же труп - из него ты возьмешь золото. В третьей процедуре новый поиск - может быть и новый найденный труп, из которого будет взят скролл. А дальше еще лучше - перед игнором новый поиск - тут точно стелс выдаст новый труп, который и будет заигнорен. Результат: тот труп, из которого ты что-то взял - незаигнорен, а труп, который ты быстрее всего еще не лутил - в игноре.

Труп надо искать один раз, в цикле естественно. Далее сериал найденного в переменную, все процедуры лута переделать в функции, которым передавать параметром сериал трупа. Ну и игнор также, через сериал. Вот тогда никаких глюков не будет.