program BankProblems;

//  http://www.neopets.com/games/play.phtml?game_id=371

Const
   KeyDownUpSpeed = 1;  // The Higher the "KeyDownUpSpeed", the slower the script is.

Type
  Door = record
    X: Integer;
    Y: Integer;
    DoorChar: Byte;
    IsOpen: Boolean;
    IsMonster: Boolean;
    WhatMonster: String;
  End;

Var
   Doors: Array [0..5] Of Door;

Procedure DeclareStuff;

Var
   I: Integer;
Begin
  For I := 0 To 5 Do
  Begin
    Doors[I].X := 45 + I * 96;
    Doors[I].Y := 210;
  End;

  Doors[0].DoorChar := 83;
  Doors[1].DoorChar := 68;
  Doors[2].DoorChar := 70;
  Doors[3].DoorChar := 74;
  Doors[4].DoorChar := 75;
  Doors[5].DoorChar := 76;
End;

Function IsBadGuy(DN: Integer): Boolean;

Var
   TempColor: Array [0..11] Of Integer;
   I, x, y: Integer;
   H, S, L: Extended;
Begin
  TempColor[0] := GetColor(Doors[DN].X, Doors[DN].Y);
  TempColor[1] := GetColor(Doors[DN].X, Doors[DN].Y-1);
  TempColor[2] := GetColor(Doors[DN].X-1, Doors[DN].Y);
  TempColor[3] := GetColor(Doors[DN].X, Doors[DN].Y+1);
  TempColor[4] := GetColor(Doors[DN].X+1, Doors[DN].Y);
  TempColor[5] := GetColor(Doors[DN].X, Doors[DN].Y-2);
  TempColor[5] := GetColor(Doors[DN].X-2, Doors[DN].Y);
  TempColor[6] := GetColor(Doors[DN].X+1, Doors[DN].Y+2);
  TempColor[7] := GetColor(Doors[DN].X+2, Doors[DN].Y);
  TempColor[8] := GetColor(Doors[DN].X, Doors[DN].Y-3);
  TempColor[9] := GetColor(Doors[DN].X-3, Doors[DN].Y);
  TempColor[10] := GetColor(Doors[DN].X+1, Doors[DN].Y+3);
  TempColor[11] := GetColor(Doors[DN].X+3, Doors[DN].Y);

  For I := 0 To 11 Do
  Begin
    If SimilarColors(TempColor[I], 3055, 30) Then           // Red Devil
    Begin
      Result := True;
      Doors[DN].WhatMonster := 'Devil';
      Exit;
    End;
  End;

  For I := 0 To 11 Do
  Begin
    If SimilarColors(TempColor[I], 12841714, 40) Then           // Squirrle
    Begin
      ColorToHSL(TempColor[I], H, S, L);
      If (L > 60) And (L < 95) Then
         If (H > 5 ) And (H < 30) Then
          If FindColorTolerance(x, y, 4092580, Doors[DN].X, Doors[DN].Y-1,
                                Doors[DN].X + 20, Doors[DN].Y + 1, 40)
          Then
          Begin
            Result := True;
            Doors[DN].WhatMonster := 'Squirrle';
            Exit;
          End;
    End;
  End;

  For I := 0 To 11 Do
  Begin
    If SimilarColors(TempColor[I], 28756, 30) Then           // Green Monster
    Begin
      Result := True;
      Doors[DN].WhatMonster := 'Green Monster';
      Exit;
    End;
  End;

  For I := 0 To 11 Do
  Begin
    If SimilarColors(TempColor[I], 794793, 30) Then           // Mysterious Man
    Begin
      Result := True;
      Doors[DN].WhatMonster := 'Mysterious Man';
      Exit;
    End;
  End;

End;

Procedure HandleMonsters;

Var
   I, iX, iY, Time: Integer;

Begin
  For I := 0 To 5 Do
  Begin
    If IsBadGuy(I) Then
    Begin
      KeyDown(Doors[I].DoorChar);
      Wait(10 * KeyDownUpSpeed);
      KeyUp(Doors[I].DoorChar);
    End;
  End;
End;

Procedure AddToGold;

Begin
  If GetColor(388, 25) = 0 Then
  Begin
    Wait(100);
    KeyDown(32);
    Wait(10 * KeyDownUpSpeed);
    KeyUp(32);
  End;
End;

begin
  //ClearDebug;
  DeclareStuff;
  Repeat
    AddToGold;
    HandleMonsters;
    Wait(10);
  Until False;
end.
