SKy Scripter
2007-10-08 21:44:32
Types
In This tut you will learn types and gain a better knowledge of SCAR….
first off, i would like to start with This type , these types can be used for multi purpose
Like…. We can declare it… Startmenu
then we can check to see if it is equal to it…. in which case we can draw a
start menu… because we know where we are…
Also, you can use this to switch somthing for example :
Ok, you might want to know if its possible to have a type that equal more then one thing at a time! well guess what there is! this would be a Set Type These are extremly helpful in some cases…
notice how i put "gp := gp + [Endgame];" Well this is how you add on…
but remember this only works for types that are set
Another away to set a type is…
look at my example of a very good reason to why its helpful…
this is my CERTER Solver XD
Ok Next, Record Types, i would have to agree this is what might be the most helpful IN Scar :p.this allows you to hold more then one type in one type :D
Learn from my example below :
Ok For the next Type :) Arrays woot ! :p heres an example of Arrays..
Ok Just Learn from them, see easy. ;) Lol..
Cant think of any other at the moment..
Still Updating
In This tut you will learn types and gain a better knowledge of SCAR….
first off, i would like to start with This type , these types can be used for multi purpose
type
GamePos = (StartMenu, GamePlay, EndGame);
var
GP : GamePos;
begin
Gp := StartMenu;
if (Gp = StartMenu) then Writeln('Woot!, Yeah!');
end.
Like…. We can declare it… Startmenu
then we can check to see if it is equal to it…. in which case we can draw a
start menu… because we know where we are…
if (GP = StartMenu) then
begin
writlen('Drawwing Start Menu');
Drawmenu;
end;Also, you can use this to switch somthing for example :
program Switcher;
type
Tswitch = (s1, s2, s3, sdone);
var k : Integer;
s : Tswitch;
begin
repeat
k := k + 1;
case k of
1 : s := s1;
2 : s := s2;
3 : s := s3;
else
s := sdone;
end;
case s of
s1 : Writeln('S = S1 ');
s2 : writeln('S = S2 ');
s3 : writeln('S = S3 ');
sdone : Writeln('s = Done!');
end;
Wait(1000);
until false;
end.Ok, you might want to know if its possible to have a type that equal more then one thing at a time! well guess what there is! this would be a Set Type These are extremly helpful in some cases…
type
GamePos = (StartMenu, GamePlay, EndGame);
SetGamePos = set of GamePos;
var
GP : SetGamePos;
begin
Gp := [StartMenu];
Gp := Gp + [EndGame];
if (StartMenu in Gp) then Writeln('Woot!, Yeah!');
end.
notice how i put "gp := gp + [Endgame];" Well this is how you add on…
but remember this only works for types that are set
type
TSetboolean = set of boolean;
also The only types that can be set are types that are qual to certain values which would exclude strings, integers, and extended….Another away to set a type is…
S := [sbmenu, sbmenu2];
if (sbmenu in s) then Writeln('Your currently at the menu...');
look at my example of a very good reason to why its helpful…
this is my CERTER Solver XD
type
TCerterInven =(tcRing, tcKite, tcHelmet,
tcShears, tcBowl, tcFish, tcSword, tcSpade, tcAxe);
TCerter = set of TCerterInven;
const
DebugCerter = True;
{*******************************************************************************
function FindCerterScreen : Boolean;
by: SKy Scripter
Description: Returns true if find certer screen
*******************************************************************************}
function FindCerterScreen : Boolean;
var
Color : Integer;
begin
Color := GetColor(151, 151);
Result := (LoggedIn) and
(CountColor(Color, 151, 151, 251, 251) > 9000)
end;
{*******************************************************************************
function FindCerterPixels : TPointArray;
by: SKy Scripter
Description: Returns All Certer Object Pixels.
*******************************************************************************}
function FindCerterPixels : TPointArray;
var
P : TPointArray;
ColorData : TIntegerArray;
i, a, BackGround : Integer;
begin
if (not(FindCerterScreen)) then Exit;
BackGround := GetColor(151, 151);
FindColorsTolerance(P, BackGround, 151, 151, 376, 294, 255 * 3);
ColorData := GetColors(P);
SetArrayLength(Result, 30800); // 30800 >> as many point possible
for i := 0 to Length(P)-1 do
if (ColorData[i] <> BackGround) then
begin
Result[a] := P[i];
inc(a);
end;
SetArrayLength(Result, a);
end;
{*******************************************************************************
function FindCerterInfo(var Width, Height, Count : Integer) : Boolean;
by: SKy Scripter
Description: Returns The Width, Height and Pixel Count.
*******************************************************************************}
function FindCerterInfo(var Width, Height, Count : Integer) : Boolean;
var
MaxP, MinP : TPoint;
P : TPointArray;
l, I, C : Integer;
label Restart;
begin
Restart :
C := C + 1;
wait(100);
if (FindCerterScreen) then
begin
P := FindCerterPixels;
l := Length(P);
if (l = 0) then begin Writeln('Could Not Find Any Certer Pixels'); Exit; end;
MaxP := P[0];
MinP := P[l-1];
for I := 1 to l-2 do
begin
if (MaxP.x < P[i].x) then MaxP.x := P[i].x;
if (MaxP.y < P[i].y) then MaxP.y := P[i].y;
if (MinP.x > P[i].x) then MinP.x := P[i].x;
if (MinP.y > P[i].y) then MinP.y := P[i].y;
end;
Width := MaxP.x - MinP.x;
Height := MaxP.y - MinP.y;
Count := l;
Result := True;
end else
if (C < 15) then goto Restart else Exit;
end;
{*******************************************************************************
function findcerterquestions : TCerter;
by: SKy Scripter
Description: finds the certer questions.
*******************************************************************************}
function findcerterquestions : TCerter;
var
s : array of string;
i, c, x, y : Integer;
begin
s := ['pair', 'bowl', 'fish', 'sword',
'spade', 'axe', 'helmet', 'shield',
'ring'];
for i := 0 to Length(s)-1 do
if (FindText(x, y, s[i], NPCChars, 69, 41, 184, 136)) then
begin
case S[i] of
'pair' : Result := Result + [tcShears];
'bowl' : Result := Result + [tcBowl];
'fish' : Result := Result + [tcFish];
'sword' : Result := Result + [tcSword];
'spade' : Result := Result + [tcSpade];
'axe' : Result := Result + [tcAxe];
'helmet': Result := Result + [tcHelmet];
'shield': Result := Result + [tcKite];
'ring' : Result := Result + [tcRing];
end;
inc(c);
Writeln(inttostr(c)+'. ' + S[i]);
end;
end;
{*******************************************************************************
function SkyFindCerter : Boolean;
by: SKy Scripter
Description: Solves Certer random then returns true if solved.
*******************************************************************************}
function SkySolveCerter : Boolean;
var Width, Height, Count, n, l, i, x, y : Integer;
S : string;
Certers : TCerter;
begin
if (not(FindCerterScreen)) then Exit;
Certers := findcerterquestions;
while (N <> 1) do
begin
n := 0;
if (FindCerterScreen) then
begin
inc(l);
if (FindCerterInfo(Width, Height, Count)) then
begin
if (Height > Width) or (i > 15)
or (Width - Height < 4) then
begin
if (tcBowl in Certers) then
if (Abs(Count - 3400) <= 300) and (Abs(Width - Height) <= 15)
and (Width + Height > 100) then
begin
s := 'bowl';
inc(n);
end;
if (tcFish in Certers) then
if (Abs(Count - 2500) <= 200) and (Abs(Width + Height - 160) <= 10) then
begin
s := 'fish';
inc(n);
end;
if (tcSword in Certers) then
if (Abs(Count - 500) <= 200) and (Abs(Width + Height - 100) <= 15) then
begin
s := 'sword';
inc(n);
end;
if (tcSpade in Certers) then
if (Abs(Count - 1400) <= 200) and (max(width, height) > 70)
and (Abs(Width + Height - 156) <= 16) then
begin
s := 'spade';
inc(n);
end;
if (tcAxe in Certers) then
if (Abs(Count - 1300) <= 200) and (Abs(Width + Height - 135) <= 20)
and (max(width, height) > 80) then
begin
s := 'axe';
inc(n);
end;
if (tcHelmet in Certers) then
if (Abs(Count - 1100) <= 100) and (Abs(Width + Height - 80) <= 15) then
begin
s := 'helmet';
inc(n);
end;
if (tcKite in Certers) then
if (Abs(Count - 3200) <= 300) and (Abs(Width - Height) <= 15) then
if (Max(width, Height) > 69) then
begin
s := 'shield';
inc(n);
end;
if (tcShears in Certers) then
if (Abs(Count - 600) <= 400) and (Abs(Width - Height) >= 5) then
begin
s := 'pair'; // Width = 44 Height = 46
inc(n); // Object Count = 836
end;
if (tcRing in Certers) then
if (Abs(Count - 800) <= 200) and (Abs(Width - Height) <= 10) then
begin
s := 'ring';
inc(n);
end;
end else Inc(i);
if (S<>'') then
begin
if (DebugCerter) then
begin
Writeln('Width = ' + inttostr(Width) + ' Height = ' + inttostr(height));
Writeln('Object Count = ' + inttostr(Count));
Writeln('Certer = '+ S);
end;
if FindText(x, y, s, NPCChars, 69, 41, 184, 136) then
begin
Mouse(93, y, 15, 15, True);
Writeln('Solved, Certer!');
Result := True;
Exit;
end;
end;
end;
if (l = 20) then Exit;
end else Exit;
end;
Wait(100 + Random(1000));
Result := True;
end;
Ok Next, Record Types, i would have to agree this is what might be the most helpful IN Scar :p.this allows you to hold more then one type in one type :D
Learn from my example below :
type
GamePos = (StartMenu, GamePlay, EndGame);
SetGamePos = set of GamePos;
TGame = record
Pos : GamePos;
SetPos : SetGamePos;
Run : record
why : string;
b : boolean;
end;
end;
var
GP : TGame;
begin
Gp.setpos := [StartMenu];
Gp.setpos := Gp.setpos + [EndGame];
gp.run.why := 'Just Because!!';
gp.run.b := (EndGame in Gp.setpos);
if (gp.run.b) then Writeln( gp.run.why);
end.
Ok For the next Type :) Arrays woot ! :p heres an example of Arrays..
type
GamePixels = array of record
x, y, color : Integer;
end;
Ok Just Learn from them, see easy. ;) Lol..
Cant think of any other at the moment..
Still Updating