SRL Archive - Reflection

[R2]Catacomber


Flight

2011-08-19 05:28:51



SRL Stats Page

Description:
Catacomber is our first and only Catacomb-running combat script. It's designed for swift combat and lasting endurance. The catacombs are a great place to train with only a simple F2P quest to access them. This script will handle all 10 rooms and you choose which one to raid!

About the Catacombs:
The Catacombs are a dungeon located in the Lumbridge Graveyard. To unlock this area all you need is completion of The Blood Pact quest. (Note that this quest gives 100 exp to attack/defence/strength/ranged/magic) The Catacombs is swarmed with 10 combat rooms and 1 boss room, this script will run all 10 combat rooms, each individually handled. Enemies range from level 1 to level 15 combat, so it's a good place for low-to-mid level players to train endlessly.

'FightRegion' (line 25) is your input on which room to fight in. Here's a picture of the different rooms:


Features:
  • Fights endlessly in 1 of 10 rooms in the Lumbridge Catacombs
  • Train any combat style (Have this set before running script!)
  • No food required
  • Complete "Death Screen" handling
  • Re-equips your items upon dieing
  • Junk-dropping (Drops junk items upon death, check line 1123 for the list)
  • Death-walk back to chosen fight room
  • Lost detection with Home-Teleporting
  • Out-of-ammo recognition
  • Very swift combat
  • Solid break system (By Echo_) with cool graphics!
  • World switching option (Switch worlds after every break)
  • SRL Stats
  • On-Screen progress report
  • Failsafes to ensure endurance

AntiBans:
  • Human'ish waiting periods
  • Realistic combat
  • Camera rotating

How to use:
  • The Blood Pact quest completed
  • Start your player in front of Lumbridge castle or anywhere in the Catacombs

Credits:
  • Awkwardsaw for the idea
  • Iamadam for a portion of the fighting procedure
  • Nava2 for his wonderful path-generating functions


[End Note]:

I'm really excited about releasing this script. This was my first ever combat script and I'm very pleased with the end results! Now, I've only solo-tested this by myself so there might be a couple bugs I'll have to sort out, so please, by all means, post 'em here! Bob's Ratinator was a very popular script, even with the low amounts of exp it brought and crowded areas it had to run it, so I'm hoping that this can be a very wise alternative for that script. Enjoy the script, and post your progress reports here! :)

P.S. Because of my newly acquired knowledge of combat scripts, there's sure to be plenty more on the way. ;)

~Cheerz, Flight~

Flight

2011-08-19 05:30:12

Using your own Dynamic Signature:


Put this img code in your signature under UserCP and wrap it in "

http://flight.clawz.com/sigs/Catacomber/CatacomberSig.php?uid=USERIDHERE

Where it says "USERIDHERE" you simply put your SRL Stats User ID. For example, mine is 208, so I would use "CatacomberSig.php?uid=208"


Progress reports:


=-=-=-=-=-= Catacomber 1.0 by Flight =-=-=-=-=-=
Time Running: 15 Hours, 19 Minutes and 9 Seconds
Attack XP: 0
Strength XP: 132469
Defence XP: 0
Constitution XP: 44156
Ranged XP: 0
Deaths: 14
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


=-=-=-=-=-= Catacomber 1.0 by Flight =-=-=-=-=-=
Time Running: 4 Hours, 32 Minutes and 20 Seconds
Attack XP: 0
Strength XP: 82702
Defence XP: 0
Constitution XP: 27568
Ranged XP: 0
Deaths: 8
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
">

Home

2011-08-19 05:41:26

Great job mate!

~Home

i luffs yeww

2011-08-19 05:48:18

The sig stats look a bit off. D:

Other than that, sounds cool. :)

Harry

2011-08-19 06:02:32

Oooo nice. Should have it handle the quest :p And does room #10 click on the statue-area for infinite mages to attack you?

mormonman

2011-08-19 06:34:01

Oh man, this might give me a reason to finish the quester.

Flight

2011-08-19 06:57:05

From: Harry
Oooo nice. Should have it handle the quest :p And does room #10 click on the statue-area for infinite mages to attack you?


Well the boss room is Room #11, and because it just has that one NPC, I didn't think it was worth doing. :p So it just does the other 10 rooms.

@i luffs yeww
Are you talking about the 9 att/def exp? That's done for a reason, I had to force my script to commit a slight bit of exp to those two stats just so the Stats API has info for those two to grab. So that's the reason they're there.

Also, it looks like I'll need to put a couple more "SetAngle"'s in there, I got stuck in the grave yard because it, for some reason, failed to set the angle when we died, thus it could not find the Entrance Tile.

Edit:
Fixed and updated.

Harry

2011-08-19 07:39:46

Oh, dude, the final boss or whatever is the best. Every time you click you get a dedicated monster that attacks you. Especially good if the world is full of bots because there is no competition.

Flight

2011-08-19 07:47:16

From: Harry
Oh, dude, the final boss or whatever is the best. Every time you click you get a dedicated monster that attacks you. Especially good if the world is full of bots because there is no competition.


Did not know this. :o Thanks Harry, I think I'll experiment with that.

Jakkle

2011-08-19 10:19:02

Grate script, was thinking of doing this my self a while ago. Will defo use this with my army. :)

bolshak25

2011-08-19 12:09:29

gotta do the quest with my whole army, then i will be using this.

Howd you get the sig? i kind of want one

Flight

2011-08-19 12:24:09

From: bolshak25
gotta do the quest with my whole army, then i will be using this.

Howd you get the sig? i kind of want one


I'll make a proper post in the morning on how to put the sig for your Stats ID in your signature. So it'll show what you've personally gained in this script and how much time you've used it. I'm beat right now, gonna get some sleep.

bolshak25

2011-08-19 17:08:56

=-=-=-=-=-= Catacomber 1.0 by Flight =-=-=-=-=-=
Time Running: 3 Hours, 9 Minutes and 7 Seconds
Attack XP: 0
Strength XP: 17571
Defence XP: 0
Constitution XP: 5857
Ranged XP: 0
Deaths: 4
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

10 att 10 def 23 str starting. 36 str now

=-=-=-=-=-= Catacomber 1.0 by Flight =-=-=-=-=-=
Time Running: 1 Hours, 28 Minutes and 33 Seconds
Attack XP: 1620
Strength XP: 1620
Defence XP: 1620
Constitution XP: 1619
Ranged XP: 0
Deaths: 4
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

1 att 1 def 1 str at start. had to restart the script a couple times, but up to 17 on each. love the script.

suggestion: add grim reaper support. thats why i had to restart the second one a couple times

onilika

2011-08-19 18:44:29

Finnaly! The script is Out!
Cheers Mate!

Flight

2011-08-19 20:43:57

Grim reaper? I thought that as a Halloween thing only. I guess I'll have to take a look at that.

Let me throw together a new img and PHP script and then everyone can have their own dynamic signature for this script that tells how much exp they've gained and how long they've used it.

Edit:
Done making the PHP script and new signature image. I added a mini-tutorial on the second post of this thread on how to get your own, it's very simple!

Bubix

2011-08-19 23:34:23

This should be great, my little army was waiting for some combat scripts :)
but now for all of them i need to do a simple quest. but i hate them.. well.. what ever.. :D

Harry

2011-08-20 10:27:25

Just wondering if you have any plans to run though the quest in the script … it isn't that complex of a quest, shouldn't be too hard for your script to solve it. And also adding an option for training the lowest melee skill (though that wouldn't be too difficult to add). Maybe wielding weapon and armour drops if they drop any?

I'd just love to run my huge army but until those features are added I can't :( No way am I doing that stuff legit for 100+ players, lols. I am going somewhere for a week so I'm wanting to run a nice script for that time (other than woodcutting, everyone in my army already had 85+ wc :/)

bolshak25

2011-08-20 12:20:19

I agree with Harry on the quest part. If youd like a few accounts ive got a mini army that i can let you use.

and to harry, if you get a mace or scimmy you can use controlled. many of the monsters down there drop maces as well.

bevardis

2011-08-20 18:37:42

Too bad you have to complete that quest >.>

Flight

2011-08-20 20:16:58

A quest as well… :S That would take some heavy modifying, because I'm quite sure box regions would overlap, but then again I could have the script know what to do based on the location and if the quest is already complete, for example:


if AreaCheck('CatacombsFloor_1') then
if QuestDone then
Fight
else
Do_That_Part_Of_Quest;

I might experiment around. I'll need some accounts though, so I might take you up on that offer, bolshak25. As soon as you can get me a few accounts I think the sooner I can, at least, give this a try.

mormonman

2011-08-20 20:28:40

From: Flight
A quest as well… :S That would take some heavy modifying, because I'm quite sure box regions would overlap, but then again I could have the script know what to do based on the location and if the quest is already complete, for example:


if AreaCheck('CatacombsFloor_1') then
if QuestDone then
Fight
else
Do_That_Part_Of_Quest;

I might experiment around. I'll need some accounts though, so I might take you up on that offer, bolshak25. As soon as you can get me a few accounts I think the sooner I can, at least, give this a try.


The quest has dynamic tiles.

Flight

2011-08-20 20:33:28

From: mormonman
The quest has dynamic tiles.


:duh: That's good news. Thanks for the info.

From: bolshak25

and to harry, if you get a mace or scimmy you can use controlled. many of the monsters down there drop maces as well.


I think maces would combat with my re-equipping in Lumbridge. The script is set to look for these items:

[
'scimitar','blade','sling','Sling','shortbow',
'helm','platebody','kiteshield','defender','hide',
'Amulet of','bracelet']

So, if I put 'mace' in that list, and let's say the player is using a Rune scimitar and, there's a good chance he'll re-equip the mace instead of the scimitar, because low level items like that aren't dropped upon death here. Or atleast I'm pretty sure they aren't.

bolshak25

2011-08-20 23:51:54

pmed you accounts

i luffs yeww

2011-08-21 01:06:31

I may be interested in helping with the quest. :o I've always liked your contributions here.

Flight

2011-08-21 01:24:23

From: i luffs yeww
I may be interested in helping with the quest. :o I've always liked your contributions here.


That's really awesome of you to offer help. :) But I brainstormed a basic idea/skeleton mentally already and I'm gonna give it a shot and see how it turns out. But if I do happen to get stuck somewhere, you'll be the first to know. :p

@Bolshak25:
Thanks for the test dummies, I will warn you now though, the quest gives 100 xp to all combat skills (excluding constitution) so you might gain a couple levels, I hope this is okay. I should only need 1 account for coding, 1/2 accounts for testing.


Edit:
Well, I misunderstood you, Mormonman, as I thought you meant the tiles were dynamic to the quest <> finished quest, when actually they are, infact, dynamic to the player. I can do this but agh… it's gonna be tough and take a long time to do. I luffs, if you're still interested I can give you what I have and you could take over. I've done all the Quest-Starting and killing Kayle. But that last part will have to have slight edit, because I have it set to webwalk to a static tile (Kayle's tile) and do the fighting. Let me know if you're interested, because like I said, if people really want the quest done I can do it, but I'm reluctant to do so.

bolshak25

2011-08-21 11:27:20

im totally fine with that. im planing on getting all of them up with this script anyways

Nava2

2011-08-21 11:34:33


:(

Also, the deathwalk to the 10th room does not work.. it just tries to blind click through the wall. Perhaps having it walk to each room individually?

It runs great inside.

Flight

2011-08-21 12:13:58

From: Nava2

:(

Also, the deathwalk to the 10th room does not work.. it just tries to blind click through the wall. Perhaps having it walk to each room individually?

It runs great inside.


I can see where that would fail, yes. I was thinking about having 2 parsed tiles for separate WindWalking. Sorry about that, but I think I can make a quick fix for the higher level'd rooms.

Nava2

2011-08-21 13:39:07

I started messing with this script.. I changed how you declare your areas to a record setup. Much cleaner then when walking to an area, you can cycle through the area array and walk to each RTile until you're at the correct room.

Just a thought.. I don't have time to make it compile, its close though. Basically "CurrentArea" holds the record of the fighting room, and the other global rooms are in indecies. I would suggest writing in some constants to make the indicies easier!

                   {/////////////////////////////////////////
// ~Catacomber by Flight~ //
// //
// Version: 1.0 //
/////////////////////////////////////////}

program Catacomber;

{$define SMART}
{$i SRL/SRL.scar}
{$i SRL/SRL/skill/magic.scar}
{$i SRL/SRL/Misc/stats.simba}
{$i Reflection/Reflection.simba}
{$i SRL/SRL/misc/paintsmart.scar}


//////////////////////////////-Begin setup-/////////////////////////////////////

Const

//SRL Stats
SRLStats_Username = '';
SRLStats_Password = '';

//Script settings
FightRegion = 10;
ChangeWorlds = True;
Member = True;

//Break settings
BreakIn = 135; //How long before we take a break? (minutes)
BreakFor = 13; //How long will we break for? (minutes)
Bir = 12; //Random minutes to add/subtract from how long until we break
Bfr = 7; //Random minutes to add/subjtract from break duraction

//////////////////////////////-End of setup-////////////////////////////////////

Var
BreakImg: TMufasaBitmap;
targetName,Version: String;
lastFightTime: Integer;
lastInteractedTile,Stairs1_Down,Stairs2_Down,
Stairs_Enter,RTile: TTile;
Deaths,CommitTime,ScreenTime,NewImg: Integer;

//Break variables
BreakRounds,TotalBreaks: Integer;

//Exp variables
AttXP_Start,AttXP_Old,AttXP_New,StrXP_Start,
StrXP_Old,StrXP_New,DefXP_Start,DefXP_Old,
DefXP_New,HitXP_Start,HitXP_Old,HitXP_New,
RngXP_Start,RngXP_Old,RngXP_New: Integer;

Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'hitpoints';
Active := True;
end;
end;

Procedure CheckStats;
begin
if ((SRLStats_Username = '') And (SRLStats_Password = '')) then
begin
case MessageBox('No Stats account entered, would you like to set one up?','SRL Stats',mbYesNoCancel) of
mrYes:
begin
OpenWebPage('http://stats.villavu.com/register');
TerminateScript;
end;
mrNo:
begin
SetupSRLStats(165,'Anonymous','anon1337');
Exit;
end;
mrCancel: TerminateScript;
end;
end else
SetupSRLStats(165,SRLStats_Username,SRLStats_Password);
end;

type
TArea = record
Region: TBox;
DAnim: TIntegerArray;
targetName: String;
RTile: TTile;
fightArea: Boolean;
end;

TAreaArray = array of TArea;

var
currentArea: TArea;
Areas: TAreaArray;

Procedure DefineAreas;
Var
Zone: Integer;
begin
Zone := FightRegion;

setLength(Areas, 15);

// lumbridge:
with Areas[0] do
begin
Region := IntToBox(3217,3210,3226,3228);
fightArea := False;
end;

// grave:
with Areas[1] do
begin
Region := intToBox(3238, 3191, 3251, 3203);
fightArea := False;
end;

// room 1:
with Areas[2] do
begin
Region := intToBox(3875,5526,3879,5529);
fightArea := False;
end;

with Areas[3] do
begin
Region := intToBox(3863,5522,3869,5526);
fightArea := False;
end;

with Areas[4] do
begin
Region := intToBox(3970,5560,3974,5565);
fightArea := False;
end;

with Areas[5] do
begin
DAnim := [8878, 8878];
targetName := 'Warped cockroach';
RTile := Point(3972,5553);
Region := intToBox(3969,5550,3977,5557);
fightArea := True;
end;

with Areas[6] do
begin
DAnim := [12896,12896]
targetName := 'Corpse Spider';

RTile := Point(3986,5553);
Region := intToBox(3978, 5550, 3994, 5556);
fightArea := True;
end;

with Areas[7] do
begin
DAnim := [7244, 7244];
targetName := 'Warped fly';

RTile := Point(3995,5543);
Region.X1 := 3987;
Region.Y1 := 5539;
Region.X2 := 4003;
Region.Y2 := 5547;
fightArea := True;
end;

with Areas[8] do
begin
DAnim := [12893, 12893];
targetName := 'Crawling corpse torso';

RTile := Point(4010,5544);
Region.X1 := 4004;
Region.Y1 := 5542;
Region.X2 := 4015;
Region.Y2 := 5546;
fightArea := True;
end;

with Areas[9] do
begin
DAnim := [14860, 14860];
targetName := 'Warped rat';

RTile := Point(4023,5544);
Region.X1 := 4016;
Region.Y1 := 5538;
Region.X2 := 4029;
Region.Y2 := 5548;
fightArea := True;
end;

with Areas[10] do
begin
DAnim := [12869, 12870];
targetName := 'Skeleton';

RTile := Point(4024,5530);
Region.X1 := 4019;
Region.Y1 := 5523;
Region.X2 := 4028;
Region.Y2 := 5537;
fightArea := True;
end;

with Areas[11] do
begin
DAnim := [4917, 4917];
targetName := 'Warped bat';

RTile := Point(4020,5515);
Region.X1 := 4011;
Region.Y1 := 5504;
Region.X2 := 4027;
Region.Y2 := 5520;
fightArea := True;
end;

with Areas[12] do
begin
DAnim := [12869, 12870];
targetName := 'Corpse archer';

RTile := Point(4017,5496);
Region.X1 := 4009;
Region.Y1 := 5489;
Region.X2 := 4021;
Region.Y2 := 5502;
fightArea := True;
end;

with Areas[13] do
begin
DAnim := [6182, 6282];
targetName := 'Skoblin';

RTile := Point(4000,5495);
Region.X1 := 3992;
Region.Y1 := 5492;
Region.X2 := 4009;
Region.Y2 := 5499;
fightArea := True;
end;

with Areas[14] do
begin
DAnim := [12869, 12870];
targetName := 'Corpse mage';

RTile := Point(3995,5481);
Region.X1 := 3988;
Region.Y1 := 5475;
Region.X2 := 4002;
Region.Y2 := 5489;
fightArea := True;
end;

currentArea := Areas[zone+4];
end;

{Skeleton by Brak, re-written with bitmaps, yay!}
Procedure TurnAidOff;
Var
x,y,BMP: Integer;
begin
BMP := BitmapFromString(9, 8, 'meJyTkqmSkWuUkqkSl8yWArORuRAR' +
'eaUeCBuCgFy4GknpYggbohLIBcoyMjDgQd0z5gNRdueS8Kwy7+Ri+' +
'9iK0JScv//+wRHDXk4g4pohCEQZx1GkgFxkWWQpNI0AjLpP/A==');
setbitmapname(BMP,'AidButton'); //Don't laugh

if TabExists(tab_Options) then
if GameTab(tab_Options) then
begin
if FindBitmapIn(BMP,x,y,570,410,605,450) then
begin
MMouse(x,y,5,5);
Wait(Random(100));
if WaitUpTextMulti(['oggle', 'ccep', 'cept', ' Aid'], 500) then
begin
GetMousePos(x,y);
Mouse(x,y,0,0,True);
Wait(RandomRange(150,250));
Exit;
end;
end;
end;
Gametab(tab_Inv);
FreeBitmap(BMP);
end;

Procedure LoadVars;
Var
tempPic: TMufasaBitmap;
begin
Retaliate(True);
TurnAidOff;
Version := '1.0';
MarkTime(CommitTime);
MarkTime(ScreenTime);
MouseSpeed := RandomRange(17,20);

AttXp_Start := R_GetSkillExp(SKILL_ATTACK);
StrXp_Start := R_GetSkillExp(SKILL_STRENGTH);
DefXp_Start := R_GetSkillExp(SKILL_DEFENCE);
HitXp_Start := R_GetSkillExp(SKILL_HITPOINTS);
RngXp_Start := R_GetSkillExp(SKILL_RANGE);
AttXp_Old := R_GetSkillExp(SKILL_ATTACK);
StrXp_Old := R_GetSkillExp(SKILL_STRENGTH);
DefXp_Old := R_GetSkillExp(SKILL_DEFENCE);
HitXp_Old := R_GetSkillExp(SKILL_HITPOINTS);
RngXp_Old := R_GetSkillExp(SKILL_RANGE);

Stairs_Enter := Point(3248,3198);
Stairs1_Down := Point(3874,5527);
Stairs2_Down := Point(3867,5524);

DefineAreas;

NewImg := BitmapFromString(311, 49, 'meJztnXdcFNf6/1M01auJ0Rg7X' +
'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' +
'19LSjL4WKie3+XHFTQvMzslJx96erKujYGVBAEilpTf20DdIWUVpZ' +
'LR3cOhJwAU7IHRktCsvL/P9cTMgFJxUl7JhSD9ZuRMqIiPNIyPDAx' +
'Gvu5sRK8tBAoEhM4WOTSaTUlJu5eTeSk0Nb2spe/y41MCA8vY2kPG' +
'hVCQUFSCcliqvyAAzJWmqMH4RgCy+/EHhi4XJZ/OjYKa9vfWrkK7l' +
'pMFxty+mp4drqMkBpyKiaz5+Ky4uhEJJQrlfmgTOC5yqoD7Yi18zM' +
'69ATlpYeEtVVRIgNaDrL/EJwSkpoeXlqWiMDE2OAi6e9j9vX1l5B4' +
'tDbBxSl6KirUGafY0KqbgojflyiorSOKwMDittZIgNDXHh5WXWZmx' +
'JMeg5AGZGRkJpaXLeveu93dVdnZVGRnobbeEHkclJvLkZnoCXzM27' +
'vTp2dOCng4xOitu5c4fnGffJycGJ8V7w0IrK7JmZ4ba2BppDZ4GXH' +
'KGQNZHNzaUQ6zIe7n6yesbk5UXlEHwS4pzNTSVqBBngFINRom8uEM' +
'UVFuXOTA8+fdrU2lI2Otr54tnE6Gj3+3PXhYR45eQE5GT5UtPCzUz' +
'wHBxHKBQ8I3Oqoaq6usrnz8YeN5fAmUTKCTrY6Tx+fH/1Rd40IAUb' +
'jQj3eFR1F4+T0dfHfPcdvSW18Th5DEZKVUX81at5cTFuSFQ/1FTSl' +
'NTQhITLV696B146vWqmHHAy19o4MtI7JsYvNSVURwdFc2zH0krXzl' +
'731ClDT08LQ6ONQer/BlKzTUKanb3qpIY4MVqQfvbZp2p4eQJeFnK' +
'Hof5GSE5Xc3z0ej2H6f79/IXnY2OjT3p7qqen+14uTU9NPmVnp3H7' +
'Q1lZoa+35cYNP309VWNDPI7WUkvKSgo93c1RV89qkxX09TDvL5vzy' +
'Wo42tFRHxbqSlKXpWgpo9G/j7pTdNEG+ioA6dTUIEAKRUUF8X4N7x' +
'37Z1gcpqyscHZmuK+vycBAtbAwEQhtb2tgZmaiuYu3t/kZTxMcVqK' +
'7u56L8wiUdb/lbe3atUseKSwrwwNBb0truZMjhYvzqLY2hoWVxiPG' +
'8BOYmBiPjvbNza2sof382fjTp43z8/Bh4qyXB836lZWl5OUFZWV4q' +
'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' +
'3wWJk5OX4rMzwoyNPIPmqrS15fxuUiqSsNJepEWpooBUCv6pHBW/+' +
'tGPHDikJbgtzQlJqeMadqMzMqMyMlf+mpkempEWkpV9JSYtMTAqLS' +
'wiNjb0cGubr7eNiamZAJ1lbS/BF0tIiFB1UatrV5KTYLS7gA0mxoB' +
'Avkajk4EDx9jIPD3NPSAzOyorOK7gNTNXXFzQ0luTmJlnbmG3iXfO' +
'QxSgryxro486eNQsJcUlJCS0qSayty2tvr+jqqEpOvo7FoXau8S4M' +
'+jp85BCZjEpODr9x4yrjhggWTySqXLjgWFCQ5uzs+EHeynfgwI8UC' +
'sHOlhIRcaa7pwo4jYujfdn89ttvtbXQGRk3zMxO/iMmu9IXHIKoqK' +
'CeHuGctxXERYkJl/LzYsvLkh89ygRIOzsednU9KinJsLe3PHyYobF' +
'Nbm4OElE++qpXSXFazLUQmtcKLi52Al46IsytID8x6mqQAD+NITJO' +
'TjYsWiI40Ole7u0rkYH8tLb5h2rHjs9ZWJgkJEVQaAUNEk6diFVBK' +
'YqKCa/1BocN6cCB/fCDKiohSJoEEokA+eAeuuOx/zgdPPSTvLyMtg' +
'5RW5v0Qc7YP0jgGmxszDIy4ni8iraOuiZZDYNRFpcQYWRhq79G/w+' +
'LKQil');

//Procedures taken from Iamadam's StrongHolder
tempPic := GetMufasaBitmap(NewImg);
BreakImg := TMufasaBitmap.create;
BreakImg.SetSize(tempPic.Width, tempPic.Height);
tempPic.FastDrawTransparent(0, 0, BreakImg);

end;

//Procedures taken from Iamadam's StrongHolder
Procedure BreakScreen;
Var
Canvas: TCanvas;
begin
Wait(500);
try
SmartSetDebug(True);
Canvas := TCanvas.Create;
Canvas.Handle := SmartGetDebugDC;
ClearRSCanvas(Canvas);
BreakImg.DrawToCanvas(235,200,Canvas);
except
writeln('error...');
end;
end;

Procedure Report;
Var
ExpA,ExpS,ExpD,ExpC,ExpR: Integer;
begin
ClearDebug;
ExpA := R_GetSkillExp(SKILL_ATTACK) - AttXp_Start;
ExpS := R_GetSkillExp(SKILL_STRENGTH) - StrXp_Start;
ExpD := R_GetSkillExp(SKILL_DEFENCE) - DefXp_Start;
ExpC := R_GetSkillExp(SKILL_HITPOINTS) - HitXp_Start;
ExpR := R_GetSkillExp(SKILL_RANGE) - RngXp_Start;

WriteLn('=-=-=-=-=-= Catacomber '+Version+' by Flight =-=-=-=-=-=');
WriteLn('Time Running: '+TimeRunning);
WriteLn('Attack XP: '+IntToStr(ExpA));
WriteLn('Strength XP: '+IntToStr(ExpS));
WriteLn('Defence XP: '+IntToStr(ExpD));
WriteLn('Constitution XP: '+IntToStr(ExpC));
WriteLn('Ranged XP: '+IntToStr(ExpR));
WriteLn('Deaths: '+IntToStr(Deaths));
//WriteLn('Breaks: '+IntToStr(TotalBreaks));
WriteLn('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=');
end;

Procedure PrintOnSmart(TP: TStringArray; Placement: TPoint; Colour: integer);
var
mx, my, Pic, I, B, H, TPH, Numb: Integer;
TTP: TPointArray;
Canvas: TCanvas;
begin
SmartSetDebug(True);
GetClientDimensions(mx, my);
Pic := BitmapFromString(mx, my, '');
TPH := High(TP);
for I := 0 to TPH do
begin
TTP := LoadTextTPA(TP[i], SmallChars, H);
for B := 0 to High(TTP) do
begin
Numb := ((I + 1) * 13);
FastSetPixel(Pic, TTP[b].x + 1, TTP[b].y + Numb + 1,131072);
FastSetPixel(Pic, TTP[b].x, TTP[b].y + Numb, Colour);
end;
end;
Canvas := TCANVAS.Create;
Canvas.Handle := SmartGetDebugDC;
DrawBitmap(Pic, Canvas, Placement.x, Placement.y);
FreeBitmap(Pic);
end;

Procedure OnScreen;
Var
ExpA,ExpS,ExpD,
ExpH,ExpR,XPH_A,XPH_S,
XPH_D,XPH_H,XPH_R: Integer;
begin
ExpA := R_GetSkillExp(SKILL_ATTACK) - AttXp_Start;
ExpS := R_GetSkillExp(SKILL_STRENGTH) - StrXp_Start;
ExpD := R_GetSkillExp(SKILL_DEFENCE) - DefXp_Start;
ExpH := R_GetSkillExp(SKILL_HITPOINTS) - HitXp_Start;
ExpR := R_GetSkillExp(SKILL_RANGE) - RngXp_Start;

XPH_A := Round((ExpA * 3600) / (GetTimeRunning / 1000));
XPH_S := Round((ExpS * 3600) / (GetTimeRunning / 1000));
XPH_D := Round((ExpD * 3600) / (GetTimeRunning / 1000));
XPH_H := Round((ExpH * 3600) / (GetTimeRunning / 1000));
XPH_R := Round((ExpR * 3600) / (GetTimeRunning / 1000));

PrintOnSmart(['~Catacomber '+Version+' (by Flight)~'],Point(15,30),3716227);
PrintOnSmart([''+TimeRunning,'Attack XP: '+IntToStr(ExpA)+' ('+IntToStr(XPH_A)+' XP/Hour)',
'Strength XP: '+IntToStr(ExpS)+' ('+IntToStr(XPH_S)+' XP/Hour)',
'Defence XP: '+IntToStr(ExpD)+' ('+IntToStr(XPH_D)+' XP/Hour)',
'Hitpoints XP: '+IntToStr(ExpH)+' ('+IntToStr(XPH_H)+' XP/Hour)',
'Ranged XP: '+IntToStr(ExpR)+' ('+IntToStr(XPH_R)+' XP/Hour)',
'Deaths: '+IntToStr(Deaths)],Point(20,60),15856381);

MarkTime(ScreenTime);
end;

Procedure Commit;
begin

AttXp_New := R_GetSkillExp(SKILL_ATTACK);
StrXp_New := R_GetSkillExp(SKILL_STRENGTH);
DefXp_New := R_GetSkillExp(SKILL_DEFENCE);
HitXp_New := R_GetSkillExp(SKILL_HITPOINTS);
RngXp_New := R_GetSkillExp(SKILL_RANGE);

stats_IncVariable('Attack EXP (Gained)',(AttXp_New-AttXp_Old));
stats_IncVariable('Strength EXP (Gained)',(StrXp_New-StrXp_Old));
stats_IncVariable('Defence EXP (Gained)',(DefXp_New-DefXp_Old));
stats_IncVariable('Hitpoints EXP (Gained)',(HitXp_New-HitXp_Old));
stats_IncVariable('Ranged EXP (Gained)',(RngXp_New-RngXp_Old));
Stats_Commit;

AttXp_Old := AttXp_New;
StrXp_Old := StrXp_New;
DefXp_Old := DefXp_New;
HitXp_Old := HitXp_New;
RngXp_Old := RngXp_New;

Report;
MarkTime(CommitTime);

end;

Procedure ScriptSetup(World:Integer;Signed,Clear,SetCam:Boolean);
Begin

AddOnTerminate('Report');

Smart_Server := World;
Smart_Members := Member;
Smart_Signed := Signed;
Smart_SuperDetail := False;

SetupSRL;
DeclarePlayers;
CheckStats;
R_UpdateHooks;

if Clear then
ClearDebug;
LogInPlayer;
if SetCam then
SetAngle(true);

LoadVars;
OnScreen;

End;

Procedure humanWait(time : Integer);
begin
wait(time + random(time) + random(random(time)));
end;

Function DeathScreen: Boolean;
begin
Result := R_ValidInterface(18);
end;

Function R_ClickItem_F(Slot: Integer; Action1, Action2: String): Boolean;
var
InterfaceID, X, Y: Integer;
Item: TInterfaceComponent;
begin
Result := False;
InterfaceID := R_GetInventoryInterfaceIndex;
if InterfaceID = NULL_INT then
begin
R_Debug('The Inventory interface doesn''t exist!', '');
Exit;
end;
if InterfaceID = INTERFACE_INVENTORY then
begin
R_GameTab(RTAB_INVENTORY);
end;

Item := R_GetInterfaceComponent(InterfaceID, 0, Slot-1);
if(Item.ID <= 0)then
Exit;

R_ClickInterface(Item, 3);
GetMousePos(X, Y);
wait(125+Random(55));

if(IsUpText(Action1) Or IsUpText(Action2))then
begin
Mouse(X, Y, 0, 0, True);
Result := True;
end;
end;

Function R_WindWalk_F(T: TTile): Boolean;
Var
I, Tries: Integer;
M, P: TPoint;
CTRLPoints: TPointArray;
begin
P := T;
repeat
M := R_GetMyPos;
CtrlPoints := R_WindPath(M.x, M.y, P.X, P.Y, 5.0, 2.5, 0.0, 0.0, 4.5, 2.5);
Inc(Tries);
if(Tries > 20)then
begin
R_Debug('Failed more than 20 times', 'R_WindWalk');
R_FindRandoms;
if Cast('lumbridge home teleport', False) then
Wait(RandomRange(9500,1175));
Exit;
end;
for I:= High(CtrlPoints) downto 0 do
if R_WalkToTile(CtrlPoints[i],0, 10) then
begin
Result := I = High(CtrlPoints);
Break;
end;
until(Result);
end;

Function inArea(Area : TBox) : boolean;
begin
result := PointInBox(R_GetMyPos, Area);
end;

function atTile(location: TTile; name, action : TStringArray; height, randomness : Integer) : boolean;
var
tilePoint : TPoint;
begin
result := False;
tilePoint := R_tileToMs(location, height);
MMouse(tilePoint.x, tilePoint.y, randomness, randomness);
wait(100);
if(IsUpTextMultiCustom(name) Or IsUpTextMultiCustom(action)) then
begin
ClickMouse2(True);
if DidRedClick then
result := True
else
result := False;
end else if(isUpText('options')) then
begin
clickMouse2(False);
if ChooseOptionMulti(action) then
result := True;
end;
end;

Procedure Fight;
Var
inFightWith : TNPC;
npcs : TNPCArray;
index : Integer;
begin
if(R_AreWeInteracting(InFightWith, False) and (getSystemTime - lastFightTime < 1000 * 60)) then
begin
lastInteractedTile := inFightWith.tile;
humanWait(1000);
exit;
end;

npcs := R_SortNPCs(R_GetNPCs(currentArea.targetName, false));
if(GetArrayLength(npcs) = 0) then
begin
humanwait(500);
Exit;
end;

for index := 0 to high(npcs) do
begin
if((npcs[index].Interacting = -1)
and not((npcs[index].Tile = lastInteractedTile))
and not (inIntArray(currentArea.DAnim, npcs[index].Animation))) then
begin
lastInteractedTile := npcs[index].tile;
if(not R_tileOnMS(npcs[index].Tile, 0)) then
exit;
if(atTile(npcs[index].Tile, [currentArea.targetName], ['Attack'], 300, 5)) then
begin

case (Random(4)) of
1: MakeCompass('Random');
end;

lastFightTime := GetSystemTime;
humanWait(2000);
end;
break;
end;
end;
end;

Function AreaCheck(Where: String): Boolean;
begin
Result := False;

Case LowerCase(Where) of

'castle' : Result := inArea(Areas[0].region);

'grave' : Result := inArea(Areas[1].region);

'room1' : Result := inArea(Areas[2].region);

'room2' : Result := inArea(Areas[3].region);

'room3' : Result := inArea(Areas[4].region);

'region' : Result := inArea(currentArea.region);

end;
end;

Procedure ToLocation(Where: String);
Var
T1,T2,T3,T4: Integer;
begin

Case LowerCase(Where) of

'grave':
begin
R_WindWalk_F(Point(3246,3198));
Wait(RandomRange(1215,1325));
While R_Moving do
Wait(1);
end;

'room1':
begin
if(Not R_TileOnMS(Stairs_Enter,100)) then
begin
R_WalkToTile(Point(3246,3198),1,1);
SetAngle(True);
While R_Moving do
Wait(1);
end;
if atTile(Stairs_Enter, ['Catacomb','entrance'], ['limb','-down'], 100, 15) then
begin
Wait(RandomRange(355,525));
While R_Moving do
Wait(1);

MarkTime(T1);
repeat
if (AreaCheck('Room1') Or (TimeFromMark(T1) > 5000)) then
Exit;
until (False)

end;
end;

'room2':
begin
if atTile(Stairs1_Down, ['Stairs'], ['limb','-down'], 100, 15) then
begin
Wait(RandomRange(355,525));
While R_Moving do
Wait(1);

MarkTime(T2);
repeat
if (AreaCheck('Room2') Or (TimeFromMark(T2) > 5000)) then
Exit;
until (False)

end;
end;

'room3':
begin
if atTile(Stairs2_Down, ['Stairs'], ['limb','-down'], 100, 15) then
begin
Wait(RandomRange(355,525));
While R_Moving do
Wait(1);

MarkTime(T3);
repeat
if (AreaCheck('Room3') Or (TimeFromMark(T3) > 5000)) then
Exit;
until (False)

end;
end;

'region':
begin
R_WindWalk_F(RTile);
Wait(RandomRange(355,525));
While R_Moving do
Wait(1);

MarkTime(T4);
repeat
if (AreaCheck('Region') Or (TimeFromMark(T4) > 5000)) then
Exit;
until (False)

end;

end;
end;

Procedure CheckScreen;
Var
T,I: Integer;
S: TInterfaceChild;
Items,Items2: TInvItemArray;
begin
if DeathScreen then
begin
Inc(Deaths);
MarkTime(T);
Repeat

if(TimeFromMark(T) > 5000)then
Break;

S := R_GetInterfaceChild(18, 36);
R_ClickInterface(S, 1);


if Not DeathScreen then
Break;

Until(False)

end;

Wait(RandomRange(4375,5350));
Gametab(tab_Inv);
Wait(RandomRange(575,780));

if R_ItemExistsEx([
'scimitar','blade','sling','Sling','shortbow',
'helm','platebody','kiteshield','defender','hide',
'Amulet of','bracelet'],Items) then
begin
if(GetArrayLength(Items) = 0) then
begin
humanwait(500);
Exit;
end;

For I := 0 to high(Items) do
begin
R_ClickItem_F(Items[I].Slot,'Wear','Wield');
Wait(RandomRange(1150,1350));
end;
end;

Wait(RandomRange(575,780));

if R_ItemExistsEx([
'scimitar','blade','sling','Sling','shortbow',
'helm','platebody','kiteshield','defender','hide',
'Amulet of','bracelet'],Items2) then
begin
if(GetArrayLength(Items2) = 0) then
begin
humanwait(500);
Exit;
end;

For I := 0 to high(Items2) do
begin
R_ClickItem_F(Items2[I].Slot,'Wear','Wield');
Wait(RandomRange(1150,1350));
end;
end;

SetAngle(True);
ToLocation('Grave');

end;

Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
w,x,y,z,h,m,s,
RealBTime,
CurrentBTime: integer;
NPC: TNPC;
begin
if not LoggedIn then Exit;

w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-randBreakIn * 60000, randBreakIn * 60000);
z := RandomRange(-randBreakFor * 60000, randBreakFor * 60000);

if (HowManyPlayers = 1) then
begin
if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
begin
if R_AreWeInteracting(NPC, False) then
Wait(RandomRange(4750,7535))
else
begin
Repeat

R_FindRandoms;
Logout;
Wait(RandomRange(435,675));
if Not LoggedIn then
break;

Until(False)

BreakScreen;
RealBTime := ((x+z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Logout;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
until(TimeFromMark(CurrentBTime)>(x+z));
Writeln('Logging in.');
OnScreen;
if ChangeWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(Member, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
SetAngle(True);
R_FindRandoms;
IncEx(BreakRounds, (w) + (x));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
end;
end;
end;
end;

Function NoAmmo: Boolean;
begin
Result := FindBlackChatMessage('no ammo');
end;

Begin

ScriptSetup(86,True,True,True);

Repeat

if (TimeFromMark(CommitTime)>=30000) then
Commit;
if (TimeFromMark(ScreenTime)>=5000) then
OnScreen;
BreakHandler(BreakIn,BreakFor,Bir,Bfr);

if NoAmmo then
begin
Writeln('Ran out of ammo!');
Report;
Logout;
TerminateScript;
end;

if not LoggedIn then LoginPlayer;

if AreaCheck('Castle') then
begin
CheckScreen;
ToLocation('Grave');
end
else if AreaCheck('Grave') then
ToLocation('Room1')
else if AreaCheck('Room1') then
ToLocation('Room2')
else if AreaCheck('Room2') then
ToLocation('Room3')
else if AreaCheck('Room3') then
ToLocation('Region')
else if AreaCheck('Region') then
Fight
else if (Not AreaCheck('Castle') And Not AreaCheck('Grave')
And Not AreaCheck('Room1') And Not AreaCheck('Room2')
And Not AreaCheck('Room3') And Not AreaCheck('Region')) then
begin
R_FindRandoms;
CheckScreen;
end;

Until(False);

End.

Also, why is your entire script indented by two spaces? :P

Nava2

2011-08-21 15:42:14

Double posting.. but I redid the walking. got it going:

{/////////////////////////////////////////
// ~Catacomber by Flight~ //
// //
// Version: 1.0 //
/////////////////////////////////////////}

program Catacomber;

{$define SMART}
{$i SRL/SRL.scar}
{$i SRL/SRL/skill/magic.scar}
{$i SRL/SRL/Misc/stats.simba}
{$i Reflection/Reflection.simba}
{$i SRL/SRL/misc/paintsmart.scar}


//////////////////////////////-Begin setup-/////////////////////////////////////

Const

//SRL Stats
SRLStats_Username = '';
SRLStats_Password = '';

//Script settings
FightRegion = 10;
ChangeWorlds = True;
Member = True;

//Break settings
BreakIn = 135; //How long before we take a break? (minutes)
BreakFor = 13; //How long will we break for? (minutes)
Bir = 12; //Random minutes to add/subtract from how long until we break
Bfr = 7; //Random minutes to add/subjtract from break duraction

//////////////////////////////-End of setup-////////////////////////////////////

Var
BreakImg: TMufasaBitmap;
targetName,Version: String;
lastFightTime: Integer;
lastInteractedTile,Stairs1_Down,Stairs2_Down,
Stairs_Enter,RTile: TTile;
Deaths,CommitTime,ScreenTime,NewImg: Integer;

//Break variables
BreakRounds,TotalBreaks: Integer;

//Exp variables
AttXP_Start,AttXP_Old,AttXP_New,StrXP_Start,
StrXP_Old,StrXP_New,DefXP_Start,DefXP_Old,
DefXP_New,HitXP_Start,HitXP_Old,HitXP_New,
RngXP_Start,RngXP_Old,RngXP_New: Integer;

Procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '';
Pass := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'hitpoints';
Active := True;
end;
end;

Procedure CheckStats;
begin
if ((SRLStats_Username = '') And (SRLStats_Password = '')) then
begin
case MessageBox('No Stats account entered, would you like to set one up?','SRL Stats',mbYesNoCancel) of
mrYes:
begin
OpenWebPage('http://stats.villavu.com/register');
TerminateScript;
end;
mrNo:
begin
SetupSRLStats(165,'Anonymous','anon1337');
Exit;
end;
mrCancel: TerminateScript;
end;
end else
SetupSRLStats(165,SRLStats_Username,SRLStats_Password);
end;

type
TArea = record
Region: TBox;
DAnim: TIntegerArray;
targetName: String;
RTile: TTile;
fightArea: Boolean;
end;

TAreaArray = array of TArea;

var
currentArea: TArea;
Areas: TAreaArray;

Procedure DefineAreas;
Var
Zone: Integer;
begin
Zone := FightRegion;

setLength(Areas, 15);

// lumbridge:
with Areas[0] do
begin
Region := IntToBox(3217,3210,3226,3228);
fightArea := False;
end;

// grave:
with Areas[1] do
begin
Region := intToBox(3238, 3191, 3251, 3203);
fightArea := False;
end;

// room 1:
with Areas[2] do
begin
Region := intToBox(3875,5526,3879,5529);
fightArea := False;
end;

with Areas[3] do
begin
Region := intToBox(3863,5522,3869,5526);
fightArea := False;
end;

with Areas[4] do
begin
Region := intToBox(3970,5560,3974,5565);
fightArea := False;
end;

// region 1:
with Areas[5] do
begin
DAnim := [8878, 8878];
targetName := 'Warped cockroach';
RTile := Point(3972,5553);
Region := intToBox(3969,5550,3977,5557);
fightArea := True;
end;

with Areas[6] do
begin
DAnim := [12896,12896]
targetName := 'Corpse Spider';

RTile := Point(3986,5553);
Region := intToBox(3978, 5550, 3994, 5556);
fightArea := True;
end;

with Areas[7] do
begin
DAnim := [7244, 7244];
targetName := 'Warped fly';

RTile := Point(3995,5543);
Region.X1 := 3987;
Region.Y1 := 5539;
Region.X2 := 4003;
Region.Y2 := 5547;
fightArea := True;
end;

with Areas[8] do
begin
DAnim := [12893, 12893];
targetName := 'Crawling corpse torso';

RTile := Point(4010,5544);
Region.X1 := 4004;
Region.Y1 := 5542;
Region.X2 := 4015;
Region.Y2 := 5546;
fightArea := True;
end;

with Areas[9] do
begin
DAnim := [14860, 14860];
targetName := 'Warped rat';

RTile := Point(4023,5544);
Region.X1 := 4016;
Region.Y1 := 5538;
Region.X2 := 4029;
Region.Y2 := 5548;
fightArea := True;
end;

with Areas[10] do
begin
DAnim := [12869, 12870];
targetName := 'Skeleton';

RTile := Point(4024,5530);
Region.X1 := 4019;
Region.Y1 := 5523;
Region.X2 := 4028;
Region.Y2 := 5537;
fightArea := True;
end;

with Areas[11] do
begin
DAnim := [4917, 4917];
targetName := 'Warped bat';

RTile := Point(4020,5515);
Region.X1 := 4011;
Region.Y1 := 5504;
Region.X2 := 4027;
Region.Y2 := 5520;
fightArea := True;
end;

with Areas[12] do
begin
DAnim := [12869, 12870];
targetName := 'Corpse archer';

RTile := Point(4017,5496);
Region.X1 := 4009;
Region.Y1 := 5489;
Region.X2 := 4021;
Region.Y2 := 5502;
fightArea := True;
end;

with Areas[13] do
begin
DAnim := [6182, 6282];
targetName := 'Skoblin';

RTile := Point(4000,5495);
Region.X1 := 3992;
Region.Y1 := 5492;
Region.X2 := 4009;
Region.Y2 := 5499;
fightArea := True;
end;

with Areas[14] do
begin
DAnim := [12869, 12870];
targetName := 'Corpse mage';

RTile := Point(3995,5481);
Region.X1 := 3988;
Region.Y1 := 5475;
Region.X2 := 4002;
Region.Y2 := 5489;
fightArea := True;
end;

currentArea := Areas[zone+4];
end;

{Skeleton by Brak, re-written with bitmaps, yay!}
Procedure TurnAidOff;
Var
x,y,BMP: Integer;
begin
BMP := BitmapFromString(9, 8, 'meJyTkqmSkWuUkqkSl8yWArORuRAR' +
'eaUeCBuCgFy4GknpYggbohLIBcoyMjDgQd0z5gNRdueS8Kwy7+Ri+' +
'9iK0JScv//+wRHDXk4g4pohCEQZx1GkgFxkWWQpNI0AjLpP/A==');
setbitmapname(BMP,'AidButton'); //Don't laugh

if TabExists(tab_Options) then
if GameTab(tab_Options) then
begin
if FindBitmapIn(BMP,x,y,570,410,605,450) then
begin
MMouse(x,y,5,5);
Wait(Random(100));
if WaitUpTextMulti(['oggle', 'ccep', 'cept', ' Aid'], 500) then
begin
GetMousePos(x,y);
Mouse(x,y,0,0,True);
Wait(RandomRange(150,250));
Exit;
end;
end;
end;
Gametab(tab_Inv);
FreeBitmap(BMP);
end;

Procedure LoadVars;
Var
tempPic: TMufasaBitmap;
begin
Retaliate(True);
TurnAidOff;
Version := '1.0';
MarkTime(CommitTime);
MarkTime(ScreenTime);
MouseSpeed := RandomRange(17,20);

AttXp_Start := R_GetSkillExp(SKILL_ATTACK);
StrXp_Start := R_GetSkillExp(SKILL_STRENGTH);
DefXp_Start := R_GetSkillExp(SKILL_DEFENCE);
HitXp_Start := R_GetSkillExp(SKILL_HITPOINTS);
RngXp_Start := R_GetSkillExp(SKILL_RANGE);
AttXp_Old := R_GetSkillExp(SKILL_ATTACK);
StrXp_Old := R_GetSkillExp(SKILL_STRENGTH);
DefXp_Old := R_GetSkillExp(SKILL_DEFENCE);
HitXp_Old := R_GetSkillExp(SKILL_HITPOINTS);
RngXp_Old := R_GetSkillExp(SKILL_RANGE);

Stairs_Enter := Point(3248,3198);
Stairs1_Down := Point(3874,5527);
Stairs2_Down := Point(3867,5524);

DefineAreas;

NewImg := BitmapFromString(311, 49, 'meJztnXdcFNf6/1M01auJ0Rg7X' +
'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' +
'19LSjL4WKie3+XHFTQvMzslJx96erKujYGVBAEilpTf20DdIWUVpZ' +
'LR3cOhJwAU7IHRktCsvL/P9cTMgFJxUl7JhSD9ZuRMqIiPNIyPDAx' +
'Gvu5sRK8tBAoEhM4WOTSaTUlJu5eTeSk0Nb2spe/y41MCA8vY2kPG' +
'hVCQUFSCcliqvyAAzJWmqMH4RgCy+/EHhi4XJZ/OjYKa9vfWrkK7l' +
'pMFxty+mp4drqMkBpyKiaz5+Ky4uhEJJQrlfmgTOC5yqoD7Yi18zM' +
'69ATlpYeEtVVRIgNaDrL/EJwSkpoeXlqWiMDE2OAi6e9j9vX1l5B4' +
'tDbBxSl6KirUGafY0KqbgojflyiorSOKwMDittZIgNDXHh5WXWZmx' +
'JMeg5AGZGRkJpaXLeveu93dVdnZVGRnobbeEHkclJvLkZnoCXzM27' +
'vTp2dOCng4xOitu5c4fnGffJycGJ8V7w0IrK7JmZ4ba2BppDZ4GXH' +
'KGQNZHNzaUQ6zIe7n6yesbk5UXlEHwS4pzNTSVqBBngFINRom8uEM' +
'UVFuXOTA8+fdrU2lI2Otr54tnE6Gj3+3PXhYR45eQE5GT5UtPCzUz' +
'wHBxHKBQ8I3Oqoaq6usrnz8YeN5fAmUTKCTrY6Tx+fH/1Rd40IAUb' +
'jQj3eFR1F4+T0dfHfPcdvSW18Th5DEZKVUX81at5cTFuSFQ/1FTSl' +
'NTQhITLV696B146vWqmHHAy19o4MtI7JsYvNSVURwdFc2zH0krXzl' +
'731ClDT08LQ6ONQer/BlKzTUKanb3qpIY4MVqQfvbZp2p4eQJeFnK' +
'Hof5GSE5Xc3z0ej2H6f79/IXnY2OjT3p7qqen+14uTU9NPmVnp3H7' +
'Q1lZoa+35cYNP309VWNDPI7WUkvKSgo93c1RV89qkxX09TDvL5vzy' +
'Wo42tFRHxbqSlKXpWgpo9G/j7pTdNEG+ioA6dTUIEAKRUUF8X4N7x' +
'37Z1gcpqyscHZmuK+vycBAtbAwEQhtb2tgZmaiuYu3t/kZTxMcVqK' +
'7u56L8wiUdb/lbe3atUseKSwrwwNBb0truZMjhYvzqLY2hoWVxiPG' +
'8BOYmBiPjvbNza2sof382fjTp43z8/Bh4qyXB836lZWl5OUFZWV4q' +
'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' +
'3wWJk5OX4rMzwoyNPIPmqrS15fxuUiqSsNJepEWpooBUCv6pHBW/+' +
'tGPHDikJbgtzQlJqeMadqMzMqMyMlf+mpkempEWkpV9JSYtMTAqLS' +
'wiNjb0cGubr7eNiamZAJ1lbS/BF0tIiFB1UatrV5KTYLS7gA0mxoB' +
'Avkajk4EDx9jIPD3NPSAzOyorOK7gNTNXXFzQ0luTmJlnbmG3iXfO' +
'QxSgryxro486eNQsJcUlJCS0qSayty2tvr+jqqEpOvo7FoXau8S4M' +
'+jp85BCZjEpODr9x4yrjhggWTySqXLjgWFCQ5uzs+EHeynfgwI8UC' +
'sHOlhIRcaa7pwo4jYujfdn89ttvtbXQGRk3zMxO/iMmu9IXHIKoqK' +
'CeHuGctxXERYkJl/LzYsvLkh89ygRIOzsednU9KinJsLe3PHyYobF' +
'Nbm4OElE++qpXSXFazLUQmtcKLi52Al46IsytID8x6mqQAD+NITJO' +
'TjYsWiI40Ole7u0rkYH8tLb5h2rHjs9ZWJgkJEVQaAUNEk6diFVBK' +
'YqKCa/1BocN6cCB/fCDKiohSJoEEokA+eAeuuOx/zgdPPSTvLyMtg' +
'5RW5v0Qc7YP0jgGmxszDIy4ni8iraOuiZZDYNRFpcQYWRhq79G/w+' +
'LKQil');

//Procedures taken from Iamadam's StrongHolder
tempPic := GetMufasaBitmap(NewImg);
BreakImg := TMufasaBitmap.create;
BreakImg.SetSize(tempPic.Width, tempPic.Height);
tempPic.FastDrawTransparent(0, 0, BreakImg);

end;

//Procedures taken from Iamadam's StrongHolder
Procedure BreakScreen;
Var
Canvas: TCanvas;
begin
Wait(500);
try
SmartSetDebug(True);
Canvas := TCanvas.Create;
Canvas.Handle := SmartGetDebugDC;
ClearRSCanvas(Canvas);
BreakImg.DrawToCanvas(235,200,Canvas);
except
writeln('error...');
end;
end;

Procedure Report;
Var
ExpA,ExpS,ExpD,ExpC,ExpR: Integer;
begin
ClearDebug;
ExpA := R_GetSkillExp(SKILL_ATTACK) - AttXp_Start;
ExpS := R_GetSkillExp(SKILL_STRENGTH) - StrXp_Start;
ExpD := R_GetSkillExp(SKILL_DEFENCE) - DefXp_Start;
ExpC := R_GetSkillExp(SKILL_HITPOINTS) - HitXp_Start;
ExpR := R_GetSkillExp(SKILL_RANGE) - RngXp_Start;

WriteLn('=-=-=-=-=-= Catacomber '+Version+' by Flight =-=-=-=-=-=');
WriteLn('Time Running: '+TimeRunning);
WriteLn('Attack XP: '+IntToStr(ExpA));
WriteLn('Strength XP: '+IntToStr(ExpS));
WriteLn('Defence XP: '+IntToStr(ExpD));
WriteLn('Constitution XP: '+IntToStr(ExpC));
WriteLn('Ranged XP: '+IntToStr(ExpR));
WriteLn('Deaths: '+IntToStr(Deaths));
//WriteLn('Breaks: '+IntToStr(TotalBreaks));
WriteLn('=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=');
end;

Procedure PrintOnSmart(TP: TStringArray; Placement: TPoint; Colour: integer);
var
mx, my, Pic, I, B, H, TPH, Numb: Integer;
TTP: TPointArray;
Canvas: TCanvas;
begin
SmartSetDebug(True);
GetClientDimensions(mx, my);
Pic := BitmapFromString(mx, my, '');
TPH := High(TP);
for I := 0 to TPH do
begin
TTP := LoadTextTPA(TP[i], SmallChars, H);
for B := 0 to High(TTP) do
begin
Numb := ((I + 1) * 13);
FastSetPixel(Pic, TTP[b].x + 1, TTP[b].y + Numb + 1,131072);
FastSetPixel(Pic, TTP[b].x, TTP[b].y + Numb, Colour);
end;
end;
Canvas := TCANVAS.Create;
Canvas.Handle := SmartGetDebugDC;
DrawBitmap(Pic, Canvas, Placement.x, Placement.y);
FreeBitmap(Pic);
end;

Procedure OnScreen;
Var
ExpA,ExpS,ExpD,
ExpH,ExpR,XPH_A,XPH_S,
XPH_D,XPH_H,XPH_R: Integer;
begin
ExpA := R_GetSkillExp(SKILL_ATTACK) - AttXp_Start;
ExpS := R_GetSkillExp(SKILL_STRENGTH) - StrXp_Start;
ExpD := R_GetSkillExp(SKILL_DEFENCE) - DefXp_Start;
ExpH := R_GetSkillExp(SKILL_HITPOINTS) - HitXp_Start;
ExpR := R_GetSkillExp(SKILL_RANGE) - RngXp_Start;

XPH_A := Round((ExpA * 3600) / (GetTimeRunning / 1000));
XPH_S := Round((ExpS * 3600) / (GetTimeRunning / 1000));
XPH_D := Round((ExpD * 3600) / (GetTimeRunning / 1000));
XPH_H := Round((ExpH * 3600) / (GetTimeRunning / 1000));
XPH_R := Round((ExpR * 3600) / (GetTimeRunning / 1000));

PrintOnSmart(['~Catacomber '+Version+' (by Flight)~'],Point(15,30),3716227);
PrintOnSmart([''+TimeRunning,'Attack XP: '+IntToStr(ExpA)+' ('+IntToStr(XPH_A)+' XP/Hour)',
'Strength XP: '+IntToStr(ExpS)+' ('+IntToStr(XPH_S)+' XP/Hour)',
'Defence XP: '+IntToStr(ExpD)+' ('+IntToStr(XPH_D)+' XP/Hour)',
'Hitpoints XP: '+IntToStr(ExpH)+' ('+IntToStr(XPH_H)+' XP/Hour)',
'Ranged XP: '+IntToStr(ExpR)+' ('+IntToStr(XPH_R)+' XP/Hour)',
'Deaths: '+IntToStr(Deaths)],Point(20,60),15856381);

MarkTime(ScreenTime);
end;

Procedure Commit;
begin

AttXp_New := R_GetSkillExp(SKILL_ATTACK);
StrXp_New := R_GetSkillExp(SKILL_STRENGTH);
DefXp_New := R_GetSkillExp(SKILL_DEFENCE);
HitXp_New := R_GetSkillExp(SKILL_HITPOINTS);
RngXp_New := R_GetSkillExp(SKILL_RANGE);

stats_IncVariable('Attack EXP (Gained)',(AttXp_New-AttXp_Old));
stats_IncVariable('Strength EXP (Gained)',(StrXp_New-StrXp_Old));
stats_IncVariable('Defence EXP (Gained)',(DefXp_New-DefXp_Old));
stats_IncVariable('Hitpoints EXP (Gained)',(HitXp_New-HitXp_Old));
stats_IncVariable('Ranged EXP (Gained)',(RngXp_New-RngXp_Old));
Stats_Commit;

AttXp_Old := AttXp_New;
StrXp_Old := StrXp_New;
DefXp_Old := DefXp_New;
HitXp_Old := HitXp_New;
RngXp_Old := RngXp_New;

Report;
MarkTime(CommitTime);

end;

Procedure ScriptSetup(World:Integer;Signed,Clear,SetCam:Boolean);
Begin

AddOnTerminate('Report');

Smart_Server := World;
Smart_Members := Member;
Smart_Signed := Signed;
Smart_SuperDetail := False;

SetupSRL;
DeclarePlayers;
CheckStats;
R_UpdateHooks;

if Clear then
ClearDebug;
LogInPlayer;
if SetCam then
SetAngle(true);

LoadVars;
OnScreen;

End;

Procedure humanWait(time : Integer);
begin
wait(time + random(time) + random(random(time)));
end;

Function DeathScreen: Boolean;
begin
Result := R_ValidInterface(18);
end;

Function R_ClickItem_F(Slot: Integer; Action1, Action2: String): Boolean;
var
InterfaceID, X, Y: Integer;
Item: TInterfaceComponent;
begin
Result := False;
InterfaceID := R_GetInventoryInterfaceIndex;
if InterfaceID = NULL_INT then
begin
R_Debug('The Inventory interface doesn''t exist!', '');
Exit;
end;
if InterfaceID = INTERFACE_INVENTORY then
begin
R_GameTab(RTAB_INVENTORY);
end;

Item := R_GetInterfaceComponent(InterfaceID, 0, Slot-1);
if(Item.ID <= 0)then
Exit;

R_ClickInterface(Item, 3);
GetMousePos(X, Y);
wait(125+Random(55));

if(IsUpText(Action1) Or IsUpText(Action2))then
begin
Mouse(X, Y, 0, 0, True);
Result := True;
end;
end;

Function R_WindWalk_F(T: TTile): Boolean;
Var
I, Tries: Integer;
M, P: TPoint;
CTRLPoints: TPointArray;
begin
P := T;
repeat
M := R_GetMyPos;
CtrlPoints := R_WindPath(M.x, M.y, P.X, P.Y, 5.0, 2.5, 0.0, 0.0, 4.5, 2.5);
Inc(Tries);
if(Tries > 20)then
begin
R_Debug('Failed more than 20 times', 'R_WindWalk');
R_FindRandoms;
if Cast('lumbridge home teleport', False) then
Wait(RandomRange(9500,1175));
Exit;
end;
for I:= High(CtrlPoints) downto 0 do
if R_WalkToTile(CtrlPoints[i],0, 10) then
begin
Result := I = High(CtrlPoints);
Break;
end;
until(Result);
end;

Function inArea(Area : TBox) : boolean;
begin
result := PointInBox(R_GetMyPos, Area);
end;

function atTile(location: TTile; name, action : TStringArray; height, randomness : Integer) : boolean;
var
tilePoint : TPoint;
begin
result := False;
tilePoint := R_tileToMs(location, height);
MMouse(tilePoint.x, tilePoint.y, randomness, randomness);
wait(100);
if(IsUpTextMultiCustom(name) Or IsUpTextMultiCustom(action)) then
begin
ClickMouse2(True);
if DidRedClick then
result := True
else
result := False;
end else if(isUpText('options')) then
begin
clickMouse2(False);
if ChooseOptionMulti(action) then
result := True;
end;
end;

Procedure Fight;
Var
inFightWith : TNPC;
npcs : TNPCArray;
index : Integer;
begin
if(R_AreWeInteracting(InFightWith, False) and (getSystemTime - lastFightTime < 1000 * 60)) then
begin
lastInteractedTile := inFightWith.tile;
humanWait(1000);
exit;
end;

npcs := R_SortNPCs(R_GetNPCs(currentArea.targetName, false));
if(GetArrayLength(npcs) = 0) then
begin
humanwait(500);
Exit;
end;

for index := 0 to high(npcs) do
begin
if((npcs[index].Interacting = -1)
and not((npcs[index].Tile = lastInteractedTile))
and not (inIntArray(currentArea.DAnim, npcs[index].Animation))) then
begin
lastInteractedTile := npcs[index].tile;
if(not R_tileOnMS(npcs[index].Tile, 0)) then
exit;
if(atTile(npcs[index].Tile, [currentArea.targetName], ['Attack'], 300, 5)) then
begin

case (Random(4)) of
1: MakeCompass('Random');
end;

lastFightTime := GetSystemTime;
humanWait(2000);
end;
break;
end;
end;
end;

Function AreaCheck(Where: String): Boolean;
begin
Result := False;

Case LowerCase(Where) of

'castle' : Result := inArea(Areas[0].region);

'grave' : Result := inArea(Areas[1].region);

'room1' : Result := inArea(Areas[2].region);

'room2' : Result := inArea(Areas[3].region);

'room3' : Result := inArea(Areas[4].region);

'region' : Result := inArea(currentArea.region);

end;
end;

// nava2
function FindTileOnPath(var Index: integer; Path: TTileArray; P: TTile; MaxDist: Integer): Boolean;
var {Find the closest tile in a path within MaxDist}
I, H, DistC, DistS, T: integer;
begin
T := GetTimeRunning;
H := High(Path);
Index := -1;
if (H < 0) then Exit;

DistS := Distance(P.x, P.y, Path[0].x, Path[0].y); //Distance from Current Tile

for I := 0 to H do //Looks for the Closest Tile
begin
DistC := Distance(P.x, P.y, Path[I].x, Path[I].y);
if DistC <= DistS then
begin
DistS := DistC;
Index := I;
end;
end;

Result := DistS <= MaxDist;
if not Result then Index := -1;
WriteLn('FindTileOnPath: Index = ' + IntToStr(Index) + ' Time: ' + IntToStr(GetTimeRunning - T) + ' ms');
end;

// nava2
function WalkToRoom(zone: Integer): Boolean;
var
i, t: Integer;
p: TTileArray;
begin
setLength(p, zone);
for i := 1 to zone do
p[i-1] := Areas[4+i].RTile;

writeln('path: ' + toStr(p));
writeln('Area tile: ' + toStr(currentArea.RTile));

FindTileOnPath(t, p, R_getMyPos, 7);
for i := t+1 to zone-1 do
if (not R_WindWalk_F(p[i])) then
break;
result := AreaCheck('region');
end;

Procedure ToLocation(Where: String);
Var
T1,T2,T3,T4: Integer;
begin

RunEnergy(50);

Case LowerCase(Where) of

'grave':
begin
R_WindWalk_F(Point(3246,3198));
Wait(RandomRange(1215,1325));
While R_Moving do
Wait(1);
end;

'room1':
begin
if(Not R_TileOnMS(Stairs_Enter,100)) then
begin
R_WalkToTile(Point(3246,3198),1,1);
SetAngle(True);
While R_Moving do
Wait(1);
end;
if atTile(Stairs_Enter, ['Catacomb','entrance'], ['limb','-down'], 100, 15) then
begin
Wait(RandomRange(355,525));
While R_Moving do
Wait(1);

MarkTime(T1);
repeat
if (AreaCheck('Room1') Or (TimeFromMark(T1) > 5000)) then
Exit;
until (False)

end;
end;

'room2':
begin
if atTile(Stairs1_Down, ['Stairs'], ['limb','-down'], 100, 15) then
begin
Wait(RandomRange(355,525));
While R_Moving do
Wait(1);

MarkTime(T2);
repeat
if (AreaCheck('Room2') Or (TimeFromMark(T2) > 5000)) then
Exit;
until (False)

end;
end;

'room3':
begin
if atTile(Stairs2_Down, ['Stairs'], ['limb','-down'], 100, 15) then
begin
Wait(RandomRange(355,525));
While R_Moving do
Wait(1);

MarkTime(T3);
repeat
if (AreaCheck('Room3') Or (TimeFromMark(T3) > 5000)) then
Exit;
until (False)

end;
end;

'region':
begin
WalkToRoom(FightRegion);
Wait(RandomRange(355,525));
while R_Moving do
Wait(16);

MarkTime(T4);
repeat
if (AreaCheck('Region') Or (TimeFromMark(T4) > 5000)) then
Exit;
until (False);

end;

end;
end;

Procedure CheckScreen;
Var
T,I: Integer;
S: TInterfaceChild;
Items,Items2: TInvItemArray;
begin
if DeathScreen then
begin
Inc(Deaths);
MarkTime(T);
Repeat

if(TimeFromMark(T) > 5000)then
Break;

S := R_GetInterfaceChild(18, 36);
R_ClickInterface(S, 1);


if Not DeathScreen then
Break;

Until(False)

end;

Wait(RandomRange(4375,5350));
Gametab(tab_Inv);
Wait(RandomRange(575,780));

if R_ItemExistsEx([
'scimitar','blade','sling','Sling','shortbow',
'helm','platebody','kiteshield','defender','hide',
'Amulet of','bracelet'],Items) then
begin
if(GetArrayLength(Items) = 0) then
begin
humanwait(500);
Exit;
end;

For I := 0 to high(Items) do
begin
R_ClickItem_F(Items[I].Slot,'Wear','Wield');
Wait(RandomRange(1150,1350));
end;
end;

Wait(RandomRange(575,780));

if R_ItemExistsEx([
'scimitar','blade','sling','Sling','shortbow',
'helm','platebody','kiteshield','defender','hide',
'Amulet of','bracelet'],Items2) then
begin
if(GetArrayLength(Items2) = 0) then
begin
humanwait(500);
Exit;
end;

For I := 0 to high(Items2) do
begin
R_ClickItem_F(Items2[I].Slot,'Wear','Wield');
Wait(RandomRange(1150,1350));
end;
end;

SetAngle(True);
ToLocation('Grave');

end;

Function BreakHandler(BreakIn, BreakFor, randBreakIn, randBreakFor: Integer): Boolean;
Var
w,x,y,z,h,m,s,
RealBTime,
CurrentBTime: integer;
NPC: TNPC;
begin
if not LoggedIn then Exit;

w := (BreakIn * 60000);
x := (BreakFor * 60000);
y := RandomRange(-randBreakIn * 60000, randBreakIn * 60000);
z := RandomRange(-randBreakFor * 60000, randBreakFor * 60000);

if (HowManyPlayers = 1) then
begin
if (GetTimeRunning < ((w) + (y) + BreakRounds)) then Exit
else
if (GetTimeRunning > ((w) + (y) + BreakRounds)) then
begin
if R_AreWeInteracting(NPC, False) then
Wait(RandomRange(4750,7535))
else
begin
Repeat

R_FindRandoms;
Logout;
Wait(RandomRange(435,675));
if Not LoggedIn then
break;

Until(False)

BreakScreen;
RealBTime := ((x+z)/60000);
Writeln('Taking a break for about ' + IntToStr(RealBTime) + ' minutes.');
Logout;
MarkTime(CurrentBTime);
repeat
Wait(21000);
ConvertTime((x+z)-TimeFromMark(CurrentBTime), h, m, s);
ClearDebug;
Writeln('Breaktime left: '+IntToStr(h)+':'+IntToStr(m)+':'+IntToStr(s));
until(TimeFromMark(CurrentBTime)>(x+z));
Writeln('Logging in.');
OnScreen;
if ChangeWorlds then
if LoginPlayerToLob then
ChangeWorld(RandomWorld(Member, False))
else
LoginPlayer;
Wait(4000);
Result := LoggedIn;
SetAngle(True);
R_FindRandoms;
IncEx(BreakRounds, (w) + (x));
Inc(TotalBreaks);
Writeln('The next break will occur in about ' + IntToStr(BreakIn) + ' minutes.');
end;
end;
end;
end;

Function NoAmmo: Boolean;
begin
Result := FindBlackChatMessage('no ammo');
end;

Begin

ScriptSetup(86,True,True,True);

Repeat

if (TimeFromMark(CommitTime)>=30000) then
Commit;
if (TimeFromMark(ScreenTime)>=5000) then
OnScreen;
BreakHandler(BreakIn,BreakFor,Bir,Bfr);

if NoAmmo then
begin
Writeln('Ran out of ammo!');
Report;
Logout;
TerminateScript;
end;

if not LoggedIn then LoginPlayer;

if AreaCheck('Castle') then
begin
CheckScreen;
ToLocation('Grave');
end
else if AreaCheck('Grave') then
ToLocation('Room1')
else if AreaCheck('Room1') then
ToLocation('Room2')
else if AreaCheck('Room2') then
ToLocation('Room3')
else if AreaCheck('Room3') then
ToLocation('Region')
else if AreaCheck('Region') then
Fight
else if (Not AreaCheck('Castle') And Not AreaCheck('Grave')
And Not AreaCheck('Room1') And Not AreaCheck('Room2')
And Not AreaCheck('Room3') And Not AreaCheck('Region')) then
begin
R_FindRandoms;
CheckScreen;
end;

Until(False);

End.

KingKong

2011-08-21 18:19:54

From: Flight
That's really awesome of you to offer help. :) But I brainstormed a basic idea/skeleton mentally already and I'm gonna give it a shot and see how it turns out. But if I do happen to get stuck somewhere, you'll be the first to know. :p

@Bolshak25:
Thanks for the test dummies, I will warn you now though, the quest gives 100 xp to all combat skills (excluding constitution) so you might gain a couple levels, I hope this is okay. I should only need 1 account for coding, 1/2 accounts for testing.


Edit:
Well, I misunderstood you, Mormonman, as I thought you meant the tiles were dynamic to the quest <> finished quest, when actually they are, infact, dynamic to the player. I can do this but agh… it's gonna be tough and take a long time to do. I luffs, if you're still interested I can give you what I have and you could take over. I've done all the Quest-Starting and killing Kayle. But that last part will have to have slight edit, because I have it set to webwalk to a static tile (Kayle's tile) and do the fighting. Let me know if you're interested, because like I said, if people really want the quest done I can do it, but I'm reluctant to do so.[/QUOTE

If you're still having problems let me know, i like making questing scripts, they're quite challenging and fun, and i have some free time this week and next week.

mormonman

2011-08-21 18:30:23

Just search for Kayle and everyother object/npc.

Nava2

2011-08-21 18:58:21

Once you have a reference point (AKA Kayle's tile), everything else would be relative to it.

Its how PC was done all those times.

mormonman

2011-08-21 19:02:58

From: Nava2
Once you have a reference point (AKA Kayle's tile), everything else would be relative to it.

Its how PC was done all those times.


The thing is, you could do the whole quest without ever using static points.

Nava2

2011-08-21 19:11:44

From: mormonman
The thing is, you could do the whole quest without ever using static points.


Yup, I'm just giving suggestions for speed. :)

Also:

=-=-=-=-=-= Catacomber 1.0 by Flight =-=-=-=-=-=
Time Running: 3 Hours, 29 Minutes and 8 Seconds
Attack XP: 0
Strength XP: 61948
Defence XP: 0
Constitution XP: 21277
Ranged XP: 0
Deaths: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
This was my version btw.

Flight

2011-08-21 20:27:35

From: mormonman
The thing is, you could do the whole quest without ever using static points.


Yes, but I could use local tiles instead, those will still remain static to every player. I always prefer searching for tiles as opposed to NPCs/Objects.

Very nice work Nava2, I'll definitely use your final revision and do a little editing here and there, as I think there's a couple things I could improve on my part. What you did with the regions and room walking looks top-notch. :)

"IntToBox"…. Why didn't I think of that? :( It's embarrassing spending so much time to try and make things as neat as possible, then someone comes along and gets the same result for a fraction of the lines. Also, about the 2-line indention, that's just my signature style. :p

bolshak25

2011-08-22 11:16:29

=-=-=-=-=-= Catacomber 1.0 by Flight =-=-=-=-=-=
Time Running: 15 Hours, 19 Minutes and 9 Seconds
Attack XP: 0
Strength XP: 132469
Defence XP: 0
Constitution XP: 44156
Ranged XP: 0
Deaths: 14
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Do i win longest? Oh and its still going

Flight

2011-08-22 11:25:07

Lol bolshak25, that's great! I think you'll like V1.1. The path-generating was re-done, and wonderfully I might add, by Nava2. He also cleaned up my sloppy box regions. On top of that, I threw in Home's AdjustTile, sped of fighting slightly (and I noticed an approx. increase of 21-25% in XP/Hour), and added what should prove to be a more stable way of lost detection and home teleporting. I think I'll just put the quest part of the script on hold and release V.1.1 as it is now.

bolshak25

2011-08-22 11:34:45

Speaking of lost detection, you should add a wait in the walking, because when it goes from dead to the catacombs, sometimes itll tele home when its right there because it failed to walk 20 times. small wait should fix it because itll be called 20 times. and maybe have it write your levels on smart? because tight now id love to know my str lvl and hp

Flight

2011-08-22 12:02:48

Lol just disable smart, check your stats, and re-enable it. It shouldn't effect the script. You're bound to have some really high levels now.

Also, since I decided against finishing the quest portion, you can do whatever you want with those first 2 accounts of the list you sent me, I obviously won't be needing them. It's only the first 2 that I used, and they're both at the same stage of the script, go ahead and finish it on them if you'd like.

bolshak25

2011-08-22 12:08:22

i just hit 57 str and 49 hp. loving the script. ill probably finish with them then have them start abusing this script as well

Harry

2011-08-27 14:06:18

plsplsplsplspls add those features I suggested so I can run this on my huge army :(

Flight

2011-08-27 20:59:20

From: Harry
plsplsplsplspls add those features I suggested so I can run this on my huge army :(


Yeah I think I'm gonna pass on the quest part. I'm taking a small break from scripting at the moment, and when that's over I have a bigger project on my hands, I'm sorry Harry.

Although in the newest version I did add the procedure to start the quest (all the talking, ect..), it's included in the script, so if you'd like to take it from there then by all means do so.

Harry

2011-08-27 23:47:54

You underestimate my laziness :( Oh well.

tarajunky

2011-08-28 15:58:00

Do any of these monsters drop stackable items worth collecting?

bolshak25

2011-08-28 16:03:34

runes, bronze arrows, fishing bait, and feathers are about it

kanah

2011-08-28 18:48:47

*"dieing" should be dying

Love the concept; I'd been using the fast fighter at the skoblins for a while. Good job Rep++.

FEAR

2011-08-30 13:32:03

Hey nice script. I love the efficient combat system. But I noticed some minor problems that you could fix for the next update.

- If your character dies, when it respawns it can't re-equip the items because the uptext is not clearly visible sometimes due to adbots spamming websites. The mouse just keeps hovering on the equipment. This can be solved by equipping the items inside the catacomb.

- It randomly picks up items, probably due to misclicks. If it picks up weapons, it falls into an endless loop trying to equip them. For example, I was training with kayle's sling. It randomly picked up an oak shortbow. After I died, it equipped the shortbow and the sling went in the inventory. Then it re-equipped the sling and the shortbow went in the inventory, this went on in a endless loop. Luckily I was there to drop the shortbow. That's very bannable if someone stands in one place for hours equipping and re-equipping items. You should add a failsafe there. Maybe have it check inventory randomly and drop any items that might be there.

Again you have a very nice script. Wish there were higher level monsters though…;)

Edit: Also it will be fantastic if make the script pick up arrows and equip them (if they are the same as the equiped arrows).

Edit2: Two nice proggies ;)

=-=-=-=-=-= Catacomber 1.1 by Flight =-=-=-=-=-=
Time Running: 5 Hours, 9 Minutes and 27 Seconds
Attack XP: 0
Strength XP: 0
Defence XP: 0
Constitution XP: 22817
Ranged XP: 69087
Deaths: 0
Breaks: 2
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

=-=-=-=-=-= Catacomber 1.1 by Flight =-=-=-=-=-=
Time Running: 8 Hours, 1 Minutes and 45 Seconds
Attack XP: 0
Strength XP: 127510
Defence XP: 0
Constitution XP: 42281
Ranged XP: 0
Deaths: 0
Breaks: 3
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Flight

2011-09-01 03:01:38

Nice reports there, FEAR.

Yes about the misclicking and picking up items I noticed it as well. I made some proto-type junk-dropper for it. I made it right before I left a few days back so I don't remember if it was successful or not.

I think I could do a new version (if the junk-dropper works ok) with optional stackables collecting.

FEAR

2011-09-01 09:38:11

From: Flight
Nice reports there, FEAR.

Yes about the misclicking and picking up items I noticed it as well. I made some proto-type junk-dropper for it. I made it right before I left a few days back so I don't remember if it was successful or not.

I think I could do a new version (if the junk-dropper works ok) with optional stackables collecting.


And equipping the arrows which can be set by the user. That will make the scrip run longer for rangers. Also could you make the FightRegion selection for individual players? I have a lot of accounts with very different combat levels so it would be great if I could select which part of the catacomb each account will go to.

Flight

2011-09-01 09:47:32

Yep I can make it multiplayer, but I just can't test it.

FEAR

2011-09-01 16:07:33

I can test it for you if you want :)

sf411

2011-09-13 12:51:57

Keeps trying to fight while already in a fight.

E: Fighting in Room 2, btw.

Bixby Sayz

2011-09-13 13:34:09

From: sf411
Keeps trying to fight while already in a fight.

I had the same issue. Gets enemy down to 1/2 or so then tries to move on to next kill. Repeatedly.

bolshak25

2011-09-13 16:12:22

i was wondering if you can add lvls to stop at. so train attack until >= 40 and where we can pick the levels to train up to

Mr. Bottomtooth

2011-09-13 19:03:58

=-=-=-=-=-= Catacomber 1.0 by Flight =-=-=-=-=-=
Time Running: 2 Hours, 13 Minutes and 58 Seconds
Attack XP: 14905
Strength XP: 0
Defence XP: 0
Constitution XP: 4968
Ranged XP: 0
Deaths: 0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Just leveling my guys so they can equipt rune tools. Runs smooth. :) Manually stopped.

ry0240

2011-09-13 23:09:10

Hey, I'm testing you your script now, howcome everytime I try to add more than 1 player it still just thinks it is 1 and goes to the last player.

Edit- If it accidently clicks a grave, it doesnt realize and just continues to look for the NPC's and it doesnt seem to know when its in a fight and just continues to attack diffrent NPC's every few seconds while its still in a fight.

Edit-Ok, do you know if I'm setting it up wrong for multiplayer's? It automatically thinks it is still only 1 player and doesnt switch, Lke if theres 6 players filled out it automatically goes to player 6 at the bottom and ignores the other players, Does it look like I'm filling out it out right?

Edit- Also eah time the char dies, if it has another weapon in the Inv. it will switch between the wielding weapon and the Inv. weapon a couple times and just keep switching between before heading back to the catacombs.
  Procedure DeclarePlayers;
begin
HowManyPlayers := 4;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
with Players[0] do
begin
Name := '1@gmail.com';
Pass := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'hitpoints';
Active := True;

Name := '2@gmail.com';
Pass := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'hitpoints';
Active := True;

Name := '3@gmail.com';
Pass := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'hitpoints';
Active := True;

Name := '4@gmail.com';
Pass := '';
BoxRewards := ['XP','xp','lamp'];
LampSkill := 'hitpoints';
Active := True;
end;
end;

Flight

2011-09-15 03:49:04

Yeah it doesn't have multiplayer support, as I'm not really good with that. :p You'll have to add that in there yourself or ask someone else who to do that.

V1.2 released.

-Better in-combat detection
-(Beta) Junk-dropping upon death.

There's a list of items that the script will drop when you character dies and spawns in Lumbridge. Because these items are automatically kept when dieing, they stay with you if you die, this can cause you to lose room for your equipment to re-spawn in your inventory. So, I whipped this up quick to handle that. It's still 'Beta' because I've not tested it that much, but I was pushed on releasing a fixed version of the script, so might as well include that. :) The full list of 'junk items' can be found at line 1123 in the script.

ry0240

2011-09-15 23:08:14

Hey, I've been testing out your script, and that Fighting patch you did, is pretty flawless right now. I don't think your junk dropping is working, I havnt seen it drop anything. I think it should drop the items, right as it picks it up, The strongholder drops stuff right away if it accidentally picks something up. One time it accidentally grabbed a bow and equipped it instead of the scimitar, so that messed it up and it logged out. So dropping things right away would take away room for errors like that. Also you should cut down the failsafe time for everything when dieing instead of waiting 30 seconds before checking for that spawn screen, because it literally pops up each and every time I die, does it not pop up for you? so cutting that would get a little more xp each hour/save time.

Mr. Bottomtooth

2011-09-16 21:36:57

=-=-=-=-=-= Catacomber 1.2 by Flight =-=-=-=-=-=
Time Running: 4 Hours, 33 Minutes and 18 Seconds
Attack XP: 0
Strength XP: 15374
Defence XP: 1244
Constitution XP: 5388
Ranged XP: 0
Deaths: 9
Breaks: 2
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-= Catacomber 1.2 by Flight =-=-=-=-=-=
Time Running: 3 Hours, 3 Minutes and 52 Seconds
Attack XP: 1064
Strength XP: 6343
Defence XP: 0
Constitution XP: 2397
Ranged XP: 0
Deaths: 19
Breaks: 1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Leveling some new additions to my army. :p

_____________________________________

=-=-=-=-=-= Catacomber 1.2 by Flight =-=-=-=-=-=
Time Running: 5 Hours, 44 Minutes and 41 Seconds
Attack XP: 26558
Strength XP: 0
Defence XP: 0
Constitution XP: 8623
Ranged XP: 0
Deaths: 0
Breaks: 3
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-= Catacomber 1.2 by Flight =-=-=-=-=-=
Time Running: 6 Hours, 3 Minutes and 34 Seconds
Attack XP: 28124
Strength XP: 0
Defence XP: 0
Constitution XP: 9123
Ranged XP: 0
Deaths: 0
Breaks: 3
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Anajanatuinen

2012-02-03 18:16:51

Hay!

Is there ppl still using the script? I'm pretty sure it's out of date because I'm having such problems with starting it ?

{$define SMART}
{$i SRL/SRL.scar}
{$i SRL/SRL/skill/magic.scar}
{$i SRL/SRL/Misc/stats.simba}
{$i Reflection/Reflection.simba}
{$i SRL/SRL/misc/paintsmart.scar}

they all are kinda messed up ? when i try to change them to .simba it decides to wine about something else or the whole program shuts itself down..

Anyone ? :(

kevin33

2012-02-03 18:19:41

Its reflection… Reflection is broken.

Anajanatuinen

2012-02-03 18:22:36

Well I thought about it.. is there anything like this available atm ? any autofighter etc ?

Kyle Undefined

2012-02-03 18:34:28

Harry has one, so does Narcle.

obgano

2012-02-05 10:15:52

they says unable to find file SRL/SRL.scar PLease help!

Bebe

2012-02-05 10:18:38

Reflection is dead. This script is outdated.

obgano

2012-02-05 10:26:47

oh ok