W pierwszym wpisie o Blackoucie – silniku gier strategiczno-ekonomicznych via WWW przedstawiłem zaledwie szkic moich notatek. Dlatego też, zgodnie z obietnicą postaram się przybliżyć bardziej jeden z aspektów.
Ostatnio wziąłem na warsztat kwestię w xNovie dość kluczową, podliczanie punktów graczy. Podliczanie w xNovie punktów jest czynnością wykonywaną z panelu administracyjnego, która w założeniu raz dziennie ma policzyć punkty dla każdego gracza i sojuszu w grze, aby potem zapisać je w bazie i przedstawiać np. w zakładce „Statystyki”. Pierwszą sprawą jaka powinna zaintrygować każdego jest pytanie o to, dlaczego taka sprawa nie jest wykonywana automatycznie za pomocą CRON-a. Szczerze mówiąc nie wiem :D Wiem za to, że w xNovie cały skrypt odpowiedzialny za to jest wepchnięty jako zakładka panelu administracyjnego, dlatego nie za bardzo jest możliwość podpięcia tego do CRON-a. Trzeba by to wydłubać do osobnego pliku.
Dlatego też w Blackoucie podliczanie punktów służących do tworzenia statystyk
zostało po prostu umieszczone w funkcji BuildStats()
(konwencja
nazewnictwa zgodna z resztą funkcji w xNovie, żeby nie robić bałaganu większego
niż już jest). W tym momencie miejsce wywołania tej operacji (panel administracyjny/CRON)
nie ma żadnego znaczenia. Całe podliczenie statystyk sprowadza się do wywołania jednej funkcji.
Budowanie statystyk zostało w xNovie rozbite na dwa pliki: admin/statbuilder.php
i admin/statfunctions.php
. Cztery funkcje znajdujące się w drugim pliku
uprościłem lekko (bo standardowo, jak to w xNovie, generowały trochę nigdzie nie
używanych danych) i jako, że są używane tylko przy podliczaniu punktów, przerzuciłem
je do pliku z funkcją BuildStats()
Jeśli chodzi o objętość kodu. W xNovie: plik statbuilder.php
– 308 linijek,
statfunctions.php
– 87. Razem daje to 395 linii kodu. U mnie plik spełniający
funkcje dwóch powyższych, czyli BuildStats.php
zajmuje 232 linijki.
Jedną z kilku przyczyn takiej różnicy w długości kodu jest to, co znalazłem na
końcu statbuilder.php
– otóż na koniec pliku do podliczania punktów doklejono
na chama (nie zgadza się nawet poziom wcięć, choć to w xNovie norma) kod do
usuwania nieaktywnych użytkowników. Najlepsze jest to, że w xNovie istnieje
już funkcja do usuwania użytkownika razem ze wszystkimi potrzebnymi do tego
rzeczami (usuwanie planet, flot, sojuszy itd. itd.)
Wprowadziłem też kilka usprawnień w tabeli która przechowuje statystyki graczy i sojuszów. Zacząłem przede wszystkim od skasowania zbędnych pól - ich liczba zmniejszyła się 25 z do 19, spadł więc też rozmiar trzymanych danych. Najlepszym dowodem na brak myślenia jest fakt, że data podliczenia statystyk, która jest jednakowa w całej tabeli jest przechowywana przy każdym jej rekordzie. A ich może być sporo - po jednym na każdego gracza i na każdy sojusz w grze.
Jeśli chodzi o drugą część wpisu, czyli CRON-a. W oryginalnej xNovie było wiele czynności, które można by wykonywać z jego pomocą - na czele oczywiście podliczanie punktów. Wstępnie w Blackoucie zdecydowałem się aby skrypt odpalany CRON-em realizował następujące zadania: podliczanie punktów, usuwanie graczy, którym minął czas na aktywację konta, w przyszłości także podliczanie rekordów (będą cache'owane i generowane raz na dobę) i wykonywanie innych cyklicznych czynności związanych z przewidywanymi nowymi możliwościami w grze. Oczywiście każda czynność wydzielona do funkcji, tak aby problemem nie było na przykład wywołanie jej z panelu admina.
I to na tyle w tym wpisie, siadam do kodu :)