SCAR Code:
{
[-]--------------------------------------------------------------------------[+]
[-]--------------------------------------------------------------------------[+]
[-] SpoonDemon V0.1 [+]
[-] by Born2Code AKA Travis [+]
[-] [+]
[-] VERY EARLY BETA RELEASE [+]
[-] [+]
[-]--------------------------------------------------------------------------[+]
[-] Description/Startup Info [+]
[-]--------------------------------------------------------------------------[+]
[-] SpoonDemon is a script designed to level up your rs characters from [+]
[-]and wc level and progress change trees as your level goes up! SpoonDemon [+]
[-]is basically RSDemon, but better. SD features an AutoResponder, SRL Random[+]
[-]solver, AntiBan, Ent Finder, 3 Tree Types, crappy walking, crappy banking,[+]
[-]and tons more! [+]
[-] [+]
[-]~Startup Info [+]
[-] -Setup Constants and Players [+]
[-] -Position players at Draynor Bank [+]
[-] -Target RS Window [+]
[-] -32 bit low-detail settings [+]
[-] -DONT PASS LVL 60! YEW LOCATION NOT HERE YET [+]
[-] -Press play and enjoy SpoonDemon! [+]
[-] [+]
[-]--------------------------------------------------------------------------[+]
[-] Features [+]
[-]--------------------------------------------------------------------------[+]
[-]~Auto Responder! [+]
[-]~Ent Finder! [+]
[-]~Normal, Willow, and Oak chopper and banker! (Yews coming soon!) [+]
[-]~Easy proggie reporter and player report! [+]
[-]~Simple Setup! [+]
[-] [+]
[-]--------------------------------------------------------------------------[+]
[-] Coming Updates! [+]
[-]--------------------------------------------------------------------------[+]
[-]~Better Ent Finder! [+]
[-]~Forms! (coming very soon!) [+]
[-]~Yew Location [+]
[-]~Better Walking and Banking [+]
[-]~Custom DTMs for every tree! [+]
[-]~More options in general! [+]
[-]~Droping, Burning, Selling Option! [+]
[-]~Death/Lost Walk! [+]
[-]~New axe getter (wc guide) [+]
[-] [+]
[-]--------------------------------------------------------------------------[+]
[-] Versions [+]
[-]--------------------------------------------------------------------------[+]
[-]~V0.1 Basic Core - [+]
[-] First release of script! Tree, Oak, Willow locations. [+]
[-] [+]
[-]--------------------------------------------------------------------------[+]
[-] Credits [+]
[-]--------------------------------------------------------------------------[+]
[-]~CharmZ Auto Responder Core Procedures [+]
[-]~Fourscape Oak Finding Procedures [+]
[-] [+]
[-]--------------------------------------------------------------------------[+]
[-]--------------------------------------------------------------------------[+]
}
program SpoonDemon;
{.include SRL\SRL.SCAR}
{.include SRL/SRL/Skill/Woodcutting.scar}
var
x, y, CurrentCuttingTime, Loads, TLoads, SDTime, WalkToBit, WalkToBit2, WalkToBit3, WalkBank, a, Ents, EntPresent, LostAxe, AutoRespondCount: Integer;
TypeTree, ChatName: string;
{----------SRL Stats Setup----------}
const
YourSRLID = ''; //SRL ID #
YourSRLPass = ''; //SRL Stats Pass
{----------Optional Setup----------}
const
TreeColor = 662038; //Normal Tree Color
OakColor = 1191727; //Oak Tree Color
WillowColor = 1582886; //Willow Tree Color
YewColor = 857879; //Yew Tree Color
Procedure DeclarePlayers;
begin
{----------Optional Location Setup----------)
bank - At the Bank
tree - At the Trees
(-------------------------------------------}
HowManyPlayers := 1; // Set Number of Players here.
NumberOfPlayers(HowManyPlayers); // Sets the Players Array Length;
CurrentPlayer := 0; // CurrentPlayer = Array Index
Players[0].Name := ''; // Username
Players[0].Pass := ''; // Password
Players[0].Nick := ''; // Nickname, 3 - 4 letters of username
Players[0].Integers[1] := 5; //Amount of loads
Players[0].Integers[2] := 0000; //*OPTIONAL* Pin #
Players[0].Loc := 'bank'; // Players Location
Players[0].Active := True; // Active?
WriteLn('Will now SpoonDemonize ' + inttostr(HowManyPlayers)+' players...');
end;
{...><> Sig and Proggie Procedures <><...}
procedure Signature;
begin
ChangeReportWidth(220);
Status('Starting Up...');
WriteLn(' __________________ ');
Wait(250);
WriteLn(' | | __ ');
Wait(250);
WriteLn(' |______ _____| |__| ');
Wait(250);
WriteLn(' | |__ _______ __ _____ _________ ');
Wait(250);
WriteLn(' | | |/__\ \ \ / / |/ ______/ ');
Wait(250);
WriteLn(' | | / ___ \ \ / /| | \______ ');
Wait(250);
WriteLn(' | | | | | \ \/ / | |\_____ \ ');
Wait(250);
WriteLn(' | | | |___| \ / | |______/ / ');
Wait(250);
WriteLn(' |_____|__|________/\__\__/ |__|\_______/ ');
Wait(250);
WriteLn(' SpoonDemon | Version V0.2 ');
Wait(3000);
end;
procedure Proggie;
begin
Writeln('//==================Progress Report==================\\');
Writeln('Thank you for using SpoonDemon!');
Writeln('Cut approx. ' + IntToStr(TLoads*28) + ' logs!');
Writeln('Auto Responded ' + IntToStr(AutoRespondCount) + ' times!');
Writeln('Please post this proggie at http://srl-forums.com!');
Writeln('\\=================End Progress Report================//');
Writeln('Script by: Travis AKA born2code!');
end;
procedure PlayerReport;
begin
Writeln('//==================' + Players[CurrentPlayer].Name + '==================\\');
Writeln('Location : ' + Players[CurrentPlayer].Loc);
Writeln('\\=================End Player Report================//');
end;
{...><> Amazing AutoRespond Procedure <><...}
//TY Charmz for the next 2 procedures and idea (cleaned up by me)
Function GetChatMessage(Text: String): Boolean;
Var
TX, TY: Integer;
Chat: String;
Begin
If(IsTextInAreaEx(40, 415, 130, 415, TX, TY, ':', 0, SmallChars, False, True, 0, 0, 0))then
Begin
Chat:= Lowercase(Trim(GetTextAtEx(TX + 8, 415, 0, SmallChars, False, False, 0, 1, 16711680, 40, False, TR_AllChars)));
If(Pos(Text, Chat) <> 0)then
Begin
Result:= True;
end;
end;
end;
Function GetChatName(Name: String): Boolean;
Var
I: Integer;
Begin
ChatName:= Lowercase(Trim(GetTextAtEx(21, 415, 0, SmallChars, False, False, 0, 0, 0, 50, False, TR_AllChars)));
I:= Pos(':', ChatName);
If(I <> 0)then
Begin
Delete(ChatName, I, I);
end;
If(Pos(Name, ChatName) <> 0)then
Begin
Result:= True;
end;
end;
procedure AutoRespond;
var
Responce, Level: String;
TheReply: Integer;
begin
if(GetChatMessage(Players[CurrentPlayer].Name))then
begin
AutoRespondCount := AutoRespondCount + 1;
TheReply := Random(10) + 1;
case (TheReply) of
0 : Responce := ('wat');
1 : Responce := ('what');
2 : Responce := ('yeah');
3 : Responce := ('wut');
4 : Responce := ('what do you want');
5 : Responce := ('meh?');
6 : Responce := ('yep?');
7 : Responce := ('me?');
8 : Responce := ('what?');
9 : Responce := ('?');
10 : Responce := ('??');
end;
TypeSend(Responce);
end;
if(GetChatMessage('lol'))
or (GetChatMessage('ha'))
or (GetChatMessage('haha'))
or (GetChatMessage('rofl'))
or (GetChatMessage('lmao'))
or (GetChatMessage('lmfao'))
or (GetChatMessage('tehee'))
or (GetChatMessage('funny'))
or (GetChatMessage('rotfl')) then
begin
AutoRespondCount := AutoRespondCount + 1;
TheReply := Random(10) + 1;
case (TheReply) of
0 : Responce := ('lol');
1 : Responce := ('haha');
2 : Responce := ('rofl');
3 : Responce := ('lmao');
4 : Responce := ('lolz');
5 : Responce := ('roflz');
6 : Responce := ('hehe');
7 : Responce := ('ha');
8 : Responce := ('lols');
9 : Responce := ('rofls');
10 : Responce := ('funny stuff');
end;
TypeSend(Responce);
end;
if(GetChatMessage('wc'))
or (GetChatMessage('woodcutting'))
or (GetChatMessage('wcing'))
or (GetChatMessage('cutting'))
and (GetChatMessage('lvl'))
or (GetChatMessage('level'))
or (GetChatMessage('lvls'))
or (GetChatMessage('lvlz'))
or (GetChatMessage('stats'))
or (GetChatMessage('levels'))then
begin
AutoRespondCount := AutoRespondCount + 1;
Level := IntToStr(GetSkillLevel('woodcutting'));
TheReply:= Random(6) + 1;
case (TheReply) of
0,4,5,6 : Responce:= (Level);
1 : Responce:= ('I''m level ' + Level + ' over here!');
2 : Responce:= ('Only ' + Level + '... XD');
3 : Responce:= ('My lvl is ' + Level);
end;
TypeSend(Responce);
end;
if(GetChatMessage('what'))
or (GetChatMessage('wut'))
or (GetChatMessage('wat'))
and (GetChatMessage('doing'))
or (GetChatMessage('doin'))
or (GetChatMessage('up'))
or (GetChatMessage('happening')) then
begin
AutoRespondCount := AutoRespondCount + 1;
TheReply := Random(5) + 1;
case (TheReply) of
0 : Responce := ('hello');
1 : Responce := ('watz up');
2 : Responce := ('wat up');
3 : Responce := ('whats up');
4 : Responce := ('what up');
5 : Responce := ('hola');
end;
TypeSend(Responce);
end;
end;
{...><> Randoms Procedures <><...}
function FindFastRandoms: Boolean; //By WT-Fakawi.
var
i: Integer;
begin
for i := 1 to 8 do
begin
case I of
1: if FindDead then
Result := True;
2: if FindMod then
Result := True;
3: if FindMime then
Result := True;
4: if FindMaze then
Result := True;
5: if FindQuiz then
Result := True;
6: if FindDemon then
Result := True;
7: begin
if NoGameTab then
begin
Result := True;
Players[CurrentPlayer].loc := 'No GameTab';
Logout;
Exit;
end;
end;
7: begin
if InBlack then
begin
Result := True;
Players[CurrentPlayer].loc := 'InBlack';
Logout;
Exit;
end;
end;
8: RC;
end;
wait(1);
end;
end;
procedure Randoms;
begin
FindNormalRandoms;
FindFastRandoms;
AutoRespond;
if (FindFight) then
begin
Status('Running...');
RunAwayDirection('N');
Wait(8500 + random(3500));
RunBack;
end;
end;
{...><> Fix Client Procedure <><...}
procedure FixClient;
begin
if(not(LoggedIn)) then Exit;
SetChat('hide', 1);
SetChat('off', 2);
SetChat('on', 3);
HighestAngle;
MakeCompass('N');
end;
{...><> Banking Procedures <><...}
procedure Bank;
begin
LowestAngle;
MakeCompass('E');
FFlag(0);
Wait(2050+random(550));
Writeln('Banking')
Repeat
OpenBankGlass('db', false, false)
Until(BankScreen);
FFlag(0);
wait(500 + random(500));
if PinScreen then
begin
InPin(IntToStr(Players[CurrentPlayer].Integers[2]));
end;
FixBank;
Deposit(2,28,2);
CloseBank;
FixClient;
Loads := Loads + 1
end;
{...><> Chopping Procedures <><...}
procedure WaitTree(b, time: integer);
begin
repeat
a := a + 1;
Wait(time+random(270));
Randoms;
until(InvFull) or (a = b);
end;
procedure DecideWhatToChop;
var
LVL: integer;
begin
LVL := GetSkillLevel('woodcutting');
if (LVL >= 1) then
begin
TypeTree := 'Tree';
end;
if (LVL >= 15) then
begin
TypeTree := 'Oak';
end;
if (LVL >= 30) then
begin
TypeTree := 'Willow';
end;
if (LVL >= 60) then
begin
TypeTree := 'Yew';
end;
end;
procedure ChopAnyTree(Color, WaitTreeA, WaitTreeB: integer; Text: String);
begin
FixClient;
Randoms;
if (FindObj(x, y, Text, Color, 5)) then
begin
case Random(7) of
0, 1, 2, 3, 4, 5: begin
Mouse(x, y, 2, 2, true);
end;
6: begin
Mouse(x, y, 2, 2, false);
ChooseOption('hop');
end;
end;
Players[CurrentPlayer].Loc := 'tree';
WaitTree(WaitTreeA, WaitTreeB);
end;
end;
procedure Chop;
begin
case TypeTree of
'Tree': ChopAnyTree(TreeColor, 2, 3800, 'ree');
'Oak': ChopAnyTree(OakColor, 3, 6700, 'ak');
'Willow': ChopAnyTree(WillowColor, 2, 3300, 'illow');
'Yew': ChopAnyTree(YewColor, 5, 5550, 'ew');
end;
end;
{...><> Walking and Figuiring Procedure <><...}
procedure WalkTree;
begin
RadialRoadWalk(FindRoadColor,270,330,70,2,2);
FFlag(0);
If FindSymbol(x,y,'quest') then
Begin
WriteLn('Found quest symbol!')
Mouse(x,y,2,2,true);
Wait(550+random(550));
FFlag(0);
end;
If FindSymbol(x,y,'dungeon') then
Begin
WriteLn('Found dungeon symbol!')
Mouse(x,y,2,2,true);
Wait(550+random(550));
FFlag(0);
end;
end;
//TY Fourscape for Walking!
Procedure BankDTMs;
begin
WalkToBit := DTMFromString('78DA638C676260506740012A0CEC0C5C409A1' +
'188FF030123488D1AAA9A2C3B690611A81A10608CC13407434D22' +
'116AE2806A34F0AB01006D340A3E');
WalkToBit2 := DTMFromString('78DA636464666098CC80024C1938195280342' +
'310FF0702C67F4C186AE2D5381934A06A4080919999B01A06A09A' +
'4944A899825F0D0030C20B70');
WalkToBit3 := DTMFromString('78DA636C626260306040010ECCEC0C1C409A1' +
'188FF0301633DA69A440B760611A81A10606C25420DC82E4322D4' +
'E8E3570300B6030AAD');
WalkBank := DTMFromString('78DA63DCC6C4C0A0C980027881425C409A118' +
'8FF030123488D1AAA9A78356E0639A81A1000ABD126A0663BA65D' +
'186AB612560300E9920B3C');
end;
Procedure WalkOak;
Var
CC, YY : Integer;
Begin
If FindDtm(WalkToBit3, CC, YY, MMX1, MMY1, MMX2, MMY2) then
Begin
WriteLn('Found Oak using DTM #3')
Mouse(CC + 42, YY + 46, 0, 0, True)
FFlag(0);
end else
If FindDtm(WalkToBit, CC, YY, MMX1, MMY1, MMX2, MMY2) then
Begin
WriteLn('Found Oak using DTM #1')
Mouse(CC + 42, YY + 44, 0, 0, True)
FFlag(0);
end else
If FindDtm(WalkToBit2, CC, YY, MMX1, MMY1, MMX2, MMY2) then
Begin
WriteLn('Found Oak using DTM #2')
Mouse(CC + 42, YY + 44, 0, 0, True)
FFlag(0);
end else
Begin
Players[CurrentPlayer].Loc := 'lost';
WriteLn('Could not find Oak!')
LogOut;
NextPlayer(False)
end;
end;
procedure WalkWillow;
begin
RadialWalk(FindWaterColor,230,170,70,2,2);
Wait(4250+random(550));
FFlag(12+random(6));
If FindSymbol(x,y,'fish') then
Begin
WriteLn('Found fish symbol!')
Mouse(x,y,3,0,true);
Wait(550+random(550));
FFlag(0);
end;
end;
procedure WalkYew;
begin
end;
//Now Banking
procedure FindElBank;
Begin
If FindSymbol(x,y,'bank') then
Begin
WriteLn('Found Bank using Symbol')
Mouse(x,y,2,2,true);
Wait(550+random(550));
FFlag(0);
end;
end;
procedure WalkTreeBank;
begin
If FindSymbol(x,y,'quest') then
Begin
WriteLn('Found quest symbol!')
Mouse(x,y,2,2,true);
Wait(550+random(550));
FFlag(0);
end;
RadialRoadWalk(FindRoadColor,180,120,70,2,2);
FFlag(0);
FindElBank;
end;
procedure WalkOakBank;
begin
FindElBank;
end;
procedure WalkWillowBank;
begin
FindElBank;
end;
procedure WalkYewBank;
begin
end;
procedure WalkToTree;
begin
case TypeTree of
'Tree': WalkTree;
'Oak': WalkOak;
'Willow': WalkWillow;
'Yew': WalkYew;
end;
end;
procedure WalkToBank;
begin
case TypeTree of
'Tree': WalkTreeBank;
'Oak': WalkOakBank;
'Willow': WalkWillowBank;
'Yew': WalkYewBank;
end;
end;
{...><> Loops and Startup Procedures <><...}
procedure StartUp;
begin
ClearReport;
ClearDebug;
SetupSRL;
SRLId := YourSRLID;
SRLPassword := YourSRLPass;
BankDTMs;
Signature;
MoveToTray;
ActivateClient;
MarkTime(SDTime);
DeclarePlayers;
end;
procedure Lost;
begin
if (Players[CurrentPlayer].Loc = 'lost') then
begin
Logout;
PlayerReport;
end;
end;
procedure NoBan2;
begin
case Random(4) of
0: HoverSkill('random', false);
1: DoEmote(1 + Random(20));
2: PickUpMouse;
3: begin
GameTab(2 + Random(12));
wait(2000+random(1500));
end;
end;
end;
procedure NoBan;
begin
case Random(5) of
0, 1, 2, 3: ;
4: NoBan2;
end;
end;
procedure Loop;
begin
if(not(LoggedIn)) then Exit;
repeat
EntPresent := 0;
LostAxe := 0;
FixClient;
DecideWhatToChop;
if (Players[CurrentPlayer].Loc = 'bank') then
begin
WalkToTree;
end;
Lost;
repeat
Chop;
NoBan;
until(InvFull) or (EntPresent = 1);
if (Players[CurrentPlayer].Loc = 'tree') then
begin
WalkToBank;
Bank;
end;
Lost;
Loads:=Loads+1
Tloads:=Tloads+1
PlayerReport;
Proggie;
DecideWhatToChop;
SRLRandomsReport;
Until (Loads = Players[CurrentPlayer].Integers[1]);
NextPlayer(True);
Loads:=0;
Exit;
end;
begin
StartUp;
if not LoggedIn then LoginPlayer;
repeat
If(not(LoggedIn))then NextPlayer(False);
NickNameBMP := CreateBitmapMaskFromText(Players[CurrentPlayer].Nick, UpChars);
Loop;
until(false);
end.