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

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

тут можно задать вопрос по скриптингу
Post Reply
Chico
Posts: 9
Joined: 21.10.2012 19:01

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

Post 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;
Не могу разобраться где трабл ?
maza
Neophyte
Neophyte
Posts: 14
Joined: 21.04.2014 16:43

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

Post 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.
Last edited by maza on 06.06.2017 16:08, edited 1 time in total.
Chico
Posts: 9
Joined: 21.10.2012 19:01

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

Post by Chico »

Попробую ваш поиск спасибо, он у вас более аккуратный
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

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

Post 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() и так по кругу в одном общем цикле.
Stealth 8.10.2 | Клиент: 7.0.13.4
Chico
Posts: 9
Joined: 21.10.2012 19:01

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

Post by Chico »

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



Все равно 1-2 штуки из списка находит, и все. Ну да эти скрипты это и делают, лутят, режут уносит в домик, кроме поиска остальное все работает почти идеально.
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

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

Post by GeeZeR »

Хз он не может не находить, проверь типы на животных вокруг. Ещё поиграй с FindVertical если это холмы и т.п., поставь 20. Впиши IgnoreReset() в начало скрипта перед циклами, возможно где-то игноришь.
Stealth 8.10.2 | Клиент: 7.0.13.4
Chico
Posts: 9
Joined: 21.10.2012 19:01

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

Post 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;
 
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

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

Post by GeeZeR »

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

Да работать-то он будет, просто это плохой стиль программирования. Через месяц ты сам в нём ничё не поймёшь. Код должен быть таким, чтоб его можно было читать как книгу.
Stealth 8.10.2 | Клиент: 7.0.13.4
Chico
Posts: 9
Joined: 21.10.2012 19:01

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

Post by Chico »

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

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


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