Simba Code:
program Rain Fruits; //by Psdiddles
{$DEFINE SRL5}
{$DEFINE SMART}
{$i SRL/srl.simba}
{$i sps/sps.simba}
{$i SRL/SRL/misc/paintsmart.simba}
{$i SRL/SRL/skill/summoning.simba}
{================================================= =======]
[ Rain Fruits V1.5 ]
[ By: ]
[ Psdiddles ]
[================================================== ======]
[ Directions: 1.MAKE SURE YOU HAVE summoning.simba ]
[ 2.Fill out SRL Stats if you have it, leave ]
[ it as Anonymous if you don't ]
[ 3.Fill out DeclarePlayers ]
[================================================== ======}
Const
Version = '1.5';
PickUpMulti = true;//true = picks up most fruits(currently pap's & pin's)
//false = only papayas
//SRL Stats
SRLStats_Username = 'User'; Optional
SRLStats_Password = 'anon1337';
World = 0;//89,47,83(my lowest ping worlds), 0 for random
Members = true;
Signed = true;
var
TimePlayer,ScrollsUsed, AntiBanUsed,Profit,CTS2,
Loads,t,Miss,PickNum,PapPicked,
StartScrolls,CurScrolls,SDif,SDif2,
PinNum,Inter: Integer;
PapCols,PinCols,BCols,ObCols:TIntegerArray;
Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
Loc := 'ready';
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'Runecrafting';
Active := True;
end;
end;
procedure LoadVars;
begin
PapCols := [2603419,3252863,3649157];
PinCols := [4364763,2913935];
BCols := [5924980,6386046];
ObCols := [5794931,5794329];
end;
//FindStage needs optimizing
procedure FindStage;//finds what stage the player is in
begin
if not UsingFamiliar then
Players[CurrentPlayer].Loc :='banking';
if InvFull then
Players[CurrentPlayer].Loc:='banking';
Players[CurrentPlayer].Loc :='ready';
end;
procedure SetupSps;
begin
SPS_Setup(RUNESCAPE_SURFACE, ['8_6']);
SPS_Continue := true;;
end;
{************************************************* ******************************
Procedure HumanMMouse(eX, eY: Integer);
By: Flight
Description: Human-like miss-and-correct mouse movement
************************************************** *****************************}
Procedure HumanMMouse(eX, eY, ranX, ranY: Integer);
var
randSpeed: extended;
X,Y,X2,Y2,A,Dist,MP: integer;
begin
A := MouseSpeed;
GetMousePos(X, Y);
Dist := Distance(X, Y, eX, eY);
MP := Round(Dist/150);
if MP < 0 then
MP := 1;
randSpeed := (random(MouseSpeed) / 2.0 + MouseSpeed) / 10.0;
X2 := RandomRange(eX-(A*MP), eX+(A*MP));
Y2 := RandomRange(eY-(A*MP), eY+(A*MP));
WindMouse(X, Y, X2, Y2, 9.0, 3.0, 10.0 / randSpeed, 12.0 / randSpeed, 10.0 * randSpeed, 10.0 * randSpeed);
GetMousePos(X, Y);
MMouse(eX, eY, ranX, ranY);
MouseSpeed := A;
end;
function FamVanish:Boolean;
begin
if FindChatBoxText('before your familiar vanishes',8,127)then
begin
Result:=True;
end else
Result:=False;
end;
{************************************************* ******************************
Function ModInteractFamiliar: Boolean;
By: Flight, modified for use by Psdiddles
Description: Handles all interactions between our familiar,
returns true if successful.
Options:
-'' : Will left click on interaction tab
-'Attack','Cast','Interact,'Renew','Take','Dismiss' ,'Call','Details','Select'
************************************************** *****************************}
Function ModInteractFamiliar(Option:String): Boolean;
begin
if (not LoggedIn) then exit;
if FamVanish then
begin
Result:=False;
Exit;
end;
if (GetSummonPoints<12) then
begin
Players[CurrentPlayer].Loc:='recharge';
Writeln('Out of points, time to recharge');
Result:=False;
Exit;
end;
if UsingFamiliar then
begin
if (Option = '') then
begin
MouseBox(695,140,740,155,1);
Result := True;
end else
begin
MouseBox(695,140,740,155,2);
if ChooseOption(Option) then
Result := True
else
srl_Warn('InteractFamiliar', 'Incorrect option', warn_AllVersions);
end;
end else
begin
srl_Warn('InteractFamiliar', 'No familiar present!', warn_AllVersions);
Result:=False;
Exit;
end;
Wait(100 + Random(50));
end;
function CountScrolls:Integer;
var
SDTM,x,y: Integer;
begin
SDTM:= DTMFromString('78DA63EC676660F0626440064D9B2C18648 03' +
'448F43F889E02546383AA868181094CC24419E702D5781350 3313A82' +
'682809A5622D5781150D347D81C00B27908D2');
if FindDTM(SDTM,x,y,MIX1,MIY1,MIX2,MIY2) then
begin
FreeDTM(SDTM);
Result:= GetAmount(x,y);
end;
end;
function CountPapaya:Integer;
var
Papaya:Integer;
begin
Papaya :=DTMFromString('78DA63EC6766602864644006B3D649324 8036' +
'990E87F103D19A82619550D030313988489327600D5141050 03B2AB9' +
'A809A994035B944A829C7AF0600CE2A08B8');
Result := CountItems('dtm',Papaya,[]);
FreeDTM(Papaya);
end;
function LowPoints:Boolean;
begin
if (GetSummonPoints < 12) then
Result:=True;
Result:=False;
end;
procedure StatsCommit;
begin
stats_IncVariable('Fruit Fall Scrolls (Used)',SDif);
stats_IncVariable('Items Picked Up',PapPicked);
// stats_IncVariable('Coins (Collected)',PackProfit);
Stats_Commit;
end;
procedure SetUpPlayers;
begin
if not LoggedIn then
LoginPlayer;
Wait(2000+Random(1000));
If FindNormalRandoms then
if not LoggedIn then
Players[CurrentPlayer].Loc:='end';
Players[CurrentPlayer].Booleans[0]:=False;
Players[CurrentPlayer].Booleans[1]:=False;
SetAngle(SRL_ANGLE_HIGH);
MarkTime(TimePlayer);
SetChat('Hide',1);
SetChat('Off',2);
SetChat('Off',3);
SetChat('Off',4);
SetChat('Friends',5);
SetChat('Friends',6);
end;
procedure Proggy;
var
RunNum,SDif3:Integer;
begin
ClearDebug;
CurScrolls:=CountScrolls;
PapPicked:=CountPapaya;
if (RunNum>1) then
begin
SDif:=(SDif2-CurScrolls);
SDif2:=CurScrolls;
end else
begin
SDif:=(StartScrolls-CurScrolls);
SDif2:=CurScrolls;
Inc(RunNum)
end;
SDif3:=StartScrolls-SDif2;
// PackProfit:=(PapPicked*PapPrice-SDif*ScrollPrice);
Profit:=(PickNum*PapPrice+PinNum*PinPrice-SDif3*ScrollPrice);
Writeln('=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= +=+=+=+=+=+');
Writeln('=+ Rain Fruit V'+Version+' by Psdiddles=+');
Writeln('=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= +=+=+=+=+=+');
Writeln('=+ Time Running: '+TimeRunning);
Writeln('=+ Papayas Picked Up: '+IntToStr(PickNum));
if PickUpMulti then
Writeln('=+ Pineapples Picked Up: '+IntToStr(PinNum));
Writeln('=+ Profit Made: '+IntToStr(Profit)+'gp');
Writeln('=+ Profit/hour: '+IntToStr((Profit*60/((GetTimeRunning/60000)+1)))+'gp');
Writeln('=+ Scrolls left: '+IntToStr(CurScrolls));
Writeln('=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= +=+=+=+=+=+');
StatsCommit;
end;
function FindThing(var X,Y:Integer; what:string; DeBug:Boolean):Boolean;
var
TPA,TPA2,PPA,PPB: TPointArray;
ATPA: T2DPointArray;
I,H,Col2: Integer;
Box: TBox;
begin
If IsMoving then
Wait(500+Random(200));
case what of
'pap':begin
if IsMoving then
Wait(1000+Random(200));
Writeln('Searching for papaya');
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX,MSCY,PPA,PapCols[0],MSX1,MSY1,MSX2,MSY2,25);
FindColorsSpiralTolerance(MSCX,MSCY,PPB,PapCols[1],MSX1,MSY1,MSX2,MSY2,25);
TPA:=CombineTPA(PPA,PPB);
end;
'bank':begin
Writeln('Searching for bank');
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX,MSCY,TPA,BCols[0],MSX1,MSY1,MSX2,MSY2,7);
end;
'obby':begin
Writeln('Searching for obelisk');
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX,MSCY,TPA,ObCols[0],MSX1,MSY1,MSX2,MSY2,10);
end;
'pin':begin
Writeln('Searching for pineapple');
ColorToleranceSpeed(2);
FindColorsSpiralTolerance(MSCX,MSCY,TPA,PinCols[0],MSX1,MSY1,MSX2,MSY2,20);
end;
end;
ATPA := TPAtoATPA(TPA,25);
if Length(ATPA) = 0 then//if no points were found
Exit;
SortATPAFrom(ATPA, Point(MSCX,MSCY));
H := High(ATPA);
SMART_DrawDotsMulti(true,ATPA);
//PrintProggy;
For I:=0 to H do
begin
Box := GetTPABounds(ATPA[I]);
CTS2 := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
case what of
'pap':Col2:=PapCols[1];
'pin':Col2:=PinCols[1];
'bank':Col2:=BCols[1];
'obby':Col2:=ObCols[1];
end;
if DeBug then
SMART_DrawBoxEx(False, IntToBox(Box.X1, Box.Y1, Box.X2, Box.Y2), 65280);
if FindColorsSpiralTolerance(MSCX,MSCY,TPA2,Col2,Box. X1,Box.Y1,Box.X2,Box.Y2,26) then
begin
MiddleTPAEx(ATPA[I],X,Y)//gets the middle of the current TPA
Mouse(X,Y,1,1,false);
Wait(50+Random(50));
case what of
'bank':begin
if OptionsExist(['ank'],false) then
begin
if ChooseOption('se') then
begin
Writeln('found bank');
Result:=True;
end;
end else
begin
Result:=False;
end;
end;
'obby':begin
Mouse(X,Y,2,2,false);
if OptionsExist(['elisk'],false) then
begin
Writeln('found obelisk');
if ChooseOption('enew') then
begin
Writeln('recharged points');
Wait(2000+Random(2000));
Result:=True;
end;
end else
end;
'pap':begin
Mouse(X,Y,2,2,false);
if ChooseOption('apaya') then
begin
Inc(PickNum);
Writeln('Found papaya #'+IntToStr(PickNum));
Wait(1500+Random(500));
Result:=True;
Proggy;
end else
HumanMMouse(MSCX,MSCY,10,10);
end;
'pin':begin
Mouse(X,Y,2,2,false);
if OptionsExist(['fruit','eapple'],false) then
begin
if ChooseOption('eapple') then
begin
Inc(PinNum);
Writeln('Found pineapple #'+IntToStr(PinNum));
Wait(1000+Random(200));
Result:=True;
Proggy;
end else
begin
if ChooseOption('apaya') then
begin
Inc(PickNum);
Writeln('Found Papaya #'+IntToStr(PickNum));
Wait(1000+Random(200));
Result:=True;
Proggy;
end;
end;
end;
end;
end;
end;
end;
end;
function FindPapOnly(var X,Y:Integer ; DeBug:Boolean):Boolean;
var
TPA,PPA,PPB: TPointArray;
ATPA: T2DPointArray;
I,H: Integer;
begin
If IsMoving then
Wait(500+Random(200));
FindColorsSpiralTolerance(MSCX,MSCY,PPA,3649157,MS X1,MSY1,MSX2,MSY2,15);
FindColorsSpiralTolerance(MSCX,MSCY,PPB,4047272,MS X1,MSY1,MSX2,MSY2,18);
TPA:=CombineTPA(PPA,PPB);
ATPA := TPAtoATPA(TPA,25);
if Length(ATPA) = 0 then//if no points were found
Exit;
if DeBug then
SMART_DrawDotsMulti(true,ATPA);
H := High(ATPA);
For I:=0 to H do
begin
MiddleTPAEx(ATPA[I],X,Y)//gets the middle of the current TPA
Mouse(X,Y,1,1,false);
Wait(50+Random(50));
if OptionsExist(['fruit','apaya'],false) then
begin
Writeln('found papaya #'+IntToStr(PickNum));
Inc(PickNum);
GetMousePos(X,Y);
Result:=True;
Exit;
end;
end;
end;
procedure CheckVersion;
var
Page,NewVer,Vers: String;
PostID: Integer;
begin
PostID :=860337;
Vers :='1.4';
Page := GetPage('http://villavu.com/forum/showthread.php?p='+IntToStr(PostID)+'');
NewVer := Between('Current version: ', ' Released', Page);
if Vers <> NewVer then
begin
ShowMessage('Your script is out of date!');
TerminateScript;
end else
begin
Writeln('You have the most updated version');
Exit;
end;
end;
function BreakChat:Boolean;
begin
ExamineInv;
Wait(1000+Random(2000));
Result := True;
end;
//Camero's walking function
function Walking(Color, Tolerance: Integer; SortFrom: tpoint): Boolean;
var
i, x, y, rx, ry: Integer;
TPA: TPointArray;
begin
if not LoggedIn then Exit;
If FindNormalRandoms Then
If Not LoggedIn Then
Exit;
FindColorsSpiralTolerance(MMCX, MMCY, TPA, Color, MMX1, MMY1, MMX2, MMY2, Tolerance);
SortTPAFrom(TPA, SortFrom);
for i := 0 to High(TPA) do
begin
x := TPA[i].x;
y := TPA[i].y;
rx := RandomRange(-6, 6);
ry := RandomRange(-6, 6);
if (not rs_OnMinimap(x + rx, y + ry)) then
Continue;
Mouse(x + rx, y + ry, 0, 0, true);
FFlag(0);
Wait(200 + Random(500));
Result := True;
Break;
end;
end;
//all credit for this goes to Flight
Function FoundSymbol(Ident: Integer; var X, Y, Dist: Integer): Boolean;
var
B: TBox;
TPA: TPointArray;
L,i,CTS: Integer;
ATPA,ATPA2: T2DPointArray;
begin
CTS := GetColorToleranceSpeed;
ColorToleranceSpeed(2);
FindColorsTolerance(TPA, 12632256, MMX1, MMY1, MMX2, MMY2, 5);
ColorToleranceSpeed(CTS);
if Length(TPA) < 1 then
Exit;
ATPA := TPAtoATPAEx(TPA, 8, 8);
L := High(ATPA);
SetArrayLength(ATPA2, L+1);
for i := 0 to L do
begin
B := GetTPABounds(ATPA[i]);
with B do
begin
if (Ident = 1) then
FindColorsTolerance(ATPA2[i], 2216175, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 2) then
FindColorsTolerance(ATPA2[i], 7207413, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5)
else if (Ident = 3) then
FindColorsTolerance(ATPA2[i], 860731, B.X1-8, B.Y1-8, B.X2+8, B.Y2+8, 5);
Result := (Length(ATPA2[i]) > 0);
if Result then
begin
MiddleTPAEx(ATPA2[i], X, Y);
Dist := Distance(MMCX, MMCY, X, Y);
Exit;
end;
end;
end;
end;
procedure AntiBan;
begin
if not LoggedIn then
Exit;
Writeln('Performing Anti-Ban');
case Random(78) of
0..10: PickUpMouse;
11..17: ExamineInv;
18..35: BoredHuman;
36..46: RandomRClick;
47..57: RandomAngle(true);
58..78: BoredHuman;
end;
SetAngle(SRL_ANGLE_HIGH);
Inc(AntiBanUsed);
end;
function WalkToOb:Boolean;
var
ObPath: TPointArray;
begin
ObPath:=[Point(3341, 2477), Point(3365, 2492),
Point(3386, 2505), Point(3424, 2522),
Point(3455, 2537), Point(3483, 2560)];
if SPS_WalkPath(ObPath) then
Result:=True;
Wait(RandomRange(350, 575));
end;
function PickUpPapaya:Boolean;
var
X,Y,Search:Integer;
begin
if not LoggedIn then
Exit;
if InvFull then
begin
Players[CurrentPlayer].Loc:='tobank';
Writeln('Inv Full');
Exit;
end;
if PickUpMulti then
begin
if (TimeFromMark(Inter) > 60) then
begin
if FindThing(X,Y,'pin',True) then
if InvFull then
Result:=False;
Result:=True;
MarkTime(Inter);
end;
end;
MarkTime(Search);
repeat
if FindThing(X,Y,'pap',True) then
begin
if InvFull then
Result:=False;
Wait(500+Random(500));
Result:=True;
end else
begin
if FindPapOnly(X,Y,true) then
begin
HumanMMouse(X,Y,2,2);
Writeln('FindPapOnly');
Wait(20+Random(100));
if ChooseOption('apaya') then
begin
if InvFull then
Result:=False;
Wait(500+Random(500));
Result:=True;
end;
end else;
Result:=False;
end;
until (not FindThing(X,Y,'pap',True)) or Invfull
if (TimeFromMark(Search) > 60000) or InvFull then
begin
Result:=False;
Exit;
end;
end;
function WalkBack:Boolean;
var
BackPath:TPointArray;
begin
BackPath:=[Point(3483, 2560),Point(3455, 2537),
Point(3424, 2522), Point(3386, 2505),
Point(3365, 2492), Point(3341, 2477)];
if SPS_WalkPath(BackPath) then
Result:=True;
Wait(RandomRange(350, 575));
end;
function NoPoints:Boolean;//checks to see if it is out of special move points
begin
if FindChatBoxText('Your special move bar',8,clBlack) then
begin
Result := True;
end else
Result := False;
end;
function InSide:Boolean;
begin
if FindChatBoxText('fruit while inside',8,clBlack) then
begin
Result:=True;
end else
Result:=False;
end;
//casts fruitfall
procedure CastFall;
begin
If FindNormalRandoms then
if not LoggedIn then
Players[CurrentPlayer].Loc:='end';
if Invfull then
begin
Players[CurrentPlayer].Loc:='tobank';
Exit;
end;
if FamVanish then
begin
Writeln('familiar is about to vanish');
Players[CurrentPlayer].Booleans[0]:=True;
Players[CurrentPlayer].Loc:='tobank';
Exit;
end;
if NoPoints or InSide then
begin
Wait(1000+Random(5000));
BreakChat;
end;
if LowPoints then
begin
Players[CurrentPlayer].Loc:='recharge';
Exit;
end;
repeat
if FamVanish then
Exit;
if not UsingFamiliar then
if (GetSummonPoints<12) then
begin
Players[CurrentPlayer].Loc:='recharge'
Exit;
end;
if LowPoints then
begin
Players[CurrentPlayer].Loc:='recharge';
Exit;
end;
if FindChatBoxText('familiar has dropped all',8,clBlack) then
begin
Players[CurrentPlayer].Booleans[0]:=True;
Players[CurrentPlayer].Loc:='tobank';
Exit;
end;
if not ModInteractFamiliar('') then
Exit;
if FindChatBoxText('or it cannot see',8,clBlack) then
ModInteractFamiliar('Call');
if InSide then
begin
Walking(5466487,20,Point(641,71));
break;
end else
if FindChatBoxText('Your fruit bat cannot',8,clBlack) then
begin
Players[CurrentPlayer].Loc:='tospot';
Exit;
end;
Inc(ScrollsUsed);
Wait(2000+Random(2000));
until NoPoints;
if NoPoints then
begin
Players[CurrentPlayer].Loc:='pickup';
MarkTime(t);
Exit;
end;
end;
procedure Walk;
var
x,y: Integer;
begin
if not LoggedIn then
Exit;
If FindNormalRandoms Then
If Not LoggedIn Then
Exit;
SetAngle(SRL_ANGLE_HIGH);
if Players[CurrentPlayer].Loc='banked' then
begin
if (Walking(6304081,60,Point(619,70))) then
begin
Wait(2000+Random(200));
Writeln('At the spot');
Players[CurrentPlayer].Loc:='ready';
Exit;
end else
Players[CurrentPlayer].Loc:='lost';
end else
if Players[CurrentPlayer].Loc='tobank' then
begin
if FindSymbol(x,y,'bank') then
begin
Mouse(x,y,1,1,true);
Wait(2000+Random(200));
Writeln('banking');
Players[CurrentPlayer].Loc:='banking';
Exit;
end else
if Walking(4612205,30,Point(627,105)) then
Players[CurrentPlayer].Loc:='banking';
end;
end;
function OpenChest:Boolean;
var
X,Y,F: Integer;
begin
if IsMoving then
Wait(2000);
if BankScreen then
Result:=True;
if FindThing(X,Y,'bank',True) then
begin
Wait(1500+Random(200));
if BankScreen then
Result:=True;
end else
Inc(F);
if (F > 3) then
Result:=False ;
end;
procedure Banking;
var
Failures: Integer;
begin
if not LoggedIn then
Exit;
If FindNormalRandoms then
if not LoggedIn then
Players[CurrentPlayer].Loc:='end';
Proggy;
if OpenChest then
begin
Wait(1000+Random(1000));
if PinScreen then
begin
if (Players[CurrentPlayer].Pin <> '') then
InPin(Players[CurrentPlayer].Pin)
else
begin
Writeln('No PIN # given');
Players[CurrentPlayer].Loc:='end';
end;
Wait(RandomRange(175,350));
end else
Deposit(2,28,true);
CloseBank;
Inc(Loads);
Failures := 0;
if Players[CurrentPlayer].Booleans[0] = true then
begin
if (GetSummonPoints < 10) then
Players[CurrentPlayer].Loc:='recharge';
end;
Players[CurrentPlayer].Loc :='banked';
end else
begin
Writeln('Failed to bank');
Inc(Failures);
Wait(200+Random(2000));
Exit;
end;
if (Failures >= 3) then
begin
Writeln('Checking Location, Too many failures');
Players[CurrentPlayer].Loc:='lost';
end;
end;
procedure PickUpPaps;
var
Tries: Integer;
begin
if not LoggedIn then
Exit;
If FindNormalRandoms then
if not LoggedIn then
Players[CurrentPlayer].Loc:='end';
if not UsingFamiliar then
begin
Players[CurrentPlayer].Booleans[0]:=True;
Players[CurrentPlayer].Loc:='end';
end;
if not PickUpPapaya then
begin
if not InvFull then
begin
Miss := 0;
Players[CurrentPlayer].Loc:='ready';
end else
begin
Tries := 0;
Writeln('Full inv, time to bank');
Players[CurrentPlayer].Loc:='tobank';
end;
end;
end;
function ClickOb:Boolean;
var
X,Y:Integer;
begin
if FindThing(X,Y,'obby',true) then
begin
Result:=True;
end else
begin
Writeln('Failed to find obby');
Result:=False;
end;
end;
procedure ToOb;
begin
if WalkToOb then
if ClickOb then
if not UsingFamiliar then
begin
Players[CurrentPlayer].Booleans[1]:=True;
Players[CurrentPlayer].Loc:='reset';
end else
Players[CurrentPlayer].Loc:='reset';
end;
procedure Reset;
begin
if WalkBack then
begin
if Players[CurrentPlayer].Booleans[1]=True then
begin
Writeln('Withdrawing pouch');
Players[CurrentPlayer].Loc:='end';
Exit;
end;
Players[CurrentPlayer].Booleans[0]:=False;
Players[CurrentPlayer].Loc:='ready';
end else
Players[CurrentPlayer].Loc:='lost';
end;
procedure MainLoop;
begin
if not LoggedIn then
SetUpPlayers;
MarkTime(Inter);
StartScrolls:=CountScrolls;
Writeln(IntToStr(StartScrolls)+' starting scrolls');
repeat
case Players[CurrentPlayer].Loc of
'ready': CastFall;
'banking': Banking;
'tobank': Walk;
'banked': Walk;
'pickup': PickUpPaps;
'end': NextPlayer(False);
'lost': FindStage;
'recharge': ToOb;
'reset': Reset;
end;
until AllPlayersInactive;
end;
begin
ClearDebug;
SetupSRLStats(294,SRLStats_Username, SRLStats_Password);
CheckVersion;
Smart_Signed := Signed;
Smart_Server := World
Smart_SuperDetail := False;
Smart_Members := Members;
LoadVars;
SetupSRL;
SetupSps;
SetupSPS;
DeclarePlayers;
SetUpPlayers;
AddOnTerminate('Proggy');
repeat
MainLoop;
until AllPlayersInactive;
end.