SCAR Code:
{.SCRIPT INFO:
# SCRIPTNAME = ULTIMATE AUTO FIGHTER
# AUTHOR = DAVIDEMON
# DESCRIPTION = RUNESCAPE AUTO FIGHTER
# VERSION = 1.0
# DATE =
# COMMENTS =
/SCRIPT INFO}
PROGRAM AUTOFIGHTER;
{.INCLUDE SRL/SRL.SCAR}
{.INCLUDE SRL/SRL/SKILL/FIGHTING.SCAR}
{- VARIABLES -}
VAR
KILLED, KILLED2 : INTEGER;
CHARACTERSTARTTIME : INTEGER;
ANCHOVIE, HERRING : INTEGER;
LOBSTER, PIKE, SALMON : INTEGER;
SARDINE, SHRIMP : INTEGER;
SWORDFISH, TROUT, TUNA : INTEGER;
FOODTOEAT : INTEGER;
X, Y : INTEGER;
{- CONSTANTS -}
CONST
COLOR1 = 858228;
COLOR2 = 858759;
COLOR3 = 857453;
MONSTERNAME = 'CHICKEN';
KILLMONSTERFOR = 60;
EATFOOD = 'NO';
EATHP = 10;
RUNHP = 5;
RUNDIRECTION = 'E';
MYSRLID = '';
MYSRLPASSWORD = '';
{- DECLARE PLAYERS -}
PROCEDURE DECLAREPLAYERS;
BEGIN
HOWMANYPLAYERS :=0;
NUMBEROFPLAYERS(HOWMANYPLAYERS);
CURRENTPLAYER :=0;
SRLID := MYSRLID
SRLPASSWORD := MYSRLPASSWORD
PLAYERS[0].NAME := '';
PLAYERS[0].PASS := '';
PLAYERS[0].NICK := '';
PLAYERS[0].ACTIVE := TRUE;
PLAYERS[0].SKILL := 'STRENGTH';
PLAYERS[0].STRINGS[0] := 'LOBSTER'
PLAYERS[0].INTEGERS[0] := 0;
PLAYERS[0].INTEGERS[1] := 0;
WRITELN('USING '+ INTTOSTR(HOWMANYPLAYERS) +' PLAYERS');
END;
{- RANDOM EVENTS -}
FUNCTION FINDFASTRANDOMS: BOOLEAN;
VAR
I: INTEGER;
BEGIN
FOR I:=0 TO 7 DO
BEGIN
CASE I OF
0: IF SOLVECHATRANDOM THEN
RESULT := TRUE;
1: IF FINDDEAD THEN
RESULT := TRUE;
2: IF FINDMOD THEN
RESULT := TRUE;
3: IF FINDMIME THEN
RESULT := TRUE;
4: IF FINDMAZE THEN
RESULT := TRUE;
5: IF FINDQUIZ THEN
RESULT := TRUE;
6: BEGIN
IF NOGAMETAB THEN
BEGIN
RESULT := TRUE;
PLAYERS[CURRENTPLAYER].LOC := 'NO GAMETAB';
LOGOUT;
EXIT;
END;
END;
7: RC;
END;
WAIT(1);
END;
END;
{- ANTIBAN -}
PROCEDURE ANTIBAN;
BEGIN
IF(NOT(LOGGEDIN))THEN
EXIT;
CASE RANDOM(20) OF
0: PICKUPMOUSE;
1: PICKUPMOUSE;
5: PICKUPMOUSE;
6: CASE RANDOM(4) OF
0: TYPESEND('COMBAT LVL?');
1: TYPESEND('STR LVL?');
2: TYPESEND('ATT LEVEL?');
3: TYPESEND('DEF LEVEL?');
END;
END;
END;
{- FIND RANDOMS -}
FUNCTION FINDRANDOMS: BOOLEAN;
BEGIN
IF FINDFASTRANDOMS OR
FINDNORMALRANDOMS THEN
BEGIN
RESULT := TRUE;
END ELSE
BEGIN
RESULT := FALSE;
END;
FINDTALK
ANTIBAN;
SRLRANDOMSREPORT;
END;
PROCEDURE LOADFOODDTM;
BEGIN
ANCHOVIE := DTMFROMSTRING('78DA6314646060106540018A2A560CFF81342' +
'310FF07024625204388010D302291409A1548081050C30D24E408' +
'A89102123244A8E1C2AD86058801723A0682'); {ANCHOVIE}
HERRING := DTMFROMSTRING('78DA6314606060106740019D79990CFF81342' +
'310FF07024679208393010D302291405A0948881050C30724E408' +
'A8610312D204D4F0020921FC6A002366075E'); {HERRING}
LOBSTER := DTMFROMSTRING('78DA631465606000612470268D81E13F90660' +
'4E2FF40C0A80C647032A001462412484B020936026AA481840201' +
'350240429A801A76202145400D379010C0AF06000AEF0759'); {LOBSTER}
PIKE := DTMFROMSTRING('78DA63146660601065400131B5E10CFF81342' +
'310FF0702463920839D010D302291405A1148F0115003B2479680' +
'1A5E20214F400D2B909023A006E41621026A407EE7C6AF0600156' +
'B077E'); {PIKE}
SALMON := DTMFROMSTRING('78DA631464606010674001678C1918FE03694' +
'620FE0F048CF2400607031A60442281B41290E027A0461448C813' +
'50C307241408A86123C21C905B8409A81101123CF8D50000EAB20' +
'75B'); {SALMON}
SARDINE := DTMFROMSTRING('78DA6314646060106340019D79990CFF81342' +
'310FF070246903C0F031A60442281B42C901024A0460848481250' +
'C30D24A408A8E10712C2F8D500001BEE0756'); {SARDINE}
SHRIMP := DTMFROMSTRING('78DA63146660601061400133D31818FE03694' +
'620FE0F048CD2400617031A60442281B412901026A0460248C813' +
'50C34B841A564C3763A801B9971BBF1A00DE490721'); {SHRIMP}
SWORDFISH := DTMFROMSTRING('78DA63146160601060400133D36632FC07D28' +
'C40FC1F081859800C450634C0884402693E20C147408D30906023' +
'A0461A48F01050A304244408A89101125204D408010951FC6A006' +
'8A107E3'); {SWORDFISH}
TROUT := DTMFROMSTRING('78DA63146260601067400179F1D10CFF81342' +
'310FF07024679208383010D302291405A0948F01350230A24E409' +
'A86123428D0890E0C1AF0600FB85072F'); {TROUT}
TUNA := DTMFROMSTRING('78DA6314616060906240019D79990CFF81342' +
'310FF0702467920838B010D302291405A1948881350230A241408' +
'A8610312F204D48810E11E4E2021865F0D0041A40798'); {TUNA}
END;
{- AUTO RETALIATE -}
PROCEDURE AUTORETALIATE(RETALIATE:BOOLEAN);
BEGIN
GAMETAB(1);
IF RETALIATE THEN
BEGIN
IF NOT FINDCOLOR(X, Y, 1777020, 624, 385, 719, 396) THEN
BEGIN
MOUSE(666, 381, 8, 8, TRUE);
END;
END;
IF NOT RETALIATE THEN
BEGIN
IF FINDCOLOR(X, Y, 1777020, 624, 385, 719, 396) THEN
BEGIN
MOUSE(666, 381, 8, 8, TRUE);
END;
END;
END;
{- CHOOSE SKILL -}
PROCEDURE CHOOSESKILL(SKILL:STRING); //PURE IDEA FROM TARA
BEGIN
WRITELN('CHOOSING SKILL TO TRAIN...');
CASE SKILL OF
'PURE': BEGIN
IF PLAYERS[CURRENTPLAYER].LEVEL[2]<15 THEN SKILL:='STRENGTH' ELSE
IF PLAYERS[CURRENTPLAYER].LEVEL[1]<30 THEN SKILL:='ATTACK' ELSE
IF PLAYERS[CURRENTPLAYER].LEVEL[2]<25 THEN SKILL:='STRENGTH' ELSE
IF PLAYERS[CURRENTPLAYER].LEVEL[1]<40 THEN SKILL:='ATTACK' ELSE
SKILL:='STRENGTH';
END;
'EVEN': BEGIN
IF PLAYERS[CURRENTPLAYER].LEVEL[1]>PLAYERS[CURRENTPLAYER].LEVEL[2] THEN
BEGIN
IF PLAYERS[CURRENTPLAYER].LEVEL[2]>PLAYERS[CURRENTPLAYER].LEVEL[3] THEN
SKILL:='DEFENSE' ELSE SKILL:='STRENGTH';
END ELSE
BEGIN
IF PLAYERS[CURRENTPLAYER].LEVEL[1]>PLAYERS[CURRENTPLAYER].LEVEL[3] THEN
SKILL:='DEFENSE' ELSE SKILL:='ATTACK';
END;
END;
END;
CASE SKILL OF
'ATTACK': SETFIGHTMODE(1);
'STRENGTH': SETFIGHTMODE(2);
'DEFENSE': SETFIGHTMODE(4);
END;
END;
PROCEDURE CHOOSESKILLS;
BEGIN
IF (NOT(LOGGEDIN)) THEN EXIT;
GAMETAB(1);
BEGIN
CHOOSESKILL(LOWERCASE(PLAYERS[CURRENTPLAYER].SKILL));
END;
IF (FINDRANDOMS = TRUE) THEN
BEGIN
NEXTPLAYER(TRUE);
END;
AUTORETALIATE(TRUE);
SETCHAT('OFF', 1);
SETCHAT('OFF', 2);
SETCHAT('OFF', 3);
SETCHAT('OFF', 4);
SETRUN(TRUE);
END;
{- HIGHEST ANGLE -}
PROCEDURE HSHIGHESTANGLE;
BEGIN
KEYDOWN(38);
WAIT(3000 + RANDOM(100));
KEYUP(38);
END;
PROCEDURE STATSDEPLAYER;
VAR ACTIVE: STRING;
VAR I: INTEGER;
BEGIN
IF PLAYERS[CURRENTPLAYER].ACTIVE=TRUE THEN
ACTIVE:='IN USE'
ELSE
ACTIVE:='NOT IN USE';
ADDTOREPORT(' PLAYER NAME : '+ PLAYERS[CURRENTPLAYER].NAME);
ADDTOREPORT(' PLAYER NUMBER : '+INTTOSTR(CURRENTPLAYER));
ADDTOREPORT(' ACTIVE : '+ ACTIVE);
IF ( PLAYERS[CURRENTPLAYER].WORKED > 0 ) THEN
ADDTOREPORT(' WORKED : '+ INTTOSTR(PLAYERS[CURRENTPLAYER].WORKED) +' MIN.');
GETALLLEVELS;
FOR I := 0 TO HOWMANYPLAYERS - 1 DO
BEGIN
IF PLAYERS[I].ACTIVE = TRUE THEN ACTIVE:='T' ELSE ACTIVE:='F';
ADDTOREPORT( ' ' + INTTOSTR (I) + ' : NICK : ' + PLAYERS[I].NICK + ' = ' + ACTIVE
+'. - LVL : '
+' '+INTTOSTR(PLAYERS[I].LEVEL[1])+
+' '+INTTOSTR(PLAYERS[I].LEVEL[2])+
+' '+INTTOSTR(PLAYERS[I].LEVEL[3])+
+' '+INTTOSTR(PLAYERS[I].LEVEL[8])+'. '
+'W : '+INTTOSTR(PLAYERS[I].WORKED)+' MIN. '
+'K : '+ INTTOSTR(PLAYERS[I].INTEGERS[0]) +' '+ MONSTERNAME +'S. '
+'ATE : '+ INTTOSTR(PLAYERS[I].INTEGERS[1]) +' '+ PLAYERS[I].STRINGS[0] +'. ');
END
END;
PROCEDURE REPORTDEPROGRESS;
BEGIN
CLEARREPORT;
SRLRANDOMSREPORT;
ADDTOREPORT(' ');
ADDTOREPORT(' WORKED FOR '+ TIMERUNNING);
ADDTOREPORT(' KILLED TOTAL OF '+INTTOSTR(KILLED2)+' '+ MONSTERNAME +'S.');
STATSDEPLAYER;
END;
{- FINDING THE MONSTER -}
PROCEDURE WHEREISTHEMONSTER;
VAR
I: INTEGER;
DIR: STRING;
BEGIN
IF (NOT(INFIGHT)) THEN
BEGIN
CASE RANDOM(4) + 1 OF
1: DIR := 'NSWE';
2: DIR := 'WENS';
3: DIR := 'SEWN';
4: DIR := 'EWNS';
END;
FOR I := 1 TO 4 DO
MAKECOMPASS(STRGET(DIR, I));
WRITELN('ROTATING COMPASS, LOOKING FOR MONSTER...');
END;
END;
{- FOOD EATING -}
PROCEDURE FOODEATING;
BEGIN
CASE LOWERCASE(PLAYERS[CURRENTPLAYER].STRINGS[0]) OF
'ANCHOVIE': FOODTOEAT := ANCHOVIE;
'HERRING': FOODTOEAT := HERRING;
'LOBSTER': FOODTOEAT := LOBSTER;
'PIKE': FOODTOEAT := PIKE;
'SALMON': FOODTOEAT := SALMON;
'SARDINE': FOODTOEAT := SARDINE;
'SHRIMP': FOODTOEAT := SHRIMP;
'SWORDFISH': FOODTOEAT := SWORDFISH;
'TROUT': FOODTOEAT := TROUT;
'TUNA': FOODTOEAT := TUNA;
END;
IF (NOT(LOGGEDIN)) THEN EXIT;
IF (FINDDTM(FOODTOEAT, X, Y, 548, 205, 734, 461)) THEN
BEGIN
MMOUSE(X, Y, 0, 0);
GETMOUSEPOS(X, Y);
IF FINDCOLORTOLERANCE(X, Y, 3703002, 42, 8, 120, 21, 70) THEN
BEGIN
GETMOUSEPOS(X, Y);
MOUSE(X, Y, 0, 0, FALSE);
CHOOSEOPTION('AT');
END ELSE
EXIT;
END;
END;
{- HP CHECK -}
PROCEDURE HPCHECK;
VAR
TIMETOEAT: INTEGER;
BEGIN
MARKTIME(TIMETOEAT);
BEGIN
IF (EATFOOD = 'YES') THEN
BEGIN
GETHP;
IF (GETHP <= EATHP) THEN
GAMETAB(4);
BEGIN
FOODEATING;
BEGIN
PLAYERS[CURRENTPLAYER].INTEGERS[1] := PLAYERS[CURRENTPLAYER].INTEGERS[1] + 1;
END;
BEGIN
IF (GETHP < RUNHP) THEN
BEGIN
STATUS('RUNNING BECAUSE LOW HP');
RUNAWAYDIRECTION(RUNDIRECTION);
BEGIN
NEXTPLAYER(FALSE);
END;
END;
FINDRANDOMS;
END;
END;
END;
END;
END;
{- FIGHTING -}
FUNCTION FIGHTING(NAME: STRING; COLOR, MAXTOL, MAXTIME: INTEGER): BOOLEAN;
VAR
BOX: TBOXARRAY;
TOLERANCE, TIME: INTEGER;
BEGIN
RESULT := FALSE;
MARKTIME(TIME);
IF(FINDCOLORSKIPBOXARRAYTOLERANCE(X, Y, COLOR, MSX1, MSY1, MSX2, MSY2, TOLERANCE, BOX)) THEN
BEGIN
MMOUSE(X, Y, 0, 0);
WAIT(50 + RANDOM(250));
IF(ISUPTEXT(NAME))THEN
BEGIN
RESULT := TRUE;
GETMOUSEPOS(X, Y);
CASE RANDOM(2) OF
0: BEGIN
MOUSE(X, Y, 0, 0, FALSE);
CHOOSEOPTION('TTACK');
EXIT;
END;
1: BEGIN
MOUSE(X, Y, 0, 0, TRUE);
EXIT;
END;
END;
END ELSE
BEGIN
SETLENGTH(BOX, LENGTH(BOX) + 1);
BOX[LENGTH(BOX) - 1].X1 := X - 5;
BOX[LENGTH(BOX) - 1].Y1 := Y - 5;
BOX[LENGTH(BOX) - 1].X2 := X + 5;
BOX[LENGTH(BOX) - 1].Y2 := Y + 5;
EXIT;
END;
END ELSE
TOLERANCE := TOLERANCE + 1;
WAIT(50);
END;
{- ATTACK! -}
PROCEDURE ATTACK;
VAR
MONSTERCOLORS: ARRAY[0..2] OF INTEGER;
I: INTEGER;
TIMETOKILL: INTEGER;
BEGIN
IF (NOT (LOGGEDIN)) THEN
EXIT;
MONSTERCOLORS[0] := COLOR1;
MONSTERCOLORS[1] := COLOR2;
MONSTERCOLORS[2] := COLOR3;
MARKTIME(TIMETOKILL);
KILLED := 0;
REPEAT
IF (INFIGHT) THEN
EXIT;
FOR I := 0 TO 2 DO
BEGIN
IF(FIGHTING(MONSTERNAME, MONSTERCOLORS[I], 5, 2000))THEN
BEGIN
WAIT(1000 + RANDOM(500));
OUTFIGHT;
KILLED := KILLED + 1;
KILLED2 := KILLED2 + 1;
REPORTVARS[0] := REPORTVARS[0] + 1;
PLAYERS[CURRENTPLAYER].INTEGERS[0] := PLAYERS[CURRENTPLAYER].INTEGERS[0] + 1;
END;
END;
WAIT(10);
IF (FINDRANDOMS = TRUE) THEN
BEGIN
NEXTPLAYER(TRUE);
END;
IF (EATFOOD = 'YES') THEN
BEGIN
HPCHECK;
END;
UNTIL (((GETSYSTEMTIME-CHARACTERSTARTTIME)/1000)>(KILLMONSTERFOR * 60));
END;
{- SETUP -}
PROCEDURE SETUP;
BEGIN
SETUPSRL;
SCRIPTID := '269';
WAIT(100);
LOADFOODDTM;
DECLAREPLAYERS;
IF(NOT(LOGGEDIN))THEN LOGINPLAYER;
END;
{- SETUP 2 -}
PROCEDURE SETUP2;
BEGIN
CHOOSESKILLS;
HIGHESTANGLE;
END;
{- MAIN LOOP -}
BEGIN
SETUP;
KILLED2 := 0;
REPEAT
CHARACTERSTARTTIME:=GETSYSTEMTIME;
IF(NOT(LOGGEDIN))THEN LOGINPLAYER;
SETUP2;
ATTACK;
WHEREISTHEMONSTER;
IF (((GETSYSTEMTIME-CHARACTERSTARTTIME)/1000)>(KILLMONSTERFOR * 60)) THEN
BEGIN
WAIT(5000 + RANDOM(1000));
NEXTPLAYER(TRUE);
END;
REPORTDEPROGRESS;
UNTIL(FALSE);
END.