Obscurity
2015-01-16 19:03:24
10 Year(s)
Are you affilated in anyway with Jagex LTD?
No
Were you Referred to SRL?
Clarity
What is your general programming knowledge?
I used to program as a career. I've worked with multiple botting communities. PowerBot - in its early stages, long before 2010 - and RSBuddy.
I suppose the most notable employment would be Symantec. However, after leaving that position, I decided I didn't want my paycheck to rely on my computer activities and decided to keep it as a hobby. Since then, I've designed software with impressive download counts and great critiques. Clarity would be more then happy to vouch that this claim is legitimate. Then again, I suppose the admins already know who I am based off of my registered e-mail address and previous login name.
All that said, my programming knowledge is vast. Web design is probably my biggest hobby, but have scripted in everything from AHK_L, JavaScript, PHP, Python, and VB - back in my days of writing hacks for FPSs. I've also programmed in C, C++, C#, Java, etc. Though, my specialties, or my preferences, are C++ and Java.
Are you a member of any other communities?
Nothing botting related. Sythe is interesting to read through from time to time - but ever since my time in PowerBot, I primarily stick to fansites.
I occasionally revisit PowerBot, Sythe, and a few other botting communities and marketplaces. These usually last no longer then a quick read-through. Other then that, I'm rather active in a number of popular fansites.
Tell us about yourself…
From: Obscurity
I'd give you my first name, but it's rather unique and widely recognized in RuneScape communities. So, I suppose you're just going to have to call me Obscurity!
Clarity is one of my best friends. We been through many ups and downs and dragged each other through all of it. He's the reason I began to gain interest in Simba and SMART. In-fact, most of my libraries are inspired by him.
Apart from PC activities, I work 72 hours a week doing body work on new vehicles straight off Chrysler and Ford's assembly line. Ripping them apart has a kind of sick satisfaction to it. Though, a new opportunity arose this week which may lead me into doing CNC.
My list of hobbies is small. Not only does working 72 or more hours a week leave me with little time for anything, I injured myself in a skiing accident several years ago which left me disabled, which cost me the life I had and loved. So, now that I've lost my BMX sponsorships and can no longer play, well, any sports… This bloody PC takes up most of my time.
Please show us one (or multiple) of your scripts.
{
The only current script, if you can call it that, that I've released publicly is my obscurityLibraryUpload. It can be found here:
https://villavu.com/forum/showthread.php?t=110653
Now when you read this, your reaction is going to be to click on the big-red deny button. Hear me out. I don't like to write and design full scripts for the public. For example, full fighters, full fletchers, etc. I believe there's power in knowledge, so I like to help people. This is the reason for my obscurityLibraryUpload.
Teach people. Help them. Give them the building-blocks they need to be great and push each other even further.
If I was an SRL member, I'd be able to help them with their scripts, provide the libraries they need, and learn from them just as they'd hopefully do from me.
I've tried to upload via the attachment button below, but I get a permission error. If you'd like anything more from me, either contact me on here or Skype: obscuritySRL@outlook.com.
Cheers!
}Edit:
Since a script was still requested, despite my library, here's a Pest Control bot.
None of my bots require a specific setup. It'll find what it needs where ever it is. Though, you won't need your inventory or any other windows then these:

Set up with mage or range or melee, set to momentum or revolution. Add your IDs to the top of the script.
Stand near the gangplank of the boat you want to play at and click start.
program pestControl;
{$DEFINE SMART}
{$include_once Obscurity/obscurityLibraryUpload.Simba}
//const
var //~ Standing (Sheathed), Combat , Standing (Unsheathed)
playerModelID:tCardinalArray=[2588959158, 2781203163, 2303710895];
__glModelArray:tCardinalArray;
__glModelCombatArray:tCardinalArray=[
1936388964,//~ Aggression Marker
829735681,//~ Retaliating Target Marker
1452224228 //~ Target Marker
];
__glModelPestControlArray:tCardinalArray=[
2101792634,//~ 1st Boat tile
3523937904,
457369804,
940746976,//~ Battlemage boots
617765920,//~ Brawler
3927121664,//~ Center
4390934,
1672926783,//~ Damage
1731643360,//~ Defiler
2892440677,//~ Gangplank
1755262684,//~ Intermediate flag
2285625653,//~ Portal
3489785670,//~ Ravager
3915285997,//~ Shifter
2899052740,//~ Spinner
3360933869,//~ Squire Chat
1266358294,//~ Stairs
1186257877,//~ Stairs rubble
2512205554,
2782989724,//~ Torcher
432722987,//~ Trickster boots
3341867181,//~ Vanguard boots
3040129356,//~ Veteran Flag
4125004970 //~ Void Knight
];
__glTextureArray:tIntegerArray;
__glTextureChatArray:tIntegerArray=[
183600 //~ Continue
]; //
__glTextureInterfaceArray:tIntegerArray=[
12240,//~ Background
12664320,
13293,
20400,
228480,
236640,
24480,
263160,
28550,
3060,
3084480,
3786240,
4080,
57120,
65790,
714000,
85680,
16320,
104101,//~ Destroyed portal
334815 //~ Right click background
];
__glTextureMapArray:tIntegerArray=[
3786240,//~ Background
420,//~ Close:World Map
147839,//~ Compass
147885,//~ Compass
237147,//~ Corner
386460,//~ Corner
386611,//~ Corner
3570,//~ Dot
1275,//~ Flag
37222,//~ Needle
17107,//~ Run Mode:Off
63371 //~ World map
];
arrayBoot,
arrayDamageIcon,
arrayFlag,
arrayGangPlank,
arrayMonster,
arraySquire,
arrayTarget:glModelArray;
arrayDestroyedPortal:glTextureArray;
canAttack,
canCrossGangplank,
canMove,
canNudgeMouse,
canRotateCamera,
canRun,
canSelectBoots:countDown=[0];
modelArray:glModelArray;
textureArray:glTextureArray;
procedure doNothing;
begin
obs('@doNothing');
end;
procedure nudgeMouse;
begin
obs('@nudgeMouse');
obsNudgeMouse;
canNudgeMouse.setTime(random(30000));
end;
procedure rotateCamera;
begin
obs('@rotateCamera');
if randomChance(25) and (not textureArray.extractID([147839,147885]).isEmpty()) then
mouse(textureArray.extractID([147839,147885])[0].randomizePointEllipse(33),1)
else
obsMakeCompassDeg();
canRotateCamera.setTime(random(120000));
end;
procedure buildVariables;
begin
modelArray:=glGetModels(__glModelArray);
mouseSpeed:=random(50,75);
textureArray:=glGetTextures(__glTextureArray);
arrayBoot:=modelArray.extractID([940746976,432722987,3341867181]);
arrayDamageIcon:=modelArray.extractID(1672926783);
arrayFlag:=modelArray.extractID([1755262684,3040129356]);
arrayGangPlank:=modelArray.extractID(2892440677);
arrayMonster:=modelArray.extractID([617765920,1731643360,3489785670,3915285997,2899052740,2782989724]);
arraySquire:=modelArray.extractID(3360933869);
arrayTarget:=modelArray.extractID([829735681,1452224228]);
end;
procedure selectBoots;
begin
obs('@selectBoots');
if randomChance(15) then
obsClickOption(modelArray.extractID([940746976,432722987,3341867181])[random(modelArray.extractID([940746976,432722987,3341867181]).indexes)].randomizePointEllipse(30),'Select')
else
mouse(modelArray.extractID([940746976,432722987,3341867181])[random(modelArray.extractID([940746976,432722987,3341867181]).indexes)].randomizePointEllipse(30),1);
wait(random(250));
end;
procedure crossGangPlank;
var
clickPoint:tPoint;
currentAngle:single;
begin
obs('@crossGangPlank',true);
if ((currentAngle:=obsCompassDeg(textureArray))<270) or (currentAngle>360) then
obsMakeCompassDeg('north-east',45)
else if (abs(obsCompassHeight()-25)>5) then
obsMakeCompassHeight(25)
else if canCrossGangPlank.isFinished() then
begin
clickPoint:=modelArray.extractID(playerModelID)[0].closest(modelArray.extractID(2892440677)).randomizePointEllipse(30);
mouseSpeed:=mouseSpeed*2;
if (not textureArray.extractID(183600).isEmpty()) and randomChance(10) then
begin
if randomChance(5) then
mouse(textureArray.extractID(183600)[0].randomizePoint(80,21),1)
else
sendKeys(' ',60+random(60),60+random(60));
end
else if randomChance(5) then
obsClickOption(clickPoint,'Cross Gangplank')
else
mouse(modelArray.extractID(playerModelID)[0].closest(modelArray.extractID(2892440677)).randomizePointEllipse(30),1);
canMove.setTime(random(30000));
canCrossGangplank.setTime(random(250));
end;
end;
procedure waitForGameToStart;
begin
obs('@waitForGameToStart');
if canMove.isFinished() then
begin
mouse(modelArray.extractID(playerModelID)[0].toPoint().closest(modelArray.extractID([2101792634,3523937904,457369804]),random(floor(modelArray.extractID([2101792634,3523937904,457369804]).indexes/2))).randomizePointEllipse(30),1);
canMove.setTime(random(180000));
end;
end;
procedure startGame;
var
clickPoint,
userPoint:tPoint;
clientHeight,
clientWidth:integer;
begin
obs('@startGame');
if canRun.isFinished() then
begin
if randomChance(5) then
begin
getClientDimensions(clientWidth,clientHeight);
if obsMakeCompassDeg('south') then
while true do
begin
clickPoint.x:=random(clientWidth);
clickPoint.y:=random(clientHeight div 2);
if clickPoint.isBehindInterface(textureArray) then
continue;
mouse(clickPoint,1);
canRun.setTime(random(2500));
break;
end;
end
else
obsMiniMapClickAngle('south');
canRun.setTime(random(5000));
end;
end;
procedure rotateToSeeMonsters;
var
currentAngle,
newAngle:single;
begin
obs('@rotateToSeeMonsters');
currentAngle:=obsCompassDeg(textureArray);
newAngle:=currentAngle+random(-135,135);
if (newAngle>360) then
newAngle:=newAngle-360;
obsMakeCompassDeg(newAngle);
end;
procedure lookForMonsters;
var
clickPoint,
mapMiddle:tPoint;
clientHeight,
clientWidth,
dotArrayMaxIndex,
furthestAngle:integer;
dotArray:glTextureArray;
dotPosition,
furthestMapDot:tPoint;
index,
maxIndex:cardinal=0;
mapBounds:tBox;
begin
obs('@lookForMonsters');
getClientDimensions(clientWidth,clientHeight);
if obsLocalMap(true).y<70 then
begin
if randomChance(10) then
begin
obsMakeCompassDeg('south',90);
while true do
begin
clickPoint.x:=random(clientWidth);
clickPoint.y:=random(clientHeight div 2);
if clickPoint.isBehindInterface(textureArray) then
continue;
mouse(clickPoint,1);
canRun.setTime(random(2500));
break;
end
end
else
obsMiniMapClickAngle('south',90);
canRun.setTime(random(5000));
end
dotArray:=textureArray.extractID(3570);
if (not dotArray.isEmpty()) then
for index to (maxIndex:=dotArray.maxIndex()) do
begin
dotPosition:=dotArray[maxIndex-index].obsLocalMap(true);
if dotPosition.y<75 then
dotArray.delete(maxIndex-index);
end;
if canRun.isFinished() then
begin
if randomChance(10) or dotArray.isEmpty() then
begin
while true do
begin
clickPoint:=point(random(clientWidth),random(clientHeight div 2));
if clickPoint.isBehindInterface(textureArray) then
continue;
mouse(clickPoint,1);
canRun.setTime(random(5000));
break;
end;
end
else
begin
mapBounds:=obsMiniMapBounds(textureArray);
mapMiddle.x:=round(mapBounds.x1+mapBounds.width()/2);
mapMiddle.y:=round(mapBounds.y1+mapBounds.height()/2);
furthestMapDot:=mapMiddle.furthest(dotArray);
furthestAngle:=360-round(arcTan2(furthestMapDot.y-mapMiddle.y,furthestMapDot.x-mapMiddle.x)*180/pi)-90;
furthestAngle:=(furthestAngle-floor(furthestAngle/360)*360);
obsMiniMapClickAngle(textureArray,furthestAngle,15,false);
canRun.setTime(random(10000));
end;
end;
end;
procedure attackMonsters;
var
clickPoint:tPoint;
begin
obs('@attackMonsters');
if canAttack.isFinished() then
begin
mouseSpeed:=mouseSpeed*2;
clickPoint:=modelArray.extractID(playerModelID)[0].toPoint().closest(modelArray.extractID([617765920,1731643360,3489785670,3915285997,2899052740,2782989724])).randomizePointEllipse(30);
clickPoint.y:=clickPoint.y-30;
if randomChance(10) then
obsClickOption(clickPoint,'Attack')
else
mouse(clickPoint,1);
if textureArray.extractID(1275).isEmpty() then
canAttack.setTime(random(2500))
else
canAttack.setTime(random(750));
end;
end;
procedure mainLoop;
var
action:procedure();
begin
buildVariables;
action:=@doNothing;
if modelArray.extractID(playerModelID).isEmpty() then
obs('playerModelID was not found...',true)
else if canNudgeMouse.isFinished() then
action:=@nudgeMouse
else if canRotateCamera.isFinished() then
action:=@rotateCamera
else if (not arrayBoot.isEmpty()) and (arrayBoot.indexes<>1) then
action:=@selectBoots
else if arrayDamageIcon.isEmpty() and arrayFlag.isEmpty() and (not arrayGangPlank.isEmpty()) then
action:=@crossGangPlank
else if arrayDamageIcon.isEmpty() and (not arrayFlag.isEmpty()) then
action:=@waitForGameToStart
else if (not arraySquire.isEmpty()) then
action:=@startGame
else if (arrayMonster.isEmpty() and textureArray.extractID(1275).isEmpty()) and (arrayDestroyedPortal.indexes()<>4) then
action:=@lookForMonsters
else if (not arrayMonster.isEmpty()) and modelArray.extractID(playerModelID)[0].closest(arrayMonster).isBehindInterface() then
action:=@rotateToSeeMonsters
else if (not arrayMonster.isEmpty()) and arrayTarget.isEmpty() and (not modelArray.extractID(playerModelID)[0].closest(arrayMonster).isBehindInterface(textureArray)) and (arrayDestroyedPortal.indexes()<>4) then
action:=@attackMonsters;
action();
end;
begin
(*Initiation*)
clearDebug;
smart.create(800,600,'',['OpenGL32.dll']);
glxMapHooks(smart.ID);
smart.__graphics.DrawText('pestControl','bigChars',point(11,11),1);
smart.__graphics.DrawText('pestControl','bigChars',point(10,10),clRed);
smart.__graphics.DrawText('Developed by Obscurity','smallChars',point(11,41),1);
smart.__graphics.DrawText('Developed by Obscurity','smallChars',point(10,40),clYellow);
insert(playerModelID,__glModelArray);
insert(__glModelCombatArray,__glModelArray);
insert(__glModelPestControlArray,__glModelArray);
insert(__glTextureChatArray,__glTextureArray);
insert(__glTextureInterfaceArray,__glTextureArray);
insert(__glTextureMapArray,__glTextureArray);
obsDebug:=false;
vDebug('T'); //~ Use this to get your playerModelIDs
//playSound('./scriptOn.wav');
repeat
mainLoop;
until false;
end.