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

Fishing

Only working scripts
FreD
Posts: 7
Joined: 30.08.2005 20:12

Post by FreD »

Исправлю...
FreD
Posts: 7
Joined: 30.08.2005 20:12

Post by FreD »

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 = $6BC9B55A;
	PoleChest = $6BC9B5D6;
{$Include 'all.inc'}

procedure FullDisconnect;
begin
	SetARStatus(false);
	Disconnect;
end;


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
		CheckSave;
		WaitConnection(3000);
		WaitGump('1');
		while life = 0 do
			wait(1000);
		CheckSave;
		WaitConnection(3000);
		UseObject(BowChest);
		wait(500);
		UseObject(PoleChest);
		wait(500);
		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
	CheckSave;
	WaitConnection(3000);
	if Count($0F3F) < 20 then
	begin
		FindType($0F3F,ground);
		if FindCount <> 0 then
			Grab(finditem,100);
	end;
	Disarm;
	wait(1000);
	FindType($13B2,backpack);
	if FindCount > 0 then
		Equip(RhandLayer,finditem)
	else
	begin
		FindType($13B2,BowChest);
		Equip(RhandLayer,finditem);
	end;
	CheckSave;
	WaitConnection(3000);
	Attack(Enemy);
	RTime:=Timer;
	While (GetDistance(Enemy)<15) and (Timer < (RTime + (30 *1000))) do
	begin
		if life <80 then
			UOSay('Heal');
		Wait(1000);
		CheckSave;
		WaitConnection(3000);
	end;
	Disarm;
	wait(1000);
	SetWarMode(false);
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
		CheckSave;
		WaitConnection(3000);
		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;
		If (GetType(Pole) = 0) then
		begin
			FindType($0DBF,backpack);
			if FindCount > 0 then
				Pole:=finditem
			else
			begin
				UseObject(PoleChest);
				wait(500);
				FindType($0DBF,PoleChest);
				if FindCount > 0 then
					Pole:=finditem
				else	
					FullDisconnect;
			end;
			
		end;
		DeathR;
		WaitTargetTile(tile,x,y,z);
		UseObject(Pole);
		CheckSave;
		WaitConnection(3000);
		WaitJournalLine(Now, 'a nice fish!|seem to be|You find a message|an old tattered|not a fish!', 20000);
		DangerCheak;
		CheckSave;
		WaitConnection(3000);
	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
	CheckSave;
	WaitConnection(3000);
	UseObject(BowChest);
	wait(500);
	UseObject(PoleChest);
	wait(500);
	SetArStatus(true);
	Eat:=0;
	GetCoord;
	Disarm;
	while true do
	begin
		FindDistance := 12;
		FindVertical := 255;
		for i:=0 to ItemCount-1 do
		begin
			CheckSave;
			WaitConnection(3000);
			if (Timer > (Eat + (15 *60 *1000))) then
			begin
				Hungry(1,ground);
				Eat :=Timer;
			end;
			AddToSystemJournal('Fishing tile #'+IntToStr(i));
			Fish(FishP[i].tile,FishP[i].px,FishP[i].py,FishP[i].pz);
			if Weight > 350 then FishS;
		end;
	end;
end.
Acronym
Novice
Novice
Posts: 114
Joined: 10.05.2005 18:42
Location: Odessa, NDW
Contact:

Post by Acronym »

Интересно как работает, но не могу понять почему тут именно 150:

Code: Select all

FishP: array [0..150] of FishR;
Как оно соотносится с количеством точек ловли в файле?

П.С.
Если несколько стопок с едой и одна из них не в пределах досягаемости, то нужно что то с этим делать
а то может умереть с голода пытаясь поесть с дальней.
Я пока сделал этот кусок так:

Code: Select all

         if (Timer > (Eat + (15 *60 *1000))) then 
         begin 
			FindDistance := 2;
            Hungry(1); 
            Eat :=Timer;
			FindDistance := 12;
         end;
А вообще, отличная работа.
FreD
Posts: 7
Joined: 30.08.2005 20:12

Post by FreD »

А некак оно не соотносится, главное чтоб некто не додумался засунуть больше тайлов в файл, чем размерность массива...
А с хавкой, может так и лучше... Просто всегда ловил в пустынных местах, соседи некчему :)
Post Reply