SRL Archive - Archive

Taric - SRL Member Application


Taric

2015-04-08 15:18:26

How Long have You Played Runescape?
10 Year(s)


Are you affilated in anyway with Jagex LTD?
No

Were you Referred to SRL?
An old college roomate. He remains unregistered.


What is your general programming knowledge?
A minor amount of C++ and Java
Visual Basic is love, Visual Basic is life.


Are you a member of any other communities?
Yes and no…
I have accounts with Runemate/Dreambot, but I don't do much with them.


Tell us about yourself…
From: Taric
For those of you who haven't seen my wonderful posts…

I am a very narcissistic, flamboyant, perverted, loveable, and sexy individual.

Like Sjoe, I am 100% homo for the league of legends character Taric.

As of now, I am a semi-proud member of the United States Navy Reserve. I'll be starting active duty as a Nuclear Operator in November.

I am a fan of anything gaming. My life long dream is to publish a game that redefines the current gaming genre. (Like every other indie game developer)

I post edgy forum content every once in a while…




Please show us one (or multiple) of your scripts.
program TaricLumbridgeSmelter;

//The script that gave me the confidence to make this application!

{$DEFINE SMART}
{$I srl-6/srl.simba}
{$I sps/lib/sps-rs3.simba}
{$I srl-6/lib/misc/srlplayerform.simba}

//Press the Run button to get started.
//Only edit the code below if you are feeling brave.

var
pathWalk: TPointArray;
a, i, beforeBreakTime, breakTime, itemType, xpPerBar, xp, bankPre, objectTotal, statsObjects: Integer;
firstRun: Boolean;
barType, objectType: String;
timer, statsTimer, switchTimer: TTimeMarker;

{-----grats' stats!-----}
{
=====
Stats
=====
}

Const
stats_Path = AppPath+'Stats\';
stats_File = 'Info.txt';

type
TStats_Vars = record
Name: string;
Value: integer;
end;

var
stats_Timer : integer;
stats_ID,stats_Pass,
stats_ScriptID : string;
stats_Vars : Array of TStats_Vars;


procedure stats_Setup(_ScriptID : String);
var
id,pass : String;
begin
if (not directoryExists(stats_Path)) then
begin
forceDirectories(stats_Path);
writeINI('General', 'Stats_ID', '', stats_Path+stats_File);
writeINI('General', 'Stats_Pass', '', stats_Path+stats_File);
end;

id := readINI('General', 'Stats_ID', stats_Path+stats_File);
pass := readINI('General', 'Stats_Pass', stats_Path+stats_File);

if id = '' then
begin
case MessageBox('No Stats ID found, would you like to register?','Stats',1) of
1: openWebPage('http://stats.grats.pw/reg.php');
end;
end;

stats_ID := id;
stats_Pass := pass;
stats_ScriptID := _ScriptID;
stats_Timer := getSystemTime();
end

procedure stats_InitVariable(VarName: String; InitValue: Integer);
var
len: Integer;
begin
len := Length(stats_Vars);
SetArrayLength(stats_Vars, len + 1);
stats_Vars[len].Name := LowerCase(VarName);
stats_Vars[len].Value := InitValue;
end;

procedure stats_SetVariable(VarName: string; NewValue: Integer);
var
i, h: Integer;
begin
h := High(stats_Vars);
VarName := LowerCase(VarName);

if (h >= 0) then
for i := h downto 0 do
if (VarName = stats_Vars[i].Name) then
begin
stats_Vars[i].Value := NewValue;
Exit;
end;

stats_InitVariable(VarName, NewValue);
end;

procedure stats_IncVariable(VarName: string; Value: integer);
var
i, h: Integer;
begin
h := High(stats_Vars);
VarName := LowerCase(VarName);

if (h >= 0) then
for i := h downto 0 do
if (VarName = stats_Vars[i].Name) then
begin
stats_Vars[i].Value := stats_Vars[i].Value + Value;
Exit;
end;

stats_InitVariable(VarName, Value);
end;

function stats_Commit(): Boolean;
var
S : String;
Client,i,Worked,
ExtraTime : integer;
begin
ExtraTime := getSystemTime() - stats_Timer;
Worked := ExtraTime div 60000;

if Worked < 5 then Exit;
ExtraTime := ExtraTime - (Worked*60000);

stats_Timer := GetSystemTime - ExtraTime;

Client := InitializeHTTPClient(False);
ClearPostData(Client);

if (stats_ID = '') then
begin
stats_ID := '5';
stats_Pass := 'anon1337';
end;

AddPostVariable(Client, 'user_id', STATS_ID);
AddPostVariable(Client, 'password', STATS_PASS);
AddPostVariable(Client, 'script_id', STATS_SCRIPTID);
AddPostVariable(Client, 'timeamount', toStr(Worked));

if (Length(stats_Vars) > 0) then
for i := high(stats_Vars) downto 0 do
with stats_Vars[i] do
begin
if (Value <= 0) then
Continue;

AddPostVariable(Client, Name, toStr(Min(Value, 30000))); //Capped at 30000
end;

// Get & translate the return code
S := PostHTTPPageEx(Client, 'http://stats.grats.pw/POST.php');
FreeHTTPClient(Client);

case StrToIntDef(ExtractFromStr(S, Numbers), -1) of
42 : Result := True;
// 666 : writeln('Stats: User ID/Password not setup.'); // Disabled because of the default name ID & pass given above
9001: writeln('Stats: Invalid user ID/Password.');
1337: writeln('Stats: Invalid Script ID.');
255,
496 : writeln('Stats: Committing too fast; shame on you!');
else
writeln('Stats: No POST return');
end;

if Result then
begin
if (Length(stats_Vars) > 0) then
for i := high(stats_Vars) downto 0 do
with stats_Vars[i] do
begin
if (Value <= 0) then
Continue;
Value := 0; //Clear for next commit
end;
end;
end;
{-----grats' stats-----}

{-----evilcitrus's fabText()-----}
//Makes that sexyyy text you see on your smart screen.
function stupidSort(tpa: TPointArray): T2DPointArray;
var
i, j, a, b: integer;
temp: TPointArray;
hit: boolean;
begin
a := tpa.getBounds.x1;
b := tpa.getBounds.x2+1;
tpa.sortByXValue(true);
setLength(result, (b-a));
for j := a to b do
begin
hit := false;
for i := 0 to high(tpa) do
begin
if j = tpa[i].x then
begin
result[j-a].append(tpa[i]);
hit := true;
end
else if hit then break;
end;
end;
end;

function spread(num: extended; length: integer; leftToRight: boolean): TExtendedArray;
var
step, deg: extended;
i: integer;
begin
if length < 1 then exit();
deg := 50; //Here is where you adjust the shift amount. 50 = full rainbow
if length = 2 then result := [num-deg, num+deg];
if length = 3 then result := [num-deg, num, num+deg];
if length < 4 then exit();
step := (deg/((length-((length mod 2)+2))/2));
for i := 0 to (length-1) do
begin
if leftToRight then
result.append((num-deg)+(i*step))
else
result.append((num+deg)-(i*step));
end;
end;

function hueHueHUE(color: TColor; length: integer; leftToRight, randomCol: boolean): TColorArray;
var
h, s, l: extended;
i: integer;
aH: TExtendedArray;
begin
colorToHSL(color, h, s, l);
if randomCol then h := random(100);
aH := spread(h, length, leftToRight);
setLength(result, (high(aH)+1));
for i := 0 to high(aH) do
result[i] := hslToColor(aH[i], s, l);
end;

procedure TMufasaBitmap.fabText(txt: string; pnt: TPoint; font: string; color: TColor; leftToRight, shadow, random: boolean);
var
i: integer;
tpa, tpaShadow: TPointArray;
atpa: T2DPointArray;
rainbow: TColorArray;
begin
tpa := tpaFromText(txt, font);
offsetTPA(tpa, pnt);
if shadow then
begin
tpaShadow := copyTPA(tpa);
offsetTPA(tpaShadow, point(1, 1));
self.drawTPA(tpaShadow, __SHADOW_COLOR);
end;
atpa := stupidSort(tpa);
rainbow := hueHueHUE(color, length(atpa), leftToRight, random);
for i := 0 to high(atpa) do
self.drawTPA(atpa[i], rainbow[i]);
end;
{-----End of evilcitrus's fabText()-----}

procedure initPlayerForm();
begin
with playerForm do
begin
name := 'Taric''s Lumbridge Jewelry Smelter';
scriptHelpThread := '';

editBoxLabels := ['Minutes before breaking', 'Minutes to break for', 'When to Switch Players', 'Preferred World', 'Bank Pin'];
editBoxDefaults := ['0', '0', '0', '-1', '0000'];

comboBoxLabels := ['Bank Preset', 'Bar/Gem Type', 'Object to Smelt'];
comboBoxDefaults := ['1', 'Gold', 'Bracelet'];
comboBoxHints := ['', 'What are we going to be making with the Smelter?'];

setLength(comboBoxItems, length(comboBoxLabels));
comboBoxItems[0] := ['1', '2'];
comboBoxItems[1] := ['Gold', 'Sapphire', 'Emerald', 'Ruby', 'Diamond', 'Dragonstone', 'Onyx', 'Hydrix'];
comboBoxItems[2] := ['Ring', 'Necklace', 'Bracelet', 'Amulet'];
end;
end;

procedure declarePlayers();
begin
players.setup(playerForm.players);
currentPlayer := 0;

for i := 0 to high(players) do
with players[i] do
begin
integers[0] := strToInt(playerForm.players[i].settings[0]);
integers[1] := strToInt(playerForm.players[i].settings[1]);
integers[2] := strToInt(playerForm.players[i].settings[2]);
integers[3] := strToInt(playerForm.players[i].settings[3]);
integers[4] := strToInt(playerForm.players[i].settings[4]);

strings[0] := playerForm.players[i].settings[5];
strings[1] := playerForm.players[i].settings[6];
strings[2] := playerForm.players[i].settings[7];
end;
end;
//Ignore this mess. Nested cases. Need I say more?
procedure debugSPFSettings();
begin
for i := 0 to high(players) do
begin
beforeBreakTime := players[i].integers[0];
breakTime := players[i].integers[1];
players[i].world := players[i].integers[3];
bankPre := strToInt(players[i].strings[0]);
barType := players[i].strings[1];
objectType := players[i].strings[2];

case barType of
'Gold':
begin
case objectType of
'Ring':
begin;
itemType := 1;
xpPerBar := 15;
end;
'Necklace':
begin;
itemType := 2;
xpPerBar := 20;
end;
'Bracelet':
begin
itemType := 3;
xpPerBar := 25;
end;
'Amulet':
begin
itemType := 4;
xpPerBar := 30;
end;
end;
end;

'Sapphire':
begin
case objectType of
'Ring':
begin
xpPerBar := 40;
itemType := 5;
end;
'Necklace':
begin
xpPerBar := 55;
itemType := 6;
end;
'Bracelet':
begin
xpPerBar := 60;
itemType := 7;
end;
'Amulet':
begin
xpPerBar := 65;
itemType := 8;
end;
end;
end;

'Emerald':
begin
case objectType of
'Ring':
begin
xpPerBar := 55;
itemType := 9;
end;
'Necklace':
begin
xpPerBar := 60;
itemType := 10;
end;
'Bracelet':
begin
xpPerBar := 65;
itemType := 11;
end;
'Amulet':
begin
xpPerBar := 70;
itemType := 12;
end;
end;
end;

'Ruby':
begin
case objectType of
'Ring':
begin
xpPerBar := 70;
itemType := 13;
end;
'Necklace':
begin
xpPerBar := 75;
itemType := 14;
end;
'Bracelet':
begin
xpPerBar := 80;
itemType := 15;
end;
'Amulet':
begin
xpPerBar := 85;
itemType := 16;
end;
end;
end;

'Diamond':
begin
case objectType of
'Ring':
begin
xpPerBar := 85;
itemType := 17;
end;
'Necklace':
begin
xpPerBar := 90;
itemType := 18;
end;
'Bracelet':
begin
xpPerBar := 95;
itemType := 19;
end;
'Amulet':
begin
xpPerBar := 100;
itemType := 20;
end;
end;
end;

'Dragonstone':
begin
case objectType of
'Ring':
begin
xpPerBar := 100;
itemType := 21;
end;
'Necklace':
begin
xpPerBar := 105;
itemType := 22;
end;
'Bracelet':
begin
xpPerBar := 110;
itemType := 23;
end;
'Amulet':
begin
xpPerBar := 150;
itemType := 24;
end;
end;
end;

'Onyx':
begin
case objectType of
'Ring':
begin
xpPerBar := 115;
itemType := 25;
end;
'Necklace':
begin
xpPerBar := 120;
itemType := 26;
end;
'Bracelet':
begin
xpPerBar := 125;
itemType := 27;
end;
'Amulet':
begin
xpPerBar := 165;
itemType := 28;
end;
end;
end;

'Hydrix':
begin
case objectType of
'Ring':
begin
xpPerBar := 130;
itemType := 29;
end;
'Necklace':
begin
xpPerBar := 135;
itemType := 30;
end;
'Bracelet':
begin
xpPerBar := 140;
itemType := 31;
end;
'Amulet':
begin
xpPerBar := 180;
itemType := 32;
end;
end;
end;
end;
end;
end;

procedure miniBreak();
begin
writeLn('Taking a mini-break.');
mouseOffClient(OFF_CLIENT_RANDOM);
wait(randomRange(44000,120000));
end

procedure antiBan();
begin
if not isLoggedin() then exit;

case random(100) of
0..3:BoredHuman(True);
4..6:miniBreak();
7..23:hoverSkill(SKILL_CRAFTING);
end;
end;

//Walks to the specified location.
procedure walkToPlace(place: String);
begin
if not isLoggedin() then exit;

case place of
'toFurnace':pathWalk := [Point(110, 74), Point(162, 86)]; //Walk to Furnace
'toBank':pathWalk := [Point(162, 86), Point(110, 74)]; //Walk to Bank
'toLoadstone':pathWalk := [Point(190, 226), Point(150, 138), Point(110, 74)]; //Walk from Loadstone.
end;

SPS.walkPath(pathWalk);
minimap.waitPlayerMoving();
wait(randomRange(600,800));
end;

procedure failSafeWalk(toFurnace: Boolean);
begin
if not isLoggedin() then exit;
Inc(a);
lodestoneScreen.teleportTo(LOCATION_LUMBRIDGE);
wait(randomRange(16000,18000));
walkToPlace('toLoadstone');
wait(randomRange(2400,3600));

if toFurnace = true then
begin
walkToPlace('toFurnace');
wait(randomRange(1400,1600));
end;
end;

//Clicks zeh furnace.
{-----This totally wan't ripped from The Mayor's tutorial...-----}
procedure clickFurnace();
var
x, y, i: integer;
TPA: TPointArray;
ATPA: T2DPointArray;
begin
if not isLoggedin() then exit;

findColorsSpiralTolerance(x, y, TPA, 1122240, mainScreen.getBounds(), 9, colorSetting(2, 0.11, 0.75));

if (Length(TPA) < 1) then exit;

ATPA := TPA.toATPA(30, 5);
ATPA.sortFromSize(30, True);

for i := 0 to high(ATPA) do
begin
mouse(middleTPA(ATPA[i]), MOUSE_MOVE);
if isMouseOverText(['melt'], 500) then
begin
fastClick(MOUSE_LEFT);
break;
end;
end;

repeat
wait(100);
until minimap.isFlagPresent = false;

wait(randomRange(1400,1600));
end;

//Does all of the furnace shtuff! The integer imported decides what item is made.
procedure useFurnace(itemToSmelt: Integer);
begin
if not isLoggedin() then exit;

if a > 4 then
begin
writeLn('An error has occured while using the furnace... SORRY.');
TerminateScript;
end;

clickFurnace();

if not productionScreen.isOpen() then
begin
clickFurnace();

if not productionScreen.isOpen() then
begin
failSafeWalk(True);
useFurnace(itemType);
exit;
end;
end;

if firstRun then productionScreen.selectBox(itemToSmelt);
firstRun := false;
wait(randomRange(600,800));
productionScreen.clickStart(true);
wait(randomRange(600,800));

//Because reasons.
case random(20) of
0..1:mouseOffClient(OFF_CLIENT_RANDOM);
2..8:SleepAndMoveMouse(randomRange(1200,3600));
9..19:smallRandomMouse;
end;

if itemType > 4 then
tabBackpack.waitSlotPixelChange(14,27000)
else
tabBackpack.waitSlotPixelChange(28,54000);
end;

//Finds and clicks the bank. It selects the preset specified by the user.
procedure useBank(tehPreset: Integer);
begin
if not isLoggedin() then exit;

if a > 4 then
begin
writeLn('An error has occured while banking... SORRY.');
TerminateScript;
end;

bankScreen.open(BANK_CHEST_LUMBRIDGE);

repeat
wait(100);
until minimap.isFlagPresent = false;

wait(randomRange(1400,1600));

if not bankScreen.isOpen() then
begin
bankScreen.open(BANK_CHEST_LUMBRIDGE);

repeat
wait(100);
until minimap.isFlagPresent = false;

wait(randomRange(1400,1600));

if not bankScreen.isOpen() then
begin
failSafeWalk(False);
useBank(bankPre);
exit;
end;
end;

if pinScreen.isOpen() then pinScreen.enter(intToStr(players[i].integers[3]));

case tehPreset of
1:bankScreen.clickButton(BANK_BUTTON_PRESET_1);
2:bankScreen.clickButton(BANK_BUTTON_PRESET_2);
end;
end;

procedure processGratsStats();
begin
if itemType > 4 then
statsObjects := statsObjects + 14
else
statsObjects := statsObjects + 28;

stats_IncVariable('39', statsObjects);
stats_IncVariable('77', (statsObjects * xpPerBar));
stats_IncVariable('129', (statsObjects));

if statsTimer.getTime() > 301000 then
begin
stats_commit();
statsObjects := 0;
end;
end;

{-----Inspired by Ashaman's proggiesssssss-----}
procedure proggy();
begin
processGratsStats();

if itemType > 4 then
objectTotal := objectTotal + 14
else
objectTotal := objectTotal + 28;

clearDebug();
writeLn('============================================================');
writeLn('| ~Taric''s Lumbridge Jewelry Smelter~ |');
writeLn('============================================================');
writeLn(PadR('| Time Running: ' + timeRunning, 59),'|');
writeLn(PadR('| Total ' + barType + ' ' + objectType + '''s ' + 'Crafted: ' + intToStr(objectTotal), 59),'|');
writeLn(PadR('| ' + barType + ' ' + objectType + '''s ' + 'p/h: ' + intToStr(round((objectTotal * 60) / (getTimeRunning() / 60000))), 59),'|');
writeLn(PadR('| Total XP: ' + intToStr(objectTotal * xpPerBar), 59),'|');
writeLn(PadR('| XP p/h: ' + intToStr(round(((objectTotal * xpPerBar) * 60) / (getTimeRunning() / 60000))), 59),'|');
writeLn('============================================================');

smartImage.clear;
smartImage.fabText('Total Bars: ' + intToStr(objectTotal), point(mainscreen.x1+1, mainscreen.y1), loginchars, TColor($ff00c4), true, false, true);
smartImage.fabText('Total XP: ' + intToStr(objectTotal * xpPerBar), point(mainscreen.x1+1, mainscreen.y1+15), loginchars, TColor($ff00c4), true, false, true);
end;

procedure breakingTime();
begin
if BeforeBreakTime > 0 then
begin
if timer.getTime() > ((BeforeBreakTime + randomRange(-5,5)) * 60000) then
begin
writeLn('Taking a break for: ', breakTime, ' minutes.');
switchTimer.pause;
wait(randomRange(((breakTime - 3) * 60000), ((breakTime + 3) * 60000)));
switchTimer.start;
timer.reset;
timer.start;
end;
end;
end;

procedure playerSwitch();
begin
if BeforeBreakTime < players[i].integers[2] then exit;

if switchTimer.getTime() > (players[i].integers[2] * 60000) then
begin
players.next(false);
timer.reset;
end;
end;

//This is where nothing happens. Nothing at all.
procedure mainLoop();
begin
repeat
players[currentPlayer].login();

a := 0;
useBank(bankPre);
wait(randomRange(600,800));
if not tabBackpack.isItemInSlot(1) then TerminateScript;

walkToPlace('toFurnace');
wait(randomRange(600,800));

a := 0;
useFurnace(itemType);
wait(randomRange(600,800));

proggy();
antiBan();

walkToPlace('toBank');
wait(randomRange(600,800));

breakingTime();
until false;
end;

procedure programForeplay();
begin
clearDebug();
disableSRLDebug := true;
smartShowConsole := false; //Because no one likes that black box :p
SmartEnableDrawing := True;

initPlayerForm();
runPlayerForm();

if (not playerForm.isScriptReady) then exit;

declarePlayers();
debugSPFSettings();
stats_Setup('22');
SPS.setup('TARIC_LUMBY', RUNESCAPE_OTHER);

setupSRL();
if players[currentPlayer].login() = false then TerminateScript();

SmartImage.clear;
Timer.start;
statsTimer.start;

conversationBox.continue(True, True); //For those of you who bot on role playing worlds.
exitTreasure();
minimap.clickCompass();

firstRun := true;
end;

begin
programForeplay();
mainLoop();
end.


program SummertimeSadness;

//The antiban that redefined everything.

{$DEFINE SMART}
{$I SRL-6/SRL.simba}

procedure summerTimeAntiBan();

var
summertime, sadness: Integer;

begin
summertime := 99;
sadness := 1234;

repeat

typeSend('Kiss me hard before you go');
wait(randomRange(1200,1600));
typeSend('Summertime sadness');
wait(randomRange(1200,1600));
typeSend('I just wanted you to know');
wait(randomRange(1200,1600));
typeSend('That, baby, you''re the best');
wait(randomRange(1200,1600));

typeSend('I got my red dress on tonight');
wait(randomRange(1200,1600));
typeSend('Dancing in the dark in the pale moonlight');
wait(randomRange(1200,1600));
typeSend('Done my hair up real big beauty queen style');
wait(randomRange(1200,1600));
typeSend('High heels off, I''m feeling alive');
wait(randomRange(1200,1600));

typeSend('Oh, my God, I feel it in the air');
wait(randomRange(1200,1600));
typeSend('Telephone wires above are sizzling like a snare');
wait(randomRange(1200,1600));
typeSend('Honey, I''m on fire, I feel it everywhere');
wait(randomRange(1200,1600));
typeSend('Nothing scares me anymore');
wait(randomRange(1200,1600));

typeSend('1,2,3,4');
wait(randomRange(1200,1600));

typeSend('Kiss me hard before you go');
wait(randomRange(1200,1600));
typeSend('Summertime sadness');
wait(randomRange(1200,1600));
typeSend('I just wanted you to know');
wait(randomRange(1200,1600));
typeSend('That, baby, you''re the best');
wait(randomRange(1200,1600));

typeSend('I got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('S-s-summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Oh, oh, oh, oh, oh');
wait(randomRange(1200,1600));

typeSend('I''m feelin'' electric tonight');
wait(randomRange(1200,1600));
typeSend('Cruising down the coast goin'' ''bout 99');
wait(randomRange(1200,1600));
typeSend('Got my bad baby by my heavenly side');
wait(randomRange(1200,1600));
typeSend('I know if I go, I''ll die happy tonight');
wait(randomRange(1200,1600));

typeSend('Oh, my God, I feel it in the air');
wait(randomRange(1200,1600));
typeSend('Telephone wires above are sizzling like a snare');
wait(randomRange(1200,1600));
typeSend('Honey, I''m on fire, I feel it everywhere');
wait(randomRange(1200,1600));
typeSend('Nothing scares me anymore');
wait(randomRange(1200,1600));

typeSend('1, 2, 3, 4');
wait(randomRange(1200,1600));

typeSend('Kiss me hard before you go');
wait(randomRange(1200,1600));
typeSend('Summertime sadness');
wait(randomRange(1200,1600));
typeSend('I just wanted you to know');
wait(randomRange(1200,1600));
typeSend('That, baby, you''re the best');
wait(randomRange(1200,1600));

typeSend('I got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('S-s-summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Oh, oh, oh, oh, oh');
wait(randomRange(1200,1600));

typeSend('Think I''ll miss you forever');
wait(randomRange(1200,1600));
typeSend('Like the stars miss the sun in the morning sky');
wait(randomRange(1200,1600));
typeSend('Later''s better than never');
wait(randomRange(1200,1600));
typeSend('Even if you''re gone I''m gonna drive (drive, drive)');
wait(randomRange(1200,1600));

typeSend('I got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('S-s-summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Oh, oh, oh, oh, oh');
wait(randomRange(1200,1600));

typeSend('Kiss me hard before you go');
wait(randomRange(1200,1600));
typeSend('Summertime sadness');
wait(randomRange(1200,1600));
typeSend('I just wanted you to know');
wait(randomRange(1200,1600));
typeSend('That, baby, you''re the best');
wait(randomRange(1200,1600));

typeSend('I got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('S-s-summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Got that summertime, summertime sadness');
wait(randomRange(1200,1600));
typeSend('Oh, oh, oh, oh, oh');
wait(randomRange(1200,1600));

until summertime = sadness;

end;

begin
setupSRL();
summerTimeAntiBan();
end.


program TaricCosher;

//The simple script that won the hearts of millions.

{$Define SMART}
{$I SRL-6/SRL.simba}

//********FILL OUT THESE VARIABLES********
const
coshTime = 180; //How many minutes do you want this to run?
//Max time is 6 hours ~ 360 minutes.

browserAgent =''; //Goto http://whatsmyuseragent.com/
//Copy the portion of stuff that matches
//what browser you use.
//EX: Chrome/42.4.2424.242
//What is the purpose of this? It makes your
//SMART client look more like your browser.

//********STOP FILLING OUT THE VARIABLES********

var
XP, XPH, startingExperience: extended;
coshBox, lootBox: Tbox;
timer: TTimeMarker;


//Solidone40's MiniBreaker procedures
Procedure MiniBreaker;
Begin
Case Random (4) Of
0:
begin
writeLn('Starting AntiBan');
Wait(40000 + random(7400));
end;
1:
begin
writeLn('Starting AntiBan');
Wait(25500 + random(8550));
end;
2:
begin
writeLn('Starting AntiBan');
Wait(60040 + random(6759));
end;
3:
begin
writeLn('Starting AntiBan');
Wait(20400 + random(2549));
end;
end;
end;

//Solidone40's Antiban procedures
Procedure Antiban;
Begin
Case Random(60) Of
2:
begin
writeLn('Starting AntiBan');
randomGameTab(False);
end;
4:
begin
writeLn('Starting AntiBan');
Wait(2500 + random(4500));
end;
6:
begin
writeLn('Starting AntiBan');
PickUpMouse;
end;
7:
begin
writeLn('Starting AntiBan');
mouseMovingObject;
end;
8:
begin
writeLn('Starting AntiBan');
hoverSkill(SKILL_THIEVING);
end;
9:
begin
writeLn('Starting AntiBan');
MiniBreaker();
end;
end;
end;

//Ashaman's progressReport procedure.
procedure progressReport();
begin
ClearDebug;

XP := (ChatBox.getXPBar - Round(StartingExperience));
XPH := Round(XP * (3600.0 / (GetTimeRunning / 1000.0)));

writeln('|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|');
writeln('| Taric''s Outrageous Cosher! |');
writeln('|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=|');
writeln(PadR('| Exp Earned: ' + GroupDigits(XP,','), 40) + padR('Exp/Hour: ' + GroupDigits(XPH,','), 20) + '|');
writeln(PadR('| Running for: ' + timeRunning, 60) + '|');
writeln('|___________________________________________________________|');
writeln('|___________________________________________________________|');
end;

procedure lureDummy();
var
count: integer;
begin
count = 0;
repeat
mouseBox(coshBox, MOUSE_RIGHT);
chooseOption.select(['ure']);
inc(count);
if(count > 6) then TerminateScript();
until conversationBox.isOpen(2000);

repeat
conversationBox.continue(true, true)
until not conversationBox.isOpen();
end;

procedure lootDummy();
var
counter: Integer;
begin
counter := 0;
mouseSpeed := randomRange(28,32);

repeat
mouseBox(lootBox, MOUSE_RIGHT);
chooseOption.select(['oot']);
mouseSpeed := mouseSpeed - randomRange(1,3);
inc(counter);
until counter >= randomRange(3,5);

mouseSpeed := 20;
end;

procedure knockDummy();
begin
mouseBox(coshBox, MOUSE_RIGHT);
chooseOption.select(['nock']);
end;

begin
clearDebug();
disableSRLDebug := true;
smartUserAgent := browserAgent;
smartShowConsole := false; //Because no one likes that black box :p
SmartEnableDrawing := True;
setupSRL();

SmartImage.clear();
lootBox := intToBox(265, 110, 317, 153); //Change these values if the boxes aren't working.
coshBox := intToBox(265, 81, 310, 120); //Same.
SmartImage.drawBox(coshBox);
SmartImage.drawBox(lootBox);

startingExperience := chatBox.getXPBar;

timer.start()
repeat
lureDummy();
wait(randomRange(401,602));
knockDummy();
wait(randomRange(401,602));
lootDummy();
wait(randomRange(401,602));
progressReport();
Antiban();
MiniBreaker();
until timer.getTime() > ((coshTime + randomRange(1,10)) * 60000);
end.

Separated scripts for easier viewing.

E2: @Hoods, I forgot to mention you whenever I updated the standards… SO HERE. Have a mention.

Foundry

2015-04-08 15:31:22

Glanced over your scripts but voted yes mostly because of activity. Love the code comments. 10/10.

Clarity

2015-04-08 15:50:36

Glad to see this application :) I like your activity a lot. Could you respond to the code below, and perhaps say how you might improve your self-described messy code, or whether you feel it wouldn't be an improvement?


type TJewelryProduct = record
barType, objectType: string;
XP: integer;
end;

Camel

2015-04-08 15:51:42

Yes

Taric

2015-04-08 15:54:16

From: Clarity
Glad to see this application :) I like your activity a lot. Could you respond to the code below, and perhaps say how you might improve your self-described messy code, or whether you feel it wouldn't be an improvement?


type TJewelryProduct = record
barType, objectType: string;
XP: integer;
end;


I can search to find out how to use types… But that defeats the purpose of your post XD. SO, from the impression that I get from looking at said code I would say that type > nested cases > nested ifs. AND THAT'S ALL I'VE GOT.

I have failed you Clarity-sama.

Hoodz

2015-04-08 16:13:27

I don't know what to vote right now, your activity is great but I wouldn't really identify your scripts as srl-member level.

what I want you to do is fix some standards in your script.
a small example:

procedure processGratsStats();
begin
if itemType > 4 then statsObjects := statsObjects + 14 else statsObjects := statsObjects + 28;
stats_IncVariable('39', statsObjects);
stats_IncVariable('77', (statsObjects * xpPerBar));
stats_IncVariable('129', (statsObjects));
if statsTimer.getTime() > 301000 then
begin
stats_commit();
statsObjects := 0;
end;
end

should be more like:

procedure processGratsStats();
begin
if (itemType > 4) then
statsObjects := statsObjects + 14
else
statsObjects := statsObjects + 28; {some spacing}
stats_IncVariable('39', statsObjects);
stats_IncVariable('77', (statsObjects * xpPerBar));
stats_IncVariable('129', (statsObjects));
if (statsTimer.getTime() > 301000) then {added () easier to read logic especially if you use more than one thing to check}
begin
stats_commit();
statsObjects := 0;
end; {notice the spacing}
end; {notice the ;}

if you improve some of your standards im willing to vote yes, so be sure to tag me if you have done this.
@Taric;

Janilabo

2015-04-08 16:23:51

Heyyy @Taric!

Small lookup (positives and negatives):
+Community activity
+Attitude
-Scripts are too tiny and not really at the SRL Member "level" yet (my personal opinion only)
-Lack of scripting standards usage at some places

Because negatives>positives in this case, I voted no. Although you are really close for a YES from me aswell.
Poll looks pretty good at this state, so there is plenty of hope my NO-vote wont have too much effect and you'll get easily accepted - we will see. :)

Good luck man!

Clarity

2015-04-08 16:33:42

From: Taric
I can search to find out how to use types… But that defeats the purpose of your post XD. SO, from the impression that I get from looking at said code I would say that type > nested cases > nested ifs. AND THAT'S ALL I'VE GOT.

I have failed you Clarity-sama.


They allow you to create new types with whatever variable properties you desire. Anything with "T" before it is a type. A TPoint is a type, signified by the "T" before "Point". It has variables X and Y.

Technically, a TPoint, if it wasn't already built in, might look something like:

type TPoint = record
X, Y: integer;
end;

This allows you to reference these properties later, like so:

var
somePoint: TPoint;
something, somethingElse: integer;
begin
something := somePoint.X;
somethingElse := somePoint.Y;
end;

You can apply this concept to something like TJewelryProduct like so:

//Having declared type TJewelryProduct earlier
var
myProduct: TJewelryProduct;
{...}
procedure someProcedure;
begin
{...}
myProduct.barType := 'Gold';
{...}
if (myProduct.barType = 'Gold') then
{...}
end;

You could also even create arrays of your newly created type, like so:

var
productsArray: array of TJewelryProduct;
{...}
begin
productsArray[i].barType := 'Gold';
productsArray[i].XP := 1337;
{...}
end;

I'd encourage you familiarize yourself with types, because they can be quite useful for many situations. However, sometimes they might be unnecessary, which is why I was looking for your opinion :)

I will wait a bit before voting. Best of luck with the application!

3Garrett3

2015-04-08 16:42:21

I'd like to insert my $0.05 here:

I've mentioned to Taric before that I hate his standards and I've been given (IMO) valid reasons for why they are what they are. He can feel free to explain or accept judgement however way he feels. I've been working with him for a few months now and he's made really big progress with this last script. I have no reason to think that he will simply drop off the face of the earth once getting SRL Members, and I think he'll continue to be an asset to the community.

For the poll, I will be abstaining from voting due to the obvious conflict of interest. For those who care though, I feel that the activity and continued learning more than make up for the sometimes weird standards. If I would vote, it would be a yes

Ian

2015-04-08 16:50:28

From: 3Garrett3
I'd like to insert my $0.05 here:

I've mentioned to Taric before that I hate his standards and I've been given (IMO) valid reasons for why they are what they are. He can feel free to explain or accept judgement however way he feels. I've been working with him for a few months now and he's made really big progress with this last script. I have no reason to think that he will simply drop off the face of the earth once getting SRL Members, and I think he'll continue to be an asset to the community.

For the poll, I will be abstaining from voting due to the obvious conflict of interest. For those who care though, I feel that the activity and continued learning more than make up for the sometimes weird standards. If I would vote, it would be a yes


I don't think there'd be much of a conflict of interest if you voted if the reason would just be that you've been helping him learn, but it's your decision.

Taric

2015-04-08 16:54:07

From: hoodz
if you improve some of your standards im willing to vote yes, so be sure to tag me if you have done this.


From: Janilabo
-Lack of scripting standards usage at some places


From: 3Garrett3
I've mentioned to Taric before that I hate his standards and I've been given (IMO) valid reasons for why they are what they are. He can feel free to explain or accept judgement however way he feels.


Garrett is referring to my Dyslexia. Ignore it. HIDING BEHIND DISABILITIES IS FOR THE WEAK.

I'll do my best to get my scripting standards up to snuff. Thanks for all of the feedback!

Kevin

2015-04-08 16:57:00

From: Janilabo
Heyyy @Taric!

Small lookup (positives and negatives):
+Community activity
+Attitude
-Scripts are too tiny and not really at the SRL Member "level" yet (my personal opinion only)
-Lack of scripting standards usage at some places

Because negatives>positives in this case, I voted no. Although you are really close for a YES from me aswell.
Poll looks pretty good at this state, so there is plenty of hope my NO-vote wont have too much effect and you'll get easily accepted - we will see. :)

Good luck man!


^this.

Although for me, I typically vote no unless there's almost no negatives or the person is massively impressive in one or more of the areas to offset any negatives.

I will say though, I love your attitude and overall community activity, although I could see more of it before you gain member and the infamous sudden inactive that follows suit ;)

Taric

2015-04-08 17:01:33

From: Kevin
^this.

Although for me, I typically vote no unless there's almost no negatives or the person is massively impressive in one or more of the areas to offset any negatives.

I will say though, I love your attitude and overall community activity, although I could see more of it before you gain member and the infamous sudden inactive that follows suit ;)


I've got so much to do with OGL… You won't see the last of me! :p

grats

2015-04-08 18:32:21

I'm dyslexic and my standards are very similar (as far as long lines of code instead of line down && tab) as far as my coding. (this is the first time I've looked at any of his code) It has taken about 15 years of coding for me to finally just start to code as people like to see it.. it is NOT easier for me to read it that way. This is mostly due to python and its forceful standards && sublime text's help.. that is why I've been changing. And nobody ever cared that I did it the way I did, so I never changed.
Why it is that way I have no idea, it makes sense to me how standards work, and it makes sense that it would be easier to read

He has several scripts and is more active than majority of our members, including myself.
Isn't the type that is super eager to get into members section only to see how dead it is and quit the forum…
So yes from me, it isn't like he's going to start unlearning once he's a member.

Lipcot

2015-04-08 18:38:59

Yes. His standards are not good, and the script is not totally SRL member quallity, but neither was mine when i applied (and still havent released any (damn why dont i ever finish a script :duh:) ).

Although, he must be one of the most active members i've seen in a while, and i believe he will continue to learn.

pd: loved them comments

Kasi

2015-04-08 19:35:39

yes fgt

cosmasjdz

2015-04-10 16:29:44

The biggest disadvantage is summertime sadness monotony, has no melody…..

Edit: Voted yes. Because of activity.

King

2015-04-10 17:37:56

Yes, lots of activity, nice guy and seems to be progressing quite well. I do agree with @Kevin and @Janilabo but in my case, I believe the positives outweigh the negatives. I would like to see what happens down the line! I believe you could do very well.

NKN

2015-04-10 17:48:57

I'll give him a yes.

bonsai

2015-04-10 18:27:35

Taric,

Can you give me a walk through of what this does?


function taric(): boolean;

var
x, y, i, ms: integer;
tpa, tmp: TPointArray;
atpa: T2DPointArray;
b: TBox;

begin
findColorsSpiralTolerance(x, y, tpa, COLOUR,
mainScreen.getBounds(), TOL, colorSetting(2, HUE, SAT));

if length(tpa) < 1 then
exit(false);

b := mainscreen.playerBox;
b.expand(15);
tmp := TPAFromBox(b);
tpa := clearTPAFromTPA(tpa, tmp);

atpa := tpa.split(10, 10);
atpa.sortFromMidPoint(mainscreen.playerPoint);

for i := 0 to high(atpa) do
begin
mouse(middleTPA(atpa[i]), MOUSE_MOVE, MOUSE_HUMAN);
if isMouseOverText(['k '], 500) then
if didClick(true, 1000) then
exit(tabbackpack.waitforshift(5000));
end;
exit(false);
end;

Taric

2015-04-10 19:33:43

From: bonsai
Taric,

Can you give me a walk through of what this does?


function taric(): boolean;

var
x, y, i, ms: integer;
tpa, tmp: TPointArray;
atpa: T2DPointArray;
b: TBox;

begin
findColorsSpiralTolerance(x, y, tpa, COLOUR,
mainScreen.getBounds(), TOL, colorSetting(2, HUE, SAT));

if length(tpa) < 1 then
exit(false);

b := mainscreen.playerBox;
b.expand(15);
tmp := TPAFromBox(b);
tpa := clearTPAFromTPA(tpa, tmp);

atpa := tpa.split(10, 10);
atpa.sortFromMidPoint(mainscreen.playerPoint);

for i := 0 to high(atpa) do
begin
mouse(middleTPA(atpa[i]), MOUSE_MOVE, MOUSE_HUMAN);
if isMouseOverText(['k '], 500) then
if didClick(true, 1000) then
exit(tabbackpack.waitforshift(5000));
end;
exit(false);
end;


OKAY. So…


function sexyTaric(): boolean;

var
x, y, i, ms: integer;
tpa, tmp: TPointArray;
atpa: T2DPointArray;
b: TBox;

begin
findColorsSpiralTolerance(x, y, tpa, COLOUR,
mainScreen.getBounds(), TOL, colorSetting(2, HUE, SAT)); //Finds the specified color, COLOR, within the mainscreen and stores it in the tpa TPointArray.

if length(tpa) < 1 then //If there isn't anything located in the tpa TPointArray then we are going to exit the sexyTaric function with false.
exit(false);

b := mainscreen.playerBox; //A TBOX of the character is created.
b.expand(15); //We expand said TBOX by 15 pixels.
tmp := TPAFromBox(b); //All of the TPoint's located within TBOX b are stored in the tmp TPointArray.
tpa := clearTPAFromTPA(tpa, tmp);//If a TPoint in the tpa TPointArray is also in the tmp TPointArray, then we are going to remove it from the tpa TPointArray.

atpa := tpa.split(10, 10);//I don't know... Ima take a guess and say that it splits the TPoints found in the tpa TPointArray into 10 pixel by 10 pixel blocks...
atpa.sortFromMidPoint(mainscreen.playerPoint);//We'll sort all of the TPoints in atpa from the center of the screen out.

for i := 0 to high(atpa) do//From the first value in the atpa array to the last atpa value.
begin
mouse(middleTPA(atpa[i]), MOUSE_MOVE, MOUSE_HUMAN); //Move the mouse in a human like fashion to whatever location atpa[i] is.
if isMouseOverText(['k '], 500) then //If the mouse is over the mouseOver text 'k' then we are going to...
if didClick(true, 1000) then //...Click the mouse and see what happens. If we did click the mouse then we will...
exit(tabbackpack.waitforshift(5000));//...wait for something to change in our inventory. If the inventory changes, then sexyTaric will return true. If
//the inventory doesn't change, then sexyTaric will return false.
end;
exit(false);//sexyTaric returns false.
end;

This is all I've got. I HOPE I HAVE NOT FAILED YOU, BONSAI-SAMA.

Also, this is America. And color is color. Not that frilly 'colour' you heretics use :p

Ian

2015-04-10 19:58:56

From: Taric
OKAY. So…


function sexyTaric(): boolean;

var
x, y, i, ms: integer;
tpa, tmp: TPointArray;
atpa: T2DPointArray;
b: TBox;

begin
findColorsSpiralTolerance(x, y, tpa, COLOUR,
mainScreen.getBounds(), TOL, colorSetting(2, HUE, SAT)); //Finds the specified color, COLOR, within the mainscreen and stores it in the tpa TPointArray.

if length(tpa) < 1 then //If there isn't anything located in the tpa TPointArray then we are going to exit the sexyTaric function with false.
exit(false);

b := mainscreen.playerBox; //A TBOX of the character is created.
b.expand(15); //We expand said TBOX by 15 pixels.
tmp := TPAFromBox(b); //All of the TPoint's located within TBOX b are stored in the tmp TPointArray.
tpa := clearTPAFromTPA(tpa, tmp);//If a TPoint in the tpa TPointArray is also in the tmp TPointArray, then we are going to remove it from the tpa TPointArray.

atpa := tpa.split(10, 10);//I don't know... Ima take a guess and say that it splits the TPoints found in the tpa TPointArray into 10 pixel by 10 pixel blocks...
atpa.sortFromMidPoint(mainscreen.playerPoint);//We'll sort all of the TPoints in atpa from the center of the screen out.

for i := 0 to high(atpa) do//From the first value in the atpa array to the last atpa value.
begin
mouse(middleTPA(atpa[i]), MOUSE_MOVE, MOUSE_HUMAN); //Move the mouse in a human like fashion to whatever location atpa[i] is.
if isMouseOverText(['k '], 500) then //If the mouse is over the mouseOver text 'k' then we are going to...
if didClick(true, 1000) then //...Click the mouse and see what happens. If we did click the mouse then we will...
exit(tabbackpack.waitforshift(5000));//...wait for something to change in our inventory. If the inventory changes, then sexyTaric will return true. If
//the inventory doesn't change, then sexyTaric will return false.
end;
exit(false);//sexyTaric returns false.
end;

This is all I've got. I HOPE I HAVE NOT FAILED YOU, BONSAI-SAMA.

Also, this is America. And color is color. Not that frilly 'colour' you heretics use :p

For reference, it's standard to use variables and function names that relate to what they are/do. Yes, the fun police are everywhere, but it makes things so much easier.

The Killer

2015-04-10 19:59:35

"Like Sjoe, I am 100% homo for the league of legends character Taric."
Called sjoe homo/10 thats a yes from me;)

bonsai

2015-04-11 19:39:02

From: Taric
OKAY. So…This is all I've got. I HOPE I HAVE NOT FAILED YOU, BONSAI-SAMA.


I ended up deciding to up your yea tally. I suspect all those pink gifs of doing something.

Please try to keep the family friendly goal. I'm sure there's plenty of room for your style and humour without offending some 12 year old's mom.

Also, this is America. And color is color. Not that frilly 'colour' you heretics use :p


Obviously stolen from Olly

The Mayor

2015-04-11 22:09:14

No doubt your activity is up to scratch, but I don't feel your script meets the member standard. Here's why:

If the app is taken as a whole then it looks reasonable, BUT if I disregarded the second and third scripts (2nd isn't really a script, and the 3rd is too short to demonstrate anything) and if I ignore Grats code and the fabText code in the first script, then I'm left with a few methods of your own.

Your own code is OK, but there are a few bits and pieces, some of which have been brought up above. I don't see the need for those waits in the mainloop, and I don't know what the variable 'a' doing without backtracking through a bunch of code. I don't think the player form debug procedure is adequately named :p

I see you've got case statements down though, so big probs to The Gem Knight ;)

Sjoe

2015-04-12 19:08:19

Gift me the pink taric skin and you'll have my vote

3Garrett3

2015-04-15 20:56:19

Since this hasn't ended yet, I'm going to bump by saying I vote yes.

Ross

2015-04-16 10:13:50

I like your activity- I won't be able to be active really until Summer starts but I do read the forums quite a bit still. However, I do think there are places for your stylized humor and would like to see if you could find when/when not to cross that line. A members app, in my probably unfavorable opinion, would not be a place for it.

As for the scripts, they are pretty bare basics and the naming conventions don't help much with script clarity. I'm going to vote no (only because of the scripts) in the hopes that you submit something with a little more substance, but I would not be unhappy if you got in regardless. :)

Gu3st...

2015-04-22 11:54:14

I wasn't sure what to vote until I saw that summertime script. Obvious yes based on that. /s

Jokes aside, I voted yes based on activity and the okay scripts :)

Rich

2015-04-22 14:04:01

Like The Mayor said, I actually think the majority of the code in the first script is other people's work, and the work that is your own doesn't really demonstrate that much knowledge IMO. No from me I'm afraid, but good luck nevertheless :)

Taric

2015-04-22 15:09:06

I've been putting off replying to all of the comments here long enough… LEZ DO THIS THING.

From: BMWxi
For reference, it's standard to use variables and function names that relate to what they are/do. Yes, the fun police are everywhere, but it makes things so much easier.


From: bonsai
I ended up deciding to up your yea tally. I suspect all those pink gifs of doing something.

Please try to keep the family friendly goal. I'm sure there's plenty of room for your style and humour without offending some 12 year old's mom.


From: Ross
I like your activity- I won't be able to be active really until Summer starts but I do read the forums quite a bit still. However, I do think there are places for your stylized humor and would like to see if you could find when/when not to cross that line. A members app, in my probably unfavorable opinion, would not be a place for it.

As for the scripts, they are pretty bare basics and the naming conventions don't help much with script clarity. I'm going to vote no (only because of the scripts) in the hopes that you submit something with a little more substance, but I would not be unhappy if you got in regardless. :)


From: Rich
Like The Mayor said, I actually think the majority of the code in the first script is other people's work, and the work that is your own doesn't really demonstrate that much knowledge IMO. No from me I'm afraid, but good luck nevertheless :)


From: The Mayor
No doubt your activity is up to scratch, but I don't feel your script meets the member standard.


A lot of my standards have changed just from the suggestions in this thread (mostly removing those god awful case statements). My code has changed from what you see in the examples to something like this:

program TaricHood;

{$DEFINE SMART}
{$I SRL-6/srl.simba}
{$I sps/lib/sps-rs3.simba}
{$I srl-6/lib/misc/srlplayerform.simba}

//Non quest method goes: Pompous 5, Veggy 28, Warrior 45, Gaurd 55, Knight 55+

type thiefTarget = record
leftClick: Boolean;
color, tol, waitTime: Integer;
hue, sat: Extended;
upText, actionText, location: TStringArray;
end;

var
pomp, veggy, warrior, gaurd, knight: thiefTarget;
i, hpCurrent: Integer;

procedure thiefTarget.init(_leftClick: Boolean; _color, _tol, _waitTime: Integer; _hue, _sat: Extended; _upText, _actionText, _location: TStringArray);
begin
self.leftClick := _leftClick;
self.color := _color;
self.tol := _tol;
self.hue := _hue;
self.sat := _sat;
self.upText := _upText;
self.actionText := _actionText;
self.waitTime := _waitTime;
self.location := _location;
end;

procedure initTargets();
begin
pomp.init(false, 11026474, 17, 5000, 0.06, 0.44, ['ompous'], ['ickpocket'], ['taverly']);
veggy.init(true, 4303942, 14, 2000, 0.20, 1.16, ['egetable'], ['egetable'], ['taverly']);
warrior.init(false, 6580084, 31, 5000, 0.11, 0.15, ['ttack'], ['ickpocket'], ['ardougne']);
end;

procedure initPlayerForm();
begin
with playerForm do
begin
name := 'Taric''s 1-99 Thiever';
scriptHelpThread := '';

editBoxLabels := ['Minutes before breaking', 'Minutes to break for', 'Preferred World'];
editBoxDefaults := ['0', '0', '-1'];
end;
end;

procedure declarePlayers();
begin
players.setup(playerForm.players);
currentPlayer := 0;

for i := 0 to high(players) do
with players[i] do
begin
integers[0] := strToInt(playerForm.players[i].settings[0]);
integers[1] := strToInt(playerForm.players[i].settings[1]);
players[i].world := strToInt(playerForm.players[i].settings[2]);
end;
end;

procedure programForeplay();
begin
clearDebug();
disableSRLDebug := true;
smartShowConsole := false; //Because no one likes that black box :p
SmartEnableDrawing := True;

initPlayerForm();
runPlayerForm();

declarePlayers();
if not playerForm.isScriptReady then exit;

setupSRL();

if not players[currentPlayer].login() then
begin
writeLn('An error occured while loggin in... Please re-run the script.');
TerminateScript();
end;

initTargets();

conversationBox.continue(True, True); //For those of you who bot on role playing worlds.
exitTreasure();
minimap.clickCompass();
mainScreen.setAngle(MS_ANGLE_HIGH);
end;

procedure thiefTarget.waitForShtuff();
begin
wait(randomRange(600,800)); //The tick where the player is hurt.

if not hpCurrent >= actionbar.getHPPercent or self.leftClick then
begin
wait(self.waitTime + random(700));
end;
end;

function thiefTarget.isUpText(): Boolean;
begin
if isMouseOverText(self.upText) then
begin
if self.leftClick then
begin
fastClick(MOUSE_LEFT);
self.waitForShtuff();
exit(true);
end else
begin
fastClick(MOUSE_RIGHT);
hpCurrent := actionBar.getHPPercent;
if chooseOption.select(self.actionText) then
begin
smallRandomMouse();
self.waitForShtuff();
exit(true);
end;
end;
end;
exit(false);
end;

function thiefTarget.find(): boolean;
var
x, y, a: integer;
TPA, TMP: TPointArray;
ATPA: T2DPointArray;
b: Tbox;

begin
if not isLoggedin() then exit(false);

if self.isUpText() then exit(true);

findColorsSpiralTolerance(x, y, TPA, self.color, mainScreen.getBounds(), self.tol, colorSetting(2, self.hue, self.sat));

if (Length(TPA) < 1) then exit(false);

//Totes learned this from mah srl application.
b := mainscreen.playerBox;
b.expand(15);
TMP := TPAFromBox(b);
TPA := clearTPAFromTPA(TPA, TMP);

ATPA := TPA.toATPA(30, 5);
ATPA.sortFromMidPoint(mainScreen.playerPoint);

for i := 0 to high(ATPA) do
begin
mouse(middleTPA(ATPA[i]), MOUSE_MOVE);
if self.isUpText() then exit(true);
end;

exit(false);
end;

begin
programForeplay();
repeat
if tabBackPack.isFull then
begin
MouseSpeed := randomRange(30,45);
tabBackpack.dropItems(DROP_PATTERN_SNAKE);
MouseSpeed := 20;
end;
warrior.find;
until false;
end.
Some of this code still isn't really my own… BUT THE ORIGINALITY IS STARTING TO SHOW UP.

You guys have taught me so much with your suggestions in this thread, so if I don't make it in on this application I'll be ready to kick ass with my second one!


From: The Killer
"Like Sjoe, I am 100% homo for the league of legends character Taric."
Called sjoe homo/10 thats a yes from me;)


From: Zyt3x
I wasn't sure what to vote until I saw that summertime script. Obvious yes based on that. /s

Jokes aside, I voted yes based on activity and the okay scripts :)


I'm only here to please <3

Ross

2015-04-22 17:40:33

From: Taric
…


AWESOME attitude. Keep up the good work!

3Garrett3

2015-04-23 09:36:54

Admins, poll is closed now so I guess someone should make the decision. Is @Daniel; around or is there someone else to nag?

The Mayor

2015-04-23 13:44:51

From: Taric
I've been putting off replying to all of the comments here long enough… LEZ DO THIS THING.











A lot of my standards have changed just from the suggestions in this thread (mostly removing those god awful case statements). My code has changed from what you see in the examples to something like this:

program TaricHood;

{$DEFINE SMART}
{$I SRL-6/srl.simba}
{$I sps/lib/sps-rs3.simba}
{$I srl-6/lib/misc/srlplayerform.simba}

//Non quest method goes: Pompous 5, Veggy 28, Warrior 45, Gaurd 55, Knight 55+

type thiefTarget = record
leftClick: Boolean;
color, tol, waitTime: Integer;
hue, sat: Extended;
upText, actionText, location: TStringArray;
end;

var
pomp, veggy, warrior, gaurd, knight: thiefTarget;
i, hpCurrent: Integer;

procedure thiefTarget.init(_leftClick: Boolean; _color, _tol, _waitTime: Integer; _hue, _sat: Extended; _upText, _actionText, _location: TStringArray);
begin
self.leftClick := _leftClick;
self.color := _color;
self.tol := _tol;
self.hue := _hue;
self.sat := _sat;
self.upText := _upText;
self.actionText := _actionText;
self.waitTime := _waitTime;
self.location := _location;
end;

procedure initTargets();
begin
pomp.init(false, 11026474, 17, 5000, 0.06, 0.44, ['ompous'], ['ickpocket'], ['taverly']);
veggy.init(true, 4303942, 14, 2000, 0.20, 1.16, ['egetable'], ['egetable'], ['taverly']);
warrior.init(false, 6580084, 31, 5000, 0.11, 0.15, ['ttack'], ['ickpocket'], ['ardougne']);
end;

procedure initPlayerForm();
begin
with playerForm do
begin
name := 'Taric''s 1-99 Thiever';
scriptHelpThread := '';

editBoxLabels := ['Minutes before breaking', 'Minutes to break for', 'Preferred World'];
editBoxDefaults := ['0', '0', '-1'];
end;
end;

procedure declarePlayers();
begin
players.setup(playerForm.players);
currentPlayer := 0;

for i := 0 to high(players) do
with players[i] do
begin
integers[0] := strToInt(playerForm.players[i].settings[0]);
integers[1] := strToInt(playerForm.players[i].settings[1]);
players[i].world := strToInt(playerForm.players[i].settings[2]);
end;
end;

procedure programForeplay();
begin
clearDebug();
disableSRLDebug := true;
smartShowConsole := false; //Because no one likes that black box :p
SmartEnableDrawing := True;

initPlayerForm();
runPlayerForm();

declarePlayers();
if not playerForm.isScriptReady then exit;

setupSRL();

if not players[currentPlayer].login() then
begin
writeLn('An error occured while loggin in... Please re-run the script.');
TerminateScript();
end;

initTargets();

conversationBox.continue(True, True); //For those of you who bot on role playing worlds.
exitTreasure();
minimap.clickCompass();
mainScreen.setAngle(MS_ANGLE_HIGH);
end;

procedure thiefTarget.waitForShtuff();
begin
wait(randomRange(600,800)); //The tick where the player is hurt.

if not hpCurrent >= actionbar.getHPPercent or self.leftClick then
begin
wait(self.waitTime + random(700));
end;
end;

function thiefTarget.isUpText(): Boolean;
begin
if isMouseOverText(self.upText) then
begin
if self.leftClick then
begin
fastClick(MOUSE_LEFT);
self.waitForShtuff();
exit(true);
end else
begin
fastClick(MOUSE_RIGHT);
hpCurrent := actionBar.getHPPercent;
if chooseOption.select(self.actionText) then
begin
smallRandomMouse();
self.waitForShtuff();
exit(true);
end;
end;
end;
exit(false);
end;

function thiefTarget.find(): boolean;
var
x, y, a: integer;
TPA, TMP: TPointArray;
ATPA: T2DPointArray;
b: Tbox;

begin
if not isLoggedin() then exit(false);

if self.isUpText() then exit(true);

findColorsSpiralTolerance(x, y, TPA, self.color, mainScreen.getBounds(), self.tol, colorSetting(2, self.hue, self.sat));

if (Length(TPA) < 1) then exit(false);

//Totes learned this from mah srl application.
b := mainscreen.playerBox;
b.expand(15);
TMP := TPAFromBox(b);
TPA := clearTPAFromTPA(TPA, TMP);

ATPA := TPA.toATPA(30, 5);
ATPA.sortFromMidPoint(mainScreen.playerPoint);

for i := 0 to high(ATPA) do
begin
mouse(middleTPA(ATPA[i]), MOUSE_MOVE);
if self.isUpText() then exit(true);
end;

exit(false);
end;

begin
programForeplay();
repeat
if tabBackPack.isFull then
begin
MouseSpeed := randomRange(30,45);
tabBackpack.dropItems(DROP_PATTERN_SNAKE);
MouseSpeed := 20;
end;
warrior.find;
until false;
end.
Some of this code still isn't really my own… BUT THE ORIGINALITY IS STARTING TO SHOW UP.

You guys have taught me so much with your suggestions in this thread, so if I don't make it in on this application I'll be ready to kick ass with my second one!






I'm only here to please <3


Nice to see you attempting records :D, but you may want to assign the theifTarget via the form as it currently only does warriors :p

Taric

2015-04-23 14:43:02

From: The Mayor
Nice to see you attempting records :D, but you may want to assign the theifTarget via the form as it currently only does warriors :p


I WAS TESTING THE WARRIOR COLORS AT THE TIME OF POSTING THAT. And I feel like mah records still aren't up to shnuff… IDK, I've still got a lot to learn.

Justin

2015-04-25 04:05:56

@Daniel; Can you please review this application as voting has closed.

Taric

2015-04-26 00:29:41

@Justin, Can you please review this application as voting has closed. :p

OR WOULD IT BE BETTER IF I LET DANIEL DECIDE MY FATE.

:unsure:

Justin

2015-04-26 00:57:35

In.

Congratulations.