←  Tutoriale

AMXX.pl: Support AMX Mod X i SourceMod

»

PHP
Generowanie statusu serwera

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 21.02.2010

Żeby otrzymać bannerek z danymi serwera podobny do tego: Dołączona grafika możemy skorzystać z biblioteki GD2 dostępnej w PHP oraz klasy PQ której użyjemy do pobrania danych o serwerze. Aby otrzymać przyjazne linki wykorzystamy również mod_rewrite aby zamiast rozszerzenia .php mieć np .png

GD2 musi być zainstalowane na serwerze, PQ jest w załączniku

Pobieramy i wypakowujemy załącznik: Załączony plik  server.zip   227,7 KB   2397 Ilość pobrań
np do głównego katalogu.
server
├── base.png
├── cache
├── cs.png
├── cs.ttf
├── digit.ttf
├── impact.ttf
├── index.php
├── key.png
├── lucon.ttf
├── ocr.ttf
├── SNS
│   ├── class_PQ.php
│   └── PQ
│       ├── gamespy.php
│       ├── halflife.php
│       ├── oldhalflife.php
│       ├── PQ_PARENT.php
│       └── quake3.php
└── steam.png

Nadajemy katalogowi cache prawa do zapisu i odczytu (chmod 777).

Standardowe ustawienia umożliwiają generowanie statusu dla IP podanego w parametrze $_GET['ip'] lub $_GET['ip'] i $_GET['port'].
Więc jeżeli mamy domenę amxx.pl i wypakowaliśmy pliki do głównego katalogu to dostęp do skryptu będziemy mieli poprzez kilka linków (mod_rewrite):

amxx.pl/server/index.php
amxx.pl/server/index.png
amxx.pl/server/index.jpg
amxx.pl/server/status.png
amxx.pl/server/status.jpg

i do nich doklejamy parametr ip (lub ip i port) tj.
?ip=IP_SERWERA:PORT
lub
?ip=IP_SERWERA&port=PORT_SERWERA
Czyli otrzymujemy przykładowo
amxx.pl/server/index.png?ip=127.0.0.1:27015

Jeżeli chcemy tworzyć status tylko jednego serwera to zamieniamy:
	if (strpos($_GET['ip'], ':'))
{
$ipp = explode(":", $_GET['ip']);
if (count($ipp)==2)
{
$conf_ip = $ipp[0];
$conf_port = $ipp[1];
}
} else {
$conf_ip = ($_GET['ip'])?$_GET['ip']:'localhost';
$conf_port = ($_GET['port'])?$_GET['port']:'27015';
}

na:
	$conf_ip = 'IP_SERWERA';
$conf_port = 'PORT_SERWERA';

I nie musimy już podawać parametru ?ip= w linkach.

Stan serwera jest cache'owany (zapisywany) na 30 sekund (standardowo - $cachetime) aby zapobiec częstemu łączeniu się z serwerem.
Jako baza służy nam grafika o rozmiarach 350x20px w formacie .png (standardowo - $ext) i nazwie base.png (standardowo - $base) znajdująca się w tym samym katalogu co index.php
Do wyboru jest kilka czcionek (tablica $fonts) w formacie TTF (załączone).

Dodatkowo wszystko mniej więcej opisane w pliku index.php.


Oczywiście wymagane są otwarte porty i odblokowana funkcja fsock_open do pobrania statusu serwera.


p.s.
nie jest to jakoś super zrobione, ale każdy może sobie dopracować i zrobić wg własnego uznania ;)
Odpowiedz

  • +
  • -
Batonik - zdjęcie Batonik 21.02.2010

Dzięki Pavulon, właśnie tego szukałem wraz z aktualną nazwą mapy :)
Odpowiedz

  • +
  • -
ReKsiu - zdjęcie ReKsiu 22.02.2010

Powiem jedno jesteś boski :P Masz + za super skrypt.
Wy edytuje to ,a jak z licencją? Można z tym robić wszystko + jakaś stopka czy coś?
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 22.02.2010

No niestety w grafice stopki nie zrobisz ;) Więc wg uznania (komentarz w kodzie czy coś).
Edycja dowolna, dlatego jest tam m.in. kilka nieużywanych kolorów czy fontów.
Odpowiedz

  • +
  • -
ReKsiu - zdjęcie ReKsiu 22.02.2010

Hehe dla upartego nic trudnego i na to będzie sposób :P Ja chcę zrobić z tego generator. (taki na stronek www żeby można wygodnie manewrować).
Odpowiedz

  • +
  • -
Mikro - zdjęcie Mikro 25.02.2010

przydatne xD
Odpowiedz

  • +
  • -
Vertricus - zdjęcie Vertricus 26.02.2010

A ma ktoś metodę na wykres ? Gracze od T ? :=\
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 26.02.2010

Można pokombinować, ale wtedy niezbędne jest odpalanie scryptu w crontabie i najlepiej sql.
Odpowiedz

  • +
  • -
Vertricus - zdjęcie Vertricus 26.02.2010

Obojętnie jak ^D^
Chyba najlepiej na zasadzie osobnego Img do wykresu i za pomocą merge je łączyć.
Odpowiedz

  • +
  • -
E3G - zdjęcie E3G 27.03.2010

Wciąż mam ten sam problem:

Nie odczytuje mi statusu serwera
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 27.03.2010

Widocznie hosting nie zezwala na połączenia. W takim wypadku nie idzie tego ominąć.
Odpowiedz

  • +
  • -
Bekkk - zdjęcie Bekkk 28.03.2010

a jak zrobić żeby był duży banner (560x95) i mały banner (350x25)
Odpowiedz

  • +
  • -
Vertricus - zdjęcie Vertricus 28.03.2010

Musisz przerobić kod jak i base.png :]
W kodzie inaczej poustawiać text i dodać ew. coś swojego ale nie będzie się on wiele różnił od tego co jest teraz.
Odpowiedz

  • +
  • -
E3G - zdjęcie E3G 28.03.2010

Próbowałem już z dwoma hostingami nadal to samo...

Znalazlem z innej serwerowni coś takiego

http://tnij.org/amxmxmxm

Ale jednak wolał bym na swoim hostingu...
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 28.03.2010

Z jakimi hostingami próbowałeś ?
Odpowiedz

  • +
  • -
E3G - zdjęcie E3G 29.03.2010

friko i cba

Jeszcze dam na yoyo
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 29.03.2010

A na jakimś płatnym ? Bo darmowe to raczej nie zezwalają na takie rzeczy.
Odpowiedz

  • +
  • -
kyku - zdjęcie kyku 30.03.2010

1ts.pl tam powinno wszystko działać (darmowy hosting a lepszy od wielu płatnych :P )
Status serwerow cs-mystic.com
jak widać działa (chociaż nie wiem jak z tą klasą, ja mam całkiem inną, bez cache itp. ładuje się w mniej niż sekundę 10 serwerów :) )

30 marzec 2010 - 19:20:
to moje jest bez cache jak coś :P przy każdym odświeżeniu pobiera dane z serwerów i zerowe wykorzystanie transferu.
Odpowiedz

  • +
  • -
berix - zdjęcie berix 30.03.2010

gj takiego czegoś własnie szukalem :)
Odpowiedz

  • +
  • -
mgr inż. Pavulon - zdjęcie mgr inż. Pavulon 31.03.2010

1ts.pl tam powinno wszystko działać (darmowy hosting a lepszy od wielu płatnych :P )
Status serwerow cs-mystic.com
jak widać działa (chociaż nie wiem jak z tą klasą, ja mam całkiem inną, bez cache itp. ładuje się w mniej niż sekundę 10 serwerów :) )

30 marzec 2010 - 19:20:
to moje jest bez cache jak coś :P przy każdym odświeżeniu pobiera dane z serwerów i zerowe wykorzystanie transferu.

Zerowe wykorzystanie transferu ? ;> Co przez to rozumiesz ?

A co do klasy... To każda i tak raczej z socket'ów korzysta :P
Odpowiedz