pascal Code:
{.Script Info:
# ScriptName = GE Arsonist
# Author = IceFire908
# Description = Burns down the grand exchange
# Version = 1.12
# Date = April 20, 2010
# Comments = Logs in first bank slot. Tinderbox in first
inventory spot, bank all other items.
Don't forget to declare your players (line 91)
# Requirements = SCAR 3.23 Beta
SRL Open Dev
SMART
More scripts can be found at Villavu.com
/Script Info}
program FireMaker;
{.Include SRL\SRL\Misc\SMART.SCAR}
{.Include SRL\SRL.SCAR}
{*******************************************************************************
BEGIN SETUP
*******************************************************************************}
const
YourStatsUserID = ''; // User UID from scriptmanager.freehostia.com
YourStatsPass = ''; // Your pass from scriptmanager.
AntiBanChance = 30; // Larger the less likely it is for Anti-Ban to occur.
BreakFor = 10; // Minutes you want to break for.
TakeBreaksEvery = 100; // Takes breaks every X amount of loads.
TakeBreaks = False; // Takes regular breaks.
PlayRandomSound = True; // Plays sound when a random is found.
Smart_World = 49; //109 Australia, 49 New Sealand, 118 Sweden
{*******************************************************************************
INDEXES
*******************************************************************************}
const // Don't change these
Script_Version = '1.12';
Ref_CurrentBuild = '604'; // Increase build # to current to overide server
Ref_MyPlayer = 'cn.n'; // Overrides
Ref_Animation = 'mb';
Ref_Animation_Fire = 733;
Script_Fires = 1;
Script_EXP = 2;
Script_Loads = 3;
Script_Randoms = 4;
Script_Starts = 5;
Player_EXP = 0;
Player_Log_Type = 0;
Player_Loads = 0;
Player_Fires_ToMake = 1;
Player_Fires_Made = 2;
Player_Trips = 3;
Player_Randoms = 4;
Player_InitLevel = 5;
Logs_Regular_EXP = 40;
Logs_Oak_EXP = 60;
Logs_Willow_EXP = 90;
Logs_Teak_EXP = 105;
Logs_Arctic_EXP = 125;
Logs_Maple_EXP = 135;
Logs_Mahogany_EXP = 157.5;
Logs_Eucalyptus_EXP = 193.5;
Logs_Yew_EXP = 202.5;
Logs_Magic_EXP = 303.8;
var
logDTM : integer;
{*******************************************************************************
procedure DeclarePlayers;
By: SRL Template
Description: Here you will need to set up your players
Player_Log_Type valid inputs:
________________________________________________________________
| Name | Input | Level Required | Experience |
| ---------------- ------------ --------------- ---------- |
| Logs | 'Regular' | 1 | 40 |
| Oak logs | 'Oak' | 15 | 60 |
| Willow logs | 'Willow' | 30 | 90 |
| Teak logs | 'Teak' | 35 | 105 |
| Arctic pine logs | 'Arctic' | 42 | 125 |
| Maple logs | 'Maple' | 45 | 135 |
| Mahogany logs | 'Mahogany' | 50 | 157.5 |
| Eucalyptus logs | 'Eucalyptus' | 58 | 193.5 |
| Yew logs | 'Yew' | 60 | 202.5 |
| Magic logs | 'Magic' | 75 | 303.8 |
----------------------------------------------------------------
*******************************************************************************}
procedure DeclarePlayers;
var
I: LongInt;
begin
HowManyPlayers := 1; // How many players declared?
CurrentPlayer := 0; // Number of player to start with.
NumberOfPlayers(HowManyPlayers);
RC_Masters := [];
for I := 0 to High(Players) do // Don't change these
begin
SetLength(Players[I].Integers, 6);
SetLength(Players[I].Strings, 1);
SetLength(Players[I].Extendeds, 1);
Players[I].Loc := 'Not yet started autoing.';
Players[I].BoxRewards := ['XP', 'oins'];
end;
with Players[0] do
begin
Name := ''; // Characters full RS username.
Pass := ''; // Characters RS password.
Pin := ''; // Bank Pin
Nick := ''; // 3 consecutive non-caps letters of char's RS username.
Skill := 'Firemaking'; // Skill to choose for genie lamp
Strings[Player_Log_Type] := 'Willow'; //See chart above
Integers[Player_Loads] := 99999; //Loads to do before switching players.
Integers[Player_Fires_ToMake] := 30000; //Amount of logs you want to burn
Active := True; // Use player?
end;
//<-- To use more players, uncomment this section and change HowManyPlayers
//to match with the current amount of players declared.
{
with Players[1] do
begin
Name := '';
Pass := '';
Pin := '';
Nick := '';
Skill := 'Firemaking';
Strings[Player_Log_Type] := 'Regular';
Integers[Player_Loads] := 10;
Integers[Player_Fires_ToMake] := 1000;
Active := True;
end;
}
{
with Players[2] do
begin
Name := '';
Pass := '';
Pin := '';
Nick := '';
Skill := 'Firemaking';
Strings[Player_Log_Type] := 'Regular';
Integers[Player_Loads] := 10;
Integers[Player_Fires_ToMake] := 1000;
Active := True;
end;
}
{
with Players[3] do
begin
Name := '';
Pass := '';
Pin := '';
Nick := '';
Skill := 'Firemaking';
Strings[Player_Log_Type] := 'Regular';
Integers[Player_Loads] := 10;
Integers[Player_Fires_ToMake] := 1000;
Active := True;
end;
}
{
with Players[4] do
begin
Name := '';
Pass := '';
Pin := '';
Nick := '';
Skill := 'Firemaking';
Strings[Player_Log_Type] := 'Regular';
Integers[Player_Loads] := 10;
Integers[Player_Fires_ToMake] := 1000;
Active := True;
end;
}
end;
{*******************************************************************************
END SETUP
*******************************************************************************}
{*******************************************************************************
GLOBAL VARIABLES
*******************************************************************************}
{*******************************************************************************
Text
*******************************************************************************}
var
Stats_UserID, Stats_Password, Stats_ScriptID, Stats_Link, CharAnim, MyPlayer: string;
{*******************************************************************************
Numbers
*******************************************************************************}
var
TimeStarted, Stats_LastTime, Animation_Fire, RSBuild: LongInt;
Total, TotalScript: array[1..5] of LongInt;
Stats_CustomVars: array [1..20] of Integer;
Stats_GlobalVars: array[1..24] of Integer;
{*******************************************************************************
Booleans
*******************************************************************************}
var
CurrentlyMemberWorld: Boolean;
{*******************************************************************************
STATS & SCRIPT START UP ROUTINES
*******************************************************************************}
{*******************************************************************************
procedure ScriptTerminate;
By: IceFire908.
Description: Fixes disguise and terminates script.
*******************************************************************************}
procedure ScriptTerminate;
begin
Disguise('SCAR Divi CDE');
FreeSRLBitmaps;
end;
{*******************************************************************************
procedure Stats_CheckOutput(s: string);
By: Nielsie95.
Description: ???
*******************************************************************************}
procedure Stats_CheckOutput(s: string);
var
i: Integer;
sa: TStringArray;
begin
sa := Explode(#10, s);
for i := 0 to High(sa) do
if (Trim(sa[i]) <> '') then
if StartsWith('ERROR(1)', sa[i]) then
begin
WriteLn('STATS: "' + sa[i] + '"');
Stats_UserID := '';
Stats_Password := '';
end
else if StartsWith('ERROR(2)', sa[i]) then
begin
WriteLn('STATS: "' + sa[i] + '"');
Stats_ScriptID := '';
end
else
WriteLn('STATS: "' + sa[i] + '"');
end;
{*******************************************************************************
function Stats_GetScriptInfo(out Version, News, Link: string; out OutDated: Boolean; out LastUpdate_HoursAgo: Integer): Boolean;
By: Nielsie95.
Description: Gets script info from the online server.
*******************************************************************************}
function Stats_GetScriptInfo(out Version, News, Link: string; out OutDated: Boolean; out LastUpdate_HoursAgo: Integer): Boolean;
var
Client: Integer;
s: string;
sa: TStringArray;
begin
Result := False;
if (Stats_ScriptID = '') then
Exit;
Client := InitializeHTTPClient(False, False);
ClearPostData(Client);
AddPostVariable(Client, 'do', 'getinfo');
AddPostVariable (Client, 'sID', Stats_ScriptID);
s := PostHTTPPageEx(Client, Stats_Link);
sa := Explode(#10'GLUE'#10, s);
if (Length(sa) = 5) then
begin
Result := True;
Version := sa[0];
News := sa[1];
Link := sa[2];
OutDated := sa[3] = '1';
LastUpdate_HoursAgo := StrToIntDef(sa[4], -1);
end
else
Stats_CheckOutput(s);
FreeHTTPClient(Client );
end;
{*******************************************************************************
procedure Stats_SendReport;
By: Nielsie95.
Description: Sends global vars to server.
*******************************************************************************}
procedure Stats_SendReport;
var
i, Client, Time: Integer;
s: string;
begin
if (Stats_UserID = '') and (Stats_Password = '') and (Stats_ScriptID = '') then
Exit;
Client := InitializeHTTPClient(False, False);
ClearPostData(Client);
AddPostVariable(Client, 'do', 'submit');
Time := (GetTimeRunning - Stats_LastTime) div 1000 div 60;
if (Time < 5) then
Time := 0
else
Stats_LastTime := GetTimeRunning;
AddPostVariable(Client, 'sTime', IntToStr(Time));
if (Stats_UserID <> '') and (Stats_Password <> '') then
begin
AddPostVariable(Client, 'uID', Stats_UserID);
AddPostVariable(Client, 'uPass', Stats_Password);
end
else
begin
AddPostVariable(Client, 'uID', '-1');
AddPostVariable(Client, 'uPass', '');
end;
if (Stats_ScriptID <> '') then
begin
AddPostVariable (Client, 'sID', Stats_ScriptID);
for i := Low(Stats_CustomVars) to High(Stats_CustomVars) do
begin
AddPostVariable(Client, 'rndCustom' + IntToStr(i), IntToStr(Stats_CustomVars[i]));
Stats_CustomVars[i] := 0;
end;
end
else
begin
AddPostVariable (Client, 'sID', '-1');
end;
for i := Low(Stats_GlobalVars) to High(Stats_GlobalVars) do
begin
case i of
1: s := IntToStr(SRL_Logs - Stats_GlobalVars[i]);
2: s := IntToStr(Banks - Stats_GlobalVars[i]);
3: s := IntToStr(RandSolved[rand_Death] - Stats_GlobalVars[i]);
else if ((i - 3) < Length(RandSolved) - 1 {for Death}) then
s := IntToStr(RandSolved[i - 3] - Stats_GlobalVars[i]);
end;
AddPostVariable(Client, 'rndGlobal' + IntToStr(i), s);
Stats_GlobalVars[i] := Stats_GlobalVars[i] + StrToInt(s);
end;
s := PostHTTPPageEx(Client, Stats_Link);
Stats_CheckOutput(s);
FreeHTTPClient(Client);
if (SRL_Procs[srl_OnSendStats] <> nil) then
SRL_Procs[srl_OnSendStats]();
end;
{*******************************************************************************
procedure Stats_SendAccountInfo;
By: Nielsie95.
Description: Sends your personal player info to server.
*******************************************************************************}
procedure Stats_SendAccountInfo;
var
i, Client: Integer;
Accounts: TStringArray;
begin
if (Stats_UserID = '') and (Stats_Password = '') then
Exit;
Client := InitializeHTTPClient(False, False);
ClearPostData(Client);
AddPostVariable(Client, 'do', 'setaccounts');
AddPostVariable(Client, 'uID', Stats_UserID);
AddPostVariable(Client, 'uPass', Stats_Password);
if (Stats_ScriptID <> '') then
AddPostVariable (Client, 'sID', Stats_ScriptID)
else
AddPostVariable (Client, 'sID', '-1');
SetLength(Accounts, HowManyPlayers);
for i := 0 to HowManyPlayers - 1 do
Accounts[i] := Implode('.|?stat?|.', [Players[i].Name, Players[i].Loc, IntToStr(Integer(Players[i].Active))]);
AddPostVariable(Client, 'accInfo', Implode(#10'ACC'#10, Accounts));
Stats_CheckOutput(PostHTTPPageEx(Client, Stats_Link));
FreeHTTPClient(Client);
end;
{*******************************************************************************
procedure Stats_ManageAccounts;
By: Nielsie95.
Description: ????
*******************************************************************************}
procedure Stats_ManageAccounts;
var
i, ii, Client: Integer;
s: string;
Accounts, Stats: TStringArray;
begin
if (Stats_UserID = '') and (Stats_Password = '') then
Exit;
Client := InitializeHTTPClient(False, False);
ClearPostData(Client);
AddPostVariable(Client, 'do', 'getaccounts');
AddPostVariable(Client, 'uPass', Stats_Password);
AddPostVariable(Client, 'uID', Stats_UserID);
s := PostHTTPPageEx(Client, Stats_Link);
Accounts := Explode(#10'ACC'#10, s);
for i := 0 to High(Accounts) do
begin
Stats := Explode('.|?stat?|.', Accounts[i]);
if (Length(Stats) = 3) then
begin
for ii := 0 to HowManyPlayers - 1 do
if (LowerCase(Players[ii].Name) = LowerCase(Stats[0])) then
begin
Players[ii].Loc := Stats[1];
Players[ii].Active := Stats[2] = '1';
Break;
end;
end
else
begin
Stats_CheckOutput(s);
Break;
end;
end;
FreeHTTPClient(Client);
stats_SendAccountInfo;
end;
{*******************************************************************************
procedure InitScript;
By: IceFire908.
Description: Does everything to start the script up.
*******************************************************************************}
procedure InitScript;
var
UseDefaultHooks: Boolean;
S: string;
I: integer;
begin
logDTM := DTMFromString('78DA6354636060286440034C609211CA63740' +
'1127904D418008972026AEC81443A01355A44AA29C1AF0600DC6A' +
'03DE');
SetScriptProp(SP_WriteTimeStamp,[true]);
// ClearDeBug;
WriteLn('Checking hooks...');
// Wait(1000);
S := GetPage('http://icefire908.netai.net/Hooks');
if (not (Pos('RSBuild', S) > 0)) then
begin
WriteLn('********WARNING could not retrieve reflection hooks from server.');
WriteLn('Script will run improperly if you are not using up to date hooks.');
UseDefaultHooks := True;
// Wait(4000);
end
else
if (StrToIntDef(Between('RSBuild = ', ';', S), 0) > StrToIntDef(Ref_CurrentBuild, 0)) then
begin
WriteLn('Hooks update available');
WriteLn('');
RSBuild := StrToIntDef(Between('RSBuild = ', ';', S), StrToIntDef(Ref_CurrentBuild, 0));
MyPlayer := Between('MyPlayer = ''', ''';', S);
CharAnim := Between('CharAnim = ''', ''';', S);
Animation_Fire := StrToIntDef(Between('Animation_Fire = ', ';', S), Ref_Animation_Fire);
WriteLn('RSBuild = ' + IntToStr(RSBuild) + ';');
WriteLn('MyPlayer = ''' + MyPlayer + ''';');
WriteLn('CharAnim = ''' + CharAnim + ''';');
WriteLn('Animation_Fire = ' + IntToStr(Animation_Fire) + ';');
WriteLn('');
WriteLn('Updated hooks! Hopefully they are up to date now.');
// Wait(3000);
end
else
begin
UseDefaultHooks := True;
WriteLn('Your hooks are probably up to date.');
// Wait(2000);
end;
if (UseDefaultHooks) then
begin
RSBuild := StrToIntDef(GetNumbers(Ref_CurrentBuild), -1);
MyPlayer := Ref_MyPlayer;
CharAnim := Ref_Animation;
Animation_Fire := Ref_Animation_Fire;
end;
// ClearDeBug;
Disguise('GE Arsonist by IceFire908');
for I := 1 to 5 do
TotalScript[I] := StrToIntDef(ReadINI('GEArsonist', IntToStr(I), AppPath + 'GE_Arson.INI'), 0);
{ WriteLn(' ___________________ _____ .__ __');
Wait(100);
WriteLn(' / _____/\_ _____/ / _ \_______ __________ ____ |__| _______/ |_');
Wait(100);
WriteLn('/ \ ___ | __)_ / /_\ \_ __ \/ ___/ _ \ / \| |/ ___/\ __\');
Wait(100);
WriteLn('\ \_\ \| \ / | \ | \/\___ ( <_> ) | \ |\___ \ | |');
Wait(100);
WriteLn(' \______ /_______ / \____|__ /__| /____ >____/|___| /__/____ > |__|');
Wait(100);
WriteLn(' \/ \/ \/ \/ \/ \/');
Wait(100);
WriteLn(' Grand Exchange Arsonist version ' + Script_Version + ' by IceFire908');
Wait(200);}
WriteLn('Total script starts : ' + IntToStr(TotalScript[Script_Starts]) + '|| ||Total fires made : ' + IntToStr(TotalScript[Script_Fires]) + '|| ||Total EXP gained : ' + IntToStr(TotalScript[Script_EXP]) + '||');
Smart_Server := Smart_World;
Smart_Members := False;
Smart_Signed := True;
Smart_SuperDetail := False;
SetUpSRL;
DeclarePlayers;
UseFindMod := False;
LogOutOnMod := False;
Stats_Link := 'http://scriptmanager.freehostia.com/submit.php';
Stats_ScriptID := '36';
Stats_UserID := YourStatsUserID;
Stats_Password := YourStatsPass;
SRLRandomsReport;
Stats_SendReport;
Stats_ManageAccounts;
// Wait(1000 + Random(1000));
end;
{*******************************************************************************
FIRE MAKING ROUTINES
*******************************************************************************}
{*******************************************************************************
procedure AntiBan(AntiChance: Integer);
By: IceFire908.
Description: Does an anti-ban at an anti-chance rate.
*******************************************************************************}
procedure AntiBan(AntiChance: Integer);
begin
if (not (LoggedIn)) then
Exit;
case (Random(5 * AntiChance)) of
0: RandomRClick;
1: if ((not (BankScreen)) and (not (PinScreen))) then
begin
HoverSkill('random', False);
GameTab(tab_Inv);
end;
2: SleepAndMoveMouse(500 + Random(5000));
3: PickUpMouse;
4: BoredHuman;
end;
end;
{*******************************************************************************
procedure Randoms(ScanFor: Integer; var IncTimeIn: LongInt);
By: IceFire908.
Description: Everything for randoms.
*******************************************************************************}
procedure Randoms(ScanFor: Integer; var IncTimeIn: LongInt);
var
S, Ab: string;
T: LongInt;
begin
T := GetSystemTime;
if (not (LoggedIn)) then
Exit;
LampSkill := Players[CurrentPlayer].Skill;
while (GetSystemTime - T < ScanFor) do
begin
if (LevelUp) then
begin
AntiBan(2);
Inc(Players[CurrentPlayer].Level[Skill_FireMaking]);
end;
if (FindNormalRandoms) then
begin
Inc(Total[Script_Randoms]);
Inc(Stats_CustomVars[Script_Randoms]);
Inc(TotalScript[Script_Randoms]);
WriteINI('GEArsonist', IntToStr(Script_Randoms), IntToStr(TotalScript[Script_Randoms]), AppPath + 'GE_Arson.INI');
Inc(Players[CurrentPlayer].Integers[Player_Randoms]);
SRLRandomsReport;
Stats_SendReport;
Stats_ManageAccounts;
if (PlayRandomSound) then
begin
S := 'Playing sound to alert script user.';
if (FileExists('C:\Windows\Media\TADA.WAV')) then
PlaySound('C:\Windows\Media\TADA.WAV')
else
WriteLn('C:\Windows\Media\TADA.WAV does not exist, you may want to change this path');
end;
if (LoggedIn) then
Ab := 'Performing anti-ban. ';
WriteLn('Random found! ' + Ab + S);
gametab(tab_inv);
if (Ab <> '') then
AntiBan(1);
if (UseRewardBox) then
begin
Wait(4000 + Random(1000));
FindLamp(LampSkill);
Wait(1000 + Random(1000));
end;
//Break;
end;
Wait(RandomRange(250, 500));
end;
IncEx(IncTimeIn, GetSystemTime - T);
end;
{*******************************************************************************
function CurrentChat: string;
By: IceFire908
Description: Returns the current chat you have open.
*******************************************************************************}
function CurrentChat: string;
var
Ch: TStringArray;
I: integer;
begin
Result := 'unknown';
for I := 0 to 6 do
if (not (InIntArray([5399409, 6965324, 5342384], GetColor(9 + (57 * I), 484)))) then
Break;
if (not (InRange(I, 0, 6))) then
Exit;
Ch := ['all', 'game', 'public', 'private', 'clan', 'trade', 'assist'];
Result := Ch[I];
end;
{*******************************************************************************
function CurrentChatStatus(Chat: string): string;
By: IceFire908
Description: Returns the current chat status.
*******************************************************************************}
function CurrentChatStatus(Chat: string): string;
var
St, Ch: TStringArray;
C: TIntegerArray;
I: Integer;
P: TPoint;
II: integer;
S: TBox;
begin
Result := 'unknown';
if (LowerCase(Chat) = 'all') then
begin
if (CurrentChat = 'all') then
Result := 'on'
else
Result := 'off';
Exit;
end;
C := [65280, 65535, 255, 16776960]
St := ['on', 'friends', 'off', 'hide'];
Ch := ['game', 'public', 'private', 'clan', 'trade', 'assist'];
if (not (InStrArrEx(LowerCase(Chat), Ch, I))) then
Exit;
S := IntToBox(71 + (57 * I), 492, 107 + (57 * I), 501);
for II := 0 to 3 do
if (FindColor(P.X, P.Y, C[II], S.X1, S.Y1, S.X2, S.Y2)) then
begin
if (I = 0) then
begin
case II of
0: Result := 'all';
1: Result := 'filter';
else
Result := St[II];
end;
Exit;
end;
Result := St[II];
Exit;
end;
end;
{*******************************************************************************
function SetChatEx(Chat, Status: string): Boolean;
By: IceFire908
Description: Sets the chat to desired status.
*******************************************************************************}
function SetChatEx(Chat, Status: string): Boolean;
var
Ch: TStringArray;
Cha, Sta: string;
C: TPoint;
I: Integer;
begin
Cha := LowerCase(Chat);
Sta := LowerCase(Status);
Result := (CurrentChatStatus(Cha) = Sta);
if (Result) then
Exit;
Ch := ['all', 'game', 'public', 'private', 'clan', 'trade', 'assist'];
if (not (InStrArrEx(Cha, Ch, I))) then
Exit;
C := Point(33 + (56 * I), 492);
if (((Cha = 'all') and (Sta = 'on')) or (Sta = 'view')) then
begin
if (not (CurrentChat = Cha)) then
Mouse(C.X, C.Y, 5, 5, True);
Result := True;
Exit;
end;
Mouse(C.X, C.Y, 5, 5, False);
Wait(200 + Random(100));
if (Sta = 'off') then
Sta := 'of';
Result := ChooseOption(Capitalize(Sta));
end;
{*******************************************************************************
function InChatMulti(Text: TStringArray; var OutPut: string): Boolean;
By: IceFire908
Description: Grabs Last Chat Line and performs checks on occurence of text
*******************************************************************************}
function InChatMulti(Text: TStringArray; var OutPut: string): Boolean;
var
s: string;
I: Integer;
begin
S := GetBlackChatMessage;
for I := High(Text) downto 0 do
begin
Result := (Pos(Text[I], s) > 0);
if (Result) then
begin
OutPut := Text[I];
Exit;
end;
end;
end;
{*******************************************************************************
procedure InitPlayer;
By: IceFire908.
Description: Sets up a user for autoing
*******************************************************************************}
procedure InitPlayer;
var
MemberLogs: TStringArray;
M: Boolean;
I: integer;
begin
if (not (LoggedIn)) then
begin
MemberLogs := ['Teak', 'Arctic', 'Mahogany', 'Eucalyptus', 'Magic'];
M := InStrArr(Players[CurrentPlayer].Strings[Player_Log_Type], MemberLogs, False);
if ((M) and (not (CurrentlyMemberWorld))) then
begin
Players[CurrentPlayer].WorldInfo := [True, -1, False];
CurrentlyMemberWorld := True;
end
else
if ((CurrentlyMemberWorld) and (not (M))) then
begin
Players[CurrentPlayer].WorldInfo := [False, -1, False];
CurrentlyMemberWorld := False;
end;
LogInPlayer;
end;
Wait(500 + Random(500));
if (not (LoggedIn)) then
Exit;
if (SRL_Logs < 1) then
SRL_Logs := 1;
Players[CurrentPlayer].Loc := 'Setting up...';
WriteLn('Setting up player...');
SetAngle(True);
MakeCompass('N');
Wait(500 + Random(500));
for I := 1 to 21 do
Players[CurrentPlayer].Level[I] := GetSkillLevel(I);
if (Players[CurrentPlayer].Integers[Player_Fires_Made] < 1) then
Players[CurrentPlayer].Integers[Player_InitLevel] := Players[CurrentPlayer].Level[Skill_FireMaking];
GameTab(tab_Inv);
Wait(200 + Random(100));
AntiBan(AntiBanChance);
Players[CurrentPlayer].Loc := 'GEB.';
WriteLn('Player is set up.');
SetChatEx('game', 'view');
Wait(50 + Random(100));
SetChatEx('game', 'all');
Wait(200 + Random(100));
if (TimeStarted = 0) then
TimeStarted := GetSystemTime;
end;
{*******************************************************************************
procedure WaitWhileGameLoads;
By: IceFire908
Description: Waits while game loads.
*******************************************************************************}
procedure WaitWhileGameLoads;
var
T: LongInt;
begin
T := GetSystemTime;
while ((GetColor(77, 16) = clWhite) and (not ((GetSystemTime - T) > 15000))) do
Wait(500);
end;
{*******************************************************************************
function Walk(X, Y, R, FD: Integer): Boolean;
By: IceFire908
Description: Simple walking function that combines some higher level functions.
*******************************************************************************}
function Walk(X, Y, R, FD: Integer): Boolean;
var
T: LongInt;
Dist : Integer;
begin
if (PointInBox(Point(X, Y), IntToBox(MMCX, MMCY, MMCX + 3, MMCY + 3))) then
Exit;
if (not (InCircle(X, Y, MMCX, MMCY, 75))) then
Exit;
Result := True;
WaitWhileGameLoads;
Dist := Distance(x,y,MMCX,MMCY);
Mouse(RandomRange(X - R, X + R), RandomRange(Y - R, Y + R), 0, 0, True);
SetRun(True);
Randoms(100 + Dist * RandomRange(10,15), T);
Wait(200 + Random(200));
WaitWhileGameLoads;
FFlag(FD);
WaitWhileGameLoads;
end;
{*******************************************************************************
function FindBankersMM(var P: TPoint): Boolean;
By: IceFire908.
Description: Finds a rotated DTM of the GE bankers.
*******************************************************************************}
function FindBankersMM(var P: TPoint): Boolean;
var
Angles: T2DExtendedArray;
dtmGE: Integer;
ptsg,pts,ptsw : TPointArray;
atpa : T2DPointArray;
pt : TPoint;
b : TBox;
label
endzor;
begin
result := false;
dtmGE := DTMFromString('78DA632C6662600865400179AD710CFF81342310FF0702C63CA09A10881C3354CD9F3F4C0C92503520C0980554E34B404D1A504D04013549403501F8D500008B89126A');
if (FindDTMsRotatedAlternating(dtmGE,pts,MMX1, MMY1, MMX2, MMY2, -Pi/8.0, Pi/8.0, Pi/90.0, angles)) then
begin
filterpointsdist(pts,0,73,MMCX,MMCY);
if length(pts) < 1 then
goto endzor;
FindColorsTolerance(ptsg,7829883,MMX1,MMY1,MMX2,MMY2,25);
FindColorsTolerance(ptsw,16711422 ,MMX1,MMY1,MMX2,MMY2,40);
AppendTPA(ptsg,ptsw);
atpa := FloodFillTPA(ptsg);
SortATPASize(atpa,true);
if length(ATPA) < 1 then
goto endzor;
Writeln(length(ATPA[0]));
if length(ATPA[0]) < 900 then
goto endzor;
b := GetTPABounds(ATPA[0]);
pt := Point((b.x2+b.x1)/2,(b.y2+b.y1)/2);
pt.x := pt.x + distance(pt.x,pt.y,mmcx,mmcy);
SortTPAFrom(pts,pt);
Writeln(b);
pt := Point((b.x2+b.x1)/2,(b.y2+b.y1)/2);
Writeln(Distance(pts[0].x,pts[0].y,pt.x,pt.y));
if Distance(pts[0].x,pts[0].y,pt.x,pt.y) > 30 then
goto endzor;
result := true;
p := pts[0];
end;
endzor:
freedtm(dtmGE);
writeln(result);
end;
{*******************************************************************************
function OpenGEBank: Boolean;
By: IceFire908.
Description: Opens the GE bank via the bankers, uses ATPA and lots of sorting.
*******************************************************************************}
function OpenGEBank: Boolean;
var
T, TT, TTT, I: LongInt;
TPAA: T2DPointArray;
TPA: TPointArray;
P: TPoint;
B: TBox;
begin
if (not (LoggedIn)) then
Exit;
WriteLn('Opening bank...');
T := GetSystemTime;
repeat
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.03, 0.23);
FindColorsSpiralTolerance(MSCX, MSCY, TPA, 1337487, MSX1, MSY1, MSX2, MSY2, 6);
SetColorSpeed2Modifiers(0.2, 0.2);
ColorToleranceSpeed(1);
if (Length(TPA) < 1) then
Continue;
TPAA := TPAToATPAEx(TPA, 20, 20);
if (Length(TPAA) < 1) then
Continue;
SortATPAFromFirstPoint(TPAA, Point(MSCX, MSCY));
TT := GetSystemTime;
for I := 0 to High(TPAA) do
begin
if ((GetSystemTime - T) > 15000) then
Break;
B := GetTPABounds(TPAA[I]);
P := MiddleTPA(TPAA[I]);
if (Distance(MSCX, MSCY, P.X, P.Y) < 16) then
Continue;
if (Length(TPAA[I]) < 21) then
Continue;
if ((not (InRange((B.X2 - B.X1), 5, 10))) or (not (InRange((B.X2 - B.X1), 5, 10)))) then
Continue;
MMouse(P.X, P.Y, 0, 0);
Wait(200 + Random(50));
if (InRange(CountColorTolerance(648165, 7, 7, 100, 25, 50), 100, 200)) then
begin
ClickMouse2(false);
Wait(200 + Random(50));
if (ChooseOptionMulti(['ank B', 'nk B', 'k Ba'])) then
begin
Wait(200 + Random(200));
WaitWhileGameLoads;
Flag;
WaitWhileGameLoads;
TTT := GetSystemTime;
repeat
Wait(100 + Random(50));
if (Length(Players[CurrentPlayer].Pin) = 4) then
if (PinScreen) then
begin
InPin(Players[CurrentPlayer].Pin);
Wait(2000 + Random(200));
ClickToContinue;
end;
Result := BankScreen;
until (((GetSystemTime - TTT) > 6000) or (Result));
if (Result) then
Break;
end;
end;
end;
until (((GetSystemTime - T) > 30000) or (Result));
if (Result) then
begin
WriteLn('Opened bank.');
Inc(Players[CurrentPlayer].Banked);
Inc(Banks);
FixBank;
Exit;
end;
WriteLn('Failed to open bank');
LogOut;
end;
{*******************************************************************************
procedure Banking;
By: IceFire908.
Description: Everything for banking
*******************************************************************************}
function Banking : boolean;
var
T: LongInt;
x,y : integer;
begin
result := false;
if (not (LoggedIn)) then
Exit;
if (InvCount = 28) then
begin
result := true;
Exit;
end;
WriteLn('Beggining everything for banking...');
Players[CurrentPlayer].Loc := 'Banking...';
if (not (OpenGEBank)) then
Exit;
Wait(500 + Random(160));
Deposit(2, 28, True);
if not FindDTM(logDTM,x,y,30, 85,75, 126) then
exit;
T := GetSystemTime;
while (((GetSystemTime - T) < 2000) and (InvCount < 2)) do
begin
Wait(300 + Random(160));
Mouse(53, 107, 5, 5, False);
Wait(200 + Random(100));
ChooseOption('draw-All');
while ((GetSystemTime - T) < 2000) and not FindBlackChatMessage('enough') do
Wait(200 + Random(50));
end;
WriteLn('Finished everything for banking.');
Players[CurrentPlayer].Loc := 'GEB.';
result := true;
end;
{*******************************************************************************
function Select(Slot: integer): integer;
By: IceFire908.
Description: Selects tinderbox or log, which ever is closer.
*******************************************************************************}
function Select(CurSlot,NextSlot: integer;var AlreadyPos : boolean): integer;
var
CurM, TB, SB, P: TPoint;
T: LongInt;
B: TBox;
I: integer;
begin
{ if AlreadyPos then
mouse(CurM.x,curm.y,random(2),random(2),true);}
GetMousePos(CurM.X, CurM.Y);
TB := ItemCoords(1);
SB := ItemCoords(CurSlot);
if (Distance(CurM.X, CurM.Y, SB.X, SB.Y) < Distance(CurM.X, CurM.Y, TB.X, TB.Y)) then
begin
Result := 1;
I := CurSlot;
end
else
begin
Result := CurSlot;
I := 1;
end;
MouseItem(I, True);
B := InvBox(I);
T := GetSystemTime;
while ((not (FindColor(P.X, P.Y, 16777215, B.X1, B.Y1, B.X2, B.Y2))) and ((GetSystemTime - T) < 2500)) do
Wait(100 + Random(50));
MouseItem(result,true);
end;
{*******************************************************************************
function Ref_GetAnimation: Integer;
By: IceFire908.
Description: Gets the current player animation using smart's reflection
*******************************************************************************}
function Ref_GetAnimation: Integer;
var
I: Integer;
begin
I := SmartGetFieldObject(0, MyPlayer);
Result := SmartGetFieldInt(I, CharAnim);
SmartFreeObject(I);
end;
{*******************************************************************************
procedure Ref_WaitWhileLighting(var IncTimeIn: LongInt);
By: IceFire908.
Description: Waits while your player is animating the fire lighting motion.
*******************************************************************************}
procedure Ref_WaitWhileLighting(var IncTimeIn: LongInt);
var
T: LongInt;
begin
T := GetSystemTime;
while ((Ref_GetAnimation = Animation_Fire) and ((GetSystemTime - T) < 30000)) do
begin
Randoms(150 + Random(50), IncTimeIn);
end;
end;
function NextLog(Exc: TIntegerArray; CurLog : integer) : integer;
var
x,y : integer;
pts : TPointArray;
i,j : integer;
begin
result := -1;
if not FindDTMs(logdtm,pts,MIX1,MIY1,MIX2,MIY2) then
exit;
GetMousePos(x,y);
SortTPAFrom(pts,point(x,y));
for j := 0 to high(pts) do
begin
i := CoordsToItem(pts[j].x,pts[j].y);
if not InIntArray(exc,i) and (i <> 0) and (i <> curlog) then
begin
result := i;
exit;
end;
end;
end;
function ClickTwoItems(item1,item2 : integer; ClickSecond : boolean) : boolean;
var
x,y,first,second : integer;
t : longword;
t1,t2 : TPoint;
begin
GetMousePos(x,y);
t1 := ItemCoords(item1);
t2 := ItemCoords(item2);
first := item1;
second := item2;
if Distance(x,y,t1.x,t1.y) > Distance(x,y,t2.x,t2.y) then
begin
first := item2;
second := item1;
end;
result := true;
T := GetSystemTime;
mouseitem(first,true);
while not ItemActivated(first) and ((GetSystemTime - T) < 2500) do
Wait(100 + Random(50));
if (GetSystemTime - t) >= 2500 then
result := false;
if result then
begin
if ClickSecond then
mouseitem(second,true)
else
mmouseitem(second);
end;
end;
function CurrentItem : integer;
var
x,y : integer;
begin
GetMousePos(x,y);
result := CoordsToItem(x,y);
end;
function ClickNextLog(Exc: TIntegerArray;var JustClick : boolean; var CurrLog,NexttLog : integer) : boolean;
var
Next,selItem : integer;
t : integer;
Clicked : boolean;
begin
Result := false;
Clicked := false;
if JustClick then
begin
selItem := ActivatedItem;
if (CurrentItem > 0) and (CurrentItem <> selItem) and (SelItem > 0) then
begin
ClickMouse2(true);
randoms(100 + random(50),t);
Clicked := true;
result := true;
CurrLog := NexttLog;
end else
begin
if SelItem < 1 then //No item is selected.. Just follow the normal method!
Writeln('No item is selected.. Yet JustClick was true, weird..')
else
begin
if selitem = 1 then //we just need to find a log!
begin
Writeln('Whoops! Mouse is not on the correct selected item, fixing that stuff now!');
t := NextLog(exc,-1);
if t = -1 then
exit;
mouseitem(t,true);
randoms(300+random(150),t);
clicked := true;
result := true;
currlog := t;
end else
begin //We just need to click the tinderbox
Writeln('Whoops! Mouse is not on the correct selected item, fixing that stuff now!');
mouseItem(1,true);
randoms(300+random(150),t);
clicked := true;
result := true;
currlog := nexttlog;
end;
end;
end;
end;
JustClick := false;
Next := NextLog(exc,currlog);
if next = -1 then
exit;
Result := ClickTwoItems(next,1,not Clicked);
if Clicked then
begin
nexttlog := next;
justclick := result;
exit;//We already clicked a log, so this time we just exit here to make sure it hovers on the nex tlog
end else
Randoms(100+random(50),t);
CurrLog := next;
Next := NextLog(exc,currlog);
if next = -1 then
exit;
result := ClickTwoItems(next,1,false);//We already clicked a log, so just hover the next one
justclick := result;
NexttLog := next;
end;
function SetFires : boolean;
var
TPA, bTPA: TPointArray;
Exps: TExtendedArray;
Logs: TStringArray;
Exc: TIntegerArray;
T, TT, W: LongInt;
OutPut: string;
CurrLog,NexttLog : integer;
Next,JustClick: Boolean;
P, WB: TPoint;
B: TBox;
CantLight : integer;
begin
if (not (LoggedIn)) then
Exit;
Result := true;
Players[CurrentPlayer].Loc := 'Setting fires...';
WriteLn('Setting fires...');
TPA := TPAFromBox(IntToBox(MMX1, MMY1, MMX2, MMY2));
bTPA := TPA;
FilterPointsPie(TPA, 45, 65, 55, 65, MMCX, MMCY);
FilterPointsPie(bTPA, 91, 135, 55, 65, MMCX, MMCY);
TPA := CombineTPA(TPA, bTPA);
P := TPA[Random(Length(TPA))];
WB := Point(P.X, (MMCY * 2) - P.Y);
Walk(P.X, P.Y, 0, 0);
Randoms(500 + Random(500), T);
CantLight := 0;
T := GetSystemTime;
JustClick := false;
repeat
if not ClickNextLog(exc,justclick,currlog,nexttlog) then
break;
if (Next) then
begin
Randoms(800 + Random(250), T);
Ref_WaitWhileLighting(T);
end
else
Randoms(650 + random(100), T);
Next := False;
TT := GetSystemTime;
OutPut := '';
while ((ExistsItem(currlog)) and ((GetSystemTime - TT) < 5000)) do
if (InChatMulti(['othing', 'appens', 'nteres', 'can', 'an''t', 'here'], OutPut)) then
case OutPut of
'othing', 'appens', 'nteres': begin
WriteLn('These are not logs!!');
SetLength(Exc, Length(Exc) + 1);
Exc[High(Exc)] := currlog;
Next := True;
Break;
end;
'can', 'an''t', 'here': begin
WriteLn('You can''t light a fire here!');
WriteLn('Moving position...');
JustClick := false;
if (WB.Y > MMCY) then
B := IntToBox(240, 110, 270, 130)
else
B := IntToBox(240, 240, 270, 260);
MouseBox(B.X1, B.Y1, B.X2, B.Y2, 3);
GetMousePos(P.X, P.Y);
Wait(200 + Random(50));
if (IsUpTextMultiCustom(['Walk', 'alk her', 'k here'])) then
Mouse(P.X, P.Y, 0, 0, True)
else
begin
Mouse(P.X, P.Y, 0, 0, False);
Wait(200 + Random(50));
if (not (ChooseOptionMulti(['Walk', 'alk her', 'k here']))) then
Walk(MMCX, MMCY - 10, 3, 0)
else
Flag;
end;
inc(CantLight);
Randoms(1000 + Random(500), T);
Next := True;
Break;
end;
end
else
Randoms(100, T);
if (CantLight > 10) then
begin
result := false;
exit;
end;
if (Next) then
Continue;
Inc(Total[Script_Fires]);
Inc(Stats_CustomVars[Script_Fires]);
Inc(TotalScript[Script_Fires]);
WriteINI('GEArsonist', IntToStr(Script_Fires), IntToStr(TotalScript[Script_Fires]), AppPath + 'GE_Arson.INI');
Inc(Players[CurrentPlayer].Integers[Player_Fires_Made]);
Exps := [Logs_Regular_EXP, Logs_Oak_EXP, Logs_Willow_EXP, Logs_Teak_EXP, Logs_Arctic_EXP,
Logs_Maple_EXP, Logs_Mahogany_EXP, Logs_Eucalyptus_EXP, Logs_Yew_EXP, Logs_Magic_EXP];
Logs := ['Regular', 'Oak', 'Willow', 'Teak', 'Arctic', 'Maple', 'Mahogany', 'Eucalyptus', 'Yew', 'Magic'];
if (InStrArrEx(Players[CurrentPlayer].Strings[Player_Log_Type], Logs, W)) then
Inc(Stats_CustomVars[W + 6]);
IncEx(Total[Script_EXP], Round(Exps[W]));
IncEx(Stats_CustomVars[Script_EXP], Round(Exps[W]));
IncEx(TotalScript[Script_EXP], Round(Exps[W]));
WriteINI('GEArsonist', IntToStr(Script_EXP), IntToStr(TotalScript[Script_EXP]), AppPath + 'GE_Arson.INI');
Players[CurrentPlayer].Extendeds[Player_EXP] := Players[CurrentPlayer].Extendeds[Player_EXP] + Exps[W];
Randoms(100 + Random(100), T);
Ref_WaitWhileLighting(T);
AntiBan(AntiBanChance * 4);
until (((GetSystemTime - T) > (5 * 60 * 1000)) or ((InvCount - Length(Exc)) < 2));
if (Length(Exc) > 3) and (InvCount > 3) then
if (InvCount - 1) = Length(Exc) then
begin
result := false;
exit;
end;
WriteLn('Back to bank...');
Randoms(800 + Random(500), T);
if (FindBankersMM(P)) then
Walk(P.X, P.Y, 0, 0)
else
begin
Walk(WB.X, WB.Y, 0, 0);
Randoms(800 + Random(500), T);
if (FindBankersMM(P)) then
Walk(P.X, P.Y, 0, 0)
else
begin
Walk(WB.X, WB.Y, 0, 0);
if (FindBankersMM(P)) then
Walk(P.X, P.Y, 0, 0)
else
result := false;
end;
end;
Randoms(700 + Random(300), T);
end;
{*******************************************************************************
function DecRet(E: Extended): Extended;
By: IceFire908.
Description: returns the decimal part of an extended value
*******************************************************************************}
{$IFDEF Simba}
function DecRet(E: Extended): Extended;
begin
Result := E - Floor(E);
end;
{$ENDIF}
{*******************************************************************************
function FloatToStrEx(E: Extended): string;
By: IceFire908.
Description: converts a float to smaller float string length wise.
*******************************************************************************}
function FloatToStrEx(E: Extended): string;
begin
Result := (IntToStr(Floor(E)) + Copy(FloatToStr(DecRet(E)), 2, 3));
end;
{*******************************************************************************
procedure ProgressReport;
By: IceFire908.
Description: An elaborate progrees report.
*******************************************************************************}
procedure ProgressReport;
var
WeAreActive, PlayerRand, PlayerRands: string;
I, T, TCounter: LongInt;
LI: Boolean;
begin
if (Total[Script_Loads] = 1) then
begin
Inc(Stats_CustomVars[Script_Starts]);
Inc(TotalScript[Script_Starts]);
WriteINI('GEArsonist', IntToStr(Script_Starts), IntToStr(TotalScript[Script_Starts]), AppPath + 'GE_Arson.INI');
end;
SRLRandomsReport;
Stats_SendReport;
Stats_ManageAccounts;
WriteLn('Displaying progress report...');
TCounter := (1 + ((GetSystemTime - TimeStarted) / 1000));
WriteLn('');
WriteLn('<------===== GE Arsonist ver ' + Script_Version + ' Progress Report =====------>');
WriteLn(' Script run # ' + IntToStr(TotalScript[Script_Starts]) + ' - ' + TheDate(1) + ' - ' + TheTime + '.');
WriteLn(' Total run time: ' + TimeRunning);
WriteLn(' Total fires made: ' + IntToStr(Total[Script_Fires]));
WriteLn(' Total fires using script made: ' + IntToStr(TotalScript[Script_Fires]));
WriteLn(' Fires per hour: ' + FloatToStrEx((3600 * Total[Script_Fires]) / TCounter));
WriteLn(' Total trips made: ' + IntToStr(Total[Script_Loads]));
WriteLn(' Total trips using script made: ' + IntToStr(TotalScript[Script_Loads]));
WriteLn(' Trips per hour: ' + FloatToStrEx((3600 * Total[Script_Loads]) / TCounter));
WriteLn(' Total FM EXP gained: ' + FloatToStr(Total[Script_EXP]));
WriteLn(' Total FM EXP gained using script: ' + FloatToStr(TotalScript[Script_EXP]));
WriteLn(' FM EXP per hour: ' + FloatToStrEx((3600 * Total[Script_EXP]) / TCounter));
if (TotalScript[Script_Randoms] > 0) then
begin
WriteLn(' Total randoms found: ' + IntToStr(Total[Script_Randoms]));
WriteLn(' Total randoms found using script: ' + IntToStr(TotalScript[Script_Randoms]));
WriteLn(' Randoms per hour: ' + FloatToStrEx((3600 * Total[Script_Randoms]) / TCounter));
end;
WriteLn(' Current player: ' + Capitalize(Players[CurrentPlayer].Name));
WriteLn(' Player currently: ' + Players[CurrentPlayer].Loc);
WriteLn('[ ----------------------------------------------------------------------- ]');
WriteLn('');
WriteLn('<------===== GE Arsonist ver ' + Script_Version + ' Player''s Report =====------>');
for I := 0 to (HowManyPlayers - 1) do
begin
PlayerRand := '';
PlayerRands := '';
if (Players[I].Active) then
WeAreActive := ' (Active) '
else
WeAreActive := ' (InActive)';
if (not (Players[I].Rand = '')) then
PlayerRand := ' -- Rand: ' + Players[I].Rand;
if (Players[I].Integers[Player_Randoms] > 0) then
PlayerRands := ' -- Randoms: ' + IntToStr(Players[I].Integers[Player_Randoms]);
WriteLn(' ' + Capitalize(Players[I].Name) + WeAreActive + ' -- Fires: ' + IntToStr(Players[I].Integers[Player_Fires_Made]) + ' ' + Players[I].Strings[Player_Log_Type] + ' logs -- Trips: ' + IntToStr(Players[I].Integers[Player_Trips]) + ' -- Loc: ' + Players[I].Loc);
WriteLn(' -- EXP: ' + FloatToStrEx(Players[I].Extendeds[Player_EXP]) + ' -- Banks: ' + IntToStr(Players[I].Banked) + ' -- FM LVL: ' + IntToStr(Players[I].Level[Skill_FireMaking]) + ' -- LVLs Gained: ' + IntToStr(Players[I].Level[Skill_FireMaking] - Players[I].Integers[Player_InitLevel]) + PlayerRand + PlayerRands);
end;
WriteLn('[ ----------------------------------------------------------------------- ]');
WriteLn('');
WriteLn('Displayed progress report.');
if (TakeBreaks) then
if (Total[Script_Loads] > 0) then
if ((Total[Script_Loads] mod TakeBreaksEvery) = 0) then
begin
T := GetSystemTime;
WriteLn(TheTime + ' Taking a break for ' + IntToStr(BreakFor) + ' minute(s)...');
LI := LoggedIn;
if (LI) then
LogOut;
Sleep(BreakFor * 60000);
WriteLn('Done breaking.');
if (LI) then
InitPlayer;
IncEx(TimeStarted, GetSystemTime - T);
end;
end;
{*******************************************************************************
MAIN LOOP
*******************************************************************************}
procedure BurnItDown;
var
IndividualLoads: LongInt;
begin
{$IFNDEF SRL_SMART}
WriteLn('Sorry but you need to use SMART for now.');
TerminateScript;
{$ENDIF}
InitScript;
repeat
IndividualLoads := 0;
if (AllPlayersInActive) then
Break;
if (Players[CurrentPlayer].Active) then
InitPlayer;
repeat
if Banking then
Players[CurrentPlayer].Active := SetFires
else
Players[CurrentPlayer].Active := false;
Players[CurrentPlayer].active := Players[CurrentPlayer].active and LoggedIn;
if (Players[CurrentPlayer].Active) then
begin
Inc(IndividualLoads);
Inc(Total[Script_Loads]);
Inc(Stats_CustomVars[Script_Loads]);
Inc(TotalScript[Script_Loads]);
WriteINI('GEArsonist', IntToStr(Script_Loads), IntToStr(TotalScript[Script_Loads]), AppPath + 'GE_Arson.INI');
Inc(Players[CurrentPlayer].Integers[Player_Trips]);
end;
if ((Players[CurrentPlayer].Integers[Player_Fires_Made] >=
Players[CurrentPlayer].Integers[Player_Fires_ToMake]) and (Players[CurrentPlayer].Active)) then
begin
Players[CurrentPlayer].Loc := 'Finished!';
Players[CurrentPlayer].Active := False;
LogOut;
end;
ProgressReport;
until ((IndividualLoads >= Players[CurrentPlayer].Integers[Player_Loads]) or (not (Players[CurrentPlayer].Active)));
if (AllPlayersInActive) then
Break;
NextPlayer(Players[CurrentPlayer].Active);
until (AllPlayersInActive);
WriteLn('All players exhausted.');
TerminateScript;
end;
begin
BurnItDown;
end.