Iroki
2009-02-16 08:38:56
<!– BEGIN TEMPLATE: formanswers –>
manfromczech - SRL Member Application Form
manfromczech
What is the meaning to life?
Where you Referred to SRL? If yes, by whom?
Programming Knowledge
Other Communitys
How Long have You Played Runescape
Are you affilated in anyway with Jagex LTD?
No Comment
—————————————————–
Please write down a paragraph about Yourself.
You know everythink about me.
——————————————————
Please Post a Sample of your Work. Only SCAR Scripts Accepted
——————————————————
<!– END TEMPLATE: formanswers –>
manfromczech - SRL Member Application Form
manfromczech
What is the meaning to life?
Where you Referred to SRL? If yes, by whom?
Programming Knowledge
Other Communitys
How Long have You Played Runescape
Are you affilated in anyway with Jagex LTD?
No Comment
—————————————————–
Please write down a paragraph about Yourself.
You know everythink about me.
——————————————————
Please Post a Sample of your Work. Only SCAR Scripts Accepted
{
List of iteams:
'Dagger', 'Axe', 'Mace', 'Med', 'Nails', 'Arrow tips', 'Sword', 'bolts',
'knife', 'Lantern', 'limbs', 'Studs', 'Battleaxe', 'Warhammer', 'Chain',
'Kite', '2-h', 'skirt', 'legs', 'Scimitar', 'Longsword', 'Full helm',
'Square', 'Platebody'
}
program IrokiSmither;
//{.include SRL/SRL/Misc/Smart.scar}
{.include SRL/SRL.scar}
{.include SRL/SRL/Misc/Users.scar}
{.include SRL/SRL/Skill/Smithing.scar}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
type
MTime = record
TH, TM, TS: integer;
end;
TTime = record
TTL: integer;
TTS: string;
end;
TLoad = record
TInv: byte;
TMade: integer;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const
Version = '1.0';
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var
RunningTime, Loads: integer;
ThingsMakeing: array of string;
SmithLvl, TotalMade: array of integer;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure Signature;
var
SignString: array of string;
i: integer;
begin
SetLength(SignString, 8);
SignString[0] := ' __ __ __';
SignString[1] := '| |__ __ __ | | __ __ ____ ____ __ ____ _____| |_ ___';
SignString[2] := '| | | / _ \| |/ |__| / ___| __\ | /__| _ \ / ___|';
SignString[3] := '| | / |_| | < | _\__ \ <__| /| | |_| | |___ \';
SignString[4] := '|__|__|\____/|__|\__|__| |______/____/__| |__| __ /__|_____/';
SignString[5] := ' |__|';
SignString[6] := ' Presents... |__|';
SignString[7] := ' ~~ Iroki Smelter v' + Version + ' ~~';
ClearDebug;
for i := 0 to 5 do
begin
WriteLn(SignString[i]);
Wait(100);
end;
for i := 6 downto 5 do
begin
Wait(2000);
ReplaceDebugLine( 5, SignString[i]);
Wait(100);
ReplaceDebugLine( 5, SignString[i]);
if (i = 5) then
begin
WriteLn(SignString[7]);
Wait(4000);
end;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function CTime: MTime;
var
Time, H, M, S: integer;
begin
Time := TimeFromMark(RunningTime);
ConvertTime(Time, H, M, S);
Result.TH := H;
Result.TM := M;
Result.TS := S;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function TotalTime: TTime;
var
Time: array[0..2] of integer;
TStr: string;
begin
Time[0] := CTime.TH;
Time[1] := CTime.TM;
Time[2] := CTime.TS;
if (Time[0] = 0) and (Time[1] = 0) then TStr := IntToStr(Time[2]) else
if (Time[0] = 0) and (Time[1] <> 0) then TStr := (IntToStr(Time[1]) + 'm ' + IntToStr(Time[2])) else
if (Time[0] <> 0) then TStr := (IntToStr(Time[1]) + 'h ' + IntToStr(Time[1]) + 'm ' + IntToStr(Time[2]));
TStr := TStr + 's';
Result.TTS := TStr;
Result.TTl := Length(TStr);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure ProgressReport;
var
ProgString: array of string;
i: integer;
j, k, Lines: byte;
AddingStr: string;
begin
Lines := 4;
j := (28 - TotalTime.TTL);
for i := 0 to j do AddingStr := AddingStr + ' ';
SetLength(ProgString, 9 + HowManyPlayers*Lines);
ProgString[0] := '/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\';
ProgString[1] := '| Iroki Smelter v' + Version + ' |';
ProgString[2] := '+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+';
ProgString[3] := '| Running time: ' + TotalTime.TTS + AddingStr + '|';
AddingStr := TheDate(1);
j := (36 - Length(AddingStr));
for i := 0 to j do AddingStr := AddingStr + ' ';
ProgString[4] := '| Date: ' + AddingStr + '|';
ProgString[5] := '+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+';
for i := 0 to (HowManyPlayers - 1) do
begin
AddingStr := ' ';
for k := 0 to (12 - Length(Players[i].Name)) do AddingStr := AddingStr + ' ';
AddingStr := AddingStr + 'Smithing level: ' + IntToStr(SmithLvl[i]);
if (SmithLvl[i] < 10) then AddingStr := AddingStr + ' |' else
AddingStr := AddingStr + ' |';
ProgString[6 + i*Lines] := '| Player: ' + Players[i].Name + AddingStr;
AddingStr := IntToStr(TotalMade[i]) + ' ' + Players[i].Strings[1] + ' ' + Players[i].Strings[2] + '.';
j := Length(AddingStr);
for k := 0 to (32 - j) do AddingStr := AddingStr + ' ';
ProgString[7 + i*Lines] := '| Made: ' + AddingStr + '|';
AddingStr := Players[i].Loc;
j := Length(AddingStr);
for k := 0 to (14 - j) do AddingStr := AddingStr + ' ';
if (Players[i].Active) then AddingStr := AddingStr + 'Active: True |' else
AddingStr := AddingStr + 'Active: False |';
ProgString[8 + i*Lines] := '| Location: ' + AddingStr;
ProgString[9 + i*Lines] := '|~~~~ ~~~~|';
end;
ProgString[HowManyPlayers*Lines + 6] := '+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+';
ProgString[HowManyPlayers*Lines + 7] := '| Thanks for useing my script, post proggie. |';
ProgString[HowManyPlayers*Lines + 8] := '\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/';
ClearDebug;
for i := 0 to (8 + HowManyPlayers*Lines) do WriteLn(ProgString[i]);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure PlayerForm;
begin
WriteLn('Loading PlayerForm...');
SRLPlayerForm(True, [], ['Loads to do:'], ['Bank pin:', 'Bar name:', 'What to smelt:'], []);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function DTMBarCreating(BarName: string): integer;
var
MPoint: TDTMPointDef;
SPoint: array of TDTMPointDef;
DDTM: TDTM;
Color, iSP: integer;
begin
SetLength(SPoint, 10);
Color := clRed;
case BarName of
'bronze': Color := 2704730;
'iron': Color := 5921377;
'steel': Color := 8816272;
'mithril', 'mith': Color := 7293770;
'adamant', 'addy', 'adamantite': Color := 5137230;
'rune', 'runite': Color := 7826256;
end;
if (Color = clRed) then
begin
srl_Warn('DTMBarCreating', 'bad bar name ', Warn_AllVersions);
NextPlayer(False);
end;
MPoint.x := 144;
MPoint.y := 197;
MPoint.AreaSize := 0;
MPoint.AreaShape := 0;
MPoint.Color := Color;
MPoint.Tolerance := 30;
for iSp := 0 to 9 do
begin
SPoint[iSp].AreaSize := 0;
SPoint[iSp].AreaShape := 0;
SPoint[iSp].Color := 65536;
SPoint[iSp].Tolerance := 0;
end;
SPoint[0].x := 135; SPoint[1].x := 131; SPoint[2].x := 130; SPoint[3].x := 132;
SPoint[0].y := 196; SPoint[1].y := 200; SPoint[2].y := 205; SPoint[3].y := 206;
SPoint[4].x := 138; SPoint[5].x := 144; SPoint[6].x := 146; SPoint[7].x := 150;
SPoint[4].y := 208; SPoint[5].y := 210; SPoint[6].y := 209; SPoint[7].y := 205;
SPoint[8].x := 154; SPoint[9].x := 157;
SPoint[8].y := 201; SPoint[9].y := 198;
DDTM.MainPoint := MPoint;
DDTM.SubPoints := SPoint;
Result := AddDTM(DDTM);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure CheckLvl(Lvl: byte; BarType: string);
var
CBars, CLvl: byte;
begin
if not LoggedIn then Exit;
case BarType of
'bronze': CBars := 1;
'iron': CBars := 2;
'steel': CBars := 3;
'mithril', 'mith': CBars := 4;
'adamant', 'addy', 'adamantite': CBars := 5;
'rune', 'runite': CBars := 6;
end;
case Lvl of
1..14 : CLvl := 1;
15..29 : CLvl := 2;
30..49 : CLvl := 3;
50..69 : CLvl := 4;
70..84 : CLvl := 5;
85..99 : CLvl := 6;
end;
if (CBars > CLvl) then
begin
srl_Warn('CheckLvl', 'not high enought Smithing level to smith ' + BarType + ' things ', Warn_AllVersions);
NextPlayer(False);
Exit;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function CheckHammer(Whare: string): boolean;
var
x, y, HammerDTM: integer;
begin
if not LoggedIn then Exit;
HammerDTM := DTMFromString('78DA63746462600864644006C196DC0CFF813' +
'448F43F10305A02D5C4A1AA81C8C24820ED0754E345408D2D504D' +
'340135D64035A104D4D801D5F8E1570300C63F092B');
if (Whare = 'inv') then
begin
GameTab(4);
if FindDTM(HammerDTM, x, y, MIX1, MIY1, MIX2, MIY2) then Result := True;
FreeDTM(HammerDTM);
end else
if (Whare = 'bank') then
begin
if not BankScreen then Exit;
if FindDTM(HammerDTM, x, y, MSX1, MSY1, MSX2, MSY2) then
begin
Result := True
Mouse(x, y, 3, 3, True);
end else
begin
SearchBank('mmer');
if not FindDTM(HammerDTM, x, y, MSX1, MSY1, MSX2, MSY2) then
begin
FreeDTM(HammerDTM);
Exit;
end else
begin
Result := True;
Mouse(x, y, 3, 3, True);
end;
end;
FreeDTM(HammerDTM);
Wait(RandomRange(400, 700));
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure Walk(Destination: string);
var
DTM, x, y: integer;
begin
if not LoggedIn then Exit;
case Destination of
'Bank' : DTM := DTMFromString('78DA63AC616260306440017D1D010CFF81342' +
'310FF07024667A09A3854355F813805AA0604189B816A6C206C26' +
'B82A465435E140193D5473FEFC614251030074EE0D22');
'Anvil': DTM := DTMFromString('78DA632C6264600802622430A3299DE13F900' +
'689FE0702C62A20CB1C550D483605AA06CC5B046409A0AA314C91' +
'4055E3036459A0AA79FB9601558D1790A58C5F0D005FC40F9B');
end;
try
DTMRotated(DTM, x, y, MMX1, MMY1, MMX2, MMY2);
FreeDTM(DTM);
finally
Mouse(x, y, 0, 0, True);
FFlag(3);
except
srl_Warn('Walk', 'can''t walk to ' + Destination + ' ', Warn_AllVersions);
NextPlayer(False);
Exit;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function FindBBooth: boolean;
var
x, y, DTM: integer;
begin
if not LoggedIn then Exit;
DTM := DTMFromString('78DA6354616460E8634001C16EB20C46409A1' +
'1CA673C036415A1AA31CE934355F308C87A83AA462B1BCD1C6F20' +
'EB210306C050E3852ABF244504AEE63F100000C7DF0DC8');
if DTMRotated(DTM, x, y, MSX1, MSY1, MSX2, MSY2) then
begin
Mouse(x, y, 2, 2, False);
if ChooseOption('quic') then Result := True else
begin
Wait(RandomRange(700, 1100));
MMouse(x + RandomRange(-20, 20), y - Random(30), 0, 0);
end;
FreeDTM(DTM);
end else
begin
FreeDTM(DTM);
if OpenBankFast('veb') then Result := True;
end;
repeat
Wait(RandomRange(100, 300));
until PinScreen or BankScreen;
if PinScreen then
if not InPin(Players[CurrentPlayer].Pin) then
begin
srl_Warn('FindBBooth', 'wrong pin, next player ', Warn_AllVersions);
CloseBank;
LogOut;
NextPlayer(False);
Exit;
end;
Wait(RandomRange(100, 300));
FixBankTab;
FixBank;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TakeBars(Kind: string);
var
x, y, DTM: integer;
begin
if not LoggedIn then Exit;
DTM := DTMBarCreating(Kind);
if FindDTM(DTM, x, y, MSX1, MSY1, MSX2, MSY2) then
begin
Mouse(x, y, 5, 5, False);
Wait(RandomRange(400, 700));
ChooseOption('ll');
end else
begin
SearchBank('bar');
if FindDTM(DTM, x, y, MSX1, MSY1, MSX2, MSY2) then
begin
Mouse(x, y, 5, 5, False);
Wait(RandomRange(400, 700));
ChooseOption('ll');
end else
begin
srl_Warn('TakeBars', 'can''t find ' + Kind + ' bars ', Warn_AllVersions);
CloseBank;
NextPlayer(False);
end;
end;
FreeDTM(DTM);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function FindAnvil: Boolean;
var
x, y, i, DTM: integer;
TPA: TPointArray;
ATPA: T2DPointArray;
j: byte;
begin
if not LoggedIn then Exit;
DTM := DTMFromString('78DA6314646460A865400186BABA0C46409A1' +
'1CA67E407B20EA1AAB130314155330F48A4A1AA31D6E241557311' +
'48FC4455131B1B86AA260BC86A4655F3F7EF5FB89AFF400000634' +
'E0FB9');
if DTMRotated(DTM, x, y, MSX1, MSY1, MSX2, MSY2) then
begin
Mouse(x - 2, y + 5, 2, 2, False);
if ChooseOption('nvil') then Result := True else
begin
Wait(RandomRange(700, 1100));
ClickMouse(x + RandomRange(-20, 20), y - Random(30), True);
end;
FreeDTM(DTM);
end else
begin
FreeDTM(DTM);
FindColorsSpiralTolerance(x, y, TPA, 3487290, MSX1 + 100, MSY1 + 50, MSX2 - 100, MSY2 - 100, 10);
ATPA := SplitTPA(TPA, 15);
for i := 0 to High(ATPA) do
begin
for j := 0 to 3 do
begin
if MiddleTPAEX(ATPA[i], x, y) then
MMouse(x, y, 3, 3);
if IsUpText('nvil') then
begin
GetMousePos(x, y);
ClickMouse(x, y, False);
Wait(RandomRange(1000, 1500));
if ChooseOption('nvil') then Result := True else
begin
Wait(RandomRange(700, 1100));
ClickMouse(x + RandomRange(-20, 20), y - Random(30), True);
end;
if Result then Exit;
end;
end;
end;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function FromInv(Obj: string): TLoad;
var
k: byte;
r: integer;
begin
case Obj of
'Dagger', 'Axe', 'Mace', 'Med', 'Nails', 'Arrow tips', 'Sword', 'bolts',
'knife', 'Lantern', 'limbs', 'Studs', 'Battleaxe', 'Warhammer', 'Chain',
'Kite', '2-h', 'skirt', 'legs': k := 28;
'Scimitar', 'Longsword', 'Full helm', 'Square': k := 27;
'Platebody': k := 26;
end;
case Obj of
'Dagger', 'Axe', 'Mace', 'Med', 'Sword', 'Lantern': r := 27;
'Nails', 'Arrow tips': r := 405;
'Scimitar', 'Longsword', 'Full helm', 'Square': r := 27;
'Battleaxe', 'Warhammer', 'Chain', 'Kite', '2-h', 'skirt', 'legs': r := 28;
'knife': r := 135;
'Platebody': r := 5;
end;
Result.TInv := k;
Result.TMade := r;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function AllSmithed: boolean;
var
DTM, x, y: integer;
B: TBox;
begin
if not LoggedIn then Exit;
DTM := DTMFromString('78DA634C62606038CC8002A25C3519FE03694' +
'620FE0F048CE1986A20B2301248E701892304D46400895304D424' +
'0289F304D4440389B304D4840289D304D48400891304D4E402897' +
'DF8D50000D8081040');
B := InvBox(FromInv(Players[CurrentPlayer].Strings[2]).TInv);
if not FindDTM(DTM, x, y, B.x1, B.y1, B.x2, B.y2) then Result := True;
FreeDTM(DTM);
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure SmithIteam(Iteam: string);
var
BarMask, x, y: integer;
tries: byte;
begin
if not LoggedIn then Exit;
GameTab(4);
Players[CurrentPlayer].Loc := 'Anvil';
BarMask := DTMFromString('78DA63B462626078C48006189148201D0054F' +
'398801A37A09A7704D4B803D5DC21A0C614A8E6250135D640356F' +
'09A871206C17007D12082C');
if not FindDTM(BarMask, x, y, MIX1, MIY1, MIX2, MIY2) then
begin
FreeDTM(BarMask);
srl_Warn('SmithIteam', 'no bars in inventory ', Warn_AllVersions);
NextPlayer(False);
Exit;
end;
FreeDTM(BarMask);
Mouse(x + 5, y, 5, 5, True);
Wait(RandomRange(1000, 1500));
if not FindAnvil then
begin
srl_Warn('SmithIteam', 'can''t find anvil ', Warn_AllVersions);
NextPlayer(False);
Exit;
end;
repeat
Wait(RandomRange(100, 200));
inc(tries);
until SmithingScreen xor (tries > 5);
SmithItem(Iteam, 'All');
repeat
Wait(RandomRange(1000, 1500));
FindNormalRandoms;
until AllSmithed;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure SetUpPlayer;
begin
if not LoggedIn then LogInPlayer;
SetAngle(True);
MakeCompass('N');
ChatsOff;
SmithLvl[CurrentPlayer] := GetSkillInfo('Smithing', False);
TotalMade[CurrentPlayer] := 0;
Players[CurrentPlayer].Loc := 'Bank';
CheckLvl(SmithLvl[CurrentPlayer], Players[CurrentPlayer].Strings[1]);
if not CheckHammer('inv') then
begin
if FindBBooth then
begin
DepositAll;
if not CheckHammer('bank') then
begin
srl_Warn('SetUpPlayer', 'can''t find hammer ', Warn_AllVersions);
NextPlayer(False);
Exit;
end;
CloseBank;
end;
end;
end;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin
PlayerForm;
SetLength(ThingsMakeing, HowManyPlayers);
SetLength(SmithLvl, HowManyPlayers);
SetLength(TotalMade, HowManyPlayers);
{
SmartSetupEx(154, False, True, False);
SetTargetDC(SmartGetDC);
WriteLn('Loading SMART... it can take a while...');
Repeat
Wait(1000);
Until (SmartGetColor(253, 233) <> 1118604); }
SetUpSRL;
MarkTime(RunningTime);
Signature;
WriteLn('Remember to enable SMART when it loads.');
ActivateClient;
repeat
SetUpPlayer;
Loads := 0;
repeat
FindNormalRandoms;
Inc(Loads);
SetRun(True);
FindBBooth;
FindNormalRandoms;
TakeBars(Players[CurrentPlayer].Strings[1]);
Walk('Anvil');
FindNormalRandoms;
SmithIteam('');
FindNormalRandoms;
IncEx(TotalMade[CurrentPlayer], FromInv(Players[CurrentPlayer].Strings[2]).TMade);
Walk('Bank');
until LoggedIn or (Loads > Players[CurrentPlayer].Integers[1]);
until AllPlayersInactive;
ProgressReport;
end.——————————————————
<!– END TEMPLATE: formanswers –>