SRL Archive - OSR Help

How Are These DTM's Not Being Freed....


PatDuffy

2012-01-14 23:03:02

Well they keep building up in memory, and I have no idea how they are not being freed….

The only place I use them.
function AttackAv:Boolean;
var
x,y,Con:Integer;
aFound:Extended;
begin
if not LoggedIn then
Exit;
Av_Top:=DTMFromString('mLgAAAHicY2JgYOgH4l4gbgfifCCuqiplCHbTY+ACskGYEYoZGACA7ARb');
Av_Back:=DTMFromString('mQwAAAHicY2ZgYJjAyMDQCMRLgbgQyM8G4iwgXrduGUN5hj9DQoQXAz+QD8OMSBgIADlzB2U=');
Av_Wing:=DTMFromString('mWAAAAHicY2FgYFBjZGBQB2J7IFYB4kSgWBAQZwFxKRCHBjgxFKZ5M1QWxjIkhJox8APFkDEjGgYBAF7nBsY=');
SetDTMName(Av_Top,'Av Top');
SetDTMName(Av_Back,'Av Back');
SetDTMName(Av_Wing,'Av Wing');

if FindDTMRotated(Av_Top,x,y,MSX1,MSY1,MSX2,MSY2,-Pi,Pi,Pi/30,aFound) or
FindDTMRotated(Av_Back,x,y,MSX1,MSY1,MSX2,MSY2,-Pi,Pi,Pi/30,aFound) or
FindDTMRotated(Av_Wing,x,y,MSX1,MSY1,MSX2,MSY2,-Pi,Pi,Pi/30,aFound) then
begin
HumanMMouse(x,y,4,4);
Mouse(x,y,0,0,false);
if ChooseOption('ians') then
if DidRedClick then
begin
Writeln('Found Av');
Result:=True;
Miss:=False;
FreeDTM(Av_Top);
FreeDTM(Av_Back);
FreeDTM(Av_Wing);
Exit;
end;
if DidYellowClick then
Writeln('missed av');
end else
begin
Result:=False;
FreeDTM(Av_Top);
FreeDTM(Av_Back);
FreeDTM(Av_Wing);
Inc(Con);
if (Con = 1) then
MakeCompass(135);
if (Con > 1) then
begin
Con:=0;
MakeCompass(310);
end;
Exit;
end;
end;

After ~40 minutes of running I get

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
=+=+=+ Auto Aviansie Pro 1.0 by PatDuffy
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Time Running: 49 Minutes and 9 Seconds
Cash Gained: 163200
Cash/Hour: 195840
Range Exp Gained: 18300
Range/Hour: 21960
SRL_Stats: Wrong info for variable
Successfully executed.
The following DTMs were not freed: [Av Wing, Av Back, Av Top, Av Back, Av Wing, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Back, Av Wing, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Top, Av Back, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Top, Av Back, Av Wing, Av Wing, Av Back, Av Top, Av Wing, Av Back, Av Top, Monk, Sword, Peach]

There is also a spoiler for my new script hidden above that spam.

Any help would be appreciated….

Dgby714

2012-01-14 23:10:30

Use a try..finally and they should all ways be freed. (unless there is an exception inside the try.)

function AttackAv: boolean;
var
x, y, Con: integer;
aFound: extended;
begin
Result := False;
if (not (LoggedIn())) then
Exit;

Av_Top := DTMFromString('mLgAAAHicY2JgYOgH4l4gbgfifCCuqiplCHbTY+ACskGYEYoZGACA7ARb');
Av_Back := DTMFromString('mQwAAAHicY2ZgYJjAyMDQCMRLgbgQyM8G4iwgXrduGUN5hj9DQoQXAz+QD8OMSBgIADlzB2U=');
Av_Wing := DTMFromString('mWAAAAHicY2FgYFBjZGBQB2J7IFYB4kSgWBAQZwFxKRCHBjgxFKZ5M1QWxjIkhJox8APFkDEjGgYBAF7nBsY=');

try
SetDTMName(Av_Top, 'Av Top');
SetDTMName(Av_Back, 'Av Back');
SetDTMName(Av_Wing, 'Av Wing');

if (FindDTMRotated(Av_Top, x, y, MSX1, MSY1, MSX2, MSY2, -Pi, Pi, Pi / 30, aFound) or
FindDTMRotated(Av_Back, x, y, MSX1, MSY1, MSX2, MSY2, -Pi, Pi, Pi / 30, aFound) or
FindDTMRotated(Av_Wing, x, y, MSX1, MSY1, MSX2, MSY2, -Pi, Pi, Pi / 30, aFound)) then
begin
HumanMMouse(x, y, 4, 4);
Mouse(x, y, 0, 0, false);
if (ChooseOption('ians')) then
if (DidRedClick()) then
begin
Writeln('Found Av');
Result := True;
Miss := False;
end else
if (DidYellowClick) then
Writeln('Missed av');
end else
begin
Inc(Con);
if (Con = 1) then
MakeCompass(135);
if (Con > 1) then
begin
Con := 0;
MakeCompass(310);
end;
end;
finally
FreeDTM(Av_Top);
FreeDTM(Av_Back);
FreeDTM(Av_Wing);
end;
end;

PatDuffy

2012-01-14 23:12:56

I didn't even think of using a "Try" there…..thanks!