Page 1 of 1

Не ищет животных

Posted: 05.06.2017 3:42
by Chico
Накатал скрипт на добычу шкурок, но че то он ищет избирательно, может найти 1-е животное, может 2-е, а может 12-е. Из списка находит от 1 до 3 тварей. Хотя в округе есть как минимум 10.

Code: Select all

procedure main; /// основная процедура
 begin
 AddToSystemJournal('X ' + inttostr(m));
 AddToSystemJournal('y ' + inttostr(n));
 AnimalType:= [$0017,$00D3,$00E7,$00D8,$00D1,$00A7,$00EA,$0006,$00E8,$00D4,$00E9,$00CF,$00E1,$00D6,$003F,  $0005];
 FindDistance:=20;
 FindVertical := 10; 
 // FindVertical:=10;   
 Ignore(self); 
   for i:= 0 to 15 do 
    begin
    AddToSystemJournal('Ищем номер ' + IntToStr(i)) ;
     FindNotoriety(AnimalType[i],-1)
     wait(100);
     Animal:= finditem ; 
   // Animal:= FindTypeEx(-1,-1,Ground,false) ;
    wait(100);
    AddToSystemJournal('Нашли ' + inttostr(Animal) + ' Имя ' + getname(Animal));
    if (GetType(Animal)<>$2006) and (getname(Animal) <> '')   then 
    begin
    wait(300);
      wait(700);   
      NewMoveXY(getx(Animal),gety(FindItem),True,1,False);
      if (GetType(Animal) = $00E8 ) or (GetType(Animal) = $00E9) or (GetType(Animal) = $00D4 ) or (GetType(Animal) =  $0017)     then  taming(Animal); 
      if Life <  80 then HealBand;
      if Life <  20 then GotoOnHome;
      Killing(Animal);
    end;
    
    Ignore(Animal);
    if weight > maxweight - 60 then 
    begin
      GotoOnHome; 
      DropLoot; 
      GrabTools;
    end;
    if Life <  80 then HealBand;

    End;
    
    IgnoreReset;
    AddToSystemJournal('Следующая точка'); 
  End;
Не могу разобраться где трабл ?

Re: Не ищет животных

Posted: 05.06.2017 5:24
by maza
Может иза : FindNotoriety(AnimalType,-1)
В качестве параметра Notoriety можно использовать:
1 - innocent (blue)
2 - guilded/ally (green)
3 - attackable but not criminal (gray)
4 - criminal (gray)
5 - enemy (orange)
6 - murderer (red)
Я когда бодеров качал етот скрипт накатал и им фармил
Скрипт валит быков-коров бутчером режит их на кожу и таскает кожу в банк
Program New;
// Фарм кожи в делюсие
// Скрипт валит быков-коров бутчером режит их на кожу и таскает кожу в банк
const
bankX = 5276;
bankY = 3989;
corpse = $2006;
clever = $44301753;
inBank = $43715AFB;
var

trup : Cardinal;
enemy: Cardinal;
monster : array of Cardinal;



function FindMonster():Cardinal;
var
i:integer;
begin
monster:=[$009F,$004A,$00E8,$00D8,$00E7,$00E9]; // Список монстров которые будет искать
FindDistance:=15;
FindVertical:=7;
for i:=Low(monster) to High(monster) do
begin
if (FindNotoriety(monster,3) > 0 ) then // 3- серый
begin
Result:=FindItem;
AddToSystemJournal('Monster Found!');
exit;
end
else
begin
enemy:=0;
AddToSystemJournal('Рядом нет монстров');
Wait(1000);
end;
end;

end;

function KillEnemy(e:Cardinal):Boolean;
begin
If (GetHP(e) = GetMaxHP(e)) then
begin
AddToSystemJournal('Даю хонр сучаре');
UseVirtue('Honor');
WaitForTarget(15000);
if TargetPresent then
TargetToObject(e);
AddToSystemJournal('Дал Хонор теперь ему пизда');
end;
while (GetHP(e)*100/25 <> 0) do
begin
newMoveXY(GetX(e),GetY(e),true,1,true);
Attack(e);
AddToSystemJournal(IntToStr(GetHP(e)*100/25));
wait(1000);
end;
enemy:=0;
end;

procedure goSpawn(); // респ быков
begin
AddToSystemJournal('Go to Spawn');
newMoveXY(5173,3981,true,2,true);
wait(500);
end;

procedure checkw();
begin
if (Weight >= MaxWeight -40) then
begin
newMoveXY(bankX,bankY,true,1,true);
wait(1000);
repeat
UOSay('Bank');
FindType($0E75,BankLayer);
until finditem <> inBank;
if (FindType($1081,backpack) > 0) then
begin
MoveItem(FindItem,FindQuantity,inBank,0,0,0);
wait(1000);
AddToSystemJournal('Unload Complicte');
goSpawn();
end;
end;
end;

procedure cut();
begin
while FindType($2006,ground) > 0 do
begin
UseObject(clever);
WaitForTarget(15000);
if TargetPresent then
TargetToObject(FindItem);
wait(400);
ignore(FindItem);
end;
end;


begin
//Body of Script
while not dead do
begin
checkw();
enemy:=FindMonster();
if (enemy <> 0) then
begin
checkw();
KillEnemy(enemy);
cut();
goSpawn();
end;
end;
end.

Re: Не ищет животных

Posted: 06.06.2017 4:03
by Chico
Попробую ваш поиск спасибо, он у вас более аккуратный

Re: Не ищет животных

Posted: 06.06.2017 10:00
by GeeZeR
Chico, хз чёт напутано ужасно у тебя,ты задаёшь определённый тип, затем с помощью извращения FindNotoriety(AnimalType,-1) находишь айди найденного типа, затем определяешь его тип... Вот этого (GetType(Animal)<>$2006) and (getname(Animal) <> '') не нужно, просто ищи типы которые тебя интересуют, Ignore(self); тут тоже ни к чему вообще.
Короче насколько я понял тебе нужно искать по списку типов и одних бить и резать шкуру, а других тамить.

Code: Select all

procedure main(); // основная процедура

begin
	AddToSystemJournal('X ' + inttostr(m));
	AddToSystemJournal('y ' + inttostr(n));
	FindDistance := 20;
	FindVertical := 10;

	// перебить всех
	while FindTypesArrayEx([$00D3,$00E7,$00D8,$00D1,$00A7,$00EA,$0006,$00CF,$00E1,$00D6,$003F,$0005],[$FFFF],[Ground],false) >0 do begin
		AddToSystemJournal('Нашли ' + inttostr(FindItem) + ', Имя ' + getname(FindItem));
		NewMoveXY(getx(FindItem),gety(FindItem),True,1,False);
		Killing(FindItem);
		if (Life < 20) then begin
			GotoOnHome();
		end else if (Life < 80) then begin
			HealBand();
		end;
		if (weight > maxweight - 60) then begin
			GotoOnHome();
			DropLoot();
			GrabTools();
		end;
		AddToSystemJournal('Следующая точка'); 
	end;

	// как всех перебил этих затамить
	while FindTypesArrayEx([$00E8,$00E9,$00D4,$0017],[$FFFF],[Ground],false) >0 do begin
		AddToSystemJournal('Нашли ' + inttostr(FindItem) + ', Имя ' + getname(FindItem));
		NewMoveXY(getx(FindItem),gety(FindItem),True,1,False);
		Taming(FindItem);
		if (Life < 80) then HealBand();
		AddToSystemJournal('Следующая точка'); 
	end;
	// если никого не осталось
	AddToSystemJournal('Всех перебил и всех затамил, ура!'); 
end;

GotoOnHome(); GrabTools(); должны ещё как-то вернуть перса назад откуда он ушёл домой сбрасывать лут. Или в этой процедуре их не вызывать, а просто прерывать её (Exit;), потом написать условия для GotoOnHome(), DropLoot(), GrabTools() и так по кругу в одном общем цикле.

Re: Не ищет животных

Posted: 08.06.2017 14:22
by Chico
GeeZeR wrote:Chico, хз чёт напутано ужасно у тебя,ты задаёшь определённый тип, затем с помощью извращения FindNotoriety(AnimalType,-1) находишь айди найденного типа, затем определяешь его тип... Вот этого (GetType(Animal)<>$2006) and (getname(Animal) <> '') не нужно, просто ищи типы которые тебя интересуют, Ignore(self); тут тоже ни к чему вообще.
Короче насколько я понял тебе нужно искать по списку типов и одних бить и резать шкуру, а других тамить.



Все равно 1-2 штуки из списка находит, и все. Ну да эти скрипты это и делают, лутят, режут уносит в домик, кроме поиска остальное все работает почти идеально.

Re: Не ищет животных

Posted: 08.06.2017 16:46
by GeeZeR
Хз он не может не находить, проверь типы на животных вокруг. Ещё поиграй с FindVertical если это холмы и т.п., поставь 20. Впиши IgnoreReset() в начало скрипта перед циклами, возможно где-то игноришь.

Re: Не ищет животных

Posted: 08.06.2017 16:58
by Chico
Все нашел проблему, дистанция поиска переназначается при луте, надо findistance после каждого лута переназначать. Работает и мой извращенный FindNotoriety(AnimalType,-1) и ваш. Взял ваш с небольшой переделкой (затамленых животных надо тоже убивать, второй раз не растет таминг на нем же). Засунул повтор опасных животных, а то они респятся быстрее чем обычные. Работает вроде пока. В идеале хочу чтобы сутками тамил рубил, убивал, шкруы снимал.
Получилось вот так

Code: Select all

procedure main(); // основная процедура

begin
   AddToSystemJournal('X ' + inttostr(m));
   AddToSystemJournal('y ' + inttostr(n));
   FindDistance := 20;
   FindVertical := 10;

   // перебить всех, дайров ищем каждый второй раз, так как опасны, и респятся часто
   while FindTypesArrayEx([$0017,$0017,$00D3, $0017,$00E7,$00D8,$0017,$00D1,$00A7,$0017,$00EA,$0006,$0017,$00CF,$00E1, $0017,$00D6,$003F, $0017,$0005],[$FFFF],[Ground],false) >0 do begin
      AddToSystemJournal('Нашли ' + inttostr(FindItem) + ', Имя ' + getname(FindItem));
      NewMoveXY(getx(FindItem),gety(FindItem),True,1,False);
      Killing(FindItem);
      if (Life < 20) then begin
         GotoOnHome();
      end else if (Life < 80) then begin
         HealBand();
      end;
      if (weight > maxweight - 60) then begin
         GotoOnHome();
         DropLoot();
         GrabTools();
      end;
      AddToSystemJournal('Следующая точка'); 
      FindDistance := 20;
      FindVertical := 10;
   end;

   // как всех перебил этих затамить и убить
   while FindTypesArrayEx([$00E8,$00E9,$00D4],[$FFFF],[Ground],false) >0 do begin
      AddToSystemJournal('Нашли ' + inttostr(FindItem) + ', Имя ' + getname(FindItem));
      NewMoveXY(getx(FindItem),gety(FindItem),True,1,False);
      Taming(FindItem); 
      Killing(FindItem);
       if (Life < 80) then HealBand();
      AddToSystemJournal('Следующая точка');
      FindDistance := 20;
      FindVertical := 10; 
   end;
   // если никого не осталось
   AddToSystemJournal('Всех перебил и всех затамил, ура!'); 
end;
 

Re: Не ищет животных

Posted: 08.06.2017 22:41
by GeeZeR
Chico wrote:Работает и мой извращенный FindNotoriety(AnimalType,-1)

Да работать-то он будет, просто это плохой стиль программирования. Через месяц ты сам в нём ничё не поймёшь. Код должен быть таким, чтоб его можно было читать как книгу.

Re: Не ищет животных

Posted: 10.06.2017 7:08
by Chico
GeeZeR wrote:
Chico wrote:Работает и мой извращенный FindNotoriety(AnimalType,-1)

Да работать-то он будет, просто это плохой стиль программирования. Через месяц ты сам в нём ничё не поймёшь. Код должен быть таким, чтоб его можно было читать как книгу.


Да это понятно, сам стороник читаемого кода, просто пример который был перед глазами работал именно так. Я его еще обрезал раза в 2.