Haxor
2008-05-20 05:15:30
<!– BEGIN TEMPLATE: formanswers –>
Haxor - SRL Member Application Form
Haxor
What is the meaning to life?
To try your best in everything you do
Where you Referred to SRL? If yes, by whom?
no
Programming Knowledge
Other Communitys
sythe( i dont go there anymore) fagex(not active)moparisthebest(cool site)
How Long have You Played Runescape
3years(mainly script
Are you affilated in anyway with Jagex LTD?
No
—————————————————–
Please write down a paragraph about Yourself.
hey srl, i am turning 13 in august.
I am a generous and a funny guy, i like scripting and the computer(obviously) and do well at school.
I play soccer and other sports. i LIKE MY SPORTS.
I try to script good and help the community in areas i can. i try to help people that are inexperianced and havnt scripted before. I stay active most of the time unless im on break.
Thats about it
Haxor
——————————————————
Please Post a Sample of your Work. Only SCAR Scripts Accepted
——————————————————
<!– END TEMPLATE: formanswers –>
Haxor - SRL Member Application Form
Haxor
What is the meaning to life?
To try your best in everything you do
Where you Referred to SRL? If yes, by whom?
no
Programming Knowledge
Other Communitys
sythe( i dont go there anymore) fagex(not active)moparisthebest(cool site)
How Long have You Played Runescape
3years(mainly script
Are you affilated in anyway with Jagex LTD?
No
—————————————————–
Please write down a paragraph about Yourself.
hey srl, i am turning 13 in august.
I am a generous and a funny guy, i like scripting and the computer(obviously) and do well at school.
I play soccer and other sports. i LIKE MY SPORTS.
I try to script good and help the community in areas i can. i try to help people that are inexperianced and havnt scripted before. I stay active most of the time unless im on break.
Thats about it
Haxor
——————————————————
Please Post a Sample of your Work. Only SCAR Scripts Accepted
program Monkinator;
{
Credits:
-Pyro for the Human Text function which I took from Rev 1 which I think is useful for AntiBan
Someone please tell me if there is a function similar in the current Revision though.
-Kevin Wolf for helping me whenever I had a problem with the script
Notice:
-Requires healing when the Health in the top right is not green
}
{.include SRL\SRL\Misc\Smart.scar}
{.include SRL\SRL.scar}
{.include SRL\SRL\Skill\Fighting.scar}
{.include SRL\SRL\Misc\Users.scar}
var
gAutoTalkCount, gMonkHealCount, gEatHealCount, gMovementCount, gMonkKillCount, gBreakCount, gWaterColour: Integer;
MonkColours : TIntegerArray;
const
Prefix = 109; //The world you want to connect to with SMART.
HiDetail = False; //High Detail or Low Detail?
Signed = True; //Signed or UnSigned?
WaterColour = 12090223; //Color of the Fountains water on the minimap
MMouseSpeed = 25; //MouseSpeed
procedure SetUp;begin
MonkColours := [2244702];
end;
//--------------------------------Player Array Indices
const //If you touch these, I will break your legs.
FightStyle = 0; //DO NOT TOUCH IF YOU LIKE WALKING
AutoTalk = 0; //I'M SERIOUS I WILL BREAK THEM
BreakTime = 0; //BALLZ. CUT. OFF.
HealMonk = 1; //These are index values for the player array variables, not settings.
NextTime = 1; //So dont change them of the script won't work?
EatHeal = 2;
LevelToGet = 2;
LogOutFood = 3;
LevelsToGet = 3;
MonksToKill = 4;
FoodColour = 5;
StartLevel = 7;
MonksKilled = 8;
LastBreak = 9;
WorkedFor = 10;
CurrentLvl = 11;
//--------------------------------Report
procedure Report;
var
Index: Integer;
begin
Writeln('~~~~~~~~~~~~~~~~~~Monkinator by Haxor~~~~~~~~~~~~~~~~~~');
Writeln('TimeRunning -> ' + TimeRunning);
Writeln('Number of AutoTalks -> ' + IntToStr(gAutoTalkCount));
Writeln('Number of Monk Healing -> ' + IntToStr(gMonkHealCount));
Writeln('Number of Food Eaten -> ' + IntToStr(gEatHealCount));
Writeln('Number of Movements -> ' + IntToStr(gMovementCount));
Writeln('Number of Breaks -> ' + IntToStr(gBreakCount));
Writeln('Number of Monks Killed -> ' + IntToStr(gMonkKillCount));
Writeln('Gained Approximately -> ' + FloatToStr(gMonkKillCount * 15 * 4) + ' XP');
for Index := 0 to High(Players) do
with Players[Index] do
begin
Writeln('-----------------------------> ' + Name);
if Loc <> '' then
Writeln('Loc -------------------------> ' + Loc);
Writeln('Active ----------------------> ' + BoolToStr(Active));
Writeln('Worked ----------------------> ' + IntToStr(Worked));
Writeln('Monks killed ----------------> ' + IntToStr(Integers[MonksKilled]));
Writeln('Gained Approx. XP -----------> ' + FloatToStr(Integers[MonksKilled] * 15 * 4));
Writeln('Starting Level --------------> ' + IntToStr(Integers[StartLevel]));
if (Integers[CurrentLvl] > Integers[StartLevel]) then
begin
Writeln('Current Level ---------------> ' + IntToStr(Integers[CurrentLvl]));
Writeln('Gained Levels ---------------> ' + IntToStr(Integers[CurrentLvl] - Integers[StartLevel]));
end;
end;
Writeln('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
end;
{*******************************************************************************
function FindMonkWaterColour: Integer;
By: Tarajunky, Edited for Script by Haxor
Description: Autodetects Water Color on Minimap
*******************************************************************************}
function FindMonkWaterColour: Integer;
var
GC, a, l, TestColor, Red, Green, Blue : integer;
var
P:array of Tpoint;
begin
GC := gWaterColour;
Flag;
FindColorsSpiralTolerance(MMCX, MMCY, P, GC, MMX1, MMY1, MMX2, MMY2, 60);
l:=GetArrayLength(P);
for a:= 0 to l-1 do
begin
if rs_OnMinimap(P[a].x,P[a].y) then
begin
TestColor := GetColor(P[a].x,P[a].y);
if SimilarColors(TestColor,GC,50) then
begin
Red := (TestColor mod 256);
Green := ((TestColor / 256) mod 256);
Blue := ((TestColor / 256) / 256);
{Writeln(IntToStr(Red));
Writeln(IntToStr(Green));
Writeln(IntToStr(Blue));
Writeln(IntToStr(Green - Red));
Writeln(IntToStr(Blue - Red));
Writeln(IntToStr(Blue - Green));}
if Green - Red >= -25 then if Green - Red <= 25 then
if Blue - Red >= 40 then if Blue - Red <= 100 then
if Blue - Green >= 30 then if Blue - Green <= 90 then
begin
Result := TestColor;
WaterColor := TestColor;
gWaterColour := TestColor;
WriteLn('WaterColor = ' + IntToStr(TestColor));
Exit;
end;
end;
end;
end;
WriteLn('Could not find Water Color!');
Result := 0;
end;
{*******************************************************************************
function HumanText(Text: String; Chance: Integer): String;
By: Pyro
Description: Returns A text humanly. DOES NOT TYPE. But will make ACTUAL human Mistakes
Chance is like well think of it as 1 out of ......
*******************************************************************************}
function HumanText(Text: string; Chance: Integer): string;
var
Keyboard: array[1..8] of string;
Tempi, i, l, NewKey: Integer;
Temps, Newtext: string;
begin
keyboard[1] := '1234567890-=';
keyboard[2] := 'qwertyuiop[]\';
keyboard[3] := 'asdfghjkl;';
keyboard[4] := 'zxcvbnm,./';
keyboard[5] := '!@#$%^&*()_+';
keyboard[6] := 'QWERTYUIOP{}|';
keyboard[7] := 'ASDFGHJKL:"';
keyboard[8] := 'ZXCVBNM<>?';
for l := 1 to Length(Text) do
begin
Temps := Copy(Text, l, 1)
if (Random(Chance) = 0) then
begin
for i := 1 to 8 do
begin
Tempi := Pos(Temps, keyboard[i])
if (tempi <> 0) then
begin
if (Tempi = 1) then
NewKey := 2;
if (Tempi = Length(keyboard[i])) then
Newkey := Tempi - 1;
if (Tempi <> 1) and (Tempi <> 10) then
Newkey := Tempi + Random(2) - Random(2);
NewText := Copy(keyboard[i], NewKey, 1);
Break;
end;
end;
end else
Newtext := Temps ;
Result := Result + Newtext;
end;
end;
{*****************************************************************************
function IsFightAt(x, y: Integer): Boolean;
By: RealRune, Edited for script by increasing checking range by Haxor
^^ Haven't heard about him in ages, Whatever happened?
Description: results true if it finds a fight near x,y.
*****************************************************************************}
function MyIsFightAt(x, y: Integer): Boolean; //Not really my :P
begin
Result := (FindColor(x, y, 65280, x - 30, y - 70, x + 30, y + 30) or FindColor(x, y, 255, x - 30, y - 70, x + 30, y + 30));
if Result then
Writeln('FightAt');
end;
function FindObjext(var Ox, Oy: Integer; Name: TStringArray; Colour: TIntegerArray; Tolerance: Integer; X1, Y1, X2, Y2: Integer): Boolean;
var
Tx, Ty, Ind: Integer;
Found, Points: TPointArray;
ColourPoints : T2DPointArray;
FPoint: TPoint;
begin
Status('Searching for Monk');
for Ind := 0 to High(Colour) do
begin
FindColorsSpiralTolerance(Tx, Ty, Points, Colour[Ind], X1, Y1, X2, Y2, Tolerance);
Status('Adding Points found of colour ' + IntToStr(Colour[Ind]));
Found := CombineTPA(Found, Points);
end;
if (High(Found) = 0) then Exit;
ColourPoints := SplitTPA(Found, 15);
for Ind := 0 to High(ColourPoints) do
begin
FPoint := MiddleTPA(ColourPoints[Ind]);
MMouse(FPoint.X, FPoint.Y, 2, 2);
Wait(600 + Random(500));
if (IsUpTextMultiCustom(Name)) then
begin
Result := True;
GetMousePos(Ox, Oy);
Exit;
end;
end;
end;
{*******************************************************************************
function FightNPC(Colors : TIntegerArray, tol, TimeOut:
Integer): Boolean;
By: WT-Fakawi & Cazax, Edited to personal Preference by Haxor.
Description: Fights NPC. Input an array of colors. (May be the same colors),
tol = tolerance, TimeOut = amount of time before clicking on next NPC
*******************************************************************************}
function MyFightNPC(Colors : TIntegerArray; Tol, TimeOut:
Integer; ToDo: procedure(); Between: Integer): Boolean;
var
Mark, x, y, T: Integer;
begin
if (LoggedIn) and (not InFight) then
if (FindObjext(x, y, ['ttack', 'ack Mon', 'onk', 'Attack Monk', 'tack', 'tack M', 'Monk', 'Attack'], Colors, T, MSX1, MSY1, MSX2, MSY2)) then
if not MyIsFightAt(X, Y) then if not InFight then
begin
if (not (LoggedIn) or (FindDead)) then Exit;
if (Random(20) = 0) then
begin
Mouse(x, y, 0, 0, False);
Wait(250 + Random(500));
ChooseOption('ttack');
end else
if (IsUpText('ttack')) then
Mouse(x, y, 0, 0, True);
if (not (LoggedIn) or (FindDead)) then Exit;
Wait(2000);
FFlag(10);
MarkTime(Mark);
repeat
Result := True;
if (not (LoggedIn) or (FindDead)) then Exit;
ToDo();
Wait(Between);
if (TimeFromMark(Mark) > TimeOut) then Exit;
until (not InFight or FindDead);
end else
Result := False;
if Result then
begin
Inc(Players[CurrentPlayer].Integers[MonksKilled]);
Inc(gMonkKillCount);
end;
end;
//--------------------------------AutoColour
function AutoColourMonkies: Integer; //Here incase I can somehow make it work good
var
GC, a, l, TestColor, Red, Green, Blue, Index, Hi: integer;
Buffer: Integer;
Canvas: TCanvas;
P:array of Tpoint;
begin
Status('AutoColouring Monks...');
SetAngle(True);
Buffer := BitmapFromString(MSX2, MSY2, '');
Canvas := GetBitmapCanvas(Buffer);
SafeCopyCanvas(GetClientCanvas, Canvas, MSX1, MSY1, MSX2, MSY2, MSX1, MSY1, MSX2, MSY2);
SetTargetBitmap(Buffer);
Hi := High(MonkColours);
for Index := 0 to Hi do
begin
GC := MonkColours[Index];
Flag;
FindColorsSpiralTolerance(MSCX, MSCY, P, GC, MSX1, MSY1, MSX2, MSY2, 15);
l:=GetArrayLength(P);
for a:= 0 to l-1 do
begin
Status('AutoColouring Monks...{' + IntToStr(Index) + '/' + IntToStr(Hi) + '}(' + IntToStr(A) + '/' + IntToStr(l) + ')');
TestColor := GetColor(P[a].x,P[a].y);
if SimilarColors(TestColor,GC,15) then
begin
Red := (TestColor mod 256);
Green := ((TestColor / 256) mod 256);
Blue := ((TestColor / 256) / 256);
if Red >= 65 then if Red <= 130 then
if Green >= 45 then if Green <= 90 then
if Blue >= 25 then if Blue <= 50 then
begin
MonkColours := CombineIntArray(MonkColours, [TestColor]);
Inc(Result);
end;
end;
end;
end;
ClearSameIntegers(MonkColours);
SetTargetDc(SmartGetDC);
FreeBitmap(Buffer);
Status('AutoColouring Complete, New length of MonkColour array: ' + IntToStr(Length(MonkColours)));
Writeln('AutoColouring Complete, New length of MonkColour array: ' + IntToStr(Length(MonkColours)));
end;
//--------------------------------Forwards
procedure AntiRandom; forward;
procedure LogIn; forward;
//--------------------------------Player
procedure SetLoc(Reason: string);
begin
with Players[CurrentPlayer] do
begin
Writeln(Name + ' ' + Reason);
Loc := Reason;
end;
Report;
end;
procedure ChangePlayer(Reason: string; Active: Boolean);
begin
SetLoc(Reason);
NextPlayer(Active);
LogOut;
LogIn;
end;
//--------------------------------Position Functions
function FindSymbolEx(SymbolName: string): Boolean;
var
Bx, By: Integer;
begin
Result := FindSymbol(Bx, By, SymbolName);
end;
function InLumby: boolean; //Most likely
begin
Result := FindSymbolEx('quest') or FindSymbolEx('guide');
end;
function FindCentre(var X, Y: Integer): Boolean;
var
FoundPoints: TPointArray;
MidPoint : TPoint;
begin
if FindSymbol(X, Y, 'water') then
begin
Result := True;
Exit;
end;
FindColorsTolerance(FoundPoints, FindMonkWaterColour, MMX1, MMY1, MMX2, MMY2, 0);
if (Length(FoundPoints) > 0) then
begin
MidPoint := MiddleTPA(FoundPoints);
X := MidPoint.X;
Y := MidPoint.Y;
Result := True;
Exit;
end;
Result := False;
end;
function InTemple: Boolean;
var
X, Y : Integer;
begin
if FindSymbol(X, Y, 'water') then
begin
Result := True;
Exit;
end;
if (FindMonkWaterColour + FindWaterColor) > 0 then
Result := True;
end;
function PosInTemple: string;
var
Px, Py: Integer;
TB, LR: string;
begin
Result := 'X';
if not FindCentre(Px, Py) then
Exit;
if (Px >= MMCX) then
LR := 'L'
else
LR := 'R';
if (Py >= MMCY) then
TB := 'T'
else
TB := 'B';
Result := TB + LR;
if (Distance(Px, Py, MMCX, MMCY) < 10) then
Result := 'C';
end;
//--------------------------------Miscellaneous
procedure DoWhileWait(ToDo: procedure(); HowLong: Integer);
var
T: Integer;
begin
for T := 1 to (HowLong div 500) do
ToDo();
end;
procedure MouseOnColour(Mx, My: Integer; Rx, Ry: Integer; Left: Boolean; Colour, xMod, yMod: Integer);
var
Cx, Cy: Integer;
begin
Cx := Mx;
Cy := My;
repeat
Cx := Cx + xMod;
Cy := Cy + yMod;
until(GetColor(Cx, Cy) = Colour);
Mouse(Cx + xMod, Cy + yMod, Rx, Ry, Left); //Add it again to make sure we're in a little :P
end;
//--------------------------------Form Parsing
function FightMode: Integer;
begin
case LowerCase(StrGet(Players[CurrentPlayer].Strings[0], 1)) of
'a': Result := 1;
's': Result := 2;
'c': Result := 3;
'd': Result := 4;
end;
end;
//--------------------------------Player Events
function LocChanged: Boolean;
begin
Result := Players[CurrentPlayer].Loc <> '';
if Result then
ChangePlayer('Loc changed. (' + Players[CurrentPlayer].Loc + ')', False);
end;
function KilledUpTo: Boolean;
begin
with Players[CurrentPlayer] do
Result := Integers[MonksKilled] >= Integers[MonksToKill];
if Result then
ChangePlayer('has killed their maximum number of Monks', False);
end;
function IsBreakNow: Boolean;
begin
with Players[CurrentPlayer] do
Result := TimeFromMark(Integers[LastBreak]) >= ((Integers[BreakTime] * 60000) - Random(120000));
end;
procedure BreakNow;
begin
if IsBreakNow then
begin
Writeln('Taking a break');
Status('Taking a break');
LogOut;
SleepAndMoveMouse(20000 + Random(30000));
LogInPlayer;
MarkTime(Players[CurrentPlayer].Integers[LastBreak]);
Inc(gBreakCount);
Writeln('Break Over');
Status('Break Over');
end;
end;
function IsNextPlayer: Boolean;
begin
with Players[CurrentPlayer] do
Result := TimeFromMark(Integers[WorkedFor]) >= (Integers[NextTime] * 60000);
end;
function ActiveCount: Integer;
var
Index: Integer;
begin
for Index := 0 to High(Players) do
with Players[Index] do
if Active then Inc(Result);
end;
function PlayersActive: Boolean;
begin
Result := ActiveCount > 0;
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PlayerActive~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
function PlayerActive: Boolean;
begin
Result := Players[CurrentPlayer].Active;
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PlayerActive~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Healing~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
function NeedFood: Boolean;
var
Fx, Fy: Integer;
begin
Result := not FindColor(Fx, Fy, 65280, 730, 30, 740, 40);
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Healing~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Eat~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure Eat;
var
Fx, Fy: Integer;
begin
if not (Players[CurrentPlayer].Booleans[EatHeal]) then
Exit;
if (NeedFood) then
repeat
GameTab(4);
if (FindColorSpiralTolerance(Fx, Fy, Players[CurrentPlayer].Integers[FoodColour], MIX1, MIY1, MIX2, MIY2, 5)) then
begin
MMouse(Fx, Fy, 2, 2);
GetMousePos(Fx, Fy);
Wait(250 + Random(500));
if (IsUpText('Eat')) then
Mouse(Fx, Fy, 1, 1, True);
DoWhileWait(@AntiRandom, 3000);
Inc(gEatHealCount);
end else
begin
ChangePlayer('has run out of Food.', not Players[CurrentPlayer].Booleans[LogOutFood]);
Exit;
end;
until(not NeedFood);
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Eat~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MoveToAbbot~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure MoveToAbbot;
var
PlaceHolder: string;
Points : TPointArray;
Box : TBox;
Mx, My : Integer;
RoadColour : Integer;
begin
MakeCompass('N');
PlaceHolder := PosInTemple;
if PlaceHolder = 'X' then
begin
if InTemple then
begin
LogOut;
LogInPlayer
end else
ChangePlayer('is no longer in the Temple(H)', False);
Exit;
end else
if not (PlaceHolder = 'C') then
begin
FindCentre(Mx, My);
Mouse(Mx, My, 2, 2, True); //Move Centre
Wait(250 + Random(250));
Flag;
Wait(300 + Random(200));
end;
RoadColour := FindRoadColor;
FindColorsSpiralTolerance(MMCX, MMCY, Points, RoadColour, MMX1, MMY1, MMX2, MMY2, 0);
if Length(Points) < 5 then
Exit;
Box := GetTPABounds(Points);
Writeln('Moving to Monk');
MouseOnColour(Box.X2, Box.Y2, 1, 1, True, RoadColour, -2, -2); //Move bottom right
Wait(250 + Random(250));
Flag;
Wait(300 + Random(200));
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MoveToAbbot~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~healByAbbot~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure HealByAbbot;
var
Ax, Ay, Tries: Integer;
begin
repeat
while (not FindObjext(Ax, Ay, ['Talk', 'Talk-to', 'alk-to', 'bbot Lan', 'angley', 'Abbot', 'bbot'], MonkColours, 5 * Tries, MSX1, MSY1, MSX2, MSY2)) and (Tries < 6) do
begin
Inc(Tries);
Wait(200 + Random(800));
AntiRandom;
end;
if (Tries >= 6) then
begin
ChangePlayer('cannot find Abbot Langley to heal', False);
Exit;
end;
GetMousePos(Ax, Ay);
if (Random(20) = 0) then
begin
Mouse(Ax, Ay, 0, 0, False);
Wait(250 + Random(500));
ChooseOption('alk-to');
end else
if (IsUpText('alk-to')) then
Mouse(Ax, Ay, 0, 0, True);
Wait(200 + Random(500));
Flag;
Wait(600 + Random(750));
if ClickToContinue then
begin
Wait(800 + Random(750));
if FindNPCChatText('heal me', ClickLeft) then
begin
Wait(800 + Random(750));
if ClickToContinue then
begin
Wait(800 + Random(600));
if ClickToContinue then
begin
Wait(800 + Random(600));
if ClickToContinue then
begin
Wait(800 + Random(600));
Inc(gMonkHealCount);
end;
end;
end;
end;
end;
Wait(500 + Random(600));
AntiRandom;
until(not NeedFood);
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~healByAbbot~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MonkHeal~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure MonkHeal;
begin
if not Players[CurrentPlayer].Booleans[HealMonk] then
Exit;
if NeedFood then
begin
MoveToAbbot;
HealByAbbot;
end;
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MonkHeal~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Heal~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure Heal;
begin
MonkHeal;
Eat;
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Heal~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~AutoTalker~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure AutoTalker;
var
Phrases: TStringArray;
Mistake: string;
Correct: string;
Tail : string;
Rand : Integer;
begin
if (not Players[CurrentPlayer].Booleans[AutoTalk]) then
Exit;
Phrases := ['HI', 'hello', 'whats up', 'im bored', 'Neally done this lvl', 'are you a pker', 'SOOO BORING', 'TALK', 'runescape is boring', 'noob', 'loser', 'choob', 'Runescape is so addictive', 'awwwwww bored', 'cmon lvl', 'i own all', 'ure ugly', 'im hot', 'duk', 'HMMMMMM', 'Neally done here', 'monks are sooo cool', 'i like it how they heal em selves', 'im gonna go soon', 'Monks are soo weak', 'CMON LVL', 'Neally there', 'are you a pure?', 'what type of pure are you', 'whats your name', 'raaaaah', 'neally my bed time', 'sooooon', 'Monks are too good for me', 'i own monk', 'im a str pure', 'im a defence pure', 'im a attk pure', 'OMG!', 'i got a level woot', 'omg i got a lvl', 'Yess', 'nooo', 'Cmon', 'gotta take dog for a walk soon', 'i love runescape', 'what are you doing here', 'im bringing sexy back', 'what music you like?', 'im tired as', 'its almost 12 here', 'neally time for bed', 'its ur bed time'];
Rand := Random(Length(Phrases));
Mistake := HumanText(Phrases[Rand], Random(20) + 20);
Correct := Phrases[Rand];
if (Correct <> Mistake) then
begin
Writeln('Made typing mistake(' + Correct + ') --> ' + Mistake);
TypeSend(Mistake);
Tail := '"';
end;
TypeSend(Correct + Tail);
Inc(gAutoTalkCount);
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~AutoTalker~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~AntiBan~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure AntiBan;
begin
case Random(1000) of
1 : AutoTalker;
2 : RandomRClick;
3 : begin
RandomMovement;
SetAngle(True);
MakeCompass('N');
end;
4 : PickUpMouse;
5 : HoverSkill('random', False);
6 : AlmostLogOut;
99: BoredHuman;
end;
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~AntiBan~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~AntiRandom~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure AntiRandom;
begin
if not LoggedIn then LogInPlayer;
AntiBan;
FindNormalRandoms;
BreakNow;
if not InTemple then
ChangePlayer('is no longer in Temple(AR)', False);
if InLumby then
ChangePlayer('has died and is in lumbridge =[', False);
Heal; //For healing during fighting purposes
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~AntiRandom~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Movement~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure Movement;
var
PlaceHolder: string;
Points : TPointArray;
Box : TBox;
Mx, My : Integer;
RoadColour : Integer;
begin
MakeCompass('N');
PlaceHolder := PosInTemple;
RoadColour := FindRoadColor;
FindColorsSpiralTolerance(MMCX, MMCY, Points, RoadColour, MMX1, MMY1, MMX2, MMY2, 0);
if Length(Points) < 5 then
Exit;
Box := GetTPABounds(Points);
FindCentre(Mx, My);
case PlaceHolder of
'X' : begin
if InTemple then
begin
LogOut;
LogInPlayer
end else
ChangePlayer('is no longer in the Temple', False);
Exit;
end;
'TL': begin
Writeln('Moving');
case Random(2) of
0: MouseOnColour(Box.X1, Box.Y2, 1, 1, True, RoadColour, 2, -2); //Move bottom left
1: Mouse(Mx, My, 2, 2, True); //Move Centre
end;
Wait(250 + Random(250));
Flag;
Wait(300 + Random(200));
end;
'BL': begin
Writeln('Moving');
case Random(2) of
0: MouseOnColour(Box.X1, Box.Y1, 1, 1, True, RoadColour, 2, 2); //Move top left
1: Mouse(Mx, My, 2, 2, True); //Move Centre
end;
Wait(250 + Random(250));
Flag;
Wait(300 + Random(200));
end;
'TR', 'BR': begin //For some reason?
Writeln('Moving');
Mouse(Mx, My, 2, 2, True); //Move Centre
Wait(250 + Random(250));
Flag;
Wait(300 + Random(200));
end;
'C': begin
Writeln('Moving');
case Random(2) of
0: MouseOnColour(Box.X1, Box.Y1, 1, 1, True, RoadColour, 2, 2); //Move top left
1: MouseOnColour(Box.X1, Box.Y2, 1, 1, True, RoadColour, 2, -2); //Move bottom left
end;
Wait(250 + Random(250));
Flag;
Wait(300 + Random(200));
end;
end;
Inc(gMovementCount);
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Movement~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~LogIn~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure LogIn;
begin
with Players[CurrentPlayer] do
begin
if not LoggedIn then
begin
LogInPlayer;
SetRun(True);
AutoColourMonkies;
MarkTime(Integers[LastBreak]);
MarkTime(Integers[WorkedFor]);
end;
if Integers[StartLevel] = 0 then
begin
SetFightMode(FightMode);
end;
end;
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~LogIn~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Fight~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure Fight;
var
Tries: Integer;
begin
while not (InFight or MyFightNPC(MonkColours, 5 * Tries, 30000, @AntiRandom, 500)) do
begin
Inc(Tries);
if (Tries >= 3) then
begin
if (Random(15) = 10) then
AutoColourMonkies;
Movement;
Tries := 1;
end;
AntiRandom;
end;
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Fight~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MainLoop~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
procedure MainLoop;
begin
repeat
LogIn;
SetAngle(True);
Fight;
Heal;
Report;
until(false);
end;
{!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Main_Loop~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!}
begin
SetUpSRL;
ClearDebug;
rs_DeleteUID;
SetUp;
gWaterColour := WaterColour;
MouseSpeed := MMouseSpeed;
SmartSetup(ReadINI('World' + IntToStr(Prefix), 'Prefix', AppPath + 'includes\SRL\SCSS\worlds.ini'), HiDetail, Signed);
SRLPlayerForm(True, ['AutoTalk', 'Healing with Monk', 'Eating to Heal', 'Log out when out of Food?(If only using Food)', 'Log out break every X Minutes'], ['X Minutes between break', 'Max. Minutes to Work before NextPlayer', 'Max. Level to Achieve', 'Max. Levels to Gain', 'Max. Monks to Kill(Etchy Counting)', 'Food Colour(If Any)'], ['Fight Mode'], []);
while not(SmartReady) do Wait(100);
SetTargetDC(SmartGetDC);
if not(LoggedIn) then
while not(SmartGetColor(386, 249) = 65535) do Wait(100);
LogOut;
MoveToTray;
while PlayersActive do
MainLoop;
end.——————————————————
<!– END TEMPLATE: formanswers –>