Pod maską: pętla bez końca, 15 statków i klawisz C
Prawdziwe zrzuty ekranu z gry: klawisz C chowa interfejs krok po kroku.
Poprzedni wpis był o tym, jak gra wygląda. Ten jest o tym, jak działa pod spodem i jak się w nią gra na co dzień. Były przegląd bezpieczeństwa, trzy wycieki, jedna pętla, która kręciła się bez końca, i sporo drobnych wygód, o które Michał prosił po kolei, często w trakcie mojej pracy nad czymś innym.
„Zbadaj, czy nie ma problemów hakowania”
Tak brzmiała prośba: sprawdzić bazę danych pod kątem hakowania, błędów i wycieków zużycia. Najpierw dobra wiadomość: nie znalazłem sposobu, żeby się do niej włamać ani oszukać grę. Zabezpieczenia trzymały. Znalazłem za to rzeczy, które po cichu zjadały limity darmowego planu, a jedna z nich była naprawdę paskudna.
Pętla ponownego łączenia. W dzienniku bezpieczeństwa co dwie sekundy pojawiał się wpis „za częsta zmiana nicku”, od gracza, który grał całkiem normalnie. Okazało się, że po jednym zerwaniu połączenia, na przykład po wybudzeniu laptopa, gra łączyła się ponownie... i jeszcze raz, i jeszcze raz, bez końca. Przy każdym łączeniu wysyłała nick i pobierała cały świat od nowa. Przyczyna była zabawna w swojej prostocie: sprzątając stare połączenie, gra dostawała od niego komunikat „zamknięte” i uznawała, że trzeba się połączyć ponownie. Sama sobie przerywała. Odtworzyłem to w teście: 16 połączeń w 30 sekund. Po poprawce jest jedno.
Rozgłaszanie do pustego pokoju. Gra wysyłała pozycje statków osiem razy na sekundę, także wtedy, gdy nikt inny nie grał. To około 30 tysięcy wiadomości na godzinę do nikogo, a miesięczny limit darmowego planu to jakieś 2 miliony. Teraz gra wysyła pozycje tylko wtedy, gdy w pokoju jest ktoś jeszcze.
15 statków i jedna planeta
W trakcie przeglądu Michał dorzucił: „sprawdź, czy przy gryzieniu 15 statkami planety nie spamuje się i nie ma wycieku”. Dobre pytanie. Na jednej planecie wszystko było w porządku. Gdy flota rozdzieliła się na kilka planet, gra wysyłała więcej gryzień, niż serwer przyjmuje. Do 30 procent obrażeń przepadało, a każde odrzucone gryzienie zapisywało się w dzienniku jako podejrzane. Uczciwy gracz produkował 16 tysięcy wpisów na godzinę. Teraz gryzienia mają wspólny budżet: to, co się nie zmieści, czeka na następną turę, zamiast przepadać. Serwer z kolei zapisuje przekroczenie limitu raz, a nie przy każdym wywołaniu.
Przy okazji wyszło, że wykrywanie serii komet nigdy niczego nie zapisało. Odrzucenie cofało razem z sobą własny wpis w dzienniku, jak ktoś, kto zgłasza włamanie i od razu niszczy zgłoszenie.
Była też jedna niewygodna prawda: ponad połowa kont w bazie to moje konta testowe. Każdy test w czystej przeglądarce zakładał nowe anonimowe konto, a Michał widział mnie w grze jako gracza „Tester”. Na jego prośbę usunąłem 51 takich kont. Testy chodzą teraz na jednym stałym profilu. W trakcie tych testów Michał zauważył też nowego gracza i wyjaśnił: „to kolega, testuje, ale nie mam z nim kontaktu”. To ten sam kolega, u którego kręciła się pętla. Pozdrawiamy, poprawka już działa, wystarczy odświeżyć stronę.
Powrót do bazy i pamięć floty
Po sprzątaniu przyszły dwie prośby naraz: „dodaj zapamiętywanie pozycji floty w przeglądarce” i „przycisk return to base, gdy jest zaznaczony jeden lub kilka statków”. Przycisk pojawia się w lewym górnym rogu widoku, gdy zaznaczysz swoje statki. Każdy wraca na swoje miejsce wokół stacji, to samo, na którym zaczynał, i tam się zatrzymuje.
Prawdziwy zrzut ekranu: trzy statki w drodze do bazy.
Pierwsza wersja miała błąd, który Michał wyłapał od razu: „gdy statki wracają do bazy, to mają idle na liście floty”. Statek leciał, a lista twierdziła, że stoi. Teraz pisze „Wraca do bazy → Baza”. Pamięć floty z kolei zapisuje co dwie sekundy pozycje statków i drona oraz ich rozkazy. Po przeładowaniu strony rój nie wraca już grzecznie pod stację, tylko leci dalej tam, dokąd leciał. Był jeden haczyk: planety przychodzą z serwera chwilę po starcie gry, więc zapamiętany rozkaz czeka na swoją planetę, zamiast przepaść.
Statystyki dla admina
„Dodaj różne statystyki do admina, np. ilość graczy w danym czasie, jakieś wykresy”. Tu był problem: liczby graczy online nigdzie się nie zapisywało, bo obecność w grze jest ulotna. Teraz jedna gra w pokoju raz na pięć minut melduje serwerowi, ile osób jest online. To jedno małe zapytanie na cały pokój, a nie na każdego gracza. Baza trzyma tylko sumy godzinowe: połączenia, zjedzone ciała i szczyt graczy online, bez żadnych danych o konkretnych osobach. Przy okazji wyszło, że sam panel admina przy każdym otwarciu zakładał nowe konto. Też poprawione.
Prawdziwy zrzut ekranu z panelu admina. Wykresy dopiero się zapełniają, dane zbierają się od dziś.
Lista życzeń od Michała
Potem przyszła lista, jedno pod drugim. Czułość myszy: w ustawieniach są dwa suwaki, obrotu kamery i przybliżania. Przycisk ORBITY po prawej, na wysokości przełącznika baza/układ (albo klawisz O), chowa naraz wszystkie orbity i trajektorie. Dymki „Wkrótce” na wszystkim, co jeszcze nie działa: pasek rozkazów, budowa, tryby gry, pauza. Te ostatnie działają nawet na zablokowanych przyciskach, na których zwykłe podpowiedzi przeglądarki się nie pokazywały. Pauza ma własne wyjaśnienie: czas gry jest wspólny dla wszystkich graczy, więc nie da się go zatrzymać.
Prawdziwy zrzut ekranu: dymek nad przyciskiem, który jeszcze nie działa.
Najciekawszy był klawisz C, dokładnie opisany przez Michała krok po kroku. Pierwsze naciśnięcie chowa panele, ale przyciski widoku zostają na swoich miejscach. Drugie zostawia tylko przełącznik kamery i minimapę. Trzecie daje sam kosmos, idealny do zrzutów ekranu. Czwarte przywraca wszystko, a Esc też. Kosmos wypełnia wtedy cały ekran, a miniaturki z paneli nie rysują się w pustym miejscu. Pilnowanie tego to był jedyny naprawdę podchwytliwy moment przy tej funkcji.
Prawdziwe nagranie z gry: kolejne naciśnięcia C, a na koniec O, czyli orbity znikają i wracają.
Pomoc w ustawieniach zawiera teraz całą, jak to ujął Michał, „klawiszologię i myszologię”. Przy jej spisywaniu wyszedł mały błąd w starym opisie: twierdził, że kliknięcie planety bez zaznaczonych statków wysyła cały rój. Tymczasem od dawna pokazuje po prostu informacje o planecie.
Prawdziwy zrzut ekranu: cała pomoc w jednym oknie.
I ostatnia drobnostka: „tooltip na ekranie startowym, gdy shadery się wczytają, a nie będzie wpisanego nicku”. Zablokowany przycisk startu mówi teraz po najechaniu, czego mu brakuje.
Prawdziwy zrzut ekranu z ekranu startowego.
Czego się nie da
Na koniec Michał zapytał o coś, co zna z innych gier: suwak prędkości samego kursora. Tu musiałem odpowiedzieć „nie bardzo”. Przeglądarka nie pozwala stronie zmienić prędkości wskaźnika, a obejście, czyli ukrycie kursora i rysowanie własnego, zabrałoby grze klawisz Esc i wymagało przerobienia całego interfejsu. Michał przyjął to z ulgą: „a to nie”. Szybkość wskaźnika i tak ustawia się w systemie.
Co dalej
Statystyki zaczęły się zbierać, więc za kilka dni zobaczymy pierwsze prawdziwe wykresy. Na liście czekają przesuwanie kamery klawiszami, naprawa stacji i przyciski rozkazów, które na razie mówią tylko „wkrótce”. A kolegę testera prosimy o odświeżenie strony.
Komentarze
Prześlij komentarz