SCAR Code:
//| Script Name: Fast Fighter
//| Category: Fighter
//| Author: Narcle
//| Version: 1.5
//| SRL Version: 4.0 Rev 5+
//| Info: Fights any monster, with food eating and HP regen
//| Extra: XP based! Meaning accurate monster kill count, XP per hour and estimated time to level!
//| Advance Ranging -Gives report of ammo remaining, ammo used, ammo used per hour,
//| XP per ammo and time until you run out of ammo. As well changes attack times (better ranging)
//|_______________________________________________________________________________________________________________||
//|-------------------------------Instructions, Credits & Help info-----------------------------------------------\\
//|
//| There is 2 ways to set up, individually per player, or a overall setting for all.
//| If your just using one character use overall it requires less setup work.
//|
//| Instructions:
//| Setup: -Make sure you use the Color picker and select 3 colors from monster.
//| -Use exact spelling & capitalization for monster name. Example: "Chicken" not "chicken", or "Hill Giant" not "Hill giant"
//| -Get a HP count of monster and put it into script! At: MonsterHP = ??; this is REQUIRED for accurate kill count.
//| -Check all setup lines 44-71 and player setup lines 87-128.
//| -Change nothing else unless you know what your doing.
//|
//| Food eating: Put in 'food' for it to eat the first thing it finds in invy.
//| Any custom food works, just put the first single word in (perfect spelling).
//|
//| Credits:
//| -HyperSecret for posting his SecretFighter (v0.50) script
//| -Precog & Cruel100 for Testing and Suggestions
//|
//| Help / Tests Needed:
//| -Confirmation teleport works
//|_______________________________________________________________________________________________________________||
{.include srl/srl.scar}
{.include srl/srl/skill/fighting.scar}
{.include srl/srl/skill/magic.scar}
var
CharStartTime, stopbanT, TKilled, Txp, Startxp, foodate, ArrowStartAmount,
OverallArrowAmount, FindMonsterFail, rchecktime, rct, TFoodate:integer;
Hoverskillis:string;
Outoffood: Boolean;
Const
//SRL - Stats
MySRLID = '';
MySRLPassword = '';
DebugMode = false;//debug mode
//Fighting Setup:
IndividualSetup = 'off';//If on, will use individual colors/name/hp/KillMonsterFor
Color1 = 3909023;//Monster color 1
Color2 = 3975329;//Monster color 2
Color3 = 3776665;//Monster color 3
MonsterName = 'Goblin';//Name of monster
MonsterHP = 5;//How much HP does monster have? [required for accurate kill count]
KillMonsterForA = 9;//logout every ??mins (I recommend 9-10)
//Ranging options:
ranging = 'off';//Changes attack timings and does a arrow used count & Arrows used/hour cool eh? :D
LogoutLowAmmo = 'off';//Logs out and makes player inactive when ammo weilded < 200
//HP & Food options:
eatfood = 'off';//eat food at 67% hp?
hpcheck = 'on';//HP check, if so will regen at 50% hp
Emergencyrun = 'on';//Emergency run? Runs away once below 15% HP
EmergencyTele = 'on';//Emergency Teleport? 10% hp [let me know if this works for you]
RunDir = 's';//run away direction [for Emergencytele and Emergecyrun]
//Fine Tuning: -don't changes these if you don't know what they do-
WaitTimeRange = 18;//the time it waits after attacking while ranging
WaitTimeMelee = 8;//melee wait time [4 = ~1 sec, 8 = ~2 secs, etc. any whole number works]
FindFail = 20;//Fail to find monster ?? times = player inactive
//version info:
Version = '1.5';//don't change
procedure FFoutfight; forward;
procedure LogoutSeq(i:integer); forward;
procedure FFhpcheck; forward;
procedure DeclarePlayers;
begin
HowManyPlayers := 1; //change this accordingly
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;
//----------------------------------------Player setup-------------------------------------------------------//
Players[0].Name :=''; //Character Name
Players[0].Pass :=''; //Character Pass
Players[0].Nick :=''; //Nickname 3 - 4 Letter's of char name
Players[0].Skill := 'attack'; //the skill you want to train > strength, attack, defence, whipdefence, even, accurate, rapid or longrange <
Players[0].Strings[0] := 'food' //'food' eats first thing it finds to Eat in invy. Read above on custom.
Players[0].Active:=True; //True if you want this player to be ran in the script, false if not
//Individuals for player 0 :
Players[0].Strings[1] := 'Goblin';//monster name
Players[0].Integers[20] := 5;//hitpoints
Players[0].Integers[0] := 3909023;//1st color of monster -If you want custom colors, enter here
Players[0].Integers[1] := 3975329;//2nd color of monster
Players[0].Integers[2] := 3776665;//3rd color of monster
Players[0].Integers[21] := 9;//Kill monster for ?? minutes.
{
Players[1].Name :=''; //Character Name
Players[1].Pass :=''; //Character Pass
Players[1].Nick :=''; //Nickname 3 - 4 Letter's of char name
Players[1].Skill := 'even'; //the skill you want to train > strength, attack, defence, whipdefence, even, accurate, rapid or longrange <
Players[1].Strings[0] := 'food' //'food' eats first thing it finds to Eat in invy. Read above on custom.
Players[1].Active:=True; //True if you want this player to be ran in the script, false if not
Players[1].Strings[1] := '';//individual monster name
Players[1].Integers[20] := 0;//individual hitpoints
Players[1].Integers[0] := 0;//individual 1st color of monster -If you want custom colors, enter here
Players[1].Integers[1] := 0;//individual 2nd color of monster
Players[1].Integers[2] := 0;//individual 3rd color of monster
Players[1].Integers[21] := 9;//individual Kill monster for ?? minutes.
}
{
Players[2].Name :=''; //Character Name
Players[2].Pass :=''; //Character Pass
Players[2].Nick :=''; //Nickname 3 - 4 Letter's of char name
Players[2].Skill := 'even'; //the skill you want to train > strength, attack, defence, whipdefence, even, accurate, rapid or longrange <
Players[2].Strings[0] := 'food' //'food' eats first thing it finds to Eat in invy. Read above on custom.
Players[2].Active:=True; //True if you want this player to be ran in the script, false if not
Players[2].Strings[1] := '';//individual monster name
Players[2].Integers[20] := 0;//individual hitpoints
Players[2].Integers[0] := 0;//individual 1st color of monster -If you want custom colors, enter here
Players[2].Integers[1] := 0;//individual 2nd color of monster
Players[2].Integers[2] := 0;//individual 3rd color of monster
Players[2].Integers[21] := 9;//individual Kill monster for ?? minutes.
}
{----------------------------------------Player setup end---------------------------------------------------}
ScriptID := '424';//Don't change this!
SRLid:= MySRLId;
SRLpassword:= MySRLPassword;
Writeln(' _ _ _ ');
Writeln('| \ | | made by | | ');
Writeln('| \| | __ _ _ __ ___| | ___ Fast Fighter');
Writeln('| . ` |/ _` | __/ __| |/ _ \ v'+Version);
Writeln('| |\ | (_| | | | (__| | __/');
Writeln('|_| \_|\__,_|_| \___|_|\___|');
writeln('Start Time: '+TheTime);
if (MySRLID = '') then writeln('Please register at SRL-stats in the future. -Regards Narcle');
end;
procedure NarcDebug(ln:string);
begin
if (debugmode) then writeln(thetime+': '+ln);
end;
function MouseInvText(istextup, option:string; leftclick: Boolean; inv1, inv2, waitfor, xtimes:integer): Boolean; //by Narcle
var
i,x,y, times:integer;
begin
gametab(4);
for i := inv1 to inv2 do
if (ExistsItem(i)) then
begin
MMouseItem(i);
GetMousePos(x, y);
wait(200+random(50));
if (pos(istextup, rs_GetUpText) > 0) then
begin
if (leftclick = true) then
begin
Mouse(x,y,5,5,true);
result := true;
times := times + 1;
end else
begin
Mouse(x,y,5,5,false);
if Chooseoption(option) then
begin
result := true;
times := times + 1;
end;
end;
end;
wait(waitfor+random(100));
if (times = xtimes) then exit;
end else
result := false;
exit;
end;
function InFightNotAttacking: Boolean;//made for my fighters :D very effective
var
x, y : Integer;
begin
Result := ( (FindColor(x, y, 65280, 230, 130, 280, 180) or FindColor(x, y, 255, 230, 130, 280, 180)) and
(not(FindColor(x, y, 65280, 12, 24, 212, 328) or FindColor(x, y, 255, 12, 24, 212, 328))) and
(not(FindColor(x, y, 65280, 290, 12, 509, 328) or FindColor(x, y, 255, 290, 12, 509, 328))) and
(not(FindColor(x, y, 65280, 197, 15, 303, 117) or FindColor(x, y, 255, 197, 15, 303, 117))) and
(not(FindColor(x, y, 65280, 179, 180, 330, 332) or FindColor(x, y, 255, 179, 180, 330, 332))) )
end;
function GetArrowCount:integer;//my personal one
var
ACtxt, text2: string;
l:integer;
begin
gametab(5);
wait(50);
ACtxt := Trim(GetTextAtEx(667, 249, 0, StatChars, False, False,
0, 2, -1, 5, True, tr_AlphaNumericChars));
for l := 1 to Length(ACtxt) do
begin
if (ACtxt[l] = 'K') then text2 := text2 + '000' else text2 := text2+ ACtxt[l];
end;
if (clearspaces(text2) = '') then result := 0 else result := strtoint(clearspaces(text2));
end;
procedure SetChat2(state: string; chat: Integer);//Temporary working one till SRL update
var
x, y, mx, my, Color: Integer;
begin
case chat of
1: mx := 146;
2: mx := 205;
3: mx := 263;
4: mx := 319;
5: mx := 375;
else Exit;
end;
my := 492;
case LowerCase(State) of
'on': begin Color := 65280; State :='On'; end;
'off': begin Color := 255; State :='Off'; end;
'hide': begin Color := 16776960; State :='Hide'; end;
'friends': begin Color := 65535; State :='Friends'; end;
else Writeln('State in SetChat does not exist!');
end;
if not FindColor(x, y, Color, mx - 10, my - 10, mx + 10, my + 10) then
begin
Mouse(mx, my, 8, 8, False);
Wait(450 + Random(175));
ChooseOption(State);
end;
end;
function GetXp2(skill: string): integer;//By nielsie95, major edit by Narcle
var
p: TPoint;
i, tx, ty, x, y, l, II, WaitT: Integer;
xp, Nums, text2, xpis : string;
begin
Result := -1;
if (not LoggedIn) or (not TabExists(2)) then Exit;
GameTab(2);
if (GetCurrentTab <> 2) then Exit;
p := SkillToCoords(Skill);
if (p.x < 1) then Exit;
MMouse(p.x, p.y+7, 12, 4);
repeat
WaitT := WaitT+1;
wait(10);
if WaitT >= 3000 then exit;
until findcolor(x, y, 10551295, 554, 205, 743, 465);
wait(300 + Random(100))
if (not FindColor(x, y, 10551295, MIX1, MIY1, MIX2, MIY2)) then Exit;
if IsTextInAreaEx(x, y, x + 60, y + 60, tx, ty, 'urrent', 0, SmallChars, False, False, 0, 1, 0) then
xp := GetTextAtEx(tx, ty, 0, SmallChars, False, True, 0, 1, 0, 50, False, tr_AllChars);
for l := 1 to Length(xp) do
begin //replace O's with 0's
if (xp[l] = 'O') then text2 := text2 + '0' else text2 := text2+ xp[l];
end;
Nums := '01234567890';//clear spaces
for I := 1 to Length(Text2) do
begin
for II := 1 to 10 do
begin
if (Copy(text2, I, 1) = Copy(Nums, II, 1)) then
xpis := xpis + Copy(Text2, I, 1);
end;
end;
result := strtoint(xpis);
NarcDebug(skill+' = ' +xpis);
end;
procedure ColorsAre;
begin ;
if IndividualSetup = 'off' then
begin
Players[CurrentPlayer].Integers[7] := Color1;
Players[CurrentPlayer].Integers[8] := Color2;
Players[CurrentPlayer].Integers[9] := Color3;
Players[CurrentPlayer].Integers[10] := MonsterHP;
Players[CurrentPlayer].Integers[11] := KillMonsterForA;
Players[CurrentPlayer].Strings[2] := MonsterName;
end;
if IndividualSetup = 'on' then
begin
Players[CurrentPlayer].Integers[7] := Players[CurrentPlayer].Integers[0];
Players[CurrentPlayer].Integers[8] := Players[CurrentPlayer].Integers[1];
Players[CurrentPlayer].Integers[9] := Players[CurrentPlayer].Integers[2];
Players[CurrentPlayer].Integers[10] := Players[CurrentPlayer].Integers[20];
Players[CurrentPlayer].Integers[11] := Players[CurrentPlayer].Integers[21];
Players[CurrentPlayer].Strings[2] := Players[CurrentPlayer].Strings[1];
end;
end;
procedure FFset;
Var
Deflvl, Attlvl, Strlvl:integer;
begin
if (not(LoggedIn)) then Exit;
NarcDebug('Setting up player: '+Players[CurrentPlayer].Name+'...');
ColorsAre;
GameTab(1);
case lowercase(Players[CurrentPlayer].Skill) of
'attack': begin
SetFightMode(1)
Hoverskillis := 'attack'
end;
'strength': begin
SetFightMode(2)
Hoverskillis := 'strength'
end;
'defence': begin
SetFightMode(4);
Hoverskillis := 'defence'
end;
'accurate' : begin
SetFightMode(1)
Hoverskillis := 'range'
end;
'whipdefence' : begin
Setfightmode(3)
Hoverskillis := 'defence'
end;
'rapid' : begin
Setfightmode(2)
Hoverskillis := 'range'
end;
'longrange': begin
Setfightmode(3)
Hoverskillis := 'range'
end;
'even': begin
Attlvl := GetSkillLevel('attack')
Deflvl := GetSkillLevel('defence')
Strlvl := GetSkillLevel('strength')
if (Deflvl <= attlvl) and (Deflvl <= strlvl) then
begin
SetFightMode(4)
Hoverskillis := 'defence'
end
if (Attlvl <= deflvl) and (Attlvl <= strlvl) then
begin
SetfightMode(1)
Hoverskillis := 'attack'
end
if (Strlvl <= attlvl) and (Strlvl <= deflvl) then
begin
SetFightMode(2)
Hoverskillis := 'strength'
end
end;
end
Retaliate(True);
SetChat2('off', 1);
SetChat2('off', 2);
SetChat2('off', 3);
SetChat2('off', 4);
SetChat2('off', 5);
SetRun(True);
if (ranging = 'on') then
begin
ArrowStartAmount:=GetArrowCount;
If (logoutLowAmmo = 'on') and (ArrowStartAmount < 200) then LogoutSeq(0);
end;
Startxp := GetXp2(Hoverskillis);
outoffood := false;
HighestAngle;
CharStartTime := Getsystemtime+random(20000);
end;
procedure PReport;
Var
CurXP, CurAU, XPn, TLm, Killed, H,M,S:integer;
begin
outfight;
ConvertTime(gettimerunning, H, M, S);
CurXP := GetXp2(lowercase(Hoverskillis));
if (CurXP > Startxp) and (CurXP > 0) and (Startxp > 0) then XPn := CurXP-Startxp else XPn := 0;
If (XPn > 0) then Killed := ((CurXP-Startxp)/(4*Players[CurrentPlayer].Integers[10])) else Killed := 1;
TKilled := TKilled+killed;
Txp := (Txp+XPn);
if (NextLevelAt(hoverskillis)>0) then TLm := (NextLevelAt(hoverskillis)-curxp)/(Txp/(H*60+m)) else TLm := 1;
TFoodate := TFoodate + foodate;
if (ranging = 'on') and (ArrowStartAmount > GetArrowCount) and (GetArrowCount > 0) then CurAU := ArrowStartAmount - GetArrowCount else CurAU := 0; //current arrows used
if (ranging = 'on') then OverallArrowAmount := OverallArrowAmount+CurAU;
begin
writeln('')
Writeln('< Ran: ' + inttostr(H) + 'h:' + inttostr(M) + 'm:' + inttostr(S)+'s >--Fast Fighter v'+Version+'--< '+TheTime+' >');
WriteLn('Total Kills: '+ inttostr(TKilled)+', Total XP Gained: '+ inttostr(Txp)+', Kills this Round: '+ inttostr(Killed)+', XP this Round: '+ inttostr(XPn));
WriteLn('XP/hour: '+inttostr((Txp*60)/(H*60+m))+ ', Estimated time to '+Capitalize(hoverskillis)+' level: '+inttostr((Tlm/60))+' Hours & '+inttostr(tlm-(((Tlm/60)*60)))+' Minutes');
If (ranging = 'on') then writeln('Ammo remaining: '+inttostr(GetArrowCount)+', Total Ammo used: '+inttostr(OverallArrowAmount)+', Ammo Used/hour: '+inttostr((OverallArrowAmount*60)/(H*60+m)));
If (ranging = 'on') then writeln('XP/ammo:'+inttostr(Txp/OverallArrowAmount)+', Estimated Ammo Time Remaining: '+ inttostr(GetArrowCount/((OverallArrowAmount*60)/(H*60+m)))+' Hour(s) & '+
+inttostr( ((GetArrowCount*60)/((OverallArrowAmount*60)/(H*60+m)))-((GetArrowCount/((OverallArrowAmount*60)/(H*60+m)))*60) )+' Minutes'); //Think I could make this equation bigger? lol
If (TFoodate > 0) then Writeln((Players[CurrentPlayer].Strings[0]) +'s ate: '+inttostr(TFoodate));
writeln('');
end;
begin//stat updates
ReportVars[0] := Killed;
ReportVars[1] := XPn;
ReportVars[2] := FoodAte;
SendSRLReport;
end;
foodate := 0;
Killed := 0;
end;
procedure LogoutSeq(i:integer);
begin
FFoutfight;
PReport;
if (i = 0) then nextplayer(false);
if (i = 1) then nextplayer(true);
FFset;
end;
procedure Stopban;
begin
if(not(LoggedIn))then Exit;
begin
if (stopbanT >= 12) then
begin
NarcDebug('AntiBan Start');
case Random(6) of
0: wait(500+random(10000));
1: RandomMovement;
2: HoverSkill(Hoverskillis ,false);
3: PickUpMouse;
4: gametab(4);
5: RandomMovement;
end;
NarcDebug('AntiBan End');
HighestAngle;
stopbanT:=0;
end;
end;
end;
Function RandomsCheck(Time: Integer): Boolean;
var
t: Integer;
begin
if time = 0 then
begin
FindNonInventoryRandoms;
if Findtalk then FindInventoryRandoms;
if (rct = 0) then
begin
rchecktime := getsystemtime;
rct := 1;
end;
if (rct = 1) and ((getsystemtime - rchecktime) >= (30000+random(10000))) then
begin
outfight;
FindInventoryRandoms;
rct := 0;
end;
exit;
end;
begin
for T := 1 to Time do
begin
Wait(200 + Random(50));
if (rct = 0) then
begin
rchecktime := getsystemtime;
rct := 1;
end;
if (rct = 1) and ((getsystemtime - rchecktime) >= (30000+random(10000))) then
begin
outfight;
FindInventoryRandoms;
rct := 0;
end;
if FindTalk then
begin
Result := True;
FindInventoryRandoms;
end;
end;
end;
end;
procedure FFhpcheck;//Longest check, but not dying is important no?
begin
If (hpcheck = 'on') or (eatfood = 'on') then
begin
if (eatfood = 'off') then outoffood := true;
if (HpPercent < 15) and (Emergencyrun = 'on') then
begin
NarcDebug('Running away HP% < 15');
RunAwayDirection(RunDir);
wait(50000+random(20000));
if (lowercase(rundir) = 'e') then RunAwayDirection('w'); //i know "runback"... but it doesn't work good imo
if (lowercase(rundir) = 'w') then RunAwayDirection('e');
if (lowercase(rundir) = 'n') then RunAwayDirection('s');
if (lowercase(rundir) = 's') then RunAwayDirection('n');
end;
if (eatfood = 'on') and (outoffood = false) and (HpPercent < 67) then
begin
gametab(4);
NarcDebug('Looking for food to eat');
if (lowercase(Players[CurrentPlayer].Strings[0]) = 'food') then
begin
if MouseInvText('Eat', 'Eat', true, 1, 28, 300, 1) then
foodate := foodate+1 else outoffood := true;
end else
if MouseInvText(Capitalize(lowercase(Players[CurrentPlayer].Strings[0])), 'Eat', true, 1, 28, 300, 1) then
foodate := foodate+1 else outoffood := true;
exit;
end;
if (hpcheck = 'on') and (HpPercent < 50) and (outoffood = true) then
begin
writeln(TheTime+': HP low, waiting for regen');
repeat
wait(30000+random(20000));
If (((Getsystemtime-CharStartTime)/1000)>(Players[CurrentPlayer].Integers[11] * 60)) then
begin
logoutSeq(1);
exit;
end;
if infight then
begin
wait(22000+random(8000));
if infight then
begin
Repeat
wait(5000+random(2000));
if (hppercent < 10) and (EmergencyTele = 'on') then
begin
RunAwayDirection(RunDir);
RunAwayDirection(RunDir);
wait(10000+random(500));
if infight then
repeat
RunAwayDirection(RunDir);
wait(10000+random(500));
until(not(infight))
writeln('Emergency Teleport! '+Players[currentplayer].Name+' is now inactive');
CastSpell(1);
LogoutSeq(0);
exit;
end
until(not(loggedin))
writeln(TheTime+': HP regen END');
PReport;
nextplayer(true);
FFset;
exit;
end;
end;
if (not(loggedin)) then
begin
writeln(TheTime+': HP regen END');
PReport;
nextplayer(true);
FFset;
exit;
end;
RandomMovement;
until(HpPercent > 50);
writeln(TheTime+': HP regen END');
HighestAngle;
end;
end;
end;
function FFfight(Nname: string; color, maxtol: integer): boolean;//Original by Hypersecret, edited
var
x, y, tolerance: integer;
begin
result := false;
if (FindObjCustom(x, y, [Nname], [color], tolerance)) then
begin
MMouse(x, y, 3, 3);
if IsFightAt(x, y) then exit;
if (pos(Nname, rs_GetUpText) > 0) then
begin
result := true;
GetMousePos(x, y);
FindMonsterFail := 0;
stopbanT := stopbanT+random(2);
case Random(2) of
0: begin
Mouse(x, y, 0, 0, false);
ChooseOption('ttack');
end;
1: Mouse(x, y, 0, 0, true);
end;
exit;
end else
if tolerance >= maxtol then exit;
tolerance := tolerance + 1;
wait(50);
end;
end;
procedure FFattack;//Derived from Hypersecrets
var
MobColors: array[0..2] of integer;
i: Integer;
begin
if (not (LoggedIn)) or (infight and (not(infightnotattacking))) then Exit;
MobColors[0] := Players[CurrentPlayer].Integers[7];
MobColors[1] := Players[CurrentPlayer].Integers[8];
MobColors[2] := Players[CurrentPlayer].Integers[9];
begin
for i := 0 to 2 do
begin
if FFfight(Players[CurrentPlayer].Strings[2], MobColors[i], 5) then
begin
if (ranging = 'on') then RandomsCheck(WaitTimeRange) else RandomsCheck(WaitTimeMelee);
FFOutFight;
end else
begin
if infight then exit;
FindMonsterFail := FindMonsterFail+1;
case Random(4) of
0: MakeCompass('n')
1: MakeCompass('e')
2: MakeCompass('w')
3: MakeCompass('s')
end;
end;
end;
end;
end;
procedure FFOutFight;
var x, y: Integer;
begin
if (ranging = 'on') and (FindColor(x, y, 255, MMX1, MMY1, MMX2, MMY2)) then
RandomsCheck(8) else flag;
if (InFight) then
begin
repeat
if (not (LoggedIn)) then exit;
Wait(100);
if infightnotattacking then
begin
if (ranging = 'on') then RandomsCheck(8) else RandomsCheck(4);
if infightnotattacking then exit;
end;
RandomsCheck(0);
FFhpcheck;
until (not(InFight))
Exit;
end else
Wait(300);
end;
Procedure HPNameColorCheck;
begin
if (Players[CurrentPlayer].Integers[7] = 0) or
(Players[CurrentPlayer].Integers[8] = 0) or
(Players[CurrentPlayer].Integers[9] = 0) then
begin
Writeln('Error: Please enter 3 monster colors.');
terminatescript;
end;
if Players[CurrentPlayer].Strings[2] = '' then
begin
Writeln('Error: Please enter monster name(s).');
terminatescript;
end;
if Players[CurrentPlayer].Integers[10] = 0 then
begin
Writeln('Error: Please enter monster HP(s).');
terminatescript;
end;
end;
//=============================================Main Execution============================================\\
begin
SetupSRL;
DeclarePlayers;
ColorsAre;
HPNameColorCheck;
if(not(loggedin))then loginplayer;
FFset;
repeat
if(not(loggedin))then loginplayer;
FFattack;
FFhpcheck;
Stopban;
RandomsCheck(0);
if FindMonsterFail = FindFail then LogoutSeq(0);
if (((Getsystemtime-CharStartTime)/1000)>(Players[CurrentPlayer].Integers[11] * 60)) then logoutSeq(1);
until(false);
end.