Page 1 of 2

Fishing

Posted: 03.04.2006 12:59
by FreD
Простенький скрипт на фишинг.

Установите контейнеры в которых удочки и луки:

Code: Select all

Const
	BowChest = $xxxxxxxx;
	PoleChest = $xxxxxxxx;
Еда, стрелы на лодке, также непомешал бы тотем который бы вас лечил.

Тайлы для ловли содержатся в отдельном файле, который распологать в одной папке со скриптом, под именем - Tiles.txt
Их вы можете получить с помощью Injection - ,infotile

Пимер занесения тайлов:

Code: Select all

6041 2970 1025 251
6040 2170 1026 251
6043 2971 1027 251
6044 2971 1028 251
6043 2972 1026 251
6043 2972 1027 251
6040 2972 1028 251
Сам скрипт:

Code: Select all

Program Fishing;
type FishR = record
	tile:word;
	px,py,pz:integer;
end;

var
	ItemCount,i:Integer;
	FishP: array [0..150] of FishR;
	Pole,Eat:Cardinal;
Const
	BowChest = $xxxxxxxx;
	PoleChest = $xxxxxxxx;
{$Include 'all.inc'}

Procedure GetFishTiles(s:String;WPos:Integer);
begin
	s := s + ' ';
	FishP[WPos].tile:=StrToInt(Copy(s,1,Pos(' ',s)-1));
	Delete(s,1,Pos(' ',s));
	FishP[WPos].px:=StrToInt(Copy(s,1,Pos(' ',s)-1));
	Delete(s,1,Pos(' ',s));
	FishP[WPos].py:=StrToInt(Copy(s,1,Pos(' ',s)-1));
	Delete(s,1,Pos(' ',s));
	FishP[WPos].pz:=StrToInt(Copy(s,1,Pos(' ',s)-1));
	Delete(s,1,Pos(' ',s));
end;

Procedure GetCoord;
var
	List:TStringList;
	i:integer;
begin
	List:=TStringList.Create;
	List.LoadFromFile('Tiles.txt');
	for i := 0 to List.Count-1 do
		GetFishTiles(List.strings[i],i);
	ItemCount:=i;
end;

Procedure DeathR;
begin
	if life = 0 then
	begin
		WaitGump('1');
		while life = 0 do
		begin
			wait(1000);
		end;
		FindType($13B2,BowChest);
		if FindCount <> 0 then
			Grab(finditem,1);
		FindType($0F3F,ground);
		if FindCount <> 0 then
			Grab(finditem,100);
	end;
end;

Procedure Kill(Enemy:Cardinal);
var
	RTime:Cardinal;
begin
	Disarm;
	FindType($13B2,backpack);
	Equip(RhandLayer,finditem);
	Attack(Enemy);
	RTime:=Timer;
	While (GetDistance(Enemy)<15) and (Timer < (RTime + (30 *1000))) do
	begin
		if life <80 then
			UOSay('Heal');
		Wait(1000);
	end;
	Disarm;
	SetWarMode(false);
	Equip(LHandLayer,Pole);
end;

Procedure DangerCheak;
var
	Enemy:array[1..4] of Cardinal;
	i:Integer;
begin
	Enemy[1] := $0190;
	Enemy[2] := $0191;
	Enemy[3] := $0010;
	Enemy[4] := $0096;
	Ignore(Self);
	for i:=1 to 4 do
	begin
		FindType(Enemy[i],ground);
		if FindCount>0 then
			Kill(FindItem);
	end;
end;

Procedure Fish(tile:Word;x,y,z:Integer);
var
	FBegin:TDateTime;
begin
	FBegin:=Now;
	while (not InJournalBetweenTimes('seem to be',FBegin,Now)>=0) do
	begin
		If TargetPresent then
			CancelTarget;
		DeathR;
		UseObject(Pole);
		WaitForTarget(4000);
		TargetToTile(tile,x,y,z);
		WaitJournalLine(Now, 'a nice fish!|seem to be|You find a message|an old tattered|not a fish!', 20000);
		If (GetType(Pole) = 0) then
		begin
			FindType($0DBF,PoleChest);
			if FindCount > 0 then
				Pole:=finditem
			else
				FullDisconnect;
			
		end;
		DangerCheak;
		CheckSave;
		WaitConnection(10);
	end;
end;

Procedure FishS;
var
	i:Integer;
	FishT:array[1..4] of Cardinal;
begin
	FishT[1] := $09CC;
	FishT[2] := $09CE;
	FishT[3] := $09CD;
	FishT[4] := $09CF;
	for i := 1 to 4 do
		stack(FishT[i],$0000);
end;

begin
	UseObject(BowChest);
	UseObject(PoleChest);
	SetArStatus(true);
	Eat:=0;
	GetCoord;
	Disarm;
	while true do
	begin
		FindDistance := 12;
		FindVertical := 255;
		for i:=0 to ItemCount-1 do
		begin
			if (Timer > (Eat + (15 *60 *1000))) then
			begin
				Hungry(1,ground);
				Eat :=Timer;
			end;
			Fish(FishP[i].tile,FishP[i].px,FishP[i].py,FishP[i].pz);
			if Weight > 350 then FishS;
		end;
	end;
end.

Re: Fishing

Posted: 03.04.2006 13:26
by ParadoX
ггг.. говорит простенький а сам наверное гордится :)

ну скрипт то не под дрим... ибо рыбачит в точке по одному разу... хотя может оно и к лучшему...

по мне так слишком накручено... а вообще - афтар зачёт...

Posted: 05.04.2006 16:48
by FreD
Не горжусь :) Валялся у меня он, решил кинуть сюда.
З.Ы.: Рыбачит пока все не выловит в одной точке.

Posted: 06.07.2006 4:40
by LaST UnIcOrN
Подскажите как это исправить, все вродеб сделал , но
вот тут ошибку выдает... вот в этой строке если быть точнее..
FishP[WPos].py:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));

Вот сама ошибка.
5:37:49: Compiling
5:37:49: Compiled succesfully
5:37:50: Exception: '' is not a valid integer value at 30.153
5:37:50: Script Fishing.sc stoped successfuly

с этой процедуры.
Procedure GetFishTiles(s:String;WPos:Integer);
begin
s := s + ' ';
FishP[WPos].tile:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
FishP[WPos].px:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
FishP[WPos].py:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
FishP[WPos].pz:=StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
end;

Posted: 06.07.2006 9:46
by Alex
похоже что ошибка в списке тайлов для вылова, просмотри его внимательно

Posted: 06.07.2006 9:51
by LaST UnIcOrN
Всё, спасибо за помощь, после совета Мираклеса выяснилось, что в файле с тайлами просто было в самом низу две пустые строки и скрипт просто на них вылетал... в файле не должно быть ни пробелов ни пустых строк... только так как показано в примере. :roll:

Posted: 06.07.2006 16:27
by Alex
я не Миралекс)

Posted: 07.07.2006 4:22
by LaST UnIcOrN
Alex wrote:я не Миралекс)
и тебе Алекс тоже спасибо :)...
у меня теперь еще такой вопрос... со временем, где-то через часа два зависает и пишется вечно I am already bla bla bla..
попытался немного подправить... но чтото еффект не достиг ..
что сделал неправильно??

Code: Select all

Procedure Fish(tile:Word;x,y,z:Integer); 
var 
   FBegin:TDateTime; 
begin 
   FBegin:=Now; 
   while (not InJournalBetweenTimes('seem to be',FBegin,Now)>=0) do 
   begin 
      DeathR; 
CheckTargetError(5, 2); 
      UseObject(Pole); 
      WaitForTarget(4000); 
      TargetToTile(tile,x,y,z); 
      WaitJournalLine(Now, 'a nice fish!|seem to be|You find a message|an old tattered|not a fish!', 20000); 
      If (GetType(Pole) = 0) then 
      begin 
SetARStatus(true); 
waitconnection(3000); 
CheckSave; 
wait(3000); 
SetARStatus(true); 
while WaitJournalLine(Now, 'I am already performing another action', 20000) do   // вот тут пытался вписать, чтобы дисконнектило если появляется фраща I am bla bla bla
 FullDisconnect;
         FindType($0DBF,PoleChest); 
         if FindCount > 0 then 
            Pole:=finditem 
         else 
            FullDisconnect; 
                end; 
      DangerCheak; 
      CheckSave; 
      WaitConnection(10); 
   end; 
end; 

Заранее спасибо за ответ.

Posted: 07.07.2006 15:22
by Acronym
заключай код скриптов в тег code когда постишь на форуме

Posted: 08.07.2006 1:29
by LaST UnIcOrN
ок исправил... прошу прощения , что не сделал этого сразу... так что кто-то может помочь? :roll:

Posted: 08.07.2006 19:41
by Alex
юзай canceltarget перед использованием обьекта, вместо checktargeterror

Posted: 08.07.2006 21:36
by LaST UnIcOrN
Alex wrote:юзай canceltarget перед использованием обьекта, вместо checktargeterror
непоможет . Так зависание идет именно удочки, у меня такое даже на простом клиенте было.. и пока не перезайдешь дабл клик на удочку будет писать типа что итем уже используется, а если скриптом работать то ай ем олрэди бла бла бла... спасает только реконнект.. поетому и попросил помочь со словами и реконнектом при них... :roll:

Posted: 08.07.2006 22:36
by Alex
checktargeterror именно этим занимаеться что реконектит чара если видит эти строки в журнале

Posted: 09.07.2006 2:35
by LaST UnIcOrN

Code: Select all

begin 
   FBegin:=Now; 
   while (not InJournalBetweenTimes('seem to be',FBegin,Now)>=0) do 
   begin 
      If TargetPresent then //то , что вы говорили указать
         CancelTarget;  // то, что вы говорили указать
      DeathR; 
      UseObject(Pole); 
      WaitForTarget(4000); 
      TargetToTile(tile,x,y,z); 
      WaitJournalLine(Now, 'a nice fish!|seem to be|You find a message|an old tattered|not a fish!', 20000); 
      If (GetType(Pole) = 0) then 
      begin 
         FindType($0DBF,PoleChest); 
         if FindCount > 0 then 
            Pole:=finditem 
         else 
            FullDisconnect; 
вот это в первоначально скрипте ...
Пробывал итак поставить и так как пробывал уже я переделать.. результат один и тотже... всеравно через час примерно появляется Ай эм бла бла бла. . .

Posted: 11.07.2006 8:16
by Diego
У меня такае же лажа... через некоторое время после запуска скрипта пишет "I am already.... " пробывал задержку увеличить - не получилось....
подскажите пожалуйста... просто я в скриптаз полный ноль ...
и у меня скрипт запускаеться, только пишет:
"Compiling
compiling succesfully
UseObjtct error : Object not finded" ?
вроде всё приавильно делал... если можете обьясните.... тут или в асю 334353710
зарание спасибо!