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. По скриптам. Кривые они, конечно... И кривизна именно в поиске. В каждой процедуре ты заново ищешь труп. Зачем? Ты не задумывался, что в разных процедурах стелс будет находить тебе разные трупы? То есть первый поиск - первый труп, процедура напишет что труп найден. Во второй процедуре новый поиск - если трупов несколько - совсем не факт, что стелс тебе выдаст тот же труп - из него ты возьмешь золото. В третьей процедуре новый поиск - может быть и новый найденный труп, из которого будет взят скролл. А дальше еще лучше - перед игнором новый поиск - тут точно стелс выдаст новый труп, который и будет заигнорен. Результат: тот труп, из которого ты что-то взял - незаигнорен, а труп, который ты быстрее всего еще не лутил - в игноре.
Труп надо искать один раз, в цикле естественно. Далее сериал найденного в переменную, все процедуры лута переделать в функции, которым передавать параметром сериал трупа. Ну и игнор также, через сериал. Вот тогда никаких глюков не будет.