already fixed it, was my own fault. thank you
Printable View
Does anyone have the stuff for Lustrous Wisps. or could they be add please.
Boutta hit 99, gonna go for 120 24/7 and see how well I can do.
http://puu.sh/k0PRl/4e8b5830ca.jpg
Ill upload a fix for familiars when i hrt home, completely forgot
TRSMinimap.clickCompass(): Clicked compass
" : SPS Map does not exist - Downloading it now!
" : SPS Map has been download to Simba folder!
-- sps.init()
---- Path exists (C:\Simba\Includes\SPS\img\runescape_other\.png)
---- FATAL ERROR: sps.setup(): Unable to load map or bitmap to map failed
---- Succesfully freed SMART[6016]
Successfully executed.
Any ideas?
Wonderful Script :D Thanks!!!!
Why is the bitmap for the SPS map called '.png'? I think this wil definitely not work, did you change something in the naming of the downloaded maps? Also check if you have already a map with the same name and delete this one manually so it will be downloaded again.
tried didnt work
Which wisp are you trying to harvest? It looks like you didn't spell the wispname correctly, or you are trying to harvest a wisp that is not included in the script. At this moment the wisps included are: Glowing, Sparkling, Brilliant, Radiant, Luminous and Incandescent wisps.
thx
Yeah its mb, ive been working on a seren stone script.
With regards to this one, ill post my edits but be aware i will give no support for them, they worked for me for what i needed. I will post them in 6 hours when i get home
edit::
posted up code, this works with light familar, be sure to have extra scrolls, theres no failsafes if you run out of scrolls/restore potions (i never needed them)
[CODE] Yeah its mb, ive been working on a seren stone script.
With regards to this one, ill post my edits but be aware i will give no support for them, they worked for me for what i needed. I will post them in 6 hours when i get home
edit::
posted up code, this works with light familar, be sure to have extra scrolls, theres no failsafes if you run out of scrolls/restore potions (i never needed them)
Code:program MasterDivination;
{$DEFINE SMART}
{$I SRL-6/SRL.simba}
{$I SPS/LIB/SPS-RS3.simba}
//{$DEFINE TESTMODE} //For testing purposes only - leave commented out
{
Setup:
* Be at the divination spot you want
* Fill out DeclarePlayers (Lines 139-160)
* loginName := 'login name or email'; Your login name or email goes between the apostrophes
* password := 'password'; Your password goes between the apostrophes
* world := -1; Leave as -1 to go to a random world or set to a world of your choice
* integers[divLocation] := wispsRadiant; choose what wisps you want to train at. Format is wisps<WispName>
* integers[riftOption] := toExp; choose which of the 3 ways you want to use your memories (toEnergy, toExp, or toBonusExp)
* integers[minPlayTime] := 420; minimum time in minutes to play before breaking
* integers[maxPlayTime] := 480; maximum time in minutes to play before breaking
* integers[minBreakTime] := 300; minimum time in minutes to break before resuming
* integers[maxBreakTime] := 330; maximum time in minutes to break before resuming
* isActive := True; leave this as true
* Make sure you have your interface setup for typical SRL usage
* If you want to track xp gained and xp/hr, you must have an all type experience tracker or divination experience tracker over the chat bar (a la http://puu.sh/9IHD2/f9497c7587.png)
* Familiar Setup (Optional):
* Put Buff/Debuff bar over action bar (See thread for image)
* Put chosen familiar pouches and your choice of potion for restoring summoning points (summoning pot or super restore pot)
* Define which familiar you're going to use and the hotkeys of the afforementioned action bar slots in declarePlayers (default for pots is 1, default for pouches is 2)
Script Features:
* Customizable break system
* Fast detection of when we're done siphoning or depositing memories (kudos footballjds for some of his methods. check out his div script at https://villavu.com/forum/showthread.php?t=106925)
* Predictive clicking - this script clicks the rift while running towards it most of the time, which resulted in a huge xp/hr boost and is the main reason I'm even bothering publishing this script
* Antiban - I am very satisfied with the AntiBan I put in my scripts, and I think you will be too
* Any div spot - Works with any divination spot. Anyone with basic knowledge of color scripting and sps can set up whatever spot they want to train at
* The release version of this script will only have the level 80 and 85 spots. I'll add the others when I have time or someone requests them.
* If anyone makes maps and sets up colors for any spot that's not already here I'll put it in the script for others to use!
* Enriched wisp prioritization
* Guthix Cache support - will still click the rift when the color changes due to Guthixian Cache D&D
* Familiar support - Supports Light Creature and Nightmare Muspah familiar usage.
Credits:
* Footballjds - I straight up ripped a few ideas/methods off of him. Kudos to him. Check his divination script out at the villavu.com URL above!
* Ashaman - My antiban method is his (just modified a lot)
* i luffs yew - Lots of time spent on skype helping me optimize the script
* Clarity - Added familiar support
Known Bugs:
* XP and XP/Hr tracking some times messes up
* If this happens it will be obvious as soon as the first Report is printed. Just restart the script.
* The script will sometimes click the wisp it is harvesting while already harvesting
* I just need to adjust some timing in waitWhileSiphon(). If anything it's pretty human like, it's not really "botty" behavior so I may just leave it
* Level 30 spot has weird behavior
* It's only the level 30 spot, not going to make severe modifications to save someone a few hours of having to babysit the script
Spots Supported:
[ ] Pale [ ] Lustrous
[ ] Flickering [ ] Elder
[ ] Bright [x] Brilliant ^1
[x] Glowing ^2 [x] Radiant
[x] Sparkling [x] Luminous
[ ] Gleaming [x] Incandescent
[ ] Vibrant
^1: Needs enriched wisp values
^2: Odd behavior. Babysit til 40.
}
type TDiv = record
wispName, mapName, imgurURL, menuOption, hoverText: string;
color, tolerance, enrichedColor, enrichedTolerance: Integer;
hueMod, satMod, enrichedHueMod, enrichedSatMod: Extended;
siphonLoc, riftLoc: TPoint;
end;
type TRift = record
posA, posB, posC: TPoint;
end;
var
cDiv, riftDiv, cacheDiv: TDiv; //current div loc, rift color data
progressTimer: TTimeMarker;
const
//Players[].integers
divLocation = 0;
initialExp = 1;
nextBreak = 2;
minPlayTime = 3;
maxPlayTime = 4;
breakDuration = 5;
minBreakTime = 6;
maxBreakTime = 7;
riftOption = 8;
whichFamiliar = 9;
//rift options
toEnergy = 0;
toExp = 1;
toBonusExp = 2;
//Players[].booleans
timerStarted = 0;
breakTimerStarted = 1;
//Players[].strings
pouchHotkey = 0;
potionHotkey = 1;
//wisps
wispsNull = -1;
wispsPale = 0;
wispsFlickering = 1;
wispsBright = 2;
wispsGlowing = 3;
wispsSparkling = 4;
wispsGleaming = 5;
wispsVibrant = 6;
wispsLustrous = 7;
wispsElder = 8;
wispsBrilliant = 9;
wispsRadiant = 10;
wispsLuminous = 11;
wispsIncandescent = 12;
wispsCache = 13;
//action states
stateSiphon = 0;
stateToRift = 1;
stateDepositMemories = 2;
stateToWisps = 3;
resultNoWisps = -1;
resultWispMoved = 0;
resultSuccess = 1;
//familiars
familiarNone = 0;
familiarMuspah = 1;
familiarLight = 2;
procedure DeclarePlayers;
begin
setLength(players, 1);
with players[0] do
begin
loginName := '';
password := '';
world := -1;
integers[divLocation] := wispsIncandescent;
integers[riftOption] := toBonusExp;
integers[minPlayTime] := 400;
integers[maxPlayTime] := 425;
integers[minBreakTime] := 998;
integers[maxBreakTime] := 999;
isActive := True;
//Familiar settings (Optional - leave "familiarNone" if you don't want to use it)
integers[whichFamiliar] := familiarLight;
strings[potionHotkey] := '1';
strings[pouchHotkey] := '2';
end;
end;
function TDiv.getPoint(var point: TPoint): Boolean;
var
ATPA: T2DPointArray;
TPA: TPointArray;
tempCts: Integer;
begin
tempCts := GetToleranceSpeed;
SetColorToleranceSpeed(2);
//find enriched wisps:
if self.enrichedColor <> 0 then
begin
SetToleranceSpeed2Modifiers(self.enrichedHueMod, self.enrichedSatMod);
FindColorsTolerance(TPA, self.enrichedColor, mainscreen.getBounds, self.enrichedTolerance);
end;
ATPA := TPA.split(10);
ATPA.filterBetween(0,5);
//find normal wisps:
if (Length(ATPA) = 0) then
begin
SetToleranceSpeed2Modifiers(self.hueMod, self.satMod);
FindColorsTolerance(TPA, self.color, mainscreen.getBounds, self.tolerance);
ATPA := TPA.split(10);
ATPA.filterBetween(0,5);
end;
SetColorToleranceSpeed(tempCts);
SetToleranceSpeed2Modifiers(0.2, 0.2);
if High(ATPA) < 0 then Exit;
ATPA.sortFromMidPoint(mainscreen.getCenterPoint);
smartImage.debugATPA(ATPA);
point := ATPA[0].getMiddle;
Result := True;
end;
function TRift.getPoints: Boolean;
begin
if riftDiv.getPoint(self.posA) then
begin
wait(100);
Result := riftDiv.getPoint(self.posB);
end;
end;
//kudos footballjds
function energyColorCount: integer;
const
ylwClr = 65535;
begin
result := countColor(ylwClr, tabBackpack.getBounds);
end;
var
AB: TTimeMarker; //Antiban time marker
NextAB: Integer; //when to do next antiban
//ashaman88
//modded for timing + personilization
Procedure Antiban;
Var
I, ABMin, ETA, h, m, s: Integer;
Begin
if ((AB.time = -1) or (AB.getTime > NextAB)) then
begin
I := Random(600);
Case I Of
1..7:
Begin
hoverSkill(SKILL_DIVINATION);
Wait(GaussRangeInt(1000,10000));
TabBackpack.Open;
End;
8..20: mouseMovingObject;
21..100: SleepAndMoveMouse(GaussRangeInt(100,1500));
101..400:
Begin
MouseOffClient(Random(4));
Wait(GaussRangeInt(0, 2000));
End;
End;
AB.reset; AB.start;
NextAB := AB.getTime + 6000 + gaussRangeInt(2000, 6000);
end;
minimap.setAngle(MM_DIRECTION_NORTH);
ETA := NextAB - AB.getTime;
End;
(*
Author: Clarity
Description: Supports Muspah/Light familiars for increased XP rates.
*)
procedure checkFamiliar;
var
familiarDTM, enlightbDTM, enlightaDTM, pouchDTM, x, y: integer;
begin
case players[currentPlayer].integers[whichFamiliar] of
familiarNone: Exit;
familiarMuspah: pouchDTM := DTMFromString('mWAAAAHicY2FgYNBgZ2AwAGIjIJYF4oVMDAwTgHg1EM8G4n3rsoGqmOCYhwEVMKJhEAAAOQcFNA==');
familiarLight: pouchDTM := DTMFromString('mlwAAAHicY2dgYBAAYkEGCGAFYlkglgZicSBmBGIhIOYAYn4g5oSqA+kx6VwNJJmwYi6oXlIxFAAA4wYCSw==');
else
begin
print('Invalid setting for players[].integers[whichFamiliar]. Assuming you are not using any familiar.', TDebug.DEBUG);
Exit;
end;
end;
familiarDTM := DTMFromString('mbQAAAHicY2VgYDBhYWBwhmJ1KC5nYmDIBOJWIG6BsiduPsQQNU0SBUsyYAJGLBgMAItXCcY=');
if (findDTM(pouchDTM, x, y, tabBackpack.getBounds())) and (not findDTM(familiarDTM, x, y, actionbar.getBounds())) then
begin
if (actionbar.getSummoningPercent <= 30) then sendKeys(players[currentPlayer].strings[potionHotkey], 75, 150);
wait(150 + random(100));
sendKeys(players[currentPlayer].strings[pouchHotkey], 75, 150);
wait(150 + random(100));
end;
enlightbDTM := DTMFromString('mbQAAAHicY2VgYKhgY2Bog+JcIM4H4k1MDAxLgHg/FG8AYs2cdgZH56kM5hYpDLZ2eQzuHvUMkgyYgBELBgMAIsELLw==');
enlightaDTM := DTMFromString('mrAAAAHic42BgYDBkYWBwgGIVKAaJaQGxKRBbMjEw6AKxJxSD2PZAbAHE1kCskdXKEDVNEgWDxIw7VjFYzTrAIMmAHzASwDAAACZFDQU=');
if (findDTM(familiarDTM, x, y, actionbar.getBounds())) and (not findDTM(enlightaDTM, x, y, actionbar.getBounds())) then
begin
wait(200 + random(400));
actionbar.mouseIcon(AB_BAR_SUMMONING, MOUSE_LEFT);
sleepAndMoveMouse(250 + random(500));
wait(200 + random(375));
end;
freeDTM(familiarDTM);
freeDTM(pouchDTM);
freeDTM(enlightbDTM);
freeDTM(enlightaDTM);
end;
//familiar support added by Clarity.
procedure waitWhileSiphon;
var
countTimer: TTimeMarker;
waitUntil, invCount, ylwCount, xpCount: Integer;
p: TPoint;
begin
countTimer.start;
waitUntil := countTimer.getTime + RandomRange(3400, 4400);
invCount := tabBackpack.count;
ylwCount := energyColorCount;
xpCount := chatbox.getXPBar;
while (waitUntil > countTimer.getTime) do
begin
Antiban;
if (invCount <> tabBackpack.count) or (ylwCount <> energyColorCount) or (xpCount <> chatbox.getXPBar) then
begin
waitUntil := countTimer.getTime + RandomRange(2150, 2800);
invCount := tabBackpack.count;
ylwCount := energyColorCount;
xpCount := chatbox.getXPBar;
end;
checkFamiliar;
if tabBackpack.isFull then Exit;
if findTicket(p) then
fastClick(MOUSE_LEFT);
end;
end;
function TRift.depositMemories_Predict: Integer;
begin
if not self.getPoints then
Exit(resultNoWisps);
self.posC.x := round(self.posB.x + 2.5 * (self.posB.x - self.posA.x));
self.posC.y := round( self.posB.y + 2.5 * (self.posB.y - self.posA.y));
smartImage.clearArea(mainscreen.getBounds);
smartImage.debugATPA([[self.posB], [self.posC]]);
mouseSpeed := 30;
Mouse(self.posc.rand(RandomRange(-8, 8)), MOUSE_MOVE);
mouseSpeed := 20;
if isMouseOverText([riftDiv.wispName], 1200) then
begin
GetMousePos(self.posc.x, self.posc.y);
Mouse(self.posc, MOUSE_RIGHT);
if chooseOption.select([riftDiv.menuOption]) then Result := resultSuccess else Result := resultWispMoved;
minimap.waitFlag;
end;
if Result = resultSuccess then
waitWhileSiphon;
smartImage.clearArea(mainscreen.getBounds);
end;
procedure Report;
var
XP, XPHR, h, m, s, W: Integer;
L1, L2, L3: string;
begin
w := smartImage.getWidth;
smartImage.clearArea(IntToBox(592,517, w-1,555));
XP := chatbox.getXPBar - Players[0].integers[initialExp];
ConvertTime(progressTimer.getTime, h, m, s);
XPHR := Round(XP * 1000.0 * (3600.0 / (progressTimer.getTime+1)));
L1 := 'Worked: ' + ToString(h) + ' H, ' + ToString(m) + ' M, ' + ToString(s) + ' S';
L2 := 'XP: ' + ToString(XP);
L3 := 'XP/HR: ' + ToString(XPHR);
writeln([L1, L2, L3]);
smartImage.drawTextLines([L1, L2, L3], Point(592, 517), statChars, False, clYellow);
end;
procedure checkForImages(path, link, item: string);
{------------------------------------------------------------------------------)
Info: Downloads a file from the web and saves on computer. Made by Kevin.
(------------------------------------------------------------------------------}
var
progFile: longInt;
picName: string;
begin
picName := AppPath + path;
try
if not fileExists(picName) then
begin
writeLn(' " : ' + item + ' does not exist - Downloading it now!');
progFile := createFile(picName);
end else
begin
writeLn(' " : ' + item + ' already exists');
exit;
end;
closeFile(progFile);
progFile := rewriteFile(picName, false);
writeFileString(progFile, getPage(link));
writeLn(' " : ' + item + ' has been download to Simba folder!');
writeLn('');
finally
if (progFile > 0) then
closeFile(progFile);
end;
end;
procedure TDiv.init(whichDivLoc: Integer);
begin
case whichDivLoc of
wispsNull:
begin
writeln('Please fill out setup (Lines XX - XX)');
TerminateScript;
end;
wispsPale:
with self do
begin
end;
wispsFlickering:
with self do
begin
end;
wispsBright:
with self do
begin
end;
wispsGlowing:
begin
with self do
begin
wispName := 'lowing';
mapName := 'glowing_wisps';
imgurURL := 'http://i.imgur.com/xhA0nmR.png';
color := 15121988;
tolerance := 23;
hueMod := 0.23;
satMod := 1.03;
enrichedColor := 16639344;
enrichedTolerance := 5;
enrichedHueMod := 0.26;
enrichedSatMod := 0.25;
siphonLoc := Point(230, 130);
riftLoc := Point(208, 189);
menuOption := self.wispName;
end;
with riftDiv do
begin
wispName := 'Convert memories';
color := 6225811;
tolerance := 9;
hueMod := 0.30;
satMod := 0.00;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
wispsSparkling:
begin
with self do
begin
wispName := 'parkling';
mapName := 'sparkling_wisps';
imgurURL := 'http://i.imgur.com/OixbmCE.png';
color := 12691048;
tolerance := 24;
hueMod := 0.15;
satMod := 1.09;
enrichedColor := 15258754;
enrichedTolerance := 12;
enrichedHueMod := 0.22;
enrichedSatMod := 2.59;
siphonLoc := Point(140, 208);
riftLoc := Point(145, 176);
menuOption := self.wispName;
end;
with riftDiv do
begin
wispName := 'Convert memories';
color := 6617013;
tolerance := 6;
hueMod := 0.27;
satMod := 1.64;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
wispsGleaming:
with self do
begin
end;
wispsVibrant:
with self do
begin
end;
wispsLustrous:
begin
with self do
begin
wispName := 'ustrous';
mapName := 'Lustrous_test';
imgurURL := 'http://i.imgur.com/xuPEBM7.png';
color := 11176281;
tolerance := 23;
hueMod := 0.12;
satMod := 0.72;
enrichedColor := 16379058;
enrichedTolerance := 5;
enrichedHueMod := 0.62;
enrichedSatMod := 3.07;
siphonLoc := Point(154, 154);
riftLoc := Point(157, 137);
menuOption := self.wispName;
end;
with riftDiv do
begin
wispName := 'Convert memories';
color := 6617013;
tolerance := 6;
hueMod := 0.27;
satMod := 1.64;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
wispsElder:
with self do
begin
end;
wispsBrilliant:
begin
with self do
begin
wispName := 'rilliant';
mapName := 'brilliant_wisps';
imgurURL := 'http://i.imgur.com/ZsgzEqw.png';
color := 11904621;
tolerance := 24;
hueMod := 0.22;
satMod := 0.85;
siphonLoc := Point(65, 96);
riftLoc := Point(98, 127);
menuOption := self.wispName;
end;
with riftDiv do
begin
wispName := 'Convert memories';
color := 5961404;
tolerance := 8;
hueMod := 0.46;
satMod := 1.33;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
wispsRadiant:
begin
with self do
begin
wispName := 'adiant';
mapName := 'radiant_wisps';
imgurURL := 'http://i.imgur.com/OpQJUnB.png';
color := 10785888;
tolerance := 16;
hueMod := 0.08;
satMod := 0.62;
enrichedColor := 16379032;
enrichedTolerance := 8;
enrichedHueMod := 0.28;
enrichedSatMod := 1.38;
siphonLoc := Point(173, 117);
riftLoc := Point(137, 134);
menuOption := self.wispName;
end;
with riftDiv do
begin
wispName := 'Convert memories';
color := 5961404;
tolerance := 8;
hueMod := 0.46;
satMod := 1.33;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
wispsLuminous:
begin
with self do
begin
wispName := 'uminous';
mapName := 'luminous_wisps';
imgurURL := 'http://i.imgur.com/mFT7egr.png';
color := 12302168;
tolerance := 17;
hueMod := 0.21;
satMod := 0.67;
enrichedColor := 14675914;
enrichedTolerance := 9;
enrichedHueMod := 0.69;
enrichedSatMod := 1.98;
siphonLoc := Point(130, 108);
riftLoc := Point(181, 142);
menuOption := self.wispName;
end;
with riftDiv do
begin
wispName := 'Convert memories';
color := 7731672;
tolerance := 8;
hueMod := 0.32;
satMod := 0.22;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
wispsIncandescent:
begin
with self do
begin
wispName := 'ncandescent';
mapName := 'incandescent_wisps';
imgurURL := 'http://i.imgur.com/2dpR74S.png';
color := 11838064;
tolerance := 11;
hueMod := 0.08;
satMod := 1.24;
enrichedColor := 16048795;
enrichedTolerance := 8;
enrichedHueMod := 0.21;
enrichedSatMod := 2.48;
siphonLoc := Point(220, 107);
riftLoc := Point(187, 150);
menuOption := self.wispName;
end;
with riftDiv do
begin
wispName := 'Convert memories';
color := 5961404;
tolerance := 8;
hueMod := 0.46;
satMod := 1.33;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
wispsCache:
with self do
begin
wispName := 'Convert memories';
color := 14351230;
tolerance := 8;
hueMod := 0.50;
satMod := 0.69;
case Players[0].integers[riftOption] of
toEnergy: menuOption := 'to energy';
toExp: menuOption := 'to experience';
toBonusExp: menuOption := 'to enhanc';
end;
end;
end;
end;
function TPlayer.init: Boolean;
begin
cDiv.init(self.integers[divLocation]);
if not(self.login) then
Exit(False);
minimap.clickCompass;
mainscreen.setAngle(MS_ANGLE_HIGH);
mouseBox(mainscreen.getBounds, MOUSE_MOVE);
exitTreasure;
if self.integers[initialExp] = -1 then
self.integers[initialExp] := chatbox.getXPBar;
if not(self.booleans[timerStarted]) then
begin
progressTimer.start;
self.booleans[timerStarted] := True;
end;
if not(self.booleans[breakTimerStarted]) then
begin
self.integers[nextBreak] := progressTimer.getTime + RandomRange(self.integers[minPlayTime], self.integers[maxPlayTime]) * 60000;
self.booleans[breakTimerStarted] := True;
end;
result := isLoggedIn;
end;
procedure TPlayer.handleBreaks;
var
breakTimer: TTimeMarker;
ETA, h, m, s, w: Integer;
begin
if progressTimer.getTime > self.integers[nextBreak] then
begin
progressTimer.pause;
self.logout;
breakTimer.start;
self.integers[breakDuration] := breakTimer.getTime + RandomRange(self.integers[minBreakTime], self.integers[maxBreakTime]) * 60000;
while breakTimer.getTime < self.integers[breakDuration] do
begin
wait(1000);
ETA := self.integers[breakDuration] - breakTimer.getTime;
convertTime(ETA, h, m, s);
smartImage.clearArea(mainscreen.getBounds);
smartImage.drawTextLines(['Taking a Break', 'Time Before Resuming: ' + ToString(h) + ' Hours, ' + ToString(m) + ' Minutes, ' + ToString(s) + ' Seconds'], Point(10,10), statChars, False, clYellow);
end;
if not(self.init) then
begin
writeln('Failed to init player. Terminating.');
TerminateScript;
end;
progressTimer.start;
self.integers[nextBreak] := progressTimer.getTime + RandomRange(self.integers[minPlayTime], self.integers[maxPlayTime]) * 60000;
end;
ETA := self.integers[nextBreak] - progressTimer.getTime;
convertTime(ETA, h, m, s);
//writeln('Time Before Break: ' + ToString(h) + ' Hours, ' + ToString(m) + ' Minutes, ' + ToString(s) + ' Seconds');
w := smartImage.getWidth;
smartImage.clearArea(IntToBox(592,555, w-1,569));
smartImage.drawText('Time Before Break: ' + ToString(h) + ' H, ' + ToString(m) + ' M, ' + ToString(s) + ' S', Point(592, 555), statChars, False, clYellow);
smartImage.clearArea(mainscreen.getBounds);
end;
function actionState: Integer;
var
bagFull: Boolean;
begin
Result := -1;
bagFull := tabBackpack.isFull;
case bagFull of
True: if distance(sps.getPlayerPos, cDiv.riftLoc) <= 23 then Exit(stateDepositMemories) else Exit(stateToRift);
False: if distance(sps.getPlayerPos, cDiv.riftLoc) <= 16 then Exit(stateToWisps) else Exit(stateSiphon);
end;
end;
function TDiv.siphonWisp: Integer;
var
i: Integer;
p: TPoint;
begin
if not(self.getPoint(p)) then Exit(resultNoWisps);
mouseSpeed := 30;
Mouse(p.rand(RandomRange(-8, 8)), MOUSE_MOVE);
mouseSpeed := 20;
if isMouseOverText([self.wispName], 100) then
begin
GetMousePos(p.x, p.y);
Mouse(p, MOUSE_RIGHT);
if chooseOption.select([self.menuOption]) then Result := resultSuccess else Result := resultWispMoved;
minimap.waitFlag;
end;
if Result = resultSuccess then
waitWhileSiphon;
smartImage.clearArea(mainscreen.getBounds);
end;
function TRSMinimap.isPlayerMoving(shiftInterval: integer = 500): boolean; override;
var
pos1, pos2: TPoint;
t: Integer;
begin
pos1 := sps.getPlayerPos;
t := GetSystemTime + shiftInterval;
while (GetSystemTime < t) do
begin
pos2 := sps.getPlayerPos;
if (pos1.x <> pos2.x) or (pos1.y <> pos2.y) then Exit(True);
end;
end;
function TRSMinimap.waitPlayerMoving(shiftInterval: integer = 500; maxTime: integer = 20000): boolean; override;
var
t: LongWord;
tempRift: TRift;
pos: TPoint;
begin
result := false;
t := (getSystemTime() + maxTime);
print('Waiting while the player is moving...', TDebug.SUB);
while (getSystemTime() < t) do
begin
wait(randomRange(10, 20));
if (actionState = stateToRift) or (actionState = stateDepositMemories) then
begin
pos := sps.getPlayerPos;
if distance(pos, cDiv.riftLoc) < 20 then
if tempRift.depositMemories_Predict = 1 then
Exit(True);
end;
if (not self.isPlayerMoving(shiftInterval)) then
exit(true);
end;
end;
function TSPSArea.walkPath(path: TPointArray; waitMoving: Boolean = True; shiftInterval: Integer = 500): boolean; override;
var
p, lastPos, mmPoint: TPoint;
t, fails, h, l, i: integer;
begin
result := false;;
h := high(path);
l := low(path);
t := (getSystemTime() + randomRange(15000, 20000));
repeat
if (not isLoggedIn()) then
exit(false);
p := self.getPlayerPos();
for i := h downto l do
if (SPS_PosToMM(path[i], p, mmPoint)) then
begin
if (distance(minimap.getCenterPoint(), mmPoint) >= 10) then
begin
if (spsMultiMouse) then
multiClick(mmPoint, 25, 3)
else
mouse(mmPoint, MOUSE_LEFT);
if (minimap.isFlagPresent(100 + random(50))) then
if minimap.waitPlayerMoving then Exit(True);
end;
t := (getSystemTime() + randomRange(15000, 20000));
result := (i = h) or (distance(path[i], path[h]) < 18);
if (result) then
break(2)
else
break();
end;
if (p.x = lastPos.x) and (p.y = lastPos.y) then
inc(fails);
lastPos := p;
until (getSystemTime() > t) or (fails > 5);
if (minimap.isFlagPresent()) or (minimap.isPlayerMoving()) then
minimap.waitPlayerMoving();
print(self.getName()+'.walkPath(): result = '+boolToStr(result));
end;
function TRSMinimap.walkToYellowDots: Boolean;
var
TPA: TPointArray;
ATPA: T2DPointArray;
p: TPoint;
begin
if not findColorsTolerance(TPA, 917247, self.getBounds, 10) then
Exit;
ATPA := ClusterTPA(TPA, 20);
SortATPASize(ATPA, True);
smartImage.clearArea(minimap.getBounds);
smartImage.debugATPA(ATPA);
mouse(ATPA[0].getMiddle, mouse_Left);
result := self.waitPlayerMoving;
end;
var
failCount: Integer;
procedure mainLoop;
var
timeOutTimer: TTimeMarker;
currentState: Integer;
begin
Report;
Players[0].handleBreaks;
if not(isLoggedIn) then
if not(Players[0].init) then
begin
writeln('failed to init player');
TerminateScript;
end;
currentState := actionState;
case currentState of
stateSiphon:
begin
timeOutTimer.start;
while timeOutTimer.getTime < 3000 do
if cDiv.siphonWisp = 1 then Exit else wait(RandomRange(100, 200));
inc(failCount);
end;
stateToRift:
begin
timeOutTimer.start;
while timeOutTimer.getTime < 800 do
case riftDiv.siphonWisp of
resultNoWisps:
begin
sps.blindWalk(cDiv.riftLoc);
Exit;
end;
resultWispMoved: Wait(randomRange(100,200));
resultSuccess: Exit;
end;
inc(failCount);
end;
stateDepositMemories:
begin
timeOutTimer.start;
while (timeOutTimer.getTime < 3000) do
if riftDiv.siphonWisp then Break else Wait(randomRange(100, 200));
inc(failCount);
end;
stateToWisps:
begin
timeOutTimer.start;
while timeOutTimer.getTime < 800 do
case cDiv.siphonWisp of
resultNoWisps:
begin
sps.blindWalk(cDiv.siphonLoc);
Exit;
end;
resultWispMoved: Wait(randomRange(100,200));
resultSuccess: Exit
end
inc(failCount);
end;
end;
if failCount >= 5 then
begin
writeln('failed too many times, trying backup procedures');
currentState := actionState;
case currentState of
stateSiphon: if sps.blindWalk(cDiv.siphonLoc) then failCount := 0;
stateDepositMemories: if cacheDiv.siphonWisp = resultSuccess then failCount := 0;
stateToRift:
if (players[0].integers[divLocation] <> wispsRadiant) then
begin
if sps.blindWalk(cDiv.riftLoc) then failCount := 0;
end else
begin
MouseBox(mainscreen.getBounds, mouse_Right);
options.selectOption(['alk']);
end;
end;
if (failCount >= 10) then if minimap.walkToYellowDots then failCount := 0;
end;
end;
{$IFDEF TESTMODE}
procedure testProc;
var
pos: TPoint;
d: Integer;
begin
minimap.walkToYellowDots;
Wait(500);
smartImage.clear;
end;
{$ENDIF}
begin
smartEnableDrawing := True;
disableSRLDebug := False;
setupSRL;
DeclarePlayers;
cacheDiv.init(wispsCache);
if not(Players[0].init) then
begin
writeln('Failed to init player. Terminating.');
TerminateScript;
end;
players[0].integers[initialExp] := chatbox.getXPBar;
checkForImages('Includes/SPS/img/runescape_other/' + cDiv.mapName + '.png', cDiv.imgurURL, 'SPS Map');
sps.setup(cDiv.mapName, RUNESCAPE_OTHER);
{$IFNDEF TESTMODE}
while(True) do mainLoop;
{$ELSE}
while(True) do testProc;
{$ENDIF}
end.
Script doesn't seem to function properly at brilliants for me. Will collect and inventory and then runs towards the rift, but fails to find the rift. Not really sure what the issue is here, but i'm thinking it's just a matter of adjusting the coordinates that the script uses to find the rift. Anyone having a similar issue or could give insight on how to fix?
Does it reach the location of the rift? In that case it wont help to change the coordinates. Can someone confirm if this script deals with change in color during active cache of Guthix memories? If it doesn't, maybe that can be the problem?
It runs near the rift, but because the script forces the camera to be constantly facing north, it sometimes cant find the rift due to camera position. If the script allowed for the camera to be angled a smidge, it when then see the rift. This is why i suggested maybe editing the location, so it's guaranteed to find the rift due to camera.
Guthix cache has nothing to do with this.
Any idea how I can fix this error? I saw a post about this mentioned before but I didn't see a fix.Code:---- TPlayer.loginToLobby(): True
---- TRSLobby.getCurrentTab(): Current tab is 0
---- TRSLobby.quickSelectWorld(): Found worlds [-1, -1, -1]
---- TRSLobby.getCurrentTab(): Current tab is 0
---- TRSLobby.getCurrentTab(): Current tab is 0
---- TRSLobby.getCurrentTab(): Current tab is 1
---- TRSLobby.openTab(): Result = True
---- TRSLobby.getCurrentTab(): Current tab is 1
---- TRSLobbyWorlds.selectWorld()
------ TRSLobby.getCurrentTab(): Current tab is 1
-------- TRSLobbyWorlds.getCurrentWorld(): Current world is 72
------ TRSLobby.getCurrentTab(): Current tab is 1
------ Scrolled to and found world 30
------ Selected world 30
---- TRSLobbyWorlds.selectWorld(): True
------ TRSLobby.findPlayButton(): result = True
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
---- Succesfully freed SMART[4892]
Successfully executed.
All of the above are present/setup like that. The script was working for a period of time, I used it from 96-99 divination, and once I hit 99 and went to restart it, it started giving me the Playbutton error again. Here's an updated log just after I doublechecked everything you told me to check
EDIT: it might be worthwhile to note that I get into the game completely fine, my UI is setup correctly, as it has always been; but it just decides not to work once I'm in game. I've tried both the updated versions of master divination, as well as the edited version that bucko posted, and both give me the same results
Code:---- TPlayer.loginToLobby(): True
---- TRSLobby.getCurrentTab(): Current tab is 0
---- TRSLobby.quickSelectWorld(): Found worlds [48, 30, -1]
---- TRSLobby.quickSelectWorld(): Clicked world 30. [Index 1]
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
------ TRSLobby.findPlayButton(): result = False
---- Succesfully freed SMART[12176]
Successfully executed.
http://puu.sh/kazoY/ec244c62cc.jpg
Is my login screen. The worlds that I have saved on the bottom right on quickworlds, one of them is the world I use for botting divination.
EDIT:You'll notice it finds the PlayButton, succesfully clicks it, logs in, but then proceeds to be unable to find the PlayButton?Code:-- TPlayer.login()
---- TPlayer.loginToLobby():
-------- __setInputBoxes(): Set username and password boxes
------ Login Attempt 1: Winner21 ()
-------- Entering username...
-------- Entering password...
-------- Saving screenshot: IP_address.png
---- TPlayer.loginToLobby(): True
---- TRSLobby.getCurrentTab(): Current tab is 0
---- TRSLobby.quickSelectWorld(): Found worlds [48, -1, -1]
---- TRSLobby.getCurrentTab(): Current tab is 0
---- TRSLobby.getCurrentTab(): Current tab is 0
---- TRSLobby.getCurrentTab(): Current tab is 1
---- TRSLobby.openTab(): Result = True
---- TRSLobby.getCurrentTab(): Current tab is 1
---- TRSLobbyWorlds.selectWorld()
------ TRSLobby.getCurrentTab(): Current tab is 1
-------- TRSLobbyWorlds.getCurrentWorld(): Current world is 72
------ TRSLobby.getCurrentTab(): Current tab is 1
------ Scrolled to and found world 30
------ Selected world 30
---- TRSLobbyWorlds.selectWorld(): True
------ TRSLobby.findPlayButton(): result = True
------ TRSLobby.findPlayButton(): result = False
---- Succesfully freed SMART[7940]
Successfully executed.
Yes, in that case editing the rift location should work. Here you can find how to change the location (if you dont already know ;) )
http://puu.sh/kg6gI/3b32818753.jpg
Converting to Energy for 26 H on 2 "maxed" accounts. TYBG
Just started the script, so far not bad, I'll update in an hour or two with a progress report, thanks!
Does anyone have the info need to add Lustrous Wisps? Im at 74 Div and they would be a big help.
How would I go about adding elder energy support, I know I would have to make a map area, rename some of the "wisp names". I will be lost into figuring out map locations- can someone point me to a page that explains how to locate your character. thanks
I'd imagining copying the previous location script content etc and then adjusting the SPS map and colours as well as labels.
Try this link https://villavu.com/forum/showthread...pting+tutorial
Script just keeps saying typing username and pass and never does.
You didnt fill out the information within the script to make it log in..
I tried running this today and it ran great my only problem is that when it goes to convert the energies for luminous energies, it runs all around the desert and cant find the energy rift :/
I know this was a while ago for you now but would you mind posting a picture of where exactly the buff bar needs to be placed? Ive checked the entire thread and noone posted a picture to show where exactly it needs to be and I cant seem to find a place on the action bar that will work with the nightmare muspah, although ive switch to light creatures at this point anyway
I don't really play RS any more since I sold my account and started working. So I can't make a screenshot for it, but if you search the earlier pages of this thread I believe @Clarity; posted a nice picture.
If it wasn't in this thread it was footballjds's one
Gonna ask this here just in case anyone knows how to fix it, but I've been getting this error as of yesterday despite the script working perfectly fine for me before:
Is there a way to resolve this?Quote:
-- sps.getPlayerPos(): result = {X = 206, Y = 122}, took 62 ms
-- isMouseOverText()
---- Current mouse-over text: ""
---- Current mouse-over text: ""
---- Current mouse-over text: ""
---- Current mouse-over text: ""
-- isMouseOverText(): False
-- isMouseOverText()
---- Current mouse-over text: ""
---- Current mouse-over text: ""
---- Current mouse-over text: ""
-- isMouseOverText(): False
-- isMouseOverText()
---- Current mouse-over text: ""
---- Current mouse-over text: ""
---- Current mouse-over text: ""
---- Current mouse-over text: ""
-- isMouseOverText(): False
-- isMouseOverText()
---- Current mouse-over text: ""
---- Current mouse-over text: ""
---- Current mouse-over text: ""
-- isMouseOverText(): False
-- isMouseOverText()
---- Current mouse-over text: ""
---- Current mouse-over text: ""
---- Current mouse-over text: ""
-- isMouseOverText(): False
[Worked: 0 H, 2 M, 35 S, XP: 2544, XP/HR: 58831]
-- sps.getPlayerPos(): result = {X = 206, Y = 122}, took 78 ms
If the script is working dw about it. That's just verbose logging.
Guess I should of explained myself a bit more:
Start script>Everything works fine, harvests wisps and deposits memories>Then when the invy is empty after depositing memories, it just stands there giving that error
Edit: Interesting... Seems that the script was detecting my outfit as a wisp lol. Which is weird cause I've had the same outfit for months and never experienced this issue till yesterday.. Well thank God I found this issue! :D
*FIXED* I was getting the below error and all I had to do was create a folder in SPS/img for runescape_other and it set right to work after that.
------ Dynamic interfaces have been set.
-- TPlayer.login(): True
-- TRSChooseOption.__select():
---- Options found: [Face NoMh, Face South, Cancel]
---- Found option "Face No" in "Face NoMh"
-- TRSChooseOption.__select() result = True
---- minimap.mouseOffCompass(): Succesfully moved mouse off of compass
---- TRSMinimap.clickCompass(): Clicked compass
-- ERROR: TRSChatBox.getXP(): Failed to find text to read
" : SPS Map does not exist - Downloading it now!
CreateFile - Exception. Could not create file: C:\Users\****\Desktop\SMART\Simba\Includes/SPS/img/runescape_other/glowing_wisps.png
Error: Invalid FileNum passed: -1 at line 391
Execution failed.
The following bitmaps were not freed: [Minimap Mask, SMART Debug Image]
File[C:\Users\****\Desktop\SMART\Simba\Includes\SRL-6/logs/SRL log (20-10-15 at 12.26.03 AM).txt] has not been freed in the script, freeing it now.
Thanks! I got 99 div with this script from 80. I have been using it for around 7 to 13 hours a day.
I got 99 about a month ago and still not banned so this scripts is very trustworthy!