SCAR Code:
program New;
Function NearbyPointInArray(P: TPoint; Dist:Integer; a: TPointArray): Boolean;
Var
I: Integer;
Begin
For I := 0 To GetArrayLength(a) - 1 Do
If (Abs(P.x - a[i].x) <= Dist) And (Abs(P.y - a[i].y) <= Dist) Then
Begin
Result := True;
Exit;
End;
End;
Function RearrangeAndShortenArray(a: TPointArray): TPointArray;
Var
I: Integer;
Begin
For I := 0 To GetArrayLength(a) - 1 Do
If Not NearbyPointInArray(a[I], 14, Result) Then
Begin
SetArrayLength(Result, GetArrayLength(Result) + 1);
Result[GetArrayLength(Result) - 1] := a[I];
End;
End;
Function GetDamage(x, y: integer): String;
Begin
Result := GetTextAtEx(x, y, 0, StatChars, False, False, 0,
3, 16777215, 2, False, tr_Digits);
End;
Function GetDamageIn(x1, y1, x2, y2: LongInt): Array Of Integer;
Var
Width, Height, ClientBMP, I, TempH: LongInt;
Points, YATPA: TPointArray;
Begin
TempH := GetClientWindowHandle;
DisplayDebugImgWindow(Width, Height);
GetClientDimensions(Width, Height);
ClientBMP := BitmapFromString(Width, Height, '');
CopyClientToBitmap(ClientBMP, 0, 0, Width, Height);
SafeDrawBitmap(ClientBMP, GetDebugCanvas, 0, 0);
DisplayDebugImgWindow(Width, Height);
SetTargetBitmap(ClientBMP);
FindColorsTolerance(YATPA, 16777215, x1, y1, x2, y2, 0);
Points := ReArrangeAndShortenArray(YATPA);
SetArrayLength(Result, GetArrayLength(Points));
For I := 0 To GetArrayLength(Points) - 1 Do
Begin
Points[I].X := Points[I].X - 5;
Points[I].Y := Points[I].Y - 2;
FindColor(Points[I].X, Points[I].Y, 16777215, Points[I].X, Points[I].Y,
Points[I].X + 8, Points[I].Y + 5);
Points[I].X := Points[I].X - 3;
Points[I].Y := Points[I].Y - 1;
Try
Result[I] := StrToInt(Trim(GetDamage(Points[I].X, Points[I].Y)));
Except Result[I] := -1 End;
WriteLn(IntToStr(Result[I]));
FastSetPixel(ClientBMP, Points[I].X, Points[I].Y, 65280);
End;
SafeDrawBitmap(ClientBMP, GetDebugCanvas, 0, 0);
DisplayDebugImgWindow(Width, Height);
FreeBitmap(ClientBMP);
SetClientWindowHandle(TempH);
End;
Var
I1, I2: Integer;
begin
i1 := getsystemtime;
GetDamageIn(MSX1, MSY1, MSX2, MSY2);
i2 := getsystemtime;
writeln('time '+inttostr(i2-i1));
end.