SRL Archive - RS3 Script Requests

Fly fisher and dropper


Roko

2014-01-06 11:39:59

Having a fly fisher script with normal trouts and salmons or barbarian fly fisher would be very nice to have. The xp/hr rate is quite good and really helps when you're aiming 99 fishing. If someone could try to make one, i'm also willing to help making it with the few basics I've learned from the guide here.

Thanks in advance!

skillers

2014-01-06 20:03:15

i would love a script like this too

Roko

2014-01-09 21:35:55

People are saying it's easy to make yet no one is trying to make one. I've tried something myself but I really don't know anything more than the basic lape guide I've read. Could anyone please help out?

vwxz

2014-01-10 05:10:06

From: Roko
People are saying it's easy to make yet no one is trying to make one. I've tried something myself but I really don't know anything more than the basic lape guide I've read. Could anyone please help out?


The rough outline works something like as follows.

Clicking the fish spot:

Have a list of colors found in the whirlpool/bubbles of the active fish spot but not the calm river.
Search the main screen for them. (Easiest way is probably MainScreen.FindObject (docs here, but you will need to wrap that in success checking.)
Click one when found.
Right click "Fish".

Detecting we are currently fishing:

Some combination of the following.
Count the inventory. (See TabBackpack.Count.)
Look for character movement with pixel shift. (my tutorial on it)
Look for exp change. (There's an implementation of ChatBox.GetExp on these forums. Can't find the link right this moment.)
Look for the color of the extended fly fishing rod.

Main loop:

Wait while fishing.
Click fish.

Of course, vastly oversimplified, but that's a rough outline of the idea.

I wouldn't say it's easy. But it's certainly a lot easier than some of the scripts that have been done before. So one could say it is somewhat easy in comparison.

mxtrix

2014-01-13 03:44:02

I have just finished writing this now, just adding in a very basic on screen paint now. In regards to object finding vwxz I suggest you read up about CTS2, TPA's and ATPA's. They are a lot more accurate than using the FindObject method (if used correctly).

vwxz

2014-01-13 04:02:00

From: mxtrix
I have just finished writing this now, just adding in a very basic on screen paint now. In regards to object finding vwxz I suggest you read up about CTS2, TPA's and ATPA's. They are a lot more accurate than using the FindObject method (if used correctly).


Just curious, are you working on a script for regular or barbarian fly fishing?

Yea, there are much more reliable main screen object finding methods which rely on clusters of colors, relative positioning, etc. I was just giving a very brief (and arguably oversimplified) outline because the OP asked how to make a fishing script.

mxtrix

2014-01-13 04:17:34

Regular, however once I post this one and finish my dungeoneering farmer I might look into making a barbarian one and adding more features.

vwxz

2014-01-13 04:41:47

From: mxtrix
Regular, however once I post this one and finish my dungeoneering farmer I might look into making a barbarian one and adding more features.


I'm in the early stages of making a barbarian one, but it's gonna be a really long time before anything comes of it. I'm not sure which ends up faster, because regular fly fishing you can use the action bar hotkeys.

mxtrix

2014-01-13 04:53:16

From: vwxz
I'm in the early stages of making a barbarian one, but it's gonna be a really long time before anything comes of it. I'm not sure which ends up faster, because regular fly fishing you can use the action bar hotkeys.


I am not sure, they would be relatively similar. From memory C2 fishing is the fastest xp, weather it is sustainable for long periods of time without starting a new dungeon or not might be worth investigating as it is something like 100k experience/hour. Here is a video guide if that helps- I might look into it myself at a later-date:

http://www.youtube.com/watch?v=N58YeVgT4YY

EDIT: In regards to the script I will make a proper paint tomorrow morning.

Reflector

2014-01-15 06:47:00

Hey guys check out my script? It fly fishes near Barbarian Village but uses the manual drop method although I do intend on using the keyboard method soon :)
Tell me what you think of it please :D http://villavu.com/forum/showthread.php?t=107595&p=1280468

King

2014-01-25 18:20:12

Im bored and only have a F2P account to work with. Ill post it in a few hours, probably will use reflection to check location ext.. any other features you want?

Hoodz

2014-01-25 18:49:39

From: King
Im bored and only have a F2P account to work with. Ill post it in a few hours, probably will use reflection to check location ext.. any other features you want?


Reflection with rs3? I thought we only used ogl for rs3

King

2014-01-25 19:36:39

I was under the impression that they were developing an reflection include for runescape. I was just going to use it for tile walking..does it only work with OSRS? If that is the case I rather script something of that nature :P
From: hoodz
Reflection with rs3? I thought we only used ogl for rs3

Kyle

2014-01-25 19:38:31

From: King
I was under the impression that they were developing an reflection include for runescape. I was just going to use it for tile walking..does it only work with OSRS? If that is the case I rather script something of that nature :P

Yeah, AFAIK there hasn't been anything in the works for rs3 using reflection. Just Osr as Hoodz said.

King

2014-01-25 20:00:43

From: elfyyy
Yeah, AFAIK there hasn't been anything in the works for rs3 using reflection. Just Osr as Hoodz said.


Well looks like it is OSRS scripting for me then :P The whole reason I want to start again is I love tile walking.

The Mayor

2014-01-25 20:04:22

From: King
Well looks like it is OSRS scripting for me then :P The whole reason I want to start again is I love tile walking.


Just use SPS ;)

Roko

2014-01-26 00:26:52

From: King
Im bored and only have a F2P account to work with. Ill post it in a few hours, probably will use reflection to check location ext.. any other features you want?


Switching from the two fishing spots would be pretty nice. Having a powerfishing method that uses the hotkeys would be pretty nice too :p

King

2014-01-26 12:54:50

From: Roko
Switching from the two fishing spots would be pretty nice. Having a powerfishing method that uses the hotkeys would be pretty nice too :p


Worked on it a bit last night, so far, so good ;P

Roko

2014-02-05 13:46:12

Have you been able to finish it mate? I'm wondering what it looks like :p

Roko

2014-02-22 11:42:40

It would be really nice to have :/

Wooty

2014-02-22 16:10:57

Barbarian fisher with action bar dropper would be nice! :D

Roko

2014-03-30 18:13:57

Any fisher would be nice as long as it powerfish and drops the fish it would be pretty cool! I'm having hard time with the shark fishing scripts as it averages 20k xps per hour and it's not much reliable. I don't have much gold on RS3 but I'm willing to pay 5M gold for one!

Ian

2014-03-30 19:50:00

From: Roko
Any fisher would be nice as long as it powerfish and drops the fish it would be pretty cool! I'm having hard time with the shark fishing scripts as it averages 20k xps per hour and it's not much reliable. I don't have much gold on RS3 but I'm willing to pay 5M gold for one!


I had one for RS2 that I could update/write from scratch. I won't be able to start tonight because of homework but I can start tomorrow probably. BTW, don't pay for scripts ;)

sdf

2014-03-30 22:44:52


program sdfFlyFisher;
{$DEFINE SMART}
{$i srl-6/srl.simba}

const
{GENERAL SETTINGS}
DropLower = 24; //Lower bound of inventory count to start dropping fish at
//CHANGE LOWER TO ~24+ IF BARB FISHING
DropUpper = 27; //Upper bound of inventory count to start dropping fish at
TroutSlot = 1; //Actionbar slot bound to Trout
SalmonSlot = 2; //Actionbar slot bound to Salmon
UrnSlot = 8; //Actionbar slot bound to Decorated fishing urn (FULL)
RunFor = 16200; //How long to run for in seconds. Note 3600s/hr.
debug = false;
debugspots = false; //draw boxes around fishing spots?
silentmode = false; //won't beep if new chat text is found.
UseOpenGL = false;
MouseDebug = True; //water colours change with modes.
DisableCountLog = True;
BarbFishing = True;
LTroutSlot = 1; //Leaping trout slot
LSalmonSlot = 2; //Leaping salmon
LSturgeonSlot = 3; //Leapin sturgeon

{*ADDITIONAL NOTES*}
//Failsafes have not yet been implemented, it is strongly advised that you babysit this script.

var
MSCenter: TPoint;
MSCenterX, MSCenterY, TroutDTM, SalmonDTM, ProgBG, StartXP, CurrentXP,
XPTotal, XPperHour, Ticks, DropAt, UrnDTM, UrnsTeled, FeatherDTM, chatLength: integer;
FishSpotCol, FishSpotTol, RodCol,
RodTol, TroutSlotCol, TroutSlotTol, SalmonSlotCol, SalmonSlotTol, InvFullDTM, FindTries: Integer;
LTroutCol, LTroutTol, LSalmonCol, LSalmonTol, LSturgeonCol, LSturgeonTol, ControlsWindow: Integer;
LTroutHue, LTroutSat, LSalmonHue, LSalmonSat, LSturgeonHue, LSturgeonSat: Extended;
FishSpotHue, FishSpotSat, RodHue, RodSat, TroutSlotHue,
TroutSlotSat, SalmonSlotHue, SalmonSlotSat: Extended;
MSBounds, PlayerBox: TBox;
CurStatus: String;
Rotated, fullurn, C1D1, SkipFix1, SkipFix2: Boolean;

procedure declarePlayers();
begin
setLength(players, 1);
currentPlayer := 0;

with players[0] do
begin
loginName := ' ';
displayName := ' ';
password := ' ';
isActive := true;
isMember := true;
bankPin := '';
world := -1;
end;
end;

procedure SetDTMs;
begin
TroutDTM := DTMFromString('mlwAAAHicY2dgYFjGxMCwAYi3A/FuIN4IxAuBeBUQxzNCcCgQ+wFxIBAnAHEIEB/YsQOoG6iIgRGKmeCYC0mUFAwFAGAjCZg=');
SalmonDTM := DTMFromString('mlwAAAHicY2dgYLjBxMBwE4jPAfFDIH4CxFeA+DQQRzIyMCQCcRIQhwKxHxCHAHEsEM9JjgDqBjIYmJBoCOaCipCKoQAAr6AJ6A==');
UrnDTM := DTMFromString('mQwAAAHicY2ZgYDBiYWCwB2J9ID7IxMBwAYjPA7Hn5HcMzh13GXzn/GUQAaqDYUYkDAQAUhEIrQ==');
ProgBG := BitmapFromString(224, 56, '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');
InvFullDTM := DTMFromString('mLgAAAHicY2JgYJDkZGDwAmJmZgYGFiA+PEmC4cAkQQZWoBwIM0IxAwMAVsQDYQ==');
ControlsWindow := DTMFromString('mbQAAAHicY2VgYBDhZmCQAGJ+KAaxXwDFn0DxWyj+sdOP4flSJzA+ncsNxlxAcVY0zIgFgwEAcUINbQ==');
end;

procedure Fr33DTMs;
begin
FreeDTM(TroutDTM);
FreeDTM(SalmonDTM);
FreeDTM(UrnDTM);
FreeDTM(InvFullDTM);
FreeBitmap(ProgBG);
FreeDTM(ControlsWindow);

writeln('Terminated during: ' +CurStatus);
end;

procedure DebugMouseClicks();
var
mX, mY: Integer;
begin
if MouseDebug then
begin
GetMousePos(mX, mY);
if inRange(mX, 0, 800) and inRange(mY, 0, 600) then smartImage.drawCircle(point(mX,mY), 0, false, clLime) //Point draw
else writeln('Mouse is offscreen, not drawing since it causes script to end on exception.');
end;
end;

function TRSChatBox.getXP: Integer; //Thanks to Ashaman88.
var
b: TBox;
s: String;
tpa : TPointArray;
atpa : T2DPointArray;
i,cts,p: Integer;
begin
b := self.getBounds();
b.edit(+(b.x2-b.x1)-140, +10, -5, -94);

findColorsTolerance(tpa, 10856614, b, 21, colorSetting(2, 1.46, 0.14)); //colours updated.

if length(tpa) < 2 then
begin
print('chatBox.getXP(): No XP found', TDebug.SUB);
Exit;
end;

atpa := tpa.cluster(5);
atpa.sortFromFirstPoint(point(b.x2,b.y2)); //sorts from second set of coords of xp bounds

b:= atpa[low(atpa)].getbounds; //uses only XP text (ignores the +gained xp)
b.edit(-2,-2,+2,+2);

smartImage.drawBox(b);

s:=Replace(tesseractgettext(b.x1,b.y1,b.x2,b.y2, FILTER_SMALL_CHARS), ' ', '', [rfReplaceAll]);

P := Pos('x', S);
if P > 0 then
Result := StrToIntDef(ExtractFromStr(Copy(s, P, Length(S)), Numbers), 0)
else
Result := StrToIntDef(ExtractFromStr(S, Numbers), 0);

print('chatBox.getXP(): XP found: ' + tostr(result), TDebug.SUB);
end;

procedure LoadVars
begin
if UseOpenGL then
begin //OpenGL Colours. Water and ripples rendered differently :(
writeln('USING OPENGL COLOURS');
FishSpotCol := 15719353; //15059379; //15322035;
FishSpotTol := 15; //15;
FishSpotHue := 0.32; //0.10; //0.11;
FishSpotSat := 2.49; //1.56; //2.86;
RodCol := 204335;
RodTol := 3;
RodHue := 0.08;
RodSat := 1.00;
TroutSlotCol := 9408666; //9671835;
TroutSlotTol := 19; //6;
TroutSlotHue := 0.08; //0.35;
TroutSlotSat := 0.17; //0.23;
SalmonSlotCol := 6646938; //7239068;
SalmonSlotTol := 15; //7;
SalmonSlotHue := 0.06; //0.03;
SalmonSlotSat := 0.96; //1.33;

{if BarbFishing then //no openGL colours added for barb fishing.
begin
LTroutCol := ;
LTroutTol := ;
LTroutHue := ;
LTroutSat := ;
LSalmonCol := ;
LSalmonTol := ;
LSalmonHue := ;
LSalmonSat := ;
LSturgeonCol := ;
LSturgeonTol := ;
LSturgeonHue := ;
LSturgeonSat := ;
//rod and fishing spots might need to change, but should in theory be the same.
end;}

end else //uses colours for DirectX - note that DirectX performs MUCH better but lacks drawing on the canvas.
begin
writeln('USING DIRECTX COLOURS');
FishSpotCol := 14995359;
FishSpotTol := 22;
FishSpotHue := 0.24;
FishSpotSat := 2.00;
RodCol := 204335;
RodTol := 2;
RodHue := 0.18;
RodSat := 2.17;
TroutSlotCol := 9671835;
TroutSlotTol := 6;
TroutSlotHue := 0.35;
TroutSlotSat := 0.23;
SalmonSlotCol := 7239068;
SalmonSlotTol := 7;
SalmonSlotHue := 0.03;
SalmonSlotSat := 1.33;

if BarbFishing then
begin
LTroutCol := 8161687;
LTroutTol := 10;
LTroutHue := 0.87;
LTroutSat := 0.88;
LSalmonCol := 5921641;
LSalmonTol := 6;
LSalmonHue := 0.19;
LSalmonSat := 0.13;
LSturgeonCol := 4548159;
LSturgeonTol := 16;
LSturgeonHue := 0.96;
LSturgeonSat := 0.26;
end;
end;
end;

procedure initscript;
begin
mouseOffClient(OFF_CLIENT_RANDOM);

MSBounds := mainscreen.getBounds();
MSCenterX := Round(MSBounds.X2/2);
MSCenterY := Round(MSBounds.Y2/2);
MSCenter := [MSCenterX, MSCenterY];
if BarbFishing then PlayerBox := [MSCenterX-30, MSCenterY-18, MSCenterX+30, MSCenterY+18]
else PlayerBox := [MSCenterX-30, MSCenterY-30, MSCenterX+30, MSCenterY+30];
smartImage.DrawBox(PlayerBox, false, clLime); //rod detection occurs inside this region.

SetDTMs;
AddOnTerminate('Fr33DTMs');

DropAt := RandomRange(DropLower, DropUpper);
StartXP := chatBox.getXP();

LoadVars;
end;

function actionbarfix: Boolean; //true if successfully finds more than one of each fish and fixes actionbar.
var
I, SCount, TCount: Integer;
p: TPoint;

begin
result := false;
SCount := TabBackpack.CountDTM_MOD(SalmonDTM); //should only send drop keys if both salmon and trout are found in inventory
TCount := TabBackpack.CountDTM_MOD(TroutDTM);
if SCount >= 1 then
begin
if TCount >=1 then
begin
PlaySound(ScriptPath+ '\notif.wav');
wait(randomRange(50,800));
if not actionBar.unlock() then actionBar.lock();
DebugMouseClicks();
mouseOffClient(OFF_CLIENT_LEFT);

SendKeys(IntToStr(TroutSlot),10+Random(10),10+Random(10));
wait(RandomRange(100,300));
SendKeys(IntToStr(SalmonSlot),10+Random(10),10+Random(10));
result := true;
end else exit;
end;
end;

function DetectChat(): Boolean;
var
tempTPA: TPointArray;

begin
//finds the blue chat text in the chatbox area
result := findColors(tempTPA, 16755071, Chatbox.getChatArea());
if result then
begin
if not inRange(chatLength, length(tempTPA)-10, length(tempTPA)+10) and not silentmode then
begin
if debug then writeln('New chat detected. Attempting to store current chat length.');
PlaySound(ScriptPath+ '\notif_long.wav'); //if the stored chatlength different to the current chat length, then it plays a sound. If it's the same length as the stored one (i.e. no new messages) then it doesn't play a sound.
smartImage.DrawText(' CHATTER DETECTED ', Point(184,367), LoginChars, false, 47232);
end else if debug then writeln('Chatbox has not changed. No new chat detected.');
chatLength := length(tempTPA); //updates and stores the new chatLength
end else
begin
if debug then writeln('No chat detected.');
chatLength := 0;
smartImage.clearArea(IntToBox(183,366,440,381));
exit(false);
end;
end;

function TRSTabBackpack.countDTM_MOD(dtm: integer): integer; //yes....this was done before I knew about disabling SRL print.
var
i, l: integer;
begin
result := 0;

if (not self.open()) then
exit();

result := findItem(dtm, self.getSlotBoxes());

if (result = 0) then
begin
if not DisableCountLog then print('tabBackpack.countDTM(): Found no DTM matches', TDebug.SUB);
exit();
end;

if not DisableCountLog then print('tabBackpack.countDTM(): Counted ' + intToStr(result) + ' items');
end;

procedure AntiBan;
var
i: Integer;

begin
i := Random(99)
if debug then writeln('Antiban value: ' +IntToStr(i));
case i of
0..2: hoverSkill(SKILL_FISHING);
3..5: hoverRandomSkill();
6..99: Exit;
end;
mouseOffClient(OFF_CLIENT_RANDOM);
end;

function feathercheck: Boolean; //check if the yellow exists in this slot? Yellow from the number count.
var
tempTPA: TPointArray;

begin
result := findColors(tempTPA, 65535, tabBackpack.getSlotBox(1));
end;

function CountFish: Integer;
var
SCount, TCount: Integer;

begin
SCount := TabBackpack.CountDTM_MOD(SalmonDTM);
TCount := TabBackpack.CountDTM_MOD(TroutDTM);
Result := SCount + TCount;
end;

procedure progress;
var
TerminateIn, RanFor: Integer;

begin
Ticks := Ticks + 1; //do a store last known good xp thing like in fletcher
if Ticks > 10 then
begin
CurrentXP := chatBox.getXP();
XPTotal := Round(CurrentXP - StartXP);
XPperHour := Round(XPTotal * (3600.0 / (GetTimeRunning / 1000.0)));
Ticks := 0;
end;

RanFor := Round(GetTimeRunning/1000);
TerminateIn := Round(Runfor-Ranfor);

begin //onscreen stuff
smartimage.drawbitmap(progBG,Point(576,544));
smartImage.DrawText('Run Time: ' +msToTime(GetTimeRunning, TIME_SHORT), Point(582, 548), upchars, false, 47232);
smartImage.DrawText('Dropping at ' +IntToStr(DropAt) +' invCount', Point(582, 560), upchars, false, 47232);
smartImage.DrawText('Exp: ' +IntToStr(XPTotal) +' (' +IntToStr(XPperHour) +'/H)', Point(582, 571), upchars, false, 47232);
smartImage.DrawText('Status: ' +CurStatus, Point(583, 582), upchars, false, 47232);
end;

begin //debug box stuff
clearDebug();
writeln('Run Time: ' +msToTime(GetTimeRunning, TIME_SHORT));
writeln('Exp: ' +IntToStr(XPTotal) +' (' +IntToStr(XPperHour) +'/H)');
writeln('Status: '+CurStatus);
writeln('Dropping at approx. ' +IntToStr(DropAt) +' invCount');
writeln('Terminating in: ' +IntToStr(TerminateIn) +'s');
writeln('XP update in: ' +IntToStr(Round(10 - Ticks)));
If UseOpenGL then writeln('Using OpenGL colours!!') else writeln('Using DirectX colours!!');
end;

end;

procedure urncheckvalid;
var
x,y: integer;

begin
if findDTM(urnDTM,x,y,actionBar.getSlotBox(urnSlot)) then
begin
fullurn := True;
end;
end;

procedure urnfullcheck;
var
point: TPoint;
ChatBoxArea: TBox;
x,y: integer;

begin
urncheckvalid;
if fullurn then
begin
MouseBox(actionBar.getSlotBox(urnSlot),Mouse_Left,Mouse_Human); //Clicks on urn in actionbar
DebugMouseClicks();
wait(randomRange(100,750));
UrnsTeled := UrnsTeled + 1;
fullurn := false;
mouseOffClient(OFF_CLIENT_RANDOM);
wait(randomRange(1000,2000)); //time allow for urn to be teleported
end;
end;

function CloseControlsWindow(): Boolean;
var
closex, closey: integer;
begin
result := false;
if findDTM(ControlsWindow, closex, closey, IntToBox(759,22,783,44)) then
begin
mouseBox(IntToBox(759,22,783,44),MOUSE_LEFT,MOUSE_HUMAN); //Looks for and click on the 'x' to close menu
exit(true);
end;
end;

procedure dropfish;
var
TroutSlotTPA, SalmonSlotTPA: TPointArray;
x, y, DropTry: Integer;
DropTimer, FullTimer: TTimeMarker;
SalCount, TroCount: Integer;
LTroutValid, LSalmonValid, LSturgeonValid: Boolean;
LTroutTPA, LSalmonTPA, LSturgeonTPA: TPointArray;

label SkipAttFix;
begin
if BarbFishing then
begin
DropTimer.start();
if tabBackpack.count() >= DropAt then
begin
CloseControlsWindow;
repeat
//right click drop on slot until the slot shows inactive color (or active color is not shown)
if DropTimer.getTime > 15000+Random(6000) then break;
DetectChat();
CloseControlsWindow;
wait(randomRange(50,90));
LTroutValid := findColorsTolerance(LTroutTPA, LTroutCol, actionBar.getSlotBox(LTroutSlot), LTroutTol, colorSetting(2, LTroutHue, LTroutSat));
if not LTroutValid then break; //if not found, then break and moves onto next fish to drop
mousebox(actionBar.getSlotBox(LTroutSlot), mouse_right, mouse_human);
DebugMouseClicks();
wait(randomrange(50,150));
chooseOption.select(['rop'], 500);
DebugMouseClicks();
LTroutValid := findColorsTolerance(LTroutTPA, LTroutCol, actionBar.getSlotBox(LTroutSlot), LTroutTol, colorSetting(2, LTroutHue, LTroutSat));
if not LTroutValid then break; //if not found, then break and moves onto next fish to drop
until not findColorsTolerance(LTroutTPA, LTroutCol, actionBar.getSlotBox(LTroutSlot), LTroutTol, colorSetting(2, LTroutHue, LTroutSat));//LTroutValid;

repeat
//right click drop on slot until the slot shows inactive color (or active color is not shown)
if DropTimer.getTime > 15000+Random(6000) then break;
DetectChat();
CloseControlsWindow;
wait(randomRange(50,90));
LSalmonValid := findColorsTolerance(LSalmonTPA, LSalmonCol, actionBar.getSlotBox(LSalmonSlot), LSalmonTol, colorSetting(2, LSalmonHue, LSalmonSat));
if not LSalmonValid then break; //if not found, then break and moves onto next fish to drop
mousebox(actionBar.getSlotBox(LSalmonSlot), mouse_right, mouse_human);
DebugMouseClicks();
wait(randomrange(50,150));
chooseOption.select(['rop'], 500);
DebugMouseClicks();
LSalmonValid := findColorsTolerance(LSalmonTPA, LSalmonCol, actionBar.getSlotBox(LSalmonSlot), LSalmonTol, colorSetting(2, LSalmonHue, LSalmonSat));
if not LSalmonValid then break; //if not found, then break and moves onto next fish to drop
until not findColorsTolerance(LSalmonTPA, LSalmonCol, actionBar.getSlotBox(LSalmonSlot), LSalmonTol, colorSetting(2, LSalmonHue, LSalmonSat));//not LSalmonValid;

repeat
//right click drop on slot until the slot shows inactive color (or active color is not shown)
if DropTimer.getTime > 15000+Random(6000) then break;
DetectChat();
CloseControlsWindow;
wait(randomRange(50,90));
LSturgeonValid := findColorsTolerance(LSturgeonTPA, LSturgeonCol, actionBar.getSlotBox(LSturgeonSlot), LSturgeonTol, colorSetting(2, LSturgeonHue, LSturgeonSat));
if not LSturgeonValid then break; //if not found, then break and moves onto next fish to drop
mousebox(actionBar.getSlotBox(LSturgeonSlot), mouse_right, mouse_human);
DebugMouseClicks();
wait(randomrange(50,150));
chooseOption.select(['rop'], 500);
DebugMouseClicks();
LSturgeonValid := findColorsTolerance(LSturgeonTPA, LSturgeonCol, actionBar.getSlotBox(LSturgeonSlot), LSturgeonTol, colorSetting(2, LSturgeonHue, LSturgeonSat));
if not LSturgeonValid then break; //if not found, then break and moves onto next fish to drop
until not findColorsTolerance(LSturgeonTPA, LSturgeonCol, actionBar.getSlotBox(LSturgeonSlot), LSturgeonTol, colorSetting(2, LSturgeonHue, LSturgeonSat));//not LSturgeonValid;

DropAt := RandomRange(DropLower,DropUpper);
CloseControlsWindow;
DetectChat();
mouseOffClient(OFF_CLIENT_RANDOM);
wait(randomRange(1500,2300)); //wait time allowed for rod to reappear
//smallRandomMouse(); //buggy.
end;
end else
begin
if tabbackpack.isFull() then
begin
if debug then writeln('INVENTORY IS FULL, SEEING IF FULL DIALOGUE BOX IS FOUND');
if findDTM(InvFullDTM, x, y, intToBox(245,543,328,563)) then
begin
mousebox(intToBox(250,546,325,560), MOUSE_LEFT, MOUSE_HUMAN);
DebugMouseClicks();
if not ActionBarFix() then
begin
if not actionBar.unlock() then actionBar.lock();
FullTimer.start();
repeat
SendKeys(IntToStr(TroutSlot),30+Random(30),30+Random(30));
wait(randomRange(105,230));
SendKeys(IntToStr(SalmonSlot),30+Random(30),30+Random(30));
wait(randomRange(105,230));
until FullTimer.getTime > RandomRange(3000,5000);
end;
mouseOffClient(OFF_CLIENT_RANDOM); //use more dynamic method (get bounds of yellow button or the text inside it)
end else
begin
if debug then writeln('CANT FIND THE INVENTORY FULL DIALOGUE BOX');
end; //this is used to close the 'inventory full' notice if found.
end;

if tabBackpack.count() >= DropAt then
begin
CurStatus := 'Dropping fish';
SalCount := TabBackpack.CountDTM_MOD(SalmonDTM); //stores starting amount of each fish, will compare when the loop is done to see if the count stays the same.
TroCount := TabBackpack.CountDTM_MOD(TroutDTM); //if stays the same, the keys are likely to be stuck and so the actionbar will be unlocked.
DropTimer.start();
repeat
DropTry := DropTry + 1;

if DropTimer.getTime() > RandomRange(3500,4600) then break;
if findColorsTolerance(TroutSlotTPA, TroutSlotCol, actionBar.getSlotBox(TroutSlot), TroutSlotTol, colorSetting(2, TroutSlotHue, TroutSlotSat)) then
begin
SkipFix1 := False;
SendKeys(IntToStr(TroutSlot),10+Random(10),10+Random(10));
wait(randomRange(135,210));
end else SkipFix1 := True;

if findColorsTolerance(SalmonSlotTPA, SalmonSlotCol, actionBar.getSlotBox(SalmonSlot), SalmonSlotTol, colorSetting(2, SalmonSlotHue, SalmonSlotSat)) then
begin
SkipFix2 := False;
SendKeys(IntToStr(SalmonSlot),10+Random(10),10+Random(10));
wait(randomRange(135,210));
end else SkipFix2 := True; //bug may exist where the actionbar becomes stuck. Gotta fix this manually, or add detection for when it becomes stuck.

if DropTry > 4 then
begin
if inRange(TabBackpack.CountDTM_MOD(TroutDTM), TroCount, TroCount + 1) then
begin
if TroCount > 1 then actionbarfix;
goto skipattfix;
end;

if inRange(TabBackpack.CountDTM_MOD(SalmonDTM), SalCount, SalCount + 1) then
begin
if SalCount > 1 then actionbarfix;
goto skipattfix;
end;

SkipAttFix:
DropTry := 0;
end;
until CountFish = 0; //see actionBarFix from sdfLRCHopper
wait(randomRange(2100,2600));
DropAt := RandomRange(DropLower,DropUpper);
end;
end;
end;

procedure blindfindspot;
var
SpotTPA: TPointArray;

begin
if not findColorsTolerance(SpotTPA, FishSpotCol, msBounds, FishSpotTol, colorSetting(2, FishSpotHue, FishSpotSat)) then
begin
mainscreen.setAngle(MS_ANGLE_HIGH);
randomCompass(0, 360, false); //rotates camera screen if no spots are found
Rotated := True;
end;
end;

procedure findspot;
var
SpotTPA, RodTPA, StoredTPA: TPointArray;
ClosestPoint: TPoint;
WaitTimeout: TTimeMarker;
SplitSpot: T2DPointArray;
i: Integer;

label BeginWait;

begin
DropAt := RandomRange(DropLower,DropUpper);
claimSpinTicket();
dropfish;
if findColorsTolerance(RodTPA, RodCol, PlayerBox, RodTol, colorSetting(2, RodHue, RodSat)) then exit;
CurStatus := 'Finding spot';
progress;

for i:=0 to 100 do //repeats 100 times granting >500ms time to account for fishing spot animations
begin
findColorsTolerance(SpotTPA, FishSpotCol, msBounds, FishSpotTol, colorSetting(2, FishSpotHue, FishSpotSat));
StoredTPA.combine(SpotTPA);
wait(5);
end;
StoredTPA.clearEquals;
SplitSpot := StoredTPA.cluster(25,25);
SplitSpot.sortFromFirstPoint(MSCenter);
if CloseControlsWindow then exit;
for i := 0 to high(SplitSpot) do
begin
if debugspots then SmartImage.DrawBox(GetTPABounds(SplitSpot[I]));
MouseBox(GetTPABounds(SplitSpot[I]),mouse_move,Mouse_human);
if BarbFishing then
begin
if isMouseOverText(['spot'], 250) then
begin
fastClick(MOUSE_LEFT);
DebugMouseClicks();
goto BeginWait;
end;
end else
begin
if isMouseOverText(['Lure'], 250) then
begin
fastClick(MOUSE_LEFT);
DebugMouseClicks();
goto BeginWait;
end;
end;
end;
if length(SplitSpot) < 1 then blindfindspot; //if less than 1 spots (i.e. none) are found, then it rotates camera.
//if length is 0, then the for loop is negated anyway (high = 0)
BeginWait:
mouseOffClient(OFF_CLIENT_RANDOM);

CurStatus := 'Moving to spot';
progress;
WaitTimeout.start();
repeat
wait(250);
if debug then writeln('Wait find rod: ' +IntToStr(WaitTimeout.getTime) +'ms');
if WaitTimeout.getTime() > 5500 then exit;
until findColorsTolerance(RodTPA, RodCol, PlayerBox, RodTol, colorSetting(2, RodHue, RodSat)); //waits up to 5.5 seconds for rod to be found //WaitFunc causes error for some reason.

if Rotated then
begin //resets camera to north and highest angle if blind rotated to find spot.
minimap.clickCompass();
DebugMouseClicks();
mouseOffClient(OFF_CLIENT_RANDOM);
mainscreen.setAngle(MS_ANGLE_HIGH);
Rotated := False;
end;
CurStatus := 'Now Fishing!';
progress;
end;

procedure waitwhilefishing;
var
RodTPA: TPointArray;

begin
repeat
dropfish;
CurStatus := 'Waiting for fishies';
progress;
claimSpinTicket();
urnfullcheck;
DetectChat();
wait(1000);
until not findColorsTolerance(RodTPA, RodCol, PlayerBox, RodTol, colorSetting(2, RodHue, RodSat));
if not findColorsTolerance(RodTPA, RodCol, PlayerBox, RodTol, colorSetting(2, RodHue, RodSat)) then wait(RandomRange(200,500)); //slightly redundant.
end;

procedure mainloop();
var
RanFor: Extended;
baseSpeed: integer;

begin
findspot;
AntiBan();
waitwhilefishing;
AntiBan();

RanFor := GetTimeRunning/1000;
if (RanFor>RunFor) then
begin
WriteLn('Run limit reached! Terminating script');
Players[CurrentPlayer].Logout;
Terminatescript;
end;

begin //Vary the mouse speed every loop
baseSpeed := 35; //See VaryMS in fletcher script
mouseSpeed := baseSpeed + randomRange(8, 15);
end;
end;

begin
smartEnableDrawing := true;
clearDebug();
disableSRLLog := false; //true;
smartPlugins := ['d3d9.dll'];
setupSRL();
declarePlayers();
players[currentPlayer].login();
initscript;

repeat
mainloop;
until not players[currentPlayer].isActive;
end.

I was going to release this when I hit 99 (a while back) but didn't want to clean it up.

So here's a very unclean version of a script I wrote earlier this year so there's probably a lot of useless lines in there (much has improved since then I swear!; this was started before my granite miner). I added barbarian fishing support once I hit 85, averaging 90k-110k (with urns, of course). Regular fly fishing was neglected after 85, but should still work (logic is basically the same).

You will most definitely need to update colours everywhere since this was before colour updates + font changes.

Fly Fishing works best at the spot west of the fishing guild (~75k/hour with urns). It may or may not work at Barbarian village due to the spots being fairly far apart (it rotates the screen to find spots, rather than map walking).

Roko

2014-03-31 00:47:01



I was going to release this when I hit 99 (a while back) but didn't want to clean it up.

So here's a very unclean version of a script I wrote earlier this year so there's probably a lot of useless lines in there (much has improved since then I swear!; this was started before my granite miner). I added barbarian fishing support once I hit 85, averaging 90k-110k (with urns, of course). Regular fly fishing was neglected after 85, but should still work (logic is basically the same).

You will most definitely need to update colours everywhere since this was before colour updates + font changes.

Fly Fishing works best at the spot west of the fishing guild (~75k/hour with urns). It may or may not work at Barbarian village due to the spots being fairly far apart (it rotates the screen to find spots, rather than map walking).


Thanks alot mate it works perfectly! I'm just trying to change the time it takes to click on the fishing spot and it's gonna work 10/10. Just PM me your RSN I will give you the 5M gold :P. Thank you very much!

sdf

2014-03-31 00:54:10

From: Roko
Thanks alot mate it works perfectly! I'm just trying to change the time it takes to click on the fishing spot and it's gonna work 10/10. Just PM me your RSN I will give you the 5M gold :P. Thank you very much!


Keep the gold mate. I'm here to learn, not make money.

With regards to the time before clicking…I'm pretty sure I loop through 3 searches for the fishing spots to compensate for the ripple animation, you can just set the times after each search to longer random times (or shorter, depending on what you want).

Roko

2014-03-31 19:37:37

From: sdf
Keep the gold mate. I'm here to learn, not make money.

With regards to the time before clicking…I'm pretty sure I loop through 3 searches for the fishing spots to compensate for the ripple animation, you can just set the times after each search to longer random times (or shorter, depending on what you want).


Wow alright thanks a ton mate! Got it to work averaging 60k xps per hour without urns at salmon/trout. It works very well! :)