mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
162 lines
5.3 KiB
ObjectPascal
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.
|