Bot do gry Arma 2 DayZ Epoch w C++

DayZ Epoch LockDayZ Epoch do jeden z modów do gry Arma 2 (zaawansowanego symulatora pola walki) wprowadzający m.in. możliwość tworzenia budynków a w tym i zabezpieczania drzwi kłódką z trzy cyfrowym kodem dostępu.

Po trzykrotnym wprowadzeniu błędnego kodu gra blokuje możliwość przeprowadzania kolejnych prób na 10 sekund. Postanowiłem zautomatyzować „łamanie” kłódek.

 

Algorytm łamania kłódki

Kłódka wygląda tak:

DayZ Door Lock

Proces sprawdzania kodu (przez człowieka):

  1. Podejście do drzwi.
  2. Klik środkowego klawisza myszy.
  3. Scroll myszy w dół.
  4. Klik środkowego klawisza myszy.
  5. Wprowadzenie wybranego kodu poprzez klik lewym przyciskiem myszy na każdym z trzech wierszy cyfr.
  6. Klik w napis „unlock”.
    1. Jeśli kłódka jest ciągle widoczna powrót do punktu 5.
    2. Jeśli kłódka znikła
      1. Drzwi ciągle zamknięte
        1. Należy odczekać 10 sekund na zwolnienie blokady możliwości wprowadzenie ponownych kodów
        2. Powrót do punktu 2.
      2. Drzwi otwarte – koniec

Koncepcja bota

Postanowiłem, że bot będzie wykonywał tylko symulacje odpowiednich zdarzeń wykonywanych standardowo przez gracza za pomocą myszki i klawiatury. Operacje wykonywane przez program:

  1. Kliknięcie lewym przyciskiem myszy.
  2. Kliknięcie środkowym przyciskiem myszy.
  3. Scroll środkowym przyciskiem myszy.
  4. Pobranie aktualnej pozycji wskaźnika myszy.
  5. Przesunięcie wskaźnika myszy pod wskazaną pozycję.
  6. Pobranie koloru piksela w miejscu wskaźnika myszy.

Pobieranie kolorów wykorzystam do weryfikacji widoczności kłódki (zgodność koloru). Przed uruchomieniem procesu łamania kodu użytkownik zostanie poproszony o wskazanie kilku kluczowych punktów w obrębie kłódki.

Program rozpoczyna z pracę z bieżącym kodem 0 0 0. Ustawienie pozycji na np. 123 jest równoważne z wykonanymi operacjami:

  1. Jeden klik w wierszy pierwszym.
  2. Dwa kliki w wierszu drugim.
  3. Trzy kliki w wierszu trzecim.

Aby od tego stanu kłódki przejść do kolejnej liczby 1 2 4 należy tylko jeden raz kliknąć cyfrę w wierszu trzecim. Dlatego konieczne jest zapamiętywanie bieżącego stanu.

Ważną czynnością którą trzeba oprogramować jest obsługa znikania kłódki po kilku nieudanych próbach odgadnięcia kodu. Po ponownym jej aktywowaniu program musi przywrócić poprzedni stan cyfr.

Algorytm programu:

  1. Podejście do drzwi.
    1. Warunek początkowy startu programu.
    2. Wyzerowanie licznika kodów.
    3. Pobranie współrzędnych pozycji:
      1. Przycisku „unlock”
      2. Pierwszej cyfry dla każdego z trzech rzędów.
      3. Najbardziej czarnego miejsca znajdującego się w kłódce, zapamiętanie koloru piksela w tym miejscu
  2. Klik środkowego klawisza myszy.
    Wysłanie zdarzenia myszki
  3. Scroll myszy w dół.
    Wysłanie zdarzenia myszki
  4. Klik środkowego klawisza myszy.
    Wysłanie zdarzenia myszki
  5. Wprowadzenie wybranego kodu poprzez klik lewym przyciskiem myszy na każdym z trzech wierszy cyfr.
    1. Wysyłanie sygnałów kliknięcia w odpowiednich ilościach w każdym rzędzie cyfr.
      1. Przejście kursora do odpowiedniego rzędu.
      2. Klik X-razy aby została ustawiona odpowiednia cyfra.
  6. Klik w napis „unlock”.
    Przesunięcie kursora w odpowiednie miejsce i klik.

    1. Jeśli kłódka jest ciągle widoczna powrót do punktu 5.
      Kłódka jest widoczna jeżeli kolor piksela jest zgodny z pobranym wzorcem w punkcie 1.3.3.
    2. Jeśli kłódka znikła
      Kłódka jest niewidoczna jeżeli kolor piksela jest niezgodny z pobranym wzorcem w punkcie 1.3.3.

      1. Drzwi ciągle zamknięte
        1. Należy odczekać 10 sekund na zwolnienie blokady możliwości wprowadzenie ponownych kodów
          sleep 10 sekund.
        2. Powrót do punktu 2.
      2. Drzwi otwarte – koniec

Wybór narzędzi

W pierwszej kolejności próbowałem zrobić to za pomocą Javy (tak jak to było w przypadku z Originem), jednak pojawiło się kilka problemów (m.in. możliwość pobrania koloru piksela z gry pracującej z DirectX).

Postanowiłem zrobić to za pomocą wxDev-C++.

Fragmenty kodu

Obsługa myszki:

Stan kłódki:

W skrócie kilka metod

Pobranie koloru:

Weryfikacja czy kłódka jest widoczna (porównanie kolorów):

Ustawienie wybranego zestawu cyfr:

Brute force we wskazanym zakresie:

Demonstracja


Do pobrania

To również może Cię zainteresować:

  • Origin brute force, czyli Battlefield 3 za darmoOrigin brute force, czyli Battlefield 3 za darmo Był kiedyś na Facebooku taki profil jak "Cyfrowe gry EA", na którym często umieszczane były klucze do gier za darmo. Pewnego dnia wysłali mniej więcej taką wiadomość: Do zdobycia za […]
  • DayZ – jak pobrać GUID? Generowanie BattlEye GUID.DayZ – jak pobrać GUID? Generowanie BattlEye GUID. Jak pobrać GUID? Na wielu serwerach pracujących pod kontrolą BattlEye w takich grach jak np. cała seria Arma, czy DayZ Standalone stosuje się tzw. white-listy. Czyli aby dołączyć do […]
  • Cracking WinRar 2.71Cracking WinRar 2.71 Archiwalny wpis z początkowego okresu szkoły średniej, czyli nag cracking z w32dasmem. W tutorialu nie usuwałem błędów i składni "dziwnego" języka - wyciąłem tylko nieaktualny adres […]
  • Cracking WinZip 8.1Cracking WinZip 8.1 Archiwalny wpis z początkowego okresu szkoły średniej, czyli nag cracking z w32dasmem. W tutorialu nie usuwałem błędów i składni "dziwnego" języka - wyciąłem tylko nieaktualny adres […]
  • Wybory samorządowe 2014 – dane osób z komisji wyborczychWybory samorządowe 2014 – dane osób z komisji wyborczych Pod tym adresem umieszczone są były dane pochodzące ze wszystkich obwodów wyborczych. Wykonałem w Javie program, który pobrał informacje na temat wszystkich osób pracujących w komisjach […]
  • Arma – gra doskonałaArma – gra doskonała Nie wiele jest gier, które potrafią przyciągnąć gracza na kilkaset czy kilka tysięcy godzin. Nie wiele jest gier, w których producent udostępnia api do tworzenia swoich własnych […]

5 thoughts on “Bot do gry Arma 2 DayZ Epoch w C++

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *