Simba Code:
program RUNME;
{$DEFINE SPS}
//{$DEFINE SMART}
{$I AeroLib/AeroLib.Simba}
{$I AeroLib/Profiles.Simba}
Const
//------------------------User setup-------------------------//
// Color Setup
bankBoothFrame = 9610935;
bankBoothWindow = 11647686;
// Info Needed
//TODO: other logs but maple handling
LogToCut = 'Maple'; //willow, maple, yew, magic
//TODO: shortbow handling
WhatToCut = 'Long'; //short, long
CuttingLogs = true;
StringingBows = false;
// Player info
P_USERNAME = '';
P_PASSWORD = '';
P_NICKNAME = '';
P_PIN = '';
P_LAMPSKILL = SKILL_SLAYER;
// Break settings
fBREAK_IN = 300; // How long before we take a break? (minutes)
fBREAK_FOR = 60; // How long will we break for? (minutes)
fR_BREAK_IN = 17; // Random minutes to add/subtract from how long until we break
fR_BREAK_FOR = 18; // Random minutes to add/subjtract from break duraction
//----------------------End user setup----------------------//
Type State = (BANKUNSTRUNG, FLETCHLOGS, GETMATERIALS, GETKNIFE, GETLOGS, LOST, GETUNSTRUNG, GETBOWSTRINGS, ATTACHSTRINGS, BANKBOWS);
Var
log, knife,
unstrung,
bowstring,
strung : TItem;
timer_CS,
timer_SP : Timer;
XPMod,
one,two,
cutLoads,
cutLogsCount : Integer;
shortBox,
longBox : TBox;
Obj_Bank : TMSObject;
DTM_MMBank : TIntegerArray;
chatboxArray : Array of TChatOption;
Terminate : Boolean = False;
terminateReason : String = 'Error somewhere';
nameMod : String;
optionList : Array of TOptions;
enterAmountBmp,
fletchMenuBmp,
stringMenuBmp : Integer;
testPt : TPoint;
//iGraphic : TGraphics;
MyProfile : TPlayerProfile;
_UNSTRUNGPT,
_BOWSTRINGPT,
_LOGPT,
_STRUNGPT,
_BANKPT : TPoint;
procedure declarePlayer();
begin
Me.Name := P_USERNAME;
Me.Pass := P_PASSWORD;
Me.Pin := P_PIN;
Me.Nick := P_NICKNAME;
Me.LampSkill := P_LAMPSKILL;
Me.Active := True;
end;
procedure loadVars();
var
A,B : Integer;
begin
MyProfile := CreateProfile('me',18,140,190);
cutLogsCount := 0;
enterAmountBmp := BitmapFromString(97, 20, 'meJytmFFPGzEQhPP/3+kDdaUeT+' +
'1foGlFEHmiqmiRqvBvutzcDcPs2jlRohVy7LXxfje79mW6fZzE2uF' +
'PGBrsUYer42nssNGwji7yBvv4/QF/0fhPu9g/XFzfv1h8nW2qEGHn' +
'EYUR0NGxhQ+mjxGVK6Px6e7UYxL24eaRPbQIR3vUJy/F9ck5pi/rK' +
'KLre9s5/XXb+Io1dWVVUea5RUXxFxPZMGVqUAgZO8T+ERdNI4WP4V' +
'VWEQgZqrMiuvz2MxrYjMZLSro+6enDtXBMGDleQxRLgcxAb0Uu7J/' +
'lEUYyWSRlCCpRa+d0CzhUI9eMTiIqszt6SvHbE89hAoVKBY3oDyt5' +
'ljm4hHA4KSKm2OXNL9Pb2HqINHPJQWns0mdAg8QG2WRkWKZIKXq+H' +
'P9a9mVWmh0LosMpP01LLhXVWUSaRDY39GOINvKHMzY5oKTZpBAILR' +
'ApNMLvCQkOMEO0/Wgjfw2Z9cSMEo3REpHO0kXgbMd3ryZ/PT7lymP' +
'0EDWmID0HGQFQPLxK/WyxsSqoIovaGYrMlJI5l8VZyzJGkVyWfVly' +
'1MkgOkqONfzdEWWRWBVSFPwEMUAzZxDQTiLSTks9mDmgyNvEHIv1A' +
'5S65XZeJ3eW0HCi9UY15KUx56Y5v4wKK0NUnvKcxbbOYid7dFf6v3' +
'pYLIqBz0BFWxDpZjQc6ifiUg69dlmydq8/ioijJaJBW9me9dFaYWe' +
'EHf3qz6Etm8n5QiYarJ1lppwo6e+FSFfWnH0DIlywjQa/mlp6isqe' +
'dilSRPlo4zpEZKk6QNRTSA/RIBd6iNp86D+/jOyLyryTUtCqWwHdj' +
'BI/4GCIQEnlZLM0qIyIdwmdkkuiLjUoF1ZsDVqbD3RUIcgJfzXRnO' +
'd6Q+AQHXoXyFyCVEjGKoam6sJplwcdVTh28WjrJdN82LYrX57OkPn' +
'KnK/fdilCj/50oIgsQxVRj2Hr3DnZoEPmaYha5545uF8Z4dIH8TLR' +
'jIZe79WBb9kQIR4H2hmRUsIQpKIhlKByYe+JswzNKPUQcXoGDgfGF' +
'Sk2eMfXX2ba+rMMEVGKeJf5/OO36QQ9ba57WUXczFX6na3Hrb1+2+' +
'2l1Vk7ixdPf1HR/CNJW09/zUQTj6YbEYEw3AgkGppfOQGn9fptJSL' +
'754JWPvSBYLYb9sOv/wDMpT8X');
fletchMenuBmp := BitmapFromString(34, 20, 'meJyNVctOw0AM5P8PXFAQIqf+RC' +
'UglXoEUaGV+CGczHoYz7ZRqz04Xr/GnnXnU3v9uExLm96/46xyCl2' +
'OK5xNP58aDj6hf3y7xKE7fWcET01xzNOzL+35/Mv49F3lxV30PB2/' +
'ND6ijYnCbLVMILAMjTqyklKbyATlLdKzRdBKzGbUXEXERAbkIX8Rn' +
'AUQBWVedeDpjjFpkwt2jb9hCYEGmsU6oCmUM9BrBKQIoadIeyjVTC' +
'lXOgZ9Eo8AmSUEBC9ZEt0Vet+eBfmgs9Y+IKBiIZC9sMr8ASkpjU8' +
'GNyHMOAtOrZM8bdgKVSptjPCs3xJhQCVOVk68yhmdI1+xMge8YjEK' +
'jRvGsthArc//Q1ka3+k4bs6LFers4EKlXmEoh/NP2Uhb97RjNiake' +
'Dl+avc4Lwh8OxC4lBgTVdmPxvEEVGmVKGrjnr3ZgqLufFuJ1vOR7Y' +
'VgN9Y1cOn7skRjwHuykGO2c6wz07C9tbCxYF6NkHceOxeXttpX5aA' +
'kZ1iz7t6Sbil/EDuVWNIw+wM9tRRD');
stringMenuBmp := BitmapFromString(73, 26, 'meJylmN1rVFcUxSn4ZKTUKAhijY' +
'ogE8GStmIeNMXPl4hiURBaCgoFUdqHGvwWWzXiZHRwIj7E2JgoCZr' +
'UdFQIYqiU4r/gm3+M6941s7Jnn3NuRguLw7n3ngn7d9fe+5ybysx8' +
'ZWb+zrN/KvnEafDpa06GnsxxhMqTL6nrj1/YUbo88dxe2vsU5tfGZ' +
'//486+oLo1On7k/jTGukUmq5Vf3py7ce8z7mJy5O4FRFAw+hLLiGo' +
'smcYHid1AAQVSXx2f5VCHhPmXjxLIkWpNLlyTCKDRdRs1Kia4NTr0' +
'iF/DFiJuk0CRlGdHIyzF0sAjKcDkWATo05GQqLUPjiKDktLySuyxI' +
'1GhOSg0HLVogiyZZLqLdmv0XKgakZVly5kQZ2pO5aNhiZDZmIGN11' +
'RqNw50iv0ans/tNCtSRIwovHVqq0MKio1+cl/O5uFKABGl410w/Vl' +
'82H6vboiuuMsfiSNlAhFarv2kTDSC4dLDlvLhwM2N8+jqVjZ50rJ7' +
'5mLcX9RN513XsxBf9R6AWNGdik1dmgcuhgSuki24EhGqBRa1NvVIZ' +
'Cq2YjnmYtZRYhyz9dnHF0Z/Bterwj5g0fDRoltcmIdFk4qJ9w9Uds' +
'lGyUOotqQ5pOwlxohtc7+9lWvZ53z6O8ki52lKVsa7CBbbQ1EYcl0' +
'1CcYWdczDvk8VoC4zc4wLLgAYccnV0b1m2eklqZ7e9RXP7FFENv3x' +
'7+/l/oKglGuMCFxgDND7lltcOFJ1Sw9QdCCzIxqXfbIMwX9rRkYJa' +
'svpLqGABBCJwgQ5c4dY2XKueHTjt9Mupk4e/PxRq1+5dfdu/lg7s2' +
'wnt7+/H/a3f9liVuktaIGHZhpMDG3vX/HB8+a8DX2ECQMTf2bnMCU' +
'QoQ7wErIGt2kd06GLS0i+3tUGIv3zj2qPxB3/PTGIycreC+fUrF0i' +
'HSZvCD9vU8fPnEDCgHjz8rjq85tiJ5Sg6CK/CvjFo7fYdP9XnR969' +
'79mzbnPPZ9HTGhPSosE+NkwCAgdcipOWpQSLo7J/QeJLs8JKGIHIL' +
'109CECEjfYIis3d60ubuijMs8vu0qkXGRpdsweAaEJibOegtejWYO' +
'uOc30d8NwS3R04BwhykoXGHqKnbithn0G6FpxCq/U3qrVP5ioW93R' +
'9LyjIxmE7H3Uc3VsbVedfsXIlKsv+1p3f5FSUjlwhWnjq+J90iGQw' +
'j1+fD0NNKC27Mz3n9jU46N6JzQF7AAiP2UCr5keR9l37WOTGV15OV' +
'7BMTQzGocp4FIEsmuVyPjrjkJDqkJ+QkPwhvxQK6lRf6O28AU5QcV' +
'TI5fJTc/VJAbo4FSpF8Gjkesr+4/YO64WLfFG0SvCfitCjFKZFQ2C' +
'KUMIl24v6JyKs5juCdYpPK2ZPbPN7Vqo2dxn7W9XgkOkw6rSpszfu' +
'3Jx4Zr0jCzuJnVvvBE4uPpWhbEHEL+aiL7ZUuV4j2oh1zXLJxNR2Y' +
'CuOxpHIcUF4nxbKOquJFqvH1lpT15GqNxYkbViYqbSMbgcOTWLYQg' +
'sT1RFZuzO0vNMqzlrzkOPowgYbvo2Fr/i8qUbpQlLnmixzjGoOugy' +
'53K9q6W+HRaWcdN0m2kyijUWwrDglZJhdNmDnUXxZ8zu9uNzCbHTt' +
'0eZkai+L/oNXUGomHwDBKTja');
shortBox := toBox(80,390,140,460);
longBox := toBox(220,390,290,460);
Obj_Bank := toObj('BankBooth', ['ank B','nk bo','booth'], [createColEx(bankBoothFrame, 8, 0.75, 0.90)], [createColEx(bankBoothWindow, 5, 0.11, 3.38)]);
setLength(DTM_MMBank, 1);
DTM_MMBank[0] := DTMFromString('m6wAAAHic42ZgYGhiYmCYxQShq4C4BYq7gLgSiGuBuAaIO4A4DKg+Boi9odgAiE2A2BRKg7A+EBsC8cmjRxk+Aum3byH469MnKLilRhFMJ+qzM/wHqlMmEjMCMRORGAkAABAgIUc=');
knife.DTM := DTMFromString('mbQAAAHicY2VgYDjGzMCwG4hPA/ERKP0VKM7KyMDwEUj/A+JXQFxTXAwkGVEwO5BkQcNMGKqgAAD+bAlH');
bowstring.DTM := DTMFromString('mggAAAHicY2NgYPBlYWBwAmIXILYG4gAgtgTiDqBcDxA3AHE1EDdD2U1l4QwigoJAFiOcBmEOIMmKBTPBVaBiCAAAa5YGrg==');
case lowercase(LogToCut) of
'willow':
begin
//TODO
end;
'maple':
begin
log.DTM := DTMFromString('mggAAAHicY2NgYIhlYWAIBGI/IA4G4iggzgTiJ0C5Z0D8BojfAfEnIH4NxHlePAxdqQYMzYl6YJqBgRGMuYAkNswMxExImBGKIQAAJHUMDw==');
case lowercase(WhatToCut) of
'short':
begin
//TODO
end;
'long':
begin
unstrung.DTM := DTMFromString('mWAAAAHicY2FgYEhnYmDIAeIkKL0OKLYbiFcD8VYg3jZrApBkhGMOIImMGdEwCAAAlBMGfg==');
strung.DTM := DTMFromString('mggAAAHicY2NgYGhhYWBoAOIyIK4D4nYg7gXiP0C5/0D8BYrZGRkYuIB435LZQB4jBuYCkmxYMKZKCIYAAIz1CVE=');
end;
end;
end;
'yew':
begin
//TODO
end;
'magic':
begin
//TODO
end;
end;
timer_CS.start();
timer_SP.start();
setupBreak(fBREAK_IN, fBREAK_FOR, fR_BREAK_IN, fR_BREAK_FOR);
end;
procedure freeGlobals();
var
i : Integer;
begin
for i:=0 to high(DTM_MMBank) do
freeDTM(DTM_MMBank[i]);
freeBitmap(enterAmountBmp);
freeBitmap(fletchMenuBmp);
freeBitmap(stringMenuBmp);
freeDTM(log.DTM);
freeDTM(unstrung.DTM);
freeDTM(bowstring.DTM);
freeDTM(strung.DTM);
freeDTM(knife.DTM);
end;
procedure OpenBank();
var
T : Timer;
Pnt : TPoint;
i,c : Integer;
Slots : TIntegerArray;
begin
if not isLoggedIn() then
Exit;
BreakHandler();
if (Me.Pin <> '') then
inPin(Me.Pin);
if isBankOpen() then begin
Exit;
end;
if openBankPoint(_BANKPT, True) then Exit;
for i:=1 to 3 do
begin
if findMSObject(Obj_Bank, 5, point(MSCX,MSCY), Pnt) then begin
break;
end;
if (i=3) then
if not findMSObject(Obj_Bank, 5, point(MSCX,MSCY), Pnt) then
Exit;
end;
if not openBankPoint(Pnt, True) then begin
Exit;
end
else begin
_BANKPT.X := Pnt.x;
_BANKPT.Y := Pnt.y;
Exit;
end;
end;
function HaveKnife() : Boolean;
var
i,
invCount,
itemsChecked : Integer;
slotBox : TBox;
itemPt : TPoint;
knifeFound : Boolean;
begin
itemsChecked := 0;
invCount := GetInvCount();
knifeFound := False;
for i:= 1 to 28 do begin
if (ItemInSlot(i)) then begin
itemsChecked := itemsChecked + 1;
slotBox := InvBox(i);
if (knife.FindIn(slotBox, itemPt)) then begin
knifeFound := True;
if not (i = 1) then begin
MoveItemTo(i, 1);
end;
end
else begin
if (knife.FindIn(slotBox, itemPt)) then begin
knifeFound := True;
if not (i = 1) then begin
MoveItemTo(i, 1);
end;
end;
end;
end;
if (itemsChecked = invCount) then break;
if (knifeFound) then break;
end;
if (knifeFound) then Exit(True);
Exit(False);
end;
function HaveLogs() : Boolean;
var
i,
invCount,
itemsChecked : Integer;
slotBox : TBox;
itemPt : TPoint;
logFound : Boolean;
begin
itemsChecked := 0;
invCount := GetInvCount();
logFound := False;
for i:= 1 to 28 do begin
if (ItemInSlot(i)) then begin
itemsChecked := itemsChecked + 1;
slotBox := InvBox(i);
if (log.FindIn(slotBox, itemPt)) then begin
logFound := True;
end;
end;
if (itemsChecked = invCount) then break;
if (logFound) then break;
end;
if (logFound) then Exit(True);
Exit(False);
end;
function WithdrawKnife() : Boolean;
var
knifePt,
itemPt : TPoint;
label
WDKnife, Start;
begin
GoTo Start;
WDKnife:
WithdrawPointEx(knifePt, 1, ['nife', 'ife']);
repeat
sleep(50);
if (MyProfile.ActAhead()) then begin
Break;
end;
until(GetInvCount() = 1);
Exit(True);
Start:
if (IsBankOpen()) then begin
if (GetInvCount() > 0) then QuickDeposit('inv');
if (FindDTM(knife.DTM, knifePt.x, knifePt.y, MSX1,MSY1,MSX2,MSY2)) then begin
GoTo WDKnife;
end
else begin
if (ScrollToItemDTM(knife.DTM, knifePt)) then begin
repeat
sleep(150);
if (MyProfile.ActAhead()) then begin
Break;
end;
until(GetInvCount() = 1);
Exit(True);
end
else begin
Terminate := True;
terminateReason := 'No knife found';
Exit(False);
end;
end;
end
else begin
Exit(False);
end;
end;
function WithdrawLogs() : Boolean;
var
logPt,
itemPt : TPoint;
label
WDLog, Start;
begin
GoTo Start;
WDLog:
WithdrawPointEx(logPt, 27, ['log', 'og']);
sleep(200+random(100));
repeat
sleep(250);
if (MyProfile.ActAhead()) then begin
Break;
end;
if not (FindDTM(log.DTM, logPt.x, logPt.y, MSX1,MSY1,MSX2,MSY2)) then break;
until(GetInvCount() = 28);
Exit(True);
Start:
if not (HaveKnife()) then Exit(False);
if (IsBankOpen()) then begin
if (FindDTM(log.DTM, logPt.x, logPt.y, MSX1,MSY1,MSX2,MSY2)) then begin
GoTo WDLog;
end
else begin
if (ScrollToItemDTM(log.DTM, logPt)) then begin
GoTo WDLog;
end
else begin
Terminate := True;
terminateReason := 'No logs found';
Exit(False);
end;
end;
end
else begin
Exit(False);
end;
end;
function AllUnstrung(): Boolean;
var
i,
invCount,
itemsChecked : Integer;
slotBox : TBox;
itemPt : TPoint;
begin
itemsChecked := 0;
invCount := GetInvCount();
for i:= 2 to 28 do begin
if (ItemInSlot(i)) then begin
itemsChecked := itemsChecked + 1;
slotBox := InvBox(i);
if not (unstrung.FindIn(slotBox, itemPt)) then begin
Exit(False);
end;
end;
if (itemsChecked = invCount - 1) then break;
end;
if (itemsChecked = 0) then Exit(False);
Exit(True);
end;
procedure DepositUnstrung();
var
unstrungCount,
i, randomSlot : Integer;
itemPt,
logPt : TPoint;
unstrungSlots : TIntegerArray;
begin
if (IsBankOpen()) then begin
unstrungSlots := unstrung.GetSlots();
unstrungCount := High(unstrungSlots);
cutLogsCount := cutLogsCount + (unstrungCount + 1);
if not (unstrungCount > 0) then begin
Exit;
end;
DepositAllFrom(2);
end;
end;
procedure CutLogs();
var
logsLeft,
randomSlot : Integer;
itemPt : TPoint;
logSlots : TIntegerArray;
label
FletchMenu;
begin
if (ItemInSlot(1) and knife.FindIn(InvBox(1), itemPt)) then begin
if (InteractSlot(1, MOUSE_LEFT)) then begin
repeat
wait(50+random(50));
if (MyProfile.ActAhead()) then begin
Break;
end;
until (SlotActivated(1));
end;
end
else begin
Exit;
end;
logSlots := log.GetSlots();
logsLeft := High(logSlots);
case random(100) of
0..75: begin
if (ItemInSlot(2) and log.FindIn(InvBox(2), itemPt)) then begin
InteractSlot(2, MOUSE_LEFT);
end
else begin
InteractSlot(logSlots[1], MOUSE_LEFT)
end;
end;
75..97: begin
if (ItemInSlot(5) and log.FindIn(InvBox(5), itemPt)) then begin
InteractSlot(5, MOUSE_LEFT);
end
else begin
InteractSlot(logSlots[1], MOUSE_LEFT)
end;
end;
98..100: begin
randomSlot := random(logsLeft);
if (ItemInSlot(randomSlot) and log.FindIn(InvBox(randomSlot), itemPt)) then begin
InteractSlot(randomSlot, MOUSE_LEFT);
end
else begin
InteractSlot(logSlots[1], MOUSE_LEFT)
end;
end;
end;
if (WaitChatChange()) then begin
MyProfile.React();
FletchMenu:
case lowercase(WhatToCut) of
'short':
begin
MouseBox(shortBox, MOUSE_RIGHT);
if waitOptionMulti(['Make X', 'e X', 'X'], 1000) then begin
if (WaitChatChange()) then begin
sleep(175+random(350));
MyProfile.React();
TypeSend(IntToStr(33));
end
else begin
if (FindBitmapToleranceIn(enterAmountBmp, one, two, MCX1, MCY1, MCX2, MCY2, 8)) then begin
MyProfile.React();
TypeSend(IntToStr(33));
end;
end;
end
else begin
Exit;
end;
end;
'long':
begin
MouseBox(longBox, MOUSE_RIGHT);
if waitOptionMulti(['Make X', 'e X', 'X'], 1000) then begin
if (WaitChatChange()) then begin
MyProfile.React();
TypeSend(IntToStr(33));
end
else begin
if (FindBitmapToleranceIn(enterAmountBmp, one, two, MCX1, MCY1, MCX2, MCY2, 8)) then begin
MyProfile.React();
TypeSend(IntToStr(33));
end;
end;
end
else begin
Exit;
end;
end;
end;
end
else begin
if (FindBitmapToleranceIn(fletchMenuBmp, one, two, MCX1, MCY1, MCX2, MCY2, 8)) then GoTo FletchMenu;
MyProfile.React();
end;
sleep(150+random(150));
if (MyProfile.ActAhead()) then begin
MyProfile.MoveMouseSlow(_BANKPT);
end;
repeat
//iGraphic.DrawBox(MSX1,0,MSX2,50,true,clSilver);
//iGraphic.__Bmp.DrawText(('Time Running: ' + TimeRunning()),'UpChars07',Point(10,10),108750);
//iGraphic.__Bmp.DrawText(('Cut Logs: ' + IntToStrEx(cutLogsCount)),'UpChars07',Point(30,30),108750);
wait(100+random(100));
if (LevelUp() or ClickToContinue()) then break;
until(AllUnstrung());
MyProfile.React();
end;
function HaveUnstrung() : Boolean;
var
i,
invCount,
itemsChecked : Integer;
slotBox : TBox;
itemPt : TPoint;
unstrungFound : Boolean;
begin
itemsChecked := 0;
invCount := GetInvCount();
unstrungFound := False;
for i:= 1 to 28 do begin
if (ItemInSlot(i)) then begin
itemsChecked := itemsChecked + 1;
slotBox := InvBox(i);
if (unstrung.FindIn(slotBox, itemPt)) then begin
unstrungFound := True;
end;
end;
if (itemsChecked = invCount) then break;
if (unstrungFound) then break;
end;
if (unstrungFound) then Exit(True);
Exit(False);
end;
function HaveBowstrings() : Boolean;
var
i,
invCount,
itemsChecked : Integer;
slotBox : TBox;
itemPt : TPoint;
bowstringFound : Boolean;
begin
itemsChecked := 0;
invCount := GetInvCount();
bowstringFound := False;
for i:= 1 to 28 do begin
if (ItemInSlot(i)) then begin
itemsChecked := itemsChecked + 1;
slotBox := InvBox(i);
if (bowstring.FindIn(slotBox, itemPt)) then begin
bowstringFound := True;
end;
end;
if (itemsChecked = invCount) then break;
if (bowstringFound) then break;
end;
if (bowstringFound) then Exit(True);
Exit(False);
end;
function WithdrawUnstrung() : Boolean;
var
i : Integer;
unstrungPt,
itemPt : TPoint;
unstrungPts : TPointArray;
label
WDUnstrung, Start;
begin
GoTo Start;
WDUnstrung:
if (WithdrawPointEx(_UNSTRUNGPT, 14, ['u', 'u)','(u)', '(', '(u', ')'])) then begin
//sleep(200+random(100));
repeat
sleep(50);
until(HaveUnstrung());
Exit(True);
end
else begin
if (High(unstrungPts) >= 1) then begin
for i:= 0 to High(unstrungPts) do begin
if (WithdrawPointEx(unstrungPts[i], 14, ['u', 'u)','(u)', '(', '(u', ')'])) then begin
result := True;
_UNSTRUNGPT.X := unstrungPts[i].x;
_UNSTRUNGPT.Y := unstrungPts[i].y;
//sleep(200+random(100));
repeat
sleep(50);
until(HaveUnstrung());
Exit;
end;
end;
end;
end;
Start:
if (IsBankOpen()) then begin
if (FindDTMs(unstrung.DTM, unstrungPts, MSX1,MSY1,MSX2,MSY2)) then begin
GoTo WDUnstrung;
end
else begin
if (ScrollToItemDTM(unstrung.DTM, unstrungPt)) then begin
GoTo WDUnstrung;
end
else begin
Terminate := True;
terminateReason := 'No unstrung bows found';
Exit(False);
end;
end;
end
else begin
Exit(False);
end;
end;
function WithdrawBowstrings() : Boolean;
var
bowstringPt,
itemPt : TPoint;
label
WDBowstring, Start;
begin
GoTo Start;
WDBowstring:
WithdrawPointEx(bowstringPt, 14, ['string', 'ow string']);
sleep(200+random(100));
repeat
sleep(50);
if not (FindDTM(bowstring.DTM, bowstringPt.x, bowstringPt.y, MSX1,MSY1,MSX2,MSY2)) then break;
until(GetInvCount() = 28);
Exit(True);
Start:
if (IsBankOpen()) then begin
if (FindDTM(bowstring.DTM, bowstringPt.x, bowstringPt.y, MSX1,MSY1,MSX2,MSY2)) then begin
GoTo WDBowstring;
end
else begin
if (ScrollToItemDTM(bowstring.DTM, bowstringPt)) then begin
GoTo WDBowstring;
end
else begin
Terminate := True;
terminateReason := 'No bow strings found';
Exit(False);
end;
end;
end
else begin
Exit(False);
end;
end;
function AllStrung() : Boolean;
var
i,
invCount,
itemsChecked : Integer;
slotBox : TBox;
itemPt : TPoint;
begin
itemsChecked := 0;
invCount := GetInvCount();
if (invCount = 0) then Exit(False);
for i:= 1 to 28 do begin
if (ItemInSlot(i)) then begin
itemsChecked := itemsChecked + 1;
slotBox := InvBox(i);
if not (strung.FindIn(slotBox, itemPt)) then begin
Exit(False);
end;
end;
if (itemsChecked = invCount) then break;
end;
if (itemsChecked = invCount) then Exit(True);
Exit(False);
end;
function ClickPieces(First, Second: Integer) : Boolean;
var
T : Timer;
itemPt : TPoint;
attempts : Integer;
label
Attempt;
begin
attempts := 0;
Attempt:
attempts := attempts + 1;
if (attempts = 5) then Exit(False);
sleep(100+random(150));
if (ItemInSlot(First) and unstrung.FindIn(InvBox(First), itemPt)) then begin
writeln('found unstrung specified');
if (ItemInSlot(Second) and bowstring.FindIn(InvBox(Second), itemPt)) then begin
writeln('found bowstring specified');
InteractSlot(First, MOUSE_LEFT);
T.Start();
repeat
wait(50+random(150));
until (SlotActivated(First) or (T.TimeElapsed() > 2000));
if not (SlotActivated(First)) then GoTo Attempt;
wait(75+random(200));
InteractSlot(Second, MOUSE_LEFT);
T.Start();
repeat
wait(50+random(150));
until(FindBitmapToleranceIn(stringMenuBmp, one, two, MCX1, MCY1, MCX2, MCY2, 11) or (T.TimeElapsed() > 2000));
if (FindBitmapToleranceIn(stringMenuBmp, one, two, MCX1, MCY1, MCX2, MCY2, 11)) then Exit(True);
end
else GoTo Attempt;
end
else GoTo Attempt;
end;
//14-15, 14-18, 13-17, 1-14, rand-rand
procedure StringBows();
var
unstrungLeft,
bowstringLeft,
randomUnstrungSlot,
randomBowstringSlot, i: Integer;
itemPt : TPoint;
unstrungSlots,
bowstringSlots : TIntegerArray;
label
StringMenu;
begin
unstrungSlots := unstrung.GetSlots();
unstrungLeft := High(unstrungSlots);
bowstringSlots := bowstring.GetSlots();
bowstringLeft := High(bowstringSlots);
if not (unstrungLeft >= 0) then Exit;
if not (bowstringLeft >= 0) then Exit;
case random(100) of
0..69: begin
writeln('0-69 wrong');
if (ItemInSlot(14) and unstrung.FindIn(InvBox(14), itemPt)) then begin
if (ItemInSlot(15) and bowstring.FindIn(InvBox(15), itemPt)) then begin
if(ClickPieces(14, 15)) then begin
MouseBox(longBox, MOUSE_RIGHT);
if waitOptionMulti(['Make All', 'e All', 'All'], 1000) then begin
end
else begin
Exit;
end;
end
else begin
end;
end
else begin
if (ClickPieces(14, bowstringSlots[0])) then begin
MouseBox(longBox, MOUSE_RIGHT);
if waitOptionMulti(['Make All', 'e All', 'All'], 1000) then begin
end
else begin
Exit;
end;
end
else begin
end;
end;
end
else begin
if (ClickPieces(unstrungSlots[0], bowstringSlots[0])) then begin
MouseBox(longBox, MOUSE_RIGHT);
if waitOptionMulti(['Make All', 'e All', 'All'], 1000) then begin
end
else begin
Exit;
end;
end
else begin
end;
end;
end;
70..100: begin
writeln('70-84 wrong');
if (ItemInSlot(14) and unstrung.FindIn(InvBox(14), itemPt)) then begin
if (ItemInSlot(18) and bowstring.FindIn(InvBox(18), itemPt)) then begin
if (ClickPieces(14, 18)) then begin
MouseBox(longBox, MOUSE_RIGHT);
if waitOptionMulti(['Make All', 'e All', 'All'], 1000) then begin
end
else begin
Exit;
end;
end
else begin
end;
end
else begin
if (ClickPieces(14, bowstringSlots[0])) then begin
MouseBox(longBox, MOUSE_RIGHT);
if waitOptionMulti(['Make All', 'e All', 'All'], 1000) then begin
end
else begin
Exit;
end;
end
else begin
end;
end;
end
else begin
if (ClickPieces(unstrungSlots[0], bowstringSlots[0])) then begin
MouseBox(longBox, MOUSE_RIGHT);
if waitOptionMulti(['Make All', 'e All', 'All'], 1000) then begin
end
else begin
Exit;
end;
end
else begin
end;
end;
end;
end;
repeat
wait(100+random(100));
if (LevelUp() or ClickToContinue()) then break;
for i:=1 to 28 do begin
if (SlotActivated(i)) then InteractSlot(i, MOUSE_LEFT);
end;
until(AllStrung());
end;
function GetCutState(): State;
begin
result := LOST;
if not isLoggedIn() then
Exit;
if (HaveKnife()) then begin
write('have knife');
if (HaveLogs()) then begin
write(', have logs');
writeln(', fletching logs');
if (IsInterfaceOpen()) then CloseInterface();
MyProfile.React();
Exit(FLETCHLOGS);
end
else begin
if (AllUnstrung()) then begin
writeln(', depositing unstrung');
MyProfile.React();
Exit(BANKUNSTRUNG);
end
else begin
writeln(', getting logs');
Exit(GETLOGS);
end;
end;
end
else Exit(GETKNIFE);
end;
procedure CutScriptLoop();
var
curState : State;
begin
if not isLoggedIn() then Exit;
curState := GetCutState();
case curState of
BANKUNSTRUNG :
begin
OpenBank();
DepositUnstrung();
end;
FLETCHLOGS : CutLogs();
GETKNIFE :
begin
OpenBank();
WithdrawKnife();
end;
GETLOGS :
begin
OpenBank();
WithdrawLogs();
end;
LOST :
begin
Terminate := True;
end;
end;
end;
function GetStringState(): State;
begin
result := LOST;
if not isLoggedIn() then
Exit;
if (AllStrung()) then begin
MyProfile.React();
Exit(BANKBOWS);
end
else begin
if (HaveUnstrung()) then begin
if (HaveBowstrings()) then begin
write(', have bowstrings');
if (IsInterfaceOpen()) then CloseInterface();
writeln(', attaching bowstrings');
MyProfile.React();
Exit(ATTACHSTRINGS);
end
else begin
Exit(GETBOWSTRINGS);
end;
end
else begin
Exit(GETUNSTRUNG);
end;
end;
{
if (HaveUnstrung()) then begin
write('have unstrung bows');
if (HaveBowstrings()) then begin
write(', have bowstrings');
if (IsInterfaceOpen()) then CloseInterface();
writeln(', attaching bowstrings');
Exit(ATTACHSTRINGS);
end
else begin
if (AllStrung()) then begin
writeln(', all strung');
Exit(BANKBOWS);
end
else begin
writeln(', getting bowstrings');
Exit(GETBOWSTRINGS);
end;
end
end
else begin
writeln('getting unstrung bows');
Exit(GETUNSTRUNG);
end;
}
end;
procedure StringScriptLoop();
var
curState : State;
begin
if not isLoggedIn() then Exit;
curState := GetStringState();
case curState of
BANKBOWS :
begin
writeln('stuck bank');
OpenBank();
QuickDeposit('inv');
repeat
sleep(50+random(100));
until(GetInvCount() = 0);
end;
ATTACHSTRINGS :
begin
writeln('stuck attach');
StringBows();
end;
GETUNSTRUNG :
begin
writeln('stuck get unstrung');
OpenBank();
WithdrawUnstrung();
end;
GETBOWSTRINGS :
begin
OpenBank();
WithdrawBowstrings();
end;
LOST :
begin
writeln('lost');
Terminate := True;
end;
end;
end;
begin
declarePlayer();
initAL();
//OS_Smart.Graphics.Clear;
loadVars();
addOnTerminate('freeGlobals');
//iGraphic := OS_Smart.Graphics();
mouseSpeed := 20;
loginPlayer(true);
//setCompass('N');
setAngle(ANGLE_HIGH);
if not (GetInvCount() = 0) then QuickDeposit('inv');
if (CuttingLogs) then begin
repeat
CutScriptLoop();
//iGraphic.Clear();
until (Terminate);
end;
if not (GetInvCount() = 0) then QuickDeposit('inv');
if (StringingBows) then begin
Terminate := False;
repeat
StringScriptLoop();
until(Terminate);
end
else writeln(terminateReason);
end.