Simba Code:
program RoguesDenCooker;
{$DEFINE SMART}
{$i SRL\SRL.scar}
{$i Reflection\Reflection.simba}
{$i SRL\SRL\Misc\Stats.Simba}
const
sWorld = 24; //smart world
sSigned = True; //signed client
MinABWait = 5000;//minimum wait between performing antiban (in miliseconds)
Stats_User = ''; //SRL Stats username
Stats_Pass = ''; //SRL Stats password
//NOTE: Before you start, make sure your inventory is *empty* or else the counting
// Will be incorrect.
procedure DeclarePlayers;
begin
HowManyPlayers := 1; //How many players will you be using?
NumberOfPlayers(HowManyPlayers); //Don't touch
CurrentPlayer := 0; //Which player to start off with?
with Players[0] do
begin
Name := ''; //rs username
Pass := ''; //rs pass
Nick := ''; //Nickname for progress report
Pin := ''; //Bank pin
Active := True; //use player?
Integers[0] := 5; //What food to cook? 0 = Trout, 1 = Salmon, 2 = Tuna, 3 = Lobster, 4 = Swordfish, 5 = Monkfish, 6 = shark, 7 = rocktail
Integers[1] := 0; //number of loads to cook. estimated 40 loads per hour. leave at 0 to run until it breaks
Integers[2] := 0 * 60 * 1000; //change first number for minutes to run. leave at 0 to run until it breaks.
Integers[6] := 0 * 1000; //Change first number for minimum number of seconds to wait between autoresponding {only applies if Booleans[0] is true}
Arrays[0] := ['']; //if you're using the autoresponder, these are the text to look for to identify your name. so something like ['user', 'sern', 'erna', 'rnam', 'name'] would work awesome (for the name "username")
Booleans[0] := False; //Respond when people ask about cooking levels or when it finds your name?
//lines 509-518: If you know what you're doing, you can customize the autoresponder
end;
end;
////////////////////////////setup ends here////////////////////////////////////
procedure SetupNewPlayer;
begin
case Players[CurrentPlayer].Integers[0] of
0: //Trout
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mggAAAHicY2NgYLBnYmDwAmJHILYAYjMgNgXiMEYGBn8gjgLiGCAOhbKXL5gP1MWEgXkYsANGHBgCAASCBZI=';//Raw DTM
Strings[1] := 'mggAAAHicY2NgYMhiYmCIB+IEIM4E4lwgLgHiYEYGhjAgjgHiKCCOAGJ/IE6LigDqYsLAPAzYASMODAEAOpIFxg==';//Cooked DTM
Strings[2] := 'w tr';//Raw uptext
Strings[3] := 'Tro';//Cooked uptext
Strings[4] := 'Trout';//Fish name
Integers[3] := 70;//EXP
Integers[4] := 335; //Raw ID (For reflection)
Integers[5] := 333; //Cooked ID (For reflection)
end;
end;
1: //Salmon
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mggAAAHicY2NgYOhlYmDoA+JOIF4AxFOYIGIRjAwMMYwQ2g+Io4A4CIhXTJ0E1MWEgbkYsANGHBgCAN+VB20=';//Raw DTM
Strings[1] := 'mbQAAAHicY2VgYDjAxMCwB4g3A/E+ID4OxEGMDAz+QBwFxQFAvN1aGqiaCQXzMGACRiwYDAA1VgaU';//Cooked DTM
Strings[2] := 'w sa';//Raw uptext
Strings[3] := 'Sal';//Cooked uptext
Strings[4] := 'Salmon';//Fish name
Integers[3] := 90;//EXP
Integers[4] := 331; //Raw ID (For reflection)
Integers[5] := 329; //Cooked ID (For reflection)
end;
end;
2: //Tuna
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mggAAAHicY2NgYPBggmBHILYCYlMoXcrIwFAFxA1A3AjEdUBcAsTtTY1AXUwYmIcBO2DEgSEAADy2Bhs=';//Raw DTM
Strings[1] := 'mggAAAHicY2NgYEhjYmCIB+IUIC4C4kogzgbiMkYGhlogbgTiKkYIvwGIE0KDgbqYMDAPA3bAiANDAACKjQag';//Cooked DTM
Strings[2] := 'w tu';//Raw uptext
Strings[3] := 'Tun';//Cooked uptext
Strings[4] := 'Tuna';//Fish name
Integers[3] := 100;//EXP
Integers[4] := 359; //Raw ID (For reflection)
Integers[5] := 361; //Cooked ID (For reflection)
end;
end;
3: //Lobster
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mggAAAHicY2NgYJjFxMDQC8SdTBD2PCDuAOIKRgaGWiAuAuImIC5jhIiFGkoBdTFhYB4G7IARB4YAANVHBxw=';//Raw DTM
Strings[1] := 'mggAAAHicY2NgYDjExMCwD4iPAPEJIN4OxJuAuIyRgaEWiJuAuAaIq4C4FIhXhEoAdTFhYB4G7IARB4YAAHMQCJ8=';//Cooked DTM
Strings[2] := 'w lo';//Raw uptext
Strings[3] := 'Lob';//Cooked uptext
Strings[4] := 'Lobster';//Fish name
Integers[3] := 120;//EXP
Integers[4] := 377; //Raw ID (For reflection)
Integers[5] := 379; //Cooked ID (For reflection)
end;
end;
4: //Swordfish
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mlwAAAHicY2dgYLBiYmAwA2IPIA4AYmsg9oaKzWFkYFgMxDOheAoQTwbi+UC8YuoaoG4mrJiHATdgxIOhAABzowgg';//Raw DTM
Strings[1] := 'mlwAAAHicY2dgYMhjYmBIAeJkII4H4jggLgfiUiCezMjAMA2IZwHxQiBeCmXPA+Ly0DqgbiasmJUBN2DEg6EAANERCJ4=';//Cooked DTM
Strings[2] := 'w sw';//Raw uptext
Strings[3] := 'Swo';//Cooked uptext
Strings[4] := 'Swordfish';//Fish name
Integers[3] := 140;//EXP
Integers[4] := 371; //Raw ID (For reflection)
Integers[5] := 373; //Cooked ID (For reflection)
end;
end;
5: //Monkfish
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mggAAAHicY2NgYFjGysCwAIhnAvFGIF4HxNOA+DFQ7iYQPwPiF0D8AIjvAXG0rRGQZMLAPAzYASMODAEA9bAKJw==';//Raw DTM
Strings[1] := 'mggAAAHicY2NgYNjNzMBwBohPAPFWIN4MxPuB2I6JgcEGiF2A2BWIbYHYA4hjgtyBupgwMA8DdsCIA0MAAPHMBzQ=';//Cooked DTM
Strings[2] := 'w mo';//Raw uptext
Strings[3] := 'Mon';//Cooked uptext
Strings[4] := 'Monkfish';//Fish name
Integers[3] := 150;//EXP
Integers[4] := 7944; //Raw ID (For reflection)
Integers[5] := 7946; //Cooked ID (For reflection)
end;
end;
6: //Shark
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mggAAAHicY2NgYHBgYmDwAeIAIDYBYnMgtgbi3YwMDDuA+BgQH2WE8I8DcVNNDVAXEwbmYcAOGHFgCAAAz7IHsQ==';//Raw DTM
Strings[1] := 'mggAAAHicY2NgYMhhYmBIAOIkIC4D4iogLgDiXYwMDKeAeDsUHwfik0Ac7mQI1MWEgXkYsANGHBgCABNJCA8=';//Cooked DTM
Strings[2] := 'w sh';//Raw uptext
Strings[3] := 'Sha';//Cooked uptext
Strings[4] := 'Shark';//Fish name
Integers[3] := 210;//EXP
Integers[4] := 383; //Raw ID (For reflection)
Integers[5] := 385; //Cooked ID (For reflection)
end;
end;
7: //Rocktail
begin
with Players[CurrentPlayer] do
begin
Strings[0] := 'mlwAAAHicY2dgYJjIxMCwAIjnAvFMIJ4ExF1QvJ+RgWEnEB8E4uNAfAKIDwPxXiBOnrEeqJsJK+ZhwA0Y8WAoAAAEnQs7';//Raw DTM
Strings[1] := 'mggAAAHicY2NgYNjDxMBwEoj3A/FmIN4JxGdAfEYIPgXEh4F4FxRvT88B6mLCwDwM2AEjDgwBAC2nCro=';//Cooked DTM
Strings[2] := 'w ro';//Raw uptext
Strings[3] := 'Roc';//Cooked uptext
Strings[4] := 'Rocktail';//Fish name
Integers[3] := 225;//EXP
Integers[4] := 15270; //Raw ID (For reflection)
Integers[5] := 15272; //Cooked ID (For reflection)
end;
end;
end;
end;
var
ABMark, StatsTimer: Integer;
procedure Antiban;
begin
if (not(LoggedIn) or (TimeFromMark(ABMark) < MinABWait)) then
Exit;
if (Random(9) > 0) then
begin
case Random(9) of
1: RandomMovement;
2: BoredHuman;
3: RandomMovement;
4: PickUpMouse;
5: HoverSkill('cooking', False);
6: RandomRClick;
7: PickUpMouse;
8: RandomAngle(1);
9: HoverSkill('cooking', False);
0: HoverSkill('random', False);
end;
MarkTime(ABMark);
end;
end;
function AttemptAndSwivel(func: function: Boolean; Attempts, SwivelPer: Integer): Boolean;
var
i: Integer;
begin
for i := 1 to Attempts do
begin
if func() then
begin
Result := True;
Exit;
end;
MakeCompass(rs_GetCompassAngleDegrees + (SwivelPer + Random(10) - Random(10)));
Wait(800 + Random(80));
end;
end;
function AttemptFunct(Func: function: Boolean; Attempts: Integer): Boolean;
var
i: Integer;
begin
for i := 1 to Attempts do
begin
if func() then
begin
Result := True;
Exit;
end;
Wait(800 + Random(80));
end;
end;
const //Reflection constants
FireTileX = 3043;
FireTileY = 4973;
function r_OpenBenedict: Boolean;
var
Benedict: TNPC;
BenedictPoint: TPoint;
T: Integer;
begin
R_FindRandoms;
repeat
Benedict := R_GetNPC('Emerald Benedict', False);
if not(R_TileOnMS(Benedict.Tile, 0)) then
R_WalkToTile(Benedict.Tile, 4, 0);
Benedict := R_GetNPC('Emerald Benedict', False);
until(R_TileOnMS(Benedict.Tile, 0));
BenedictPoint := R_TileToMS(Benedict.Tile, 0);
Mouse(BenedictPoint.x - 2, BenedictPoint.y - 2, 4, 4, False);
if (r_WaitOption('ank', 1200)) then
begin
T := GetSystemTime + 4000;
while (GetSystemTime < T) and not(Result) and LoggedIn do
Result := BankScreen or PinScreen;
end;
end;
function OpenBenedict: Boolean;
var
CTS, x, y, i, H, T: Integer;
TPA: TPointArray;
ATPA: array of TPointArray;
R: Boolean;
begin
if not(LoggedIn) then
Exit;
R_FindRandoms;
if BankScreen then
begin
Result := True;
Exit;
end;
CTS := GetColorToleranceSpeed;
SetColorToleranceSpeed(2);
SetColorspeed2Modifiers(0.01374, 1.69810);
FindColorsTolerance(TPA, 7444680, MSX1, MSY1, MSX2, MSY2, 4);
SetColorToleranceSpeed(CTS);
//DebugTPA(TPA, '');
if (Length(TPA) > 0) then
begin
ATPA := TPAtoATPAEx(TPA, 20, 30);
SortATPAFromFirstPoint(ATPA, IntToPoint(MSCX, MSCY));
//DebugATPABounds(ATPA);
H := High(ATPA);
for i := 0 to H do
begin
MiddleTPAEx(ATPA[i], x, y);
MMouse(x - 3, y - 3, 6, 6);
if WaitUptext('ened', 1600) then
begin
ClickMouse2(False);
Result := WaitOption('ank', 1600);
end;
if Result then
Break;
end;
T := GetSystemTime + 4000;
while (GetSystemTime < T) and not(Result) and LoggedIn do
Result := BankScreen or PinScreen;
end else
begin
R := True;
Result := r_OpenBenedict;
end;
if (not(R) and not(Result)) then
Result := r_OpenBenedict;
if Result and PinScreen then
Result := InPin(Players[CurrentPlayer].Pin);
if Result then
Wait(1800 + Random(240));
end;
function r_CountRaws: Integer;
begin
Result := R_CountItem(Players[CurrentPlayer].Integers[4]);
end;
function CountRaws: Integer;
var
RawDTM: Integer;
begin
if not(LoggedIn) then
Exit;
R_FindRandoms;
RawDTM := DTMFromString(Players[CurrentPlayer].Strings[0]);
Result := CountItems('dtm', RawDTM, []);
FreeDTM(RawDTM);
if ((Result < 1) or (Result < InvCount)) then
Result := r_CountRaws;
end;
function r_CountCooked: Integer;
begin
Result := R_CountItem(Players[CurrentPlayer].Integers[5])
end;
function CountCooked: Integer;
var
CookedDTM: Integer;
begin
if not(LoggedIn) then
Exit;
R_FindRandoms;
CookedDTM := DTMFromString(Players[CurrentPlayer].Strings[1]);
Result := CountItems('dtm', CookedDTM, []);
FreeDTM(CookedDTM);
if ((Result < 1) or (Result < InvCount)) then
Result := r_CountCooked;
end;
function DoBank: Boolean; //no reflection backup, if someone wants to teach me interfaces then yay.
var
RawDTM, x, y, M: Integer;
begin
if (not(LoggedIn) or not(BankScreen)) then
Exit;
R_FindRandoms;
DepositAll;
Wait(50 + Random(100));
RawDTM := DTMFromString(Players[CurrentPlayer].Strings[0]);
if FindDTM(RawDTM, x, y, MBX1, MBY1, MBX2, MBY2) then
begin
MMouse(x - 3, y - 3, 6, 6);
Wait(50 + Random(100));
if WaitUptext(Players[CurrentPlayer].Strings[2], 1600) then
begin
ClickMouse2(False);
Wait(50 + Random(100));
WaitOption('raw-A', 1600);
end;
end else
Writeln('could not find raw food DTM in bank!');
Closebank;
M := GetSystemTime + 4000;
while ((not(Result)) and (GetSystemTime < M)) do
begin
if (not(InvEmpty)) then
begin
Result := True;
Break
end;
Wait(10 + Random(25));
end;
FreeDTM(RawDTM);
if Result then
begin
Inc(Players[CurrentPlayer].Banked);
IncEx(Players[CurrentPlayer].Integers[11], CountRaws);
stats_IncVariable('Loads Done', 1);
case Players[CurrentPlayer].Integers[0] of
0: stats_IncVariable('Trout Cooked', CountRaws);
1: stats_IncVariable('Salmon Cooked', CountRaws);
2: stats_IncVariable('Tuna Cooked', CountRaws);
3: stats_IncVariable('Lobster Cooked', CountRaws);
4: stats_IncVariable('Swordfish Cooked', CountRaws);
5: stats_IncVariable('Monkfish Cooked', CountRaws);
6: stats_IncVariable('Shark Cooked', CountRaws);
7: stats_IncVariable('Rocktail Cooked', CountRaws);
end;
end;
end;
function r_ClickRaw: Boolean;
begin
R_FindRandoms;
Result := False
end;
function ClickRaw: Boolean;
var
RawDTM, x, y, T: Integer;
begin
if not(LoggedIn) then
Exit;
R_FindRandoms;
RawDTM := DTMFromString(Players[CurrentPlayer].Strings[0]);
if FindDTM(RawDTM, x, y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(x - 4, y - 4, 8, 8);
if WaitUptext(Players[CurrentPlayer].Strings[2], 1600) then
begin
ClickMouse2(True);
T := GetSystemTime + 6000;
while ((not(Result)) and (GetSystemTime < T)) do
begin
Wait(200 + Random(20));
Result := (ActivatedItem > 0);
end;
end;
end else
Writeln('could not find raw food DTM in inventory!');
FreeDTM(RawDTM);
if not(Result) then
Result := r_ClickRaw;
end;
function r_ClickFire: Boolean;
var
FireTile: TTile;
FirePoint: TPoint;
begin
if not(LoggedIn) then
Exit;
R_FindRandoms;
FireTile := Point(FireTileX, FireTileY);
if not(R_TileOnMS(FireTile, 0)) then
begin
R_WalkToTile(FireTile, 3, 0);
ClickRaw;
end;
FirePoint := R_TileToMS(FireTile, 0);
Mouse(FirePoint.x - 3, FirePoint.y - 3, 6, 6, false);
Result := r_WaitOption('> Fi', 1200);
end;
function ActionScreen: Boolean;
begin
R_FindRandoms;
Result := (CountColorTolerance(4477273, 85, 415, 95, 425, 10) > 65);
end;
function ClickFire: Boolean;
var
CTS, x, y, i, H: Integer;
TPA: TPointArray;
ATPA: array of TPointArray;
R: Boolean;
begin
R_FindRandoms;
if not(LoggedIn) then
Exit;
CTS := GetColorToleranceSpeed;
SetColorToleranceSpeed(2);
SetColorspeed2Modifiers(0.10167, 1.61841);
FindColorsTolerance(TPA, 2730226, MSX1, MSY1, MSX2, MSY2, 5);
SetColorToleranceSpeed(CTS);
//Writeln(Length(TPA));
if (Length(TPA) > 0) then
begin
ATPA := TPAtoATPAEx(TPA, 30, 30);
//DebugATPABounds(ATPA);
SortATPAFromFirstPoint(ATPA, IntToPoint(MSCX, MSCY));
H := High(ATPA);
for i := 0 to H do
begin
MiddleTPAEx(ATPA[i], x, y);
MMouse(x - 2, y - 2, 4, 4);
if WaitUptext('more', 800) then //there's always so many people, i'm just gonna check for "more" in "XX more options"
begin
ClickMouse2(False);
Result := WaitOption('> Fire', 1600);
end;
if Result then
Break;
end;
end else
begin
R := True;
Result := r_ClickFire;
end;
if (not(R) and not(Result)) then
Result := r_ClickFire;
if Result then
Result := WaitFunc(@ActionScreen, 10 + random(15), 7000);
end;
function OutlineFound: Boolean;
begin
R_FindRandoms;
Result := (CountColorTolerance(10408935, 215, 387, 302, 400, 80) > 60);
end;
function ClickButton: Boolean;
var
CookedDTM, x, y: Integer;
begin
R_FindRandoms;
if not(LoggedIn) then
Exit;
Result := False;
R_FindRandoms;
CookedDTM := DTMFromString(Players[CurrentPlayer].Strings[0]);
if not(FindDTM(CookedDTM, x, y, MCX1, MCY1, MCX2, MCY2)) then
begin
FreeDTM(CookedDTM);
Exit;
end;
FreeDTM(CookedDTM);
MMouse(x - 4, y - 4, 8 , 8);
if (WaitFunc(@OutlineFound, 10 + Random(15), 8000)) then
begin
ClickMouse2(True);
Result := True;
end else
Writeln('didnt find the outline');
end;
procedure SayCookLVL;
begin
TypeByte(GetKeyCode(Chr(13)));
Wait(50 + random(7));
TypeSendEx('s', False);
Wait(120 + Random(12));
TypeSendEx('v', False);
Wait(40 + random(8));
TypeSendEx('2', False);
end;
function RespondChat: Boolean; //reccomendation from hobbit
var
i: Integer;
begin
if not(Players[CurrentPlayer].Booleans[0]) then
Exit;
if (TimeFromMark(Players[CurrentPlayer].Integers[60]) <= Players[CurrentPlayer].Integers[6]) then
Exit;
if FindTextTpa(clYellow, 8, MSX1, MSY1, MSX2, MSY2, 'ooking le', 'SmallChars', Nothing) then
begin
Result := True;
SayCookLVL;
MarkTime(Players[CurrentPlayer].Integers[60]);
Exit;
end;
for i := 0 to High(Players[CurrentPlayer].Arrays[0]) do
if FindTextTpa(clYellow, 8, MSX1, MSY1, MSX2, MSY2, Players[CurrentPlayer].Arrays[0][i], 'SmallChars', Nothing) then
begin
Result := True;
case Random(9) of
0: TypeSend('?');
1: TypeSend(AddMistakes('What?', 15));
2: TypeSend(AddMistakes('wtf do you want!?', 15));
3: TypeSend(AddMistakes('oh hey srry was watchin TV', 15));
4: TypeSend(AddMistakes('sup', 15));
5: TypeSend(AddMistakes('oh sup i was playin cod srry', 15));
6: TypeSend(AddMistakes('sup', 15));
7: TypeSend(AddMistakes('wat', 15));
8: TypeSend(AddMistakes('i dont talk to dumb people :P', 15));
9: TypeSend('?');
end;
MarkTime(Players[CurrentPlayer].Integers[60]);
Break;
end;
end;
function WaitCook: Boolean;
var
T, CookedDTM, RawCount: Integer;
begin
RawCount := CountRaws;
MarkTime(T); //68 seconds = one inventory (4 game ticks (.6 seconds) per cook * 28 = 67.2 seconds
while (TimeFromMark(T) < 68000 + Random(680)) do
begin
R_FindRandoms;
Antiban;
if RespondChat then
Inc(Players[CurrentPlayer].Integers[61]);
if LevelUp then
begin
Inc(Players[CurrentPlayer].Integers[12]);
stats_IncVariable('Total Levels Gained', 1);
end;
Wait(850 + Random(85));
end;
CookedDTM := DTMFromString(Players[CurrentPlayer].Strings[1]);
Result := (CountItems('dtm', CookedDTM, []) > 0); //randoms are a bitch.
FreeDTM(CookedDTM);
if Result then
begin
IncEx(Players[CurrentPlayer].Integers[10], CountCooked);
stats_IncVariable('Total EXP Gained', Players[CurrentPlayer].Integers[3] * CountCooked);
end;
end;
procedure Die(Status: string);
begin
if not(LoggedIn) then
Exit;
if BankScreen then
CloseBank;
R_FindRandoms;
Logout;
Players[CurrentPlayer].Status := Status;
Writeln('Death because: ' + Players[CurrentPlayer].Status);
end;
procedure Report;
var
i, TotalCooked, TotalEXP, TotalLVLs, TotalSuccess, TotalBurnt: Integer;
xpHR, foodHR, loadHR: Int64;
begin
for i := 0 to High(Players) do
begin
IncEx(TotalCooked, Players[i].Integers[11]);
IncEx(TotalSuccess, Players[i].Integers[10]);
IncEx(TotalBurnt, Players[i].Integers[11] - Players[i].Integers[10]);
Players[i].Integers[13] := Players[i].Integers[10] * Players[i].Integers[3];
IncEx(TotalEXP, Players[i].Integers[13]);
IncEx(TotalLVLs, Players[i].Integers[12]);
end; {123456789|123456789|123456789|123456789|123456789|123456789|12345678}
Writeln('');
Writeln('[====================================================================]');
Writeln('[ TomTuff''s Rogue''s Den Cooker ]'); //2 extra spaces from ''s
Writeln('[ Revision 10 ]');
Writeln('[====================================================================]');
Writeln('[ Overall Report ]');
Writeln('[ Time Ran: ' + Padr(MsToTime(GetTimeRunning, Time_Formal), 54) + ']');
Writeln('[ Fish attempted to cook: ' + padr(IntToStr(TotalCooked), 40) + ']');
Writeln('[ Fish sucessfuly cooked: ' + Padr(IntToStr(TotalSuccess), 38) + ']');
Writeln('[ Fish burnt: ' + Padr(IntToStr(TotalBurnt), 50) + ']');
Writeln('[ Total EXP gained: ' + Padr(IntToStr(TotalExp), 46) + ']');
Writeln('[====================================================================]');
for i := 0 to High(Players) do
begin
Writeln('[ Player ' + Padl(IntToStr(i), 2) + ' (' + Padr(Players[i].Nick, 4) + '):' + Padr('', 49) + ']');
Writeln('[ Fish type: ' + Padr(Players[i].Strings[4], 53) + ']');
Writeln('[ Worked: ' + Padr(MSToTime(PlayerWorked(i), Time_Formal), 56) + ']');
if ((Players[i].Status <> '') and (not(Players[i].Active))) then
Writeln('[ Stopped Because: ' + Padr(Players[i].Status, 47) + ']');
Writeln('[ Levels gained: ' + Padr(IntToStr(Players[i].Integers[12]), 49) + ']');
Writeln('[ EXP gained: ' + Padr(IntToStr(Players[i].Integers[13]), 52) + ']');
xpHR := Ceil((Players[i].Integers[13] * 60.0 * 60.0 * 1000.0) / PlayerWorked(i));
Writeln('[ Exp/HR: ' + Padr(Int64ToStr(xpHR), 54) + ']');
Writeln('[ Food attempted: ' + Padr(IntToStr(Players[i].Integers[11]), 48) + ']');
foodHR := Ceil((Players[i].Integers[11] * 60.0 * 60.0 * 1000.0) / PlayerWorked(i));
Writeln('[ Food cooked/HR: ' + Padr(Int64ToStr(foodHR), 46) + ']');
Writeln('[ Successful: ' + Padr(IntToStr(Players[i].Integers[10]), 50) + ']');
Writeln('[ Burnt: ' + Padr(IntToStr(Players[i].Integers[11] - Players[i].Integers[10]), 55) + ']');
Writeln('[ Loads: ' + Padr(intToStr(Players[i].Banked), 57) + ']');
loadHR := Ceil((Players[i].Banked * 60.0 * 60.0 * 1000.0) / PlayerWorked(i));
Writeln('[ Loads/HR: ' + padr(Int64ToStr(loadHR), 52) + ']');
if (Players[i].Integers[61] > 0) then
Writeln('[ Times responded: ' + Padr(IntToStr(Players[i].Integers[61]), 47) + ']');
Writeln('[====================================================================]');
end;
Writeln('');
end;
function CheckSums: Boolean;
begin
if (not(Players[CurrentPlayer].Integers[1] = 0)) then
Result := (Players[CurrentPlayer].Banked >= Players[CurrentPlayer].Integers[1]);
if Result then
Exit;
if (not(Players[CurrentPlayer].Integers[2] = 0)) then
Result := (PlayerWorked(CurrentPlayer) > Players[CurrentPlayer].Integers[2])
end;
begin
Smart_Members := True;
Smart_Server := sWorld;
Smart_Signed := sSigned;
Smart_SuperDetail := False;
SetupReflection;
SetupSRLStats(32, Stats_User, Stats_Pass);
DeclarePlayers;
LoginPlayer;
MarkTime(StatsTimer);
repeat
SetupNewPlayer;
SetAngle(True);
repeat
if AttemptAndSwivel(@OpenBenedict, 16, 45) then
begin
if AttemptFunct(@DoBank, 4) then
begin
if AttemptFunct(@ClickRaw, 4) then
begin
if AttemptAndSwivel(@ClickFire, 16, 45) then
begin
if AttemptFunct(@ClickButton, 3) then
begin
if WaitCook then
begin
Report;
end else Die('could not wait to cook');
end else Die('could not click the cooking button');
end else Die('could not click the fire');
end else Die('could not click raw in inventory');
end else Die('could not handle banking');
end else Die('could not open Benedict');
Report;
if CheckSums then
Die('goals met');
if (TimeFromMark(StatsTimer) > 300000) then
begin
stats_Commit;
MarkTime(StatsTimer);
end;
until(not(LoggedIn));
NextPlayer(False);
until(AllPlayersInactive);
Report;
end.
{
rev 02: Added r_ClickRaw
rev 03: added MBX1, MBY1, MBX2, MBY2
rev 04: added more R_FindRandom's :)
rev 05: advanced counting
rev 06: added autoresponder
rev 07: patched up autoresponder
rev 08: SRL Stats (stats.villavu.com)
rev 09: Fixed for the removal R_ClickItemID and R_CountItemID (Now just R_ClickItem and R_CountItem)
rev 10: Added AttemptAndSwivel and AttemptFunct. Now used in mainloop. This should extend runtime!
rev 11: Added pin handling.
}