cheat-engine/Cheat Engine/Tutorial/Unit3.pas

162 lines
5.3 KiB
ObjectPascal

unit Unit3;
{$MODE Delphi}
interface
uses
LCLIntf, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, Buttons, LResources;
type
TForm3 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Timer1: TTimer;
Timer2: TTimer;
ProgressBar1: TProgressBar;
SpeedButton1: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
health: integer;
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit4, Unit5;
resourcestring
rsStep3UnknownInitialValuePW = 'Step 3: Unknown initial value (PW=';
rsDead = 'Seems you''ve done it again! Let me get a replacement! (And restart your scan!)';
rsTryAgain3 = 'Step 3 isn''t really that hard. Just do a new scan, unkown initial value and then decreased value till you find it. Almost everyone gets past'
+' this one. Sure you want to quit?';
rsLOSER = 'BOO';
rsTutorialStep3=
'Ok, seeing that you''ve figured out how to find a value using exact value let''s move on to the next step.'+#13#10+
''+#13#10+
'First things first though. Since you are doing a new scan, you have to click on New Scan first, to start a new scan. (You may think this is straighforward, but you''d be surprised how many people get stuck on that step) I won''t be explaining this step again, so keep this in mind'+#13#10+
'Now that you''ve started a new scan, let''s continue'+#13#10+
''+#13#10+
'In the previous test we knew the initial value so we could do a exact value, but now we have a status bar where '+
'we don''t know the starting value.'+#13#10+
'We only know that the value is between 0 and 500. And each time you click ''hit me'' you lose some health. The '+
'amount you lose each time is shown above the status bar.'+#13#10+
''+#13#10+
'Again there are several different ways to find the value. (like doing a decreased value by... scan), but I''ll only '+
'explain the easiest. "Unknown initial value", and decreased value.'+#13#10+
'Because you don''t know the value it is right now, a exact value wont do any good, so choose as scantype '+
'''Unknown initial value'', again, the value type is 4-bytes. (most windows apps use 4-bytes)'+
'click first scan and wait till it''s done.'+#13#10+
''+#13#10+
'When it is done click ''hit me''. You''ll lose some of your health. (the amount you lost shows for a few seconds and '+
'then disappears, but you don''t need that)'+#13#10+
'Now go to Cheat Engine, and choose ''Decreased Value'' and click ''Next Scan'''+#13#10+
'When that scan is done, click hit me again, and repeat the above till you only find a few. '+#13#10+
''+#13#10+
'We know the value is between 0 and 500, so pick the one that is most likely the address we need, and add it to '+
'the list.'+#13#10+
'Now change the health to 5000, to proceed to the next step.';
procedure TForm3.FormCreate(Sender: TObject);
begin
memo1.lines.text:=rsTutorialStep3;
health:=random(500);
progressbar1.Min:=-2000;
progressbar1.Max:=-2000+health;
progressbar1.Position:=-2000+health;
memo1.Lines.Insert(0, rsStep3UnknownInitialValuePW+inttostr(419482)+')');
memo1.SelStart:=0;
font.size:=12;
end;
procedure TForm3.Button2Click(Sender: TObject);
var loss: integer;
begin
loss:=1+random(10);
dec(health,loss);
progressbar1.Position:=-2000+health;
if health<0 then
begin
showmessage(rsDead);
health:=random(500);
progressbar1.Min:=-2000;
progressbar1.Max:=-2000+health;
progressbar1.Position:=-2000+health;
end else
begin
timer2.Enabled:=false;
timer2.Interval:=1000;
timer2.enabled:=true;
label1.Visible:=true;
label1.Caption:='-'+IntToStr(loss);
end;
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
application.Terminate;
end;
procedure TForm3.Timer1Timer(Sender: TObject);
begin
if health=5000 then
begin
timer1.enabled:=false;
button1.Enabled:=true;
end;
end;
procedure TForm3.Timer2Timer(Sender: TObject);
begin
timer2.enabled:=false;
label1.caption:='';
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
hide;
form5:=tform5.create(self);
form5.Width:=width;
form5.Height:=height;
form5.show;
form5.left:=left;
form5.top:=top;
end;
procedure TForm3.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
canclose:=MessageDlg(rsTryAgain3, mtconfirmation, [mbyes, mbno], 0)=mryes;
end;
procedure TForm3.SpeedButton1Click(Sender: TObject);
begin
showmessage(rsLOSER);
button1.Click;
end;
initialization
{$i Unit3.lrs}
{$i Unit3.lrs}
end.