TL:DR Napisałem własnego bota do MirkOgame i żegnam się z grą.
Jako że odechciało mi się już całkowicie grać na mirkogame.pl to podzielę się z wami tym co robiłem przez ostatnie tygodnie.
Po aferach związanych z astrofizyką i innymi włączającymi bugusing stwierdziłem, że ta gra nie ma sensu więc przynajmniej się pobawię i może czegoś nauczę. No więc do dzieła.
Jak większość osób ogarniająca ogame w przynajmniej małym stopniu zacząłem od arkusza obliczeniowego w którym trzymałem różne informacje. Były tam różne tabelki dla każdej z planet z wyliczaniem wydobycia, obliczaniem kiedy będę mógł osiągnąć zadany poziom itp. common stuff. Przejdźmy do ciekawszych rzeczy.
Jeden z arkuszy zawierał informacje o skanowanych planetach, ilościach surowców itp. z początku uzupełniany i sortowany był ręcznie. Gdy stwierdziłem, że to głupie napisałem prostą funkcję (używałem Google Sheets więc mogłem pisać formuły w trochę innej formie niż w Excelu) która po wklejeniu do komórki całego raportu parsowała go i tworzyła odpowiedni wiersz w tabeli, ustawiając wszystkie wpisy posortowane według adresu w galaktyce. Tak działało to... 2 dni, stwierdziłem wtedy, że kopiowanie raportów ręcznie po jednym jest czasochłonne. Sięgnąłem wtedy po plugin do Chrome - Tampermonkey, i napisałem prosty skrypcik dodający przycisk "Kopiuj wszystko" który do schowka kopiował mi wszystkie raporty z danej strony wiadomości.
Pic 1. Przycisk "Copy All"
Dalej wszystko trafiało do odpowiedniej komórki, było parsowane i wklejane w odpowiednie miejsce. Tak działałem jakiś czas ulepszając formuły w Excelu, dodałem funkcje wyciągające najlepsze cele do ataku jak i cele które wypadało by przeskanować i zaktualizować wiedzę o nich.
Pic 2. Tabela z informacjami
Pic 3. Najlepsze cele
Pic 4. Cele do reskanowania
I tak sobie chwile grałem, później stwierdziłem, że przepisywanie z tabeli do gry jest głupie, więc po chwili grzebania znalazłem, że gra poprzez ukryte pola formularzy przekazuje informacje o celu ataku (gdy np klikamy atakuj bezpośrednio w raporcie), wykorzystałem to by zintegrować skryptem tabele najlepszych celów do widoku floty w taki sposób, że przy każdej pozycji widniał napis "Wyślij" który wypełniał te ukryte pola odpowiednio i przechodziło do dalszego ekranu wysyłania floty. Ale wciąż musiałem kopiować te raporty do Google Sheets, w międzyczasie znalazłem jak mógłbym wysyłać szybko skany z widoku floty przy pomocy id gracza wyodrębnionego z widoku galaktyki. Tak powstał ulepszony widok galaktyki.
Pic 5. Lepszy widok galaktyki
W międzyczasie przeniosłem wszystkie dane na serwer MySQL bo dane zaczęły szybko przybierać na objętości oraz przepisałem tabele celów by korzystała właśnie z MySQL. Zmodyfikowałem przycisk do kopiowania tak aby wrzucał dane do bazy oraz zmodyfikowałem widok galaktyki tak aby każdy otworzony system zbierał informacje o graczach jak punkty, id, punkty budynków/floty/obrony, czy gracz jest aktywny, na urlopie, w jakim sojuszu, a także id i adresy planet i księżyców a następnie wrzucał to do odpowiednich tabel w bazie. Żeby zautomatyzować klikanie przez galaktyki dodałem przyciski "autoskan", które skanowały całe uniwersum lub całą galaktykę w zależności od tego, który się wybrało.
Tak zbudowałem całą "mapę" uniwersum.
Pic 6. Mapa planet graczy
Po przeniesieniu tabel celów oraz reskanów, mając dane na temat osób nieaktywnych z autoskanów galaktyki dodałem kolejną tabelkę, tym razem agregującą planety i graczy nieaktywnych na temat których nie miałem żadnych informacji, tzn. nie skanowałem ich nigdy. Po pewnym czasie odechciało mi się nawet klikać w przyciski "Skanuj" więc dodałem przycisk włączający automatyczne skanowanie nieaktywnych oraz celów wytypowanych tajemną formułą (ponad 200lini zapytania SQL) do wysłania skanu, zostawiałem to na pół godziny, potem wracałem, kopiowałem do bazy i wysyłałem falę ataków na przygotowane cele. I tak to sobie działało, zbierałem coraz więcej danych i planowałem kolejne ulepszenia. W końcu stwierdziłem, że mogę zrobić automat, który samodzielnie będzie robić zadaną ilość skanów, przechodzić automatycznie do zakładki wiadomości, kopiować je do bazy, wracać i wysyłać flotę na najlepszy cel. I tak w kółko, aż do zapełnienia slotów, a później oczekiwać na zwolnienie. I tak powstał podstawowy bot, który mógł działać samodzielnie 24/7 wysyłając floty(same MT) na idlerów.
Pic 7. Bot z funkcją automatycznego farmienia
Ale było mi mało, chciałem farmić idlerów z minimalną obroną. Dodałem więc możliwość predefiniowania floty na ataki na cele które miały niezerową obronę. Dodałem także parametry, żeby móc przełączać się na różne tryby itp.
Potem było już tylko ulepszanie, dodałem podstawową logikę na dodawanie statków dla dużych osłon itp. Dodałem algorytm wyliczający odległość i czas lotu w zależności od wybranej floty, na tej podstawie wyliczający ilość surowca na sekundę lotu, wyliczający potencjalną produkcję z odkrytych technologii itp., dzięki czemu sortowałem już cele nie po ilości surowca a po opłacalności, dzięki temu zwiększyłem dzienne "wydobycie" surowców do okolic 50-60kk w zależności od galaktyki i pozycji w niej (1 gala miała okolice 40kk, 3 już z kolei okolice 80-90kk).
W międzyczasie "ulepszyłem" troszkę widok podglądu który dzielił loty na "odloty" i "przyloty", sumował ilość wracających surowców a także liczbę statków każdego typu w locie.
Pic 8. Widok podglądu
Z rzeczy już prawie zrobionych ale jeszcze nie uruchomionych to prawie zrobiłem algorytm wykorzystujący wbudowany w grę symulator do atakowania "trudniejszych" celów i balansujący straty do zysków dla każdego celu. Automatyczne pilnowanie "niepewnych" ataków, poprzez rozpoczęcia skanowania przed przylotem, i w sytuacji wykrycia nieprawidłowości zawracanie. W planach było także zintegrowanie wysyłania recyklerów w sytuacji gdy algorytm wykrył walkę z wysokimi stratami we flotach, automatyczne rozwijanie budynków itp. Dużo nie brakowało, ale straciłem chęci bo gra coraz mniej ludzi.
W międzyczasie tworzenia całego zautomatyzowanego mechanizmu stworzyłem kilka pobocznych mniejszych jak Automatyczne skakanie po planetach i odświeżanie aktywności oraz przycisk "Ratuj flotę" który w ciągu ~1-2s przeklikiwał formularz floty wysyłając całą flotę z wszystkimi surowcami na inną naszą planetę. Przyciski do obsługi tego widać między innymi na obrazku nr 7 przy menu z lewej strony. Ale jako, że zdarzały się ataki 1s po przylocie floty potrzebny był dodatkowy, szybszy sposób, powstał "Fleet save" także widoczny na obrazku nr 7 w tabeli lotów, można go kliknąć na dłużej przed przylotem floty, wypełni on ukryte pola statków liczbami takimi jakie mają przylecieć z danym lotem + flota na planecie, przejdzie do ostatniego etapu przed wysłaniem, wyświetli czas przylotu i zaczeka do niego wysyłając flotę w ułamek sekundy po przylocie, ratując nawet przed atakami poniżej sekundy po przylocie.
Pic 9. Ratowanie floty
To tyle, zabawa była fajna, trochę się nauczyłem czas przejść dalej ;)
Na koniec kilka ciekawostek:
- w ciągu niecałego miesiąca od uruchomienia bazy liczba raportów w niej zarejestrowanych wynosi 30tys
- liczba planet w całym uniwersum to ponad 7tys. (dane lekko nieaktualne bo dawni nie robiłem skanu)
- liczba aktywnych graczy bez obrony i floty wynosi 57
- liczba graczy nieaktywnych: 1149
- liczba graczy na urlopie: 276
- liczba graczy ogólnie na chwilę obecną: 1950 (to akurat jest dostępne w statystykach)
- liczba ataków wykonanych w ciągu ostatnich 2-3tygodni: 5409
- najbardziej nękany cel: 1:181:8 - 67 ataków
- baza danych planety + gracze + raporty + ataki w MySQL zajmuje 20MB
PS. Zdaję sobie sprawę, że to wbrew zasadom gry, aczkolwiek nie sądzę, że zepsułem komukolwiek rozgrywkę bardziej niż błędy, które czasem były ukrywane przez administrację a wiedzę o nich mieli wybrani.
#mirkogame #mirkoogame #programowanie
Komentarze (126)
najlepsze
Naiwniak.
To jest główny powód dla którego ludzie przestali grać w gry przeglądarkowe/MMO.
To jest też główny powód dla którego te gry na siebie zarabiają - jak nie dojedzie Cię boter, to zrobi to donator.
Nie grałem.
@damian_co_dalej:
Dlatego najfajniejsza zabawa była na początku.
No nie wiem, ja od w sumie 3 tygodni nic tylko klikam w stoczni max i buduj i flotka mi taka urosła, że nawet sąsiad z top 1 musiałby się zastanowić czy na tym zarobi. Wcześniej musiałem wszystko rozplanować, ale też dużo czasu mi to nie zajęło.
Jestem w top 60-90, zależnie od koniunktury.
Generalnie wystarczy trochę pomyślunku i nawet sprawdzając raz, dwa dziennie da się grać i nie być
Teraz gram w Stronghold Kingdoms, ale teraz zaczynam mieć podejrzenia, że ktoś w grze też zaprzągł sztuczną inteligencję i zyskuje w ten sposób przewagę.