ShowerThoughts
2008-04-27 03:46:35
Hey, i made a Monk Killer + Healer this is the smart version i am pretty sure that you guys know how to rip it off.
What it does:
- killing monks
- healing
- Bone Burying(instant ban):p
- A good proggy to come i have to do level check etc but i am to lazy to do
that..
- Good Killing monks
if you are at a pretty empty world it works great
i used an account with 40 attack and 50 str and then it goes to fast so i guess an account from combat 10-25 is the best because then it will stay long at the monk.
known bugs:
i know it are many but i want it to make perfect :p
- DTMS sometimes not working
- have to make the proggy
- when a player logs in it does nothing for a few secs because it is checking tah DTMS
- when it is very full world and every other player has 1 monk it will keep running around to find one out of attack…
-somewhere in the script it stands there and waits and then goes working again(when empty world i say for the second time it works great)
- when next player logs in it logs out again? not sure if this is true but i've heard it
- The Player max time in minutes is not working :S
If you can help me or have a suggestion to add please tell!
Thank You!
i already had a 30 mins proggy then i quit it.
i think i am going to take out the ChecksDtm not sure..
Here is the Script:
What it does:
- killing monks
- healing
- Bone Burying(instant ban):p
- A good proggy to come i have to do level check etc but i am to lazy to do
that..
- Good Killing monks
if you are at a pretty empty world it works great
i used an account with 40 attack and 50 str and then it goes to fast so i guess an account from combat 10-25 is the best because then it will stay long at the monk.
known bugs:
i know it are many but i want it to make perfect :p
- DTMS sometimes not working
- have to make the proggy
- when a player logs in it does nothing for a few secs because it is checking tah DTMS
- when it is very full world and every other player has 1 monk it will keep running around to find one out of attack…
-somewhere in the script it stands there and waits and then goes working again(when empty world i say for the second time it works great)
- when next player logs in it logs out again? not sure if this is true but i've heard it
- The Player max time in minutes is not working :S
If you can help me or have a suggestion to add please tell!
Thank You!
i already had a 30 mins proggy then i quit it.
i think i am going to take out the ChecksDtm not sure..
Here is the Script:
Program LMAO;
{.include srl/srl/misc/smart.scar}
{.Include SRL/SRL.Scar}
{.Include SRL/SRL/Skill/Fighting.Scar}
Var
X, Y, MonksKilled, MaxPlayerTime, ProggyI : Integer;
WUpper, WLower:Boolean;
Const
{=========================]
Main Const
[=========================}
DetailedDebug = True;//True If You Want To See A Full Detailed Debug
Warning = False;//Let This...
{=========================]
Standard Const
[=========================}
MonkColor = 8300243;//Change This If Having Trouble Finding A Monk(3234692)
BoneColor = 13092814;
procedure DeclarePlayers;
begin
HowManyPlayers:=1;//Fil this in!
ProggyI:=HowManyPlayers;
CurrentPlayer:=0;
NumberOfPlayers(HowManyPlayers);
{==========================================]
NOTE: Only Fill in The Lines With Comments.
[==========================================}
Players[0].Name := '';
Players[0].Pass := '';
Players[0].Nick := '';
Players[0].Integers[0]:=100;//How Many Monks To Kill.
Players[0].Integers[1]:=60;//Seconds
Players[0].Integers[2]:=50;//Below Which Hp Percent, We Go Heal.
Players[0].Integers[3]:=15;//Minutes Before Switches To Next Player.
Players[0].Strings[1]:='StrenghtA';//Which Style? Attack, StrenghtA, StrenghtB, Defensive.
Players[0].Booleans[0]:=True;//True To Heal At Monks.
Players[0].Booleans[1]:=True;//True To Burry Bones.
//Let Those alone
Players[0].Loc:='Middle';
Players[0].Active := True;
Players[0].Integers[3]:=0;
{Players[1].Name := '';
Players[1].Pass := '';
Players[1].Nick := '';
Players[1].Integers[0]:=5;//Monks To Kill.
Players[1].Integers[1]:=70;//TimeToKillMonk In Seconds.
Players[1].Integers[2]:=50;//Below Which Hp Percent, We Go Heal.
Players[1].Integers[3]:=15;//Minutes Before Switches To Next Player.
Players[1].Strings[1]:='Attack';//Which Style? Attack, StrenghtA, StrenghtB, Defensive.
Players[1].Booleans[0]:=True;//True To Heal At Monks.
Players[0].Booleans[1]:=True;//To Burry Bones.
//Let Those alone
Players[1].Loc:='Middle';
Players[1].Active := True;
Players[1].Integers[3]:=0;}
end;
{===========================================================================================]
NOTE: END OF SETUP ONLY CHANGE STUFF BELOW IF YOU KNOW WHAT YOU ARE DOING!!!
[===========================================================================================}
Procedure HW(WaitTime:integer);
Begin
Wait(WaitTime)
End;
Procedure HWL(TextLine:String);
Begin
If DetailedDebug Then Writeln(TextLine);
End;
Function HUpText(Uptext:String):boolean;
Var
MaxTime:Integer;
Begin
MarkTime(MaxTime);
Repeat
Wait(1);
Result:=IsUpText(Uptext);
Until(TimeFromMark(MaxTime)>100) Or Result;
End;
Function HpBelow(Percent:integer):boolean;
Begin
Result:=HPPercent < Percent-Random(10);;
end;
Procedure HSetRun(BooleanX:Boolean);
Var
S:Integer;
ColorSign:String;
Begin
S := GetMMLevels('run', ColorSign);//Good Idea Dude Richard!
If (S > 30) Or HPBelow(Players[CurrentPlayer].Integers[2]) then SetRun(True) else SetRun(False);
End;
Procedure CheckDTMS;
Var
Upper, Lower:integer;
Begin
Upper := DTMFromString('78DA630C676260B0624001A971710CFF81342' +
'310FF0702C654A01A37881C33544D59F9010649A81A1060AC03AA' +
'71C7AD068C41E6A41350530B5493815F0D00F38C110A');
Lower := DTMFromString('78DA630C63626028624001A971710CFF81342' +
'310FF0702C654A01A37881C33544D59F9010649A81A1060AC03AA' +
'71C7AD068C41E6A41350530B5493815F0D0019301141');
If DTMRotated(Upper,X, Y, MMX1,MMY1,MMX2,MMY2)then WUpper:=True;
If DTMRotated(Lower,X, Y, MMX1,MMY1,MMX2,MMY2)then WLower:=True;
End;
Function AtMonastery:Boolean;//Will Check If The Character Is At Monks Or Not.
Var
Monastery:integer;
Begin
if Not LoggedIn Then Exit;
Monastery := DTMFromString('78DA63CC676260B06100034608C5B07DD36A8' +
'6FF50FE7F2060AC01AAF186C83141D54486CD609044D2C3980294' +
'F125A0260928A347404D2550461BBF1A001D4C1004');
Result:=DTMRotated(Monastery, X, Y, MMX1, MMY1, MMX2, MMY2);
FreeDTM(Monastery);
If Not Result then
begin
HWL('Location = Not At The Monastery');
Result:=FindSymbol(X, Y, 'Water');
If Result Then HWL('Location = Could Not Find DTM Clicked Water Symbol.');
End Else
HWL('Location = Monastery');
End;
Function ToMonastery(Where:string):Boolean;//Will Check If The Character Is At Monks Or Not.
Var
DTM:integer;
Begin
if Not LoggedIn Then Exit;
HSetRun(True);
Case LowerCase(Where) of
'middle' : DTM := DTMFromString('78DA63CC676260086640038C0CFFC12403C37' +
'F20604C01AA4982C8304355C4256D629084AA01EB4803AA7124A0' +
'A61EA8C699809A5AA09A64FC6A0021A90F1A');
'upper left' : DTM := DTMFromString('78DA632C6166607067644006FFFFFF67F80FA' +
'41921ECFF8C33816A82206A98A16AD2C256324842D58000631350' +
'2690809A46A04C01013533803285F8D5000026AE128E');
'lower left' :DTM := DTMFromString('78DA630C616260C86140038C0CFFC12403C37' +
'F20604C01AA4982C8304355C4256D629084AA01EB4803AA7124A0' +
'A61EA8C699809A5AA09A64FC6A001FDF0F18');
End;
Result:=DTMRotated(DTM, X, Y, MMX1, MMY1, MMX2, MMY2);
if Not result then Result:=FindSymbol(X, Y, 'Water');
If Not Result then HWL('Location = Not At The Monastery') Else HWL('Location = Monastery At The '+Where);
If Where='Upper Left' then X:= X - 2;
If Result Then
Begin
Mouse(X, Y, 0, 0,True);
FFlag(20);
End;
If Result then Players[CurrentPlayer].Loc:= Where;
HSetRun(False);
FreeDTM(DTM);
End;
Procedure OtherPlace(Opposite:Boolean);
begin
If Opposite Then
Begin
Case LowerCase(Players[CurrentPlayer].Loc) of
'middle':Case Random(3) of
0:If WUpper Then ToMonastery('Upper Left') else ToMonastery('Lower Left');
1:If WUpper Then ToMonastery('Upper Left') else ToMonastery('Lower Left');
2:If WLower Then ToMonastery('Lower Left') else ToMonastery('Upper Left');
3:If WLower Then ToMonastery('Lower Left') else ToMonastery('Upper Left');
end;
'lower left':Case Random(2) of
0:ToMonastery('Middle');
1:If WUpper Then ToMonastery('Upper Left') else ToMonastery('Lower Left');
2:ToMonastery('Middle');
End;
'upper left':Case Random(2) of
0:ToMonastery('Middle');
1:If WLower Then ToMonastery('Lower Left') else ToMonastery('Upper Left');
2:ToMonastery('Middle');
End;
End;
End else
Begin
Case LowerCase(Players[CurrentPlayer].Loc) of
'middle':Case Random(3) of
0:If WUpper Then ToMonastery('Upper Left') else ToMonastery('Lower Left');
1:If WUpper Then ToMonastery('Upper Left') else ToMonastery('Lower Left');
2:If WLower Then ToMonastery('Lower Left') else ToMonastery('Upper Left');
3:If WLower Then ToMonastery('Lower Left') else ToMonastery('Upper Left');
end;
'lower left':Case Random(4) of
0:If WUpper Then ToMonastery('Upper Left') else ToMonastery('Lower Left');
1:If WUpper Then ToMonastery('Upper Left') else ToMonastery('Lower Left');
2:ToMonastery('Middle');
3:ToMonastery('Middle');
End;
'upper left':Case Random(3) of
0:If WLower Then ToMonastery('Lower Left') else ToMonastery('Upper Left');
1:If WLower Then ToMonastery('Lower Left') else ToMonastery('Upper Left');
2:ToMonastery('Middle');
End;
End;
End;
If Not WLower And WUpper Then Logout;
End;
Function FindMonk:Boolean;//This Finds The Monk Using Tpa.
Var
MonkTpa: TpointArray;
Monk: T2DPointArray;
H, Hx, Hy, CTS, I, Timer:Integer;
Begin
MouseSpeed:=30;
Timer:=GetSystemTime;
if not LoggedIn Then Exit;
CTS := GetColorToleranceSpeed;
If not CTS = 2 Then ColorToleranceSpeed(2);
FindColorsSpiralTolerance(X, Y, MonkTPA, MonkColor, MSX1+30 , MSY1+30 , MSX2-30, MSY2-30 , 10);
Monk:= TPAtoATPAEx(MonkTPA, 20, 20);
H:=High(Monk);
For I := 0 To H Do
Begin
MiddleTPAEx(Monk[i], X, Y);
HWL('Took '+ IntToStr(GetSystemTime - Timer) +' MiliSecs To Find The Monk.');
If Not FindColorSpiralTolerance(Hx,HY,255,X-40,Y-40,X+40,Y+40,10) And
Not FindColorSpiralTolerance(Hx,HY,65280,X-40,Y-40,X+40,Y+40,20) Then
Begin
MMouse(X, Y, 0, 0);
Result:=HUpText('onk');
If Result Then Break;
If Not Result Then Wait(1000 + Random(500));
End;
End;
If Not result Then HWL('Monk Not Found.');
If Not result Then OtherPlace(False);
ColorToleranceSpeed(CTS);
MouseSpeed:=15;
End;
Function FindBone(MainScreen:Boolean):Boolean;//This Finds The Monk Using Tpa.
Var
MonkTpa: TpointArray;
Monk: T2DPointArray;
H, CTS, I, Timer:Integer;
Begin
MouseSpeed:=30;
Timer:=GetSystemTime;
if not LoggedIn Then Exit;
CTS := GetColorToleranceSpeed;
If not CTS = 2 Then ColorToleranceSpeed(2);
If MainScreen Then FindColorsSpiralTolerance(X, Y, MonkTPA, BoneColor, MSX1+100 , MSY1+100 , MSX2-100, MSY2-100 , 10) else FindColorsSpiralTolerance(X, Y, MonkTPA, BoneColor, MIX1 , MIY1 , MIX2, MIY2, 10);
Monk:= TPAtoATPAEx(MonkTPA, 15, 15);
H:=High(Monk);
For I := 0 To H Do
Begin
MiddleTPAEx(Monk[i], X, Y);
MMouse(X, Y, 0, 0);
Result:=HUpText('one');
If Result Then Break;
End;
ColorToleranceSpeed(CTS);
MouseSpeed:=15;
End;
Procedure Heal;//Will Heal At Monks.
Var
MaxTime:integer;
Begin
if Not LoggedIn Then Exit;
If Players[CurrentPlayer].Booleans[0]Then//If You Want To Get Healt When Fighting Then It Will Heal.
Begin
OtherPlace(True);
Repeat
If FindMonk Then
begin
Mouse(X, Y, 0, 0, False);
Wait(25+random(10));
If ChooseOption('alk') then
Begin
MarkTime(MaxTime)
Repeat
If FindTalk Then Break;
Until(TimeFromMark(MaxTime)>8000) or ClickToContinue;
If Not (TimeFromMark(MaxTime)>8000) Then
Begin
ClickToContinue;
FindNPCChatText('you heal me',ClickLeft);
ClickToContinue;
ClickToContinue;
ClickToContinue;
ClickToContinue;
ClickToContinue;
end;
end;
end;
FindNormalRandoms;
If InFight then OtherPlace(True);
Until Not HPBelow(99);
End;
End;
Procedure BurryBones;
Begin
Repeat
if FindBone(False) Then Mouse(X,Y,0,0,True);
Wait(1800+random(500));
Until Not FindBone(False);
End;
Function FightMonk:Boolean;
Var
MaxTime:integer;
Begin
if Not LoggedIn Then Exit;
MarkTime(MaxTime);
Repeat
if FindMonk Then
Begin
Case Random(2) of
0:Begin
Mouse(X,Y,0,0,False);
Hw(20+ Random(10));
Result:=ChooseOption('ttack');
End;
1:Begin
Mouse(X,Y,0,0,True);
Result:=FindColorTolerance(X, Y,255,X-10,Y-10,X+10,Y+10,5)
End;
end;
If InFight Then Break;
If Result Then Break;
end else
Wait(2500);
Until(TimeFromMark(MaxTime)>7500)
End;
Procedure KillMonk;
Var
MaxTime:integer;
Begin
If Not LoggedIn Then Exit;
If HpBelow(Players[CurrentPlayer].Integers[2]) then Heal;
If FightMonk Then
Begin
Wait(2500);
MarkTime(MaxTime);
Repeat
Wait(100);
Until (InFight)or(TimeFromMark(MaxTime)>10000);
MarkTime(MaxTime);
Repeat
Wait(100);
FindNormalRandoms;
Until (Not InFight) or HpBelow(Players[CurrentPlayer].Integers[2]) or (TimeFromMark(MaxTime)>Players[CurrentPlayer].Integers[1]*1000)
If Not LoggedIn Then Exit;
If Not InFight then MonksKilled:=MonksKilled + 1;
HWL(IntToStr(MonksKilled));
If HpBelow(Players[CurrentPlayer].Integers[2]) then Heal;
If Not InvFull Then
Begin
If FindBone(True) Then Mouse(X, Y, 0, 0, True);
FFlag(1);
Wait(500+random(250));
If Not InvFull Then If FindBone(True) Then Mouse(X, Y, 0, 0, True);
FFlag(1);
Wait(500+random(250));
end;
If InvFull Then If Players[CurrentPlayer].Booleans[1]Then BurryBones;
End;
End;
Procedure SetUpPlayer;
Var
TotalMonksKilled:Integer;
Begin
MonksKilled:=0;
TotalMonksKilled:=TotalMonksKilled + MonksKilled;
HWL(IntToStr(TotalMonksKilled)+' Monks Killed In Total(AllPlayers)');
Wait(1000);
LoginPlayer;
Wait(1000 + Random(500));
SetAngle(True);
MakeCompass('N');
FindNormalRandoms;
CheckDTMs;
GameTab(1);
Case LowerCase(Players[CurrentPlayer].Strings[1]) of
'attack': SetFightMode(1);
'strenghta':SetFightMode(2);
'strenghtb':SetFightMode(3);
'defensive':SetFightMode(4);
End;
GameTab(4);
Case Random(3) of
0:ToMonastery('Middle');
1:ToMonastery('Upper Left');
2:ToMonastery('Lower Left');
End;
End;
Procedure SetUpClient;
Var
MaxTime :Integer;
Begin
If Warning then
begin
MaxTime:= 0;
MarkTime(MaxTime);
ClearDebug;
Repeat
Writeln('');
Writeln('Make Sure That Your Accounts Are High Enough To Fight The Monks,');
Writeln('This Script Haves Healing But Level < 10s Will Die');
Writeln('');
wait(500);
ClearDebug;
Wait(500);
Until(timeFromMark(MaxTime)>2500);
ClearDebug;
Writeln('');
Writeln('Make Sure That Your Accounts Are High Enough To Fight The Monks,');
Writeln('This Script Haves Healing But Level < 10s Will Die');
Writeln('');
Wait(5000);
ClearDebug;
Writeln('To Turn This Warning Off Set Warning In The Main Const To False, Thank You.');
Writeln('If You Turn The Warning To Off(False) The Script Will Run');
Writeln('If You Do Not Know How Go Cry...');
Writeln('');
Writeln('');
Writeln('');
Writeln('');
Writeln('I Hope You Will Enjoy This Script!');
end else
DeclarePlayers;
ActivateClient;
End;
Function AllFalse: Boolean;
Var
I: Integer;
Begin
Result := True;
For I := 0 To High(Players) Do
If Players[CurrentPlayer].Active Then
Result := False;
End;
Procedure Switch(StatesLMAO:Boolean);
Begin
If ALLFalse Then
Begin
Writeln('ALL Players Are False, Thanks For Using My Script!');
TerminateScript;
End;
If StatesLMAO Then
Begin
HWL('Killed The Amount Of Monks Requested Next Player or Ran For The Time Requested.');
NextPlayer(True);
SetUpPlayer;
End Else
Begin
HWL('Error! NextPlayer False')
NextPlayer(False);
SetUpPlayer;
End;
End;
Procedure Proggy(Detailed:boolean);
Begin
If Not Detailed then
Begin
Writeln('');
Writeln('');
Writeln('Script Ran For = '+TimeRunning);
Writeln('Monks Killed = '+IntToStr(MonksKilled));
Writeln('');
Writeln('');
Disguise('Monks Killed = '+IntToStr(MonksKilled));
End else
If Detailed Then
Begin
Writeln('//////////////////////////////////////////////');
Writeln('// Script Ran For = '+TimeRunning);
Writeln('// Monks Killed = '+IntToStr(MonksKilled));
Writeln('// Player 1 Gained :');
Writeln('// Att Levels =');
Writeln('// Str Levels =');
Writeln('// Def Levels =');
If Not ProggyI > 1 Then Writeln('/////////////////////////////////////////////');
If Not ProggyI > 1 Then Exit;
Writeln('// Player 2 Gained :');
Writeln('// Att Levels =');
Writeln('// Str Levels =');
Writeln('// Def Levels =');
If Not ProggyI > 2 Then Writeln('/////////////////////////////////////////////');
If Not ProggyI > 2 Then Exit;
Writeln('// Player 3 Gained :');
Writeln('// Att Levels =');
Writeln('// Str Levels =');
Writeln('// Def Levels =');
If Not ProggyI > 3 Then Writeln('/////////////////////////////////////////////');
If Not ProggyI > 3 Then Exit;
Writeln('// Player 4 Gained :');
Writeln('// Att Levels =');
Writeln('// Str Levels =');
Writeln('// Def Levels =');
If Not ProggyI > 4 Then Writeln('/////////////////////////////////////////////');
If Not ProggyI > 4 Then Exit;
Writeln('// Player 5 Gained :');
Writeln('// Att Levels =');
Writeln('// Str Levels =');
Writeln('// Def Levels =');
Writeln('// ');
End;
Disguise('Monks Killed = '+IntToStr(MonksKilled));
End;
{=========================]
MainLoop
[=========================}
Begin
SmartSetupEx(10, false, True);
Wait(1000);
SetTargetDC(SmartGetDC);
While not(SmartReady) do Wait(100);
SetUpSRL;
SetUpClient;
SetUpPlayer;
Repeat
MarkTime(MaxPlayerTime);
Repeat
If Not Loggedin Then Break;
//If Loggedin Then If GetPlayers >
KillMonk;
Proggy(False);
Until (Not LoggedIn)or (MonksKilled > (Players[Currentplayer].Integers[0]))or (TimeFromMark(MaxPlayerTime)>Players[Currentplayer].Integers[2]*60000+Random(60000));
If (MonksKilled > (Players[Currentplayer].Integers[0]))or (TimeFromMark(MaxPlayerTime)>Players[Currentplayer].Integers[2]*60000) Then Switch(True);
If Not LoggedIn Or Not (MonksKilled > (Players[Currentplayer].Integers[0]))or (TimeFromMark(MaxPlayerTime)>Players[Currentplayer].Integers[2]*60000) Then Switch(False);
Proggy(True);
Until(AllFalse);
If AllFalse Then Writeln('All Players False!');
If AllFalse Then TerminateScript;
End.