Simba Code:
//-----------------------------------------------------------------//
//-- SRL Resource Library --//
//-- Teleport routines --//
//-----------------------------------------------------------------//
type teleInfo = record
constant, dtm: integer;
dtmString: string;
rub: boolean;
end;
//Global variables
var srlTeleInfo: array of teleInfo; //Store static data
var SRL_TeleItemsInUse: TIntegerArray; //Store items in use
var SRL_TeleDTMs: TIntegerArray; //Store DTMs in use
//Use these to declare which teles are needed in a script
const
SRL_TELE_KINSHIP = 1; //done
SRL_TELE_DUELLING = 2; //done
SRL_TELE_ECTOPHIAL = 3; //done
SRL_TELE_VEXILUM = 4; //done
SRL_TELE_GLORY = 5;
SRL_TELE_WEALTH = 6; //done
SRL_TELE_GAMES = 7; //done
SRL_TELE_DIGSITE = 8; //done
SRL_TELE_COMBAT = 9; //done
SRL_TELE_SKILLS = 10;
SRL_TELE_EXPLORER3 = 11;//done
SRL_TELE_EXPLORER4 = 12;
SRL_TELE_TOTAL = 12;
{*******************************************************************************
procedure DeclareTeleInfo;
By: DTM
Description: Declare all teleport data
*******************************************************************************}
procedure DeclareTeleInfo;
begin
setLength(srlTeleInfo, SRL_TELE_TOTAL);
//Ring of kinship
with srlTeleInfo[SRL_TELE_KINSHIP - 1] do
begin
constant:= SRL_TELE_KINSHIP;
dtmString:= 'mrAAAAHic42BgYLBhZmBwZobQpkBsCcROQGwBxLZAPJGJgWEKEHcDcT8QTwfiOUA8D4gXA/G3ABWgKUw4sQgDfsBIAMMAABY4CFg=';
rub:= false;
end;
//Ring of duelling
with srlTeleInfo[SRL_TELE_DUELLING - 1] do
begin
constant:= SRL_TELE_DUELLING;
dtmString:= 'mrAAAAHic42BgYGBngAA2IOaG8lmhYixQWgiKeYGYC4j5oBikVrBcGEgy4cQiDPgBIwEMAwCUgwFU';
rub:= true;
end;
//Ectophial
with srlTeleInfo[SRL_TELE_ECTOPHIAL - 1] do
begin
constant:= SRL_TELE_ECTOPHIAL;
dtmString:= 'mggAAAHicY2NgYHjMxsDwDIhfAvFzIL4P5e9hYmDYBsR7gfgYEJ+EYr+eOKAuJgwswoAdMOLAEAAAi1gLeA==';
rub:= false;
end;
//Clan vexilum
with srlTeleInfo[SRL_TELE_VEXILUM - 1] do
begin
constant:= SRL_TELE_VEXILUM;
dtmString:= 'm6wAAAHic42ZgYGACYmYgZoPSHEDMB8RcDBAAkmeF8kGYBYg5oXKMUHmQXkkgFoLq5YTqdPGfw+AaMA+qCh9GmE8IMJKAkQAA0QADQA==';
rub:= false;
end;
//Amulet of glory
with srlTeleInfo[SRL_TELE_GLORY - 1] do
begin
constant:= SRL_TELE_GLORY;
dtmString:= 'mrAAAAHic42BgYEhkY2CIA+JkIE4D4jwgzgLiGKj4AiYGhqVQvBCIe4F4FhAvAuI5QJwu3AU0hQknlmTADxgJYBgAANhVCYY=';
rub:= true;
end;
//Ring of wealth
with srlTeleInfo[SRL_TELE_WEALTH - 1] do
begin
constant:= SRL_TELE_WEALTH;
dtmString:= 'mrAAAAHic42BgYHjOxsDwBIgfAPFTNgj/NRA/g4r1MDEwTAbiWVA8DYhnAvE8KA7izwWawoQTizDgB4wEMAwAABfoDSc=';
rub:= true;
end;
//Games Necklace
with srlTeleInfo[SRL_TELE_GAMES - 1] do
begin
constant:= SRL_TELE_GAMES;
dtmString:= 'mlwAAAHicY2dgYEhgY2DIBeIiIM4A4mQgjgHiaCA+xMTAsBGItwPxQSA+BsTHgXg/EAuJNgF1M2HFkgy4ASMeDAUAB/4JDQ==';
rub:= true;
end;
//Digsite Pendant
with srlTeleInfo[SRL_TELE_DIGSITE - 1] do
begin
constant:= SRL_TELE_DIGSITE;
dtmString:= 'mlwAAAHicY2dgYEhgY2DIBeIiIM4A4mQgjgHiaCA+xMTAsBGItwPxQSA+BsTHgXg/EK9UlgDqZsKKJRlwA0Y8GAoAHb0JSA==';
rub:= false;
end;
//Combat Bracelet
with srlTeleInfo[SRL_TELE_COMBAT - 1] do
begin
constant:= SRL_TELE_COMBAT;
dtmString:= 'mggAAAHicY2NgYOhlY2CYCsQzgHgaEPcBcTcQb2NiYNgOxHuA+AgQHwbi/UCcLzoFqIsJA0syYAeMODAEAACXhAlQ';
rub:= true;
end;
//Skills Necklace
with srlTeleInfo[SRL_TELE_SKILLS - 1] do
begin
constant:= SRL_TELE_SKILLS;
dtmString:= 'mlwAAAHicY2dgYGBlgABGIOYAYl4gFgdiISAWBGI+IBYDYlEgFgBiNqj6QP4cIMmEFUsy4AaMeDAUAACiPQGk';
rub:= true;
end;
with srlTeleInfo[SRL_TELE_EXPLORER3 - 1] do
begin
constant:= SRL_TELE_EXPLORER3;
dtmString:= 'm6wAAAHic42ZgYJjGyMCwCIjnAPFyKF4IxNOBeD5UfB6UDmViYAgBYi8gDgDiKCCOh+JwIA4CYj8gjgViBgYmgnjlRHGGr5cVGYgBXFDMSAJGAgCEzA4W';
rub:= false;
end;
with srlTeleInfo[SRL_TELE_EXPLORER4 - 1] do
begin
constant:= SRL_TELE_EXPLORER4;
dtmString:= 'mAAEAAHic42FgYJjDxMCwHIiXAvFKIF4PxGuBeC4QLwPiRVB6DVQ+GYiTgDgPiHOBOA2I45DYkUAcBVWTDsQMDExE4YycHIaaxiYGYoEIFDOSiJEBANqED8Q=';
rub:= false;
end;
end;
{*******************************************************************************
procedure FreeSRLTeleportDTMs;
By: DTM
Description: Free all DTMs in use
*******************************************************************************}
procedure FreeSRLTeleportDTMs;
var i: integer;
begin
if length(SRL_TeleDTMs) = 0 then Exit;
for i:=0 to high(SRL_TeleDTMs) do
FreeDTM(SRL_TeleDTMs[i]);
end;
{*******************************************************************************
function GetSRLTeleInfo(item: integer): teleInfo;
By: DTM
Description: Return teleport info for item
*******************************************************************************}
function GetSRLTeleInfo(item: integer): teleInfo;
var i: integer;
begin
for i:=0 to high(srlTeleInfo) do
if srlTeleInfo[i].constant = item then
begin
result:= srlTeleInfo[i];
break;
end;
end;
{*******************************************************************************
procedure SetupTeleports(items: integer);
By: DTM
Description: Setup SRL teleports
*******************************************************************************}
procedure SetupTeleports(items: TIntegerArray);
var i: integer;
begin
DeclareTeleInfo;
SRL_TeleItemsInUse := items;
SetLength(SRL_TeleDTMs, length(SRL_TeleItemsInUse));
//Load items DTM
for i:=0 to high(SRL_TeleDTMs) do
begin
SRL_TeleDTMs[i] := DTMFromString(GetSRLTeleInfo(items[i]).dtmString);
srlTeleInfo[items[i]-1].dtm := SRL_TeleDTMs[i];
end;
for i:=0 to high(SRL_TeleDTMs) do
writeln(SRL_TeleDTMs[i]);
writeln(srlTeleInfo[SRL_TELE_ECTOPHIAL-1].dtm);
//Register FreeDTM procedure
AddOnTerminate('FreeSRLTeleportDTMs');
end;
{*******************************************************************************
function UseTeleportEx(item: integer; checkInv: boolean; options: TStringArray): boolean;
By: DTM
Description: Teleport using the item
checkInv to check inventory tab
options for chooseOption / TypeSendEx
*******************************************************************************}
function UseTeleportEx(item: integer; checkInv: boolean; options: TStringArray): boolean;
var ti: teleInfo;
tb: TBox;
x, y, i: integer;
action: string;
v: TVariantArray;
begin
result:= false;
writeln(item);
ti:= getSRLTeleInfo(item);
GetMousePos(x, y);
if PointInBox(Point(x, y), IntToBox(MIX1, MIY1, MIX2, MIY2)) then
Mouse(MSCX, MSCY, randomRange(-50, 50), randomRange(-50, 50), mouse_move);
if length(options) = 0 then
options:= ['ele', 'ub ', 'bba'];
if length(options) >= 2 then
action := options[1];
//Special cases
case ti.constant of
//Left click ectophial
SRL_TELE_ECTOPHIAL: begin
if FTab(tab_inv) then
if WaitFindDTM(x, y, ti.dtm, 1000) then
begin
MouseItem(coordstoItem(x, y), mouse_left);
result:=true;
end;
Exit;
end;
end;
//General tele equipment
if checkInv then
begin
writeln('Checking inventory for item...');
if FTab(tab_inv) then
begin
if WaitFindDTM(x, y, ti.dtm, 1000) then
begin
if ti.rub then
begin
MouseItem(coordstoItem(x, y), mouse_right);
result:= WaitOption('ub ', 500);
if result then
begin
case action of
'1',
'2',
'3',
'4': begin
//wait for the teleoption
v:=[['re.', 'e.'], nothing];
if WaitFuncEx('FindNPCChatTextMulti', v, 500, 2000) then
begin
writeln('here');
TypeSendEx(action, false);
result:= true;
end
else result:=false;
end;
else result:=false;
end;
end;
end
else
begin
case ti.constant of
SRL_TELE_KINSHIP: begin
MouseItem(coordstoItem(x, y), mouse_right);
result:=WaitOption('ele', 500);
exit;
end;
SRL_TELE_VEXILUM: begin
MouseItem(coordstoItem(x, y), mouse_left);
wait(1500+random(500));
end;
SRL_TELE_DIGSITE: begin
MouseItem(coordstoItem(x, y), mouse_right);
result:=WaitOption('ub ', 500);
exit;
end;
SRL_TELE_EXPLORER3,
SRL_TELE_EXPLORER4: begin
MouseItem(coordstoItem(x, y), mouse_right);
result:=WaitOption('bba', 500);
exit;
end;
end;
end;
end
else writeln('Item not found in inventory...');
end;
end;
if not result then
begin
writeln('Checking equipment tab for item...');
if Ftab(tab_equip) then
begin
if WaitFindDTM(x, y, ti.dtm, 2000) then
begin
for i:=1 to 11 do
begin
tb:= GetEquippedItemBounds(i);
if PointInBox(Point(x, y), tb) then
begin
MouseBox(tb.X1, tb.Y1, tb.X2, tb.Y2, mouse_right);
result:= WaitOptionMulti(options, 1000);
if result then
begin
case ti.constant of
SRL_TELE_VEXILUM: begin
v:=['es', nothing];
if WaitFuncEx('FindNPCChatText', v, 500, 2000) then
begin
TypeSendEx('1', false);
result:= True;
end;
end;
end;
end;
end;
end;
end;
end
else writeln('Item not found in equipment...');
end;
writeln(booltostr(result));
end;
function UseTeleport(item: integer; options: TStringArray): boolean;
begin
result:= UseTeleportEx(item, true, options);
end;
function SRLTeleLocation(location: variant): boolean;
begin
case location of
//Ring of Duelling
'duel': result:= UseTeleport(SRL_TELE_DUELLING, ['uel', '1']);
'cw' : result:= UseTeleport(SRL_TELE_DUELLING, ['ast', '2']);
'ma' : result:= UseTeleport(SRL_TELE_DUELLING, ['ili', '3']);
'fog' : result:= UseTeleport(SRL_TELE_DUELLING, ['ist', '4']);
//Amulet of glory
'edgeville': result:= UseTeleport(SRL_TELE_GLORY, ['dge', '1']);
'karamja' : result:= UseTeleport(SRL_TELE_GLORY, ['amj', '2']);
'draynor' : result:= UseTeleport(SRL_TELE_GLORY, ['ayn', '3']);
'alkharid' : result:= UseTeleport(SRL_TELE_GLORY, ['ari', '4']);
//Games Necklace
'troll' : result:= UseTeleport(SRL_TELE_GAMES, ['hor', '1']);
'outpost': result:= UseTeleport(SRL_TELE_GAMES, ['ara', '2']);
'games' : result:= UseTeleport(SRL_TELE_GAMES, ['rot', '3']);
'corp' : result:= UseTeleport(SRL_TELE_GAMES, ['por', '4']);
//corp beast todo - don't have quest reqs
//burgh todo - don't have quest reqs
//Skills Necklace
'fish' : result:= UseTeleport(SRL_TELE_SKILLS, ['ish', '1']);
'mine' : result:= UseTeleport(SRL_TELE_SKILLS, ['ini', '2']);
'craft': result:= UseTeleport(SRL_TELE_SKILLS, ['raf', '3']);
'cook' : result:= UseTeleport(SRL_TELE_SKILLS, ['ook', '4']);
//Combat Bracelet
'warrior' : result:= UseTeleport(SRL_TELE_COMBAT, ['rri', '1']);
'champion' : result:= UseTeleport(SRL_TELE_COMBAT, ['ham', '2']);
'monastery': result:= UseTeleport(SRL_TELE_COMBAT, ['nas', '3']);
'range' : result:= UseTeleport(SRL_TELE_COMBAT, ['ang', '4']);
//Ring of wealth
'misc': result:= UseTeleport(SRL_TELE_WEALTH, ['ell', '1']);
'ge' : result:= UseTeleport(SRL_TELE_WEALTH, ['ran', '2']);
//Simple teleports
SRL_TELE_KINSHIP,
SRL_TELE_VEXILUM,
SRL_TELE_DIGSITE,
SRL_TELE_WEALTH, //use this if your wealth ring has one option!
SRL_TELE_ECTOPHIAL,
SRL_TELE_EXPLORER3,
SRL_TELE_EXPLORER4: result:= UseTeleport(location, []);
end;
end;