Skocz do zawartości

JaroStats - Statystyki gracza w grze i na stronie WWW (Poradnik)


Rekomendowane odpowiedzi

JaroStats

Hejka!

Jako, że nie zauważyłem żadnego skryptu (gotowego) na statystyki gracza w grze oraz na stronie www, to postanowiłem osobom chociaż w stopniu średnim wiedzy pokazać jak mniej więcej* to zrobić. Z góry informuję osoby, które dopiero zaczynają przygodę ze skryptami, aby trzymały się z daleka od tego tematu - możecie tego nie zrozumieć albo zwyczajnie coś z... zepsuć :D

*Dlaczego mniej więcej? Ponieważ każdy myśli samodzielnie :) Ja zrobiłem to według mnie najprościej, ale może komuś się uda jeszcze lepiej? Te pole manewru zostawiam wam w komentarzach, z chęcią nauczę się dodatkowych sztuczek :P

 

WYMAGANIA:

Aby całość działała poprawnie, wymagane są pluginy:
Skript, SQLibrary oraz SKQuery

 

KONFIGURACJA MYSQL:

 

To cudeńko dodajemy na samej górze naszego skryptu. Można też ewentualnie pobawić się w confingi samego pluginu, ale dam sobie w tym temacie z tym spokój.

Nazwa bazy danych - Nazwa ustalana w phpMyAdmin.

Nazwa użytkownika - Większość serwerów gdzie jest dostępny hosting oraz MySQL oferuje zintegrowaną nazwę bez możliwości edycji. W przypadku hostingu enderchest to np. edb_1234567 

Hasło użytkownika - Nie muszę chyba wyjaśniać

 

Następnie odpalamy naszego phpMyAdmin, szukamy bazy danych lub używamy "Nowa", aby dodać bazę.

Przykład:

 baza1.png

 

Następnym krokiem będzie wejście w naszą bazę danych, odszukanie górnego menu i wejście w SQL

Przykład:

baza2.png

 

Otworzy nam się "konsola":

baza3.png

 

W tej konsolce musimy wklepać następującą komendę:

 

Utworzy nam się baza danych o nazwie statystyki z tabelami id, nick, dedy oraz diaxy:

baza4.png

Po wejściu:

baza5.png

 

Z bazy danych MYSQL póki co to wszystko. Najważniejsza rzecz jest gotowa :) 

 

 

---------------------------------

SKRYPT:

 

Następnym krokiem po wklejeniu linijki z bazą jest ustalenie Variables, czyli zmienne. Tutaj macie dowolność, możecie dać zjedzone koxy, wykopany dirt, ile gracz przeszedł kratek, czas gry... no wszystko :D

 

Następnie wklejamy to - Po pierwszym wejściu gracza na serwer jest mu przydzielane losowe ID* od 1 do 10000000 (czyli mała szansa na powtórzenie), które również pojawi się w naszej bazie danych. Następna linijka odpowiada za dodanie tabeli do bazy danych (robi to automatycznie, spokojnie... bez nerwów XD)

*Tutaj macie dowolność, możecie dać losowe cyferki lub znaczki - kto co potrafi :>

Gdy gracz wejdzie pierwszy raz na serwer w naszej bazie danych pojawi się to:

baza6.png

 

Więc do naszego skryptu musimy dodać kolejne linijki:

Wiadomo - odpowiada to za dodanie zmiennej po wykonanej czynności jak śmierć czy zniszczenie złoża. Z nudów możemy dodać jeszcze to:

Po wpisaniu komendy /statystyki wyświetlą nam się na czacie w grze te same dane co w bazie MYSQL

 

I drugie najważniejsze, zarazem ostatnie - zapisanie tych danych do MYSQL:

Te linijeczki sprawiają, że o wyjściu gracza z serwera jego zmienne zostaną zapisane również w bazie danych na serwerze phpMyAdmin.

Dwie ostatnie linijki odpowiadają za nadpisanie danych a nie ich skasowanie, czyli to samo co zmienne w grze, nie musimy nic robić ręcznie :P

 

---------------------------------

WYŚWIETLANIE STATYSTYK NA STRONIE WWW:

 

Tutaj dla osób nieznających się na języku PHP będzie mega trudno, trzeba połączyć się z bazą danych a następnie ją wyświetlić na stronie www. Dla osób dociekliwych serdecznie polecam zapoznać się z tematem PDO (funkcja php odpowiadająca za połączenia z bazą).

 

Jak ktoś nie będzie wiedział jak to zrobić to edytuję poradnik i dodam te informacje.

 

GOTOWY SKRYPT:

 

Ode mnie póki co to wszystko, dziękuję :D Mam nadzieję, że napisałem to jasno i wyraźnie. W razie problemów zadawajcie pytania, piszcie co byście zmienili i jakie ewentualnie błędy wy widzicie.

Całość była testowana na wersji 1.12.2:

skript v2.6

SkQuery v4.1.5

SQLibrary v7.1

Glicz

Poprawiam formatowanie na ciemnym stylu.

Notatka dodana przez Glicz

Odnośnik do komentarza
https://skript.pl/temat/51464-jarostats-statystyki-gracza-w-grze-i-na-stronie-www-poradnik/
Udostępnij na innych stronach

Jakby ktoś chciał zobaczyć całkowity efekt końcowy to proszę:

https://herobrine.pl/ranking.php

Oczywiście można również zrobić osobne rankingi, dodać wygląd i jakieś tam bajery :D

Odnośnik do komentarza
https://skript.pl/temat/51464-jarostats-statystyki-gracza-w-grze-i-na-stronie-www-poradnik/#findComment-316467
Udostępnij na innych stronach

Przydatny poradnik, ale w momencie gdy chcesz poznać sam sposób przenoszenia zmiennych z skrypta do bazy danych 

Nie potrzebne jest dawanie randomowej liczby z zakresu od 1 do 10000000 przez podstawe powody:

a) lepiej jest zostawić id samej bazie danych, aby przydzielała go po kolei od 0 do końcowej liczby z ilości max. cyfr które definuje się po int(x)

b) zwiększasz niepotrzebnie od samego początku ilość bajtów, które potrzebujezz do zapisywania zmiennych w bazie danych [np. zamiast przy 100 graczach mieć zakres 1-100, możesz mieć nawet i 100 x 8 liczb (zakres 1-99999999), pamiętając, że jeden znak = 1 bajt]

c) id nie będzie z zakresu 1 - 10000000 jak to napisałeś, tylko z zakresu 1 - 99999999 co daje aż około 31381059609 unikalnych id dla unikalnych graczy co jest ogromną liczbą

d) poprawnym użyciem liter w id, byłoby wtedy gdy użytkownik chce zaoszczędzić miejsce, tzn. tworząc kombinacje z 9 liczb i 32 liter (w przypadku alfabetu PL) może w o wiele mniejszej ilości znaków zmieścić tyle ID ile zmieściłby w większej ilości znaków samymi liczbami

e) co do samego ID zapisywanie go w zmiennej w skrypcie również jest głupotą, bo końcowo aktualizujesz dane identyfikując gracza po jego nicku, a nie po ID

f) co do samego skryptu, zalecałbym korzystanie z zmiennych grupowych, jak i aktualizowaniu danych w bazie danych zaraz po wykonaniu danego eventu dla wygody gracza, który nie musiałby wychodzić cały czas aby sprawdzić swoje statystyki

 

Dodam, że jeśli ktoś chciałby tworzyć coś podobnego dla wygody jest lepiej zrobić dwie tabele (gracze - statystyki) łącząc je id, dając lepsze możliwości organizacji tego co w tabeli będziecie mieć (ale to już taki mój wymysł tego jak takie bazy danych powinny wyglądać)

Edytowane przez Intxo
Odnośnik do komentarza
https://skript.pl/temat/51464-jarostats-statystyki-gracza-w-grze-i-na-stronie-www-poradnik/#findComment-316716
Udostępnij na innych stronach

  • 3 tygodnie później...

Możesz stworzyć tabelę poprzez start skryptu dodając do kwerendy IF NOT EXISTS, i możesz dołączyć primary key w jednej kwerendzie dodając na końcu po przecinku primary key(id).

Jaki jest sens w tworzeniu takiego klucza głównego? Nie wystarczy stworzyć sobie zmienną {lastId} i dodawać ją o 1 przy każdym dodanym użytkowniku? Pamiętaj, że dalej jest ten cień szans, że będzie to samo id i baza sie posypie z serwerem ;/

Zalecam również stworzyć jakiegoś taska który co jakiś czas będzie zapisywał stan aktualny graczy bo będzie lipa jak serwer dostanie randomowego crasha ;/

@edit

napomnę jeszcze, że id nie ma sensu bo każdy gracz ma swoj klucz jakim jest uuid, dlatego zalecam Ci odejść od tworzeniu nowego klucza tylko zacząć nad posługiwaniem się uuid = )

Edytowane przez Queito
Odnośnik do komentarza
https://skript.pl/temat/51464-jarostats-statystyki-gracza-w-grze-i-na-stronie-www-poradnik/#findComment-317439
Udostępnij na innych stronach

6 godzin temu, Queito napisał:

Pamiętaj, że dalej jest ten cień szans, że będzie to samo id i baza sie posypie z serwerem ;/

 

W większości masz rację, ale nie posypie się baza ani serwer. Baza danych po prostu zwróci odpowiedź, że taki klucz już istnieje i nie wykona się insert. Wtedy "nowy gracz" podczas swojej sesji będzie nabijał staty, które się nie zapiszą i tyle.

Odnośnik do komentarza
https://skript.pl/temat/51464-jarostats-statystyki-gracza-w-grze-i-na-stronie-www-poradnik/#findComment-317458
Udostępnij na innych stronach

2 godziny temu, LeviBoyPL napisał:

W większości masz rację, ale nie posypie się baza ani serwer. Baza danych po prostu zwróci odpowiedź, że taki klucz już istnieje i nie wykona się insert. Wtedy "nowy gracz" podczas swojej sesji będzie nabijał staty, które się nie zapiszą i tyle.

"baza sie posypie z serwerem" może zamiast posypie mam użyć zdesynchronizuje, żeby każdy zrozumiał? 

Odnośnik do komentarza
https://skript.pl/temat/51464-jarostats-statystyki-gracza-w-grze-i-na-stronie-www-poradnik/#findComment-317463
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...