Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Server Queriespobieranie danych o innym serwerze


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
22 odpowiedzi w tym temacie

#1 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 22.01.2012 14:56

*
Popularny

Server Queries

Biblioteka do pobierania danych o serwerze: Server queries - Valve Developer Community


Dostępne zapytania:

Pingowanie. Sprawdzamy czy serwer jest online.
stock ServerPing(const szServer[], const szCallback[]);

new const SERVER_ADDRESS[] = "192.168.0.14:27015";

public ping()
{
	ServerPing(SERVER_ADDRESS, "cbPing");
	return PLUGIN_HANDLED;
}

public cbPing(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
	if(success)
	{
		client_print(0, print_chat, "Server %s is Online latency = %d", szServer, latency);
	}
	else
	{
		client_print(0, print_chat, "Server %s is Offline", szServer);
	}
}



Info. Nazwa serwera, nazwa mapy, obecna ilość graczy, max ilość graczy, nazwa gry.
stock ServerInfo(const szServer[], const szCallback[]);

new const SERVER_ADDRESS[] = "192.168.0.14:27015";

public info()
{	
	ServerInfo(SERVER_ADDRESS, "cbInfo");
	return PLUGIN_HANDLED;
}

public cbInfo(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{		
	if(!success)
		return;
			
	new szName[64], szMap[64], szDirectory[64], szDescription[64];
	new iPlayers = 0;
	new iMaxPlayers = 0;
	
	ServerResponseParseInfo(Response, szName, 63, szMap, 63, szDirectory, 63, szDescription, 63, iPlayers, iMaxPlayers);
	
	client_print(0, print_chat, "Nazwa: %s", szName);
	client_print(0, print_chat, "Map: %s", szMap);
	client_print(0, print_chat, "Folder: %s", szDirectory);
	client_print(0, print_chat, "Opis: %s", szDescription);
	client_print(0, print_chat, "Gracze: %d / %d", iPlayers, iMaxPlayers);
}



Rules. Zestawienie wszystkich możliwych do odczytania cvarów serwera.
! Odpowiedź może przyjść w kilku częściach, tzn na jedną komendę można dostać kilka callbacków.

stock ServerRules(const szServer[], const szCallback[]);

new const SERVER_ADDRESS[] = "192.168.0.14:27015";

public rules()
{	
	if(ServerGetChallenge(SERVER_ADDRESS))
	{	
		ServerRules(SERVER_ADDRESS, "cbRules");
	}
	else
	{
		ServerChallenge(SERVER_ADDRESS, "cbChallengeRules");
	}
	return PLUGIN_HANDLED;
}

public cbChallengeRules(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
	if(!success)
		return;
		
	//Get and cche challenge	
	new challenge_value = ServerResponseParseChallenge(Response);
	ServerSetChallenge(szServer, challenge_value);
	
	//Now can get Rules
	ServerRules(SERVER_ADDRESS, "cbRules");
}

public cbRules(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
	if(!success)
		return;
	
	new szValue[32];
	if(ServerResponseParseRules(Response, len, "sv_alltalk", szValue, 31))
	{
		client_print(0, print_chat, "Rule: sv_alltalk ^"%s^"", szValue);
	}
}



Player. Lista graczy na serwerze.
stock ServerPlayer(const szServer[], const szCallback[]);

new const SERVER_ADDRESS[] = "192.168.0.14:27015";

public player()
{	
	if(ServerGetChallenge(SERVER_ADDRESS))
	{	
		ServerPlayer(SERVER_ADDRESS, "cbPlayer");
	}
	else
	{
		ServerChallenge(SERVER_ADDRESS, "cbChallengePlayer");
	}
	return PLUGIN_HANDLED;
}

public cbChallengePlayer(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
	if(!success)
		return;
		
	//Get and cache challenge	
	new challenge_value = ServerResponseParseChallenge(Response);
	ServerSetChallenge(szServer, challenge_value);
	
	//Now can get Player
	ServerPlayer(SERVER_ADDRESS, "cbPlayer");
}


public cbPlayer(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
	if(!success)
		return;
		
	new iPlayers = ServerResponseParsePlayerNum(Response);
	
	client_print(0, print_chat, "Players: %d", iPlayers);
	
	new szNick[32], id, kills, Float:uptime;
	for(new i=0;i<iPlayers; i++)
	{
		if(ServerResponseParsePlayer(Response, i, id, szNick, 31, kills, uptime))
		{
			client_print(0, print_chat, "%d %s |  kills:%d, uptime = %f", id, szNick, kills, uptime);
		}
	}
	
	ServerResponseSave("Player", Response, len);
}



Challenge. Kod bezpieczeństwa wymagany dla Player i Rules
stock ServerChallenge(const szServer[], const szCallback[]);

new const SERVER_ADDRESS[] = "192.168.0.14:27015";

public challenge()
{	
	ServerChallenge(SERVER_ADDRESS, "cbChallenge");
	return PLUGIN_HANDLED;
}

public cbChallenge(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
	if(!success)
		return;
		
	new challenge_value = ServerResponseParseChallenge(Response);
	client_print(0, print_chat, "Challenge: %X", challenge_value);
}

Załączone pliki


  • +
  • -
  • 14

#2 Stachuu :D ??

    Wszechobecny

  • Użytkownik

Reputacja: 237
Wszechwidzący

  • Postów:476
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Karsznice
Offline

Napisano 22.01.2012 14:59

+ no to czekam tylko na info o graczach

a info o grac zach bedzie tym samym zwracać czy serw jest online ?
  • +
  • -
  • 0

#3 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 22.01.2012 15:03

Tak, każdy callback ma parametr `success`, jeśli jest równy false to serwer jest offline
  • +
  • -
  • 1

#4 Stachuu :D ??

    Wszechobecny

  • Użytkownik

Reputacja: 237
Wszechwidzący

  • Postów:476
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Karsznice
Offline

Napisano 22.01.2012 15:03

///
a mozesz zrobic funkcje sprawdzajaca wylacznie liczbe graczy ?? zalezy mi .
  • +
  • -
  • 0

#5 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 22.01.2012 15:07

To jest właśnie to brakujące zapytanie, za które się zabieram dopiero.
  • +
  • -
  • 1

#6 Stachuu :D ??

    Wszechobecny

  • Użytkownik

Reputacja: 237
Wszechwidzący

  • Postów:476
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Karsznice
Offline

Napisano 22.01.2012 15:10

moze

stock ServerPlayers(const szServer[], const szCallback[])
{  
	__ServerQueryAdd(szServer, A2A_PLAYER ,  szCallback);
}

w iniclude

i w moim pluginie

ServerPlayers(SERVER_ADDRESS, "cbplayer");
zwroci liczbe graczy ?

Użytkownik Stachuu :D ?? edytował ten post 22.01.2012 15:11

  • +
  • -
  • 0

#7 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 22.01.2012 15:11

To nie takie proste, ale dobrze kombinujesz. Jeszcze switch i Parse
  • +
  • -
  • 1

#8 atdirmaq

    Profesjonalista

  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:194
  • GG:
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Otwock
Offline

Napisano 22.01.2012 15:48

Nie moge pobrac zalacznikow..
  • +
  • -
  • 0

Ale fajny serw :o

Dołączona grafika


#9 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 22.01.2012 15:50

Aktualizowałem je. Teraz są już wszystkie polecenia :)
  • +
  • -
  • 1

#10 Jak się nazwać

    Wszechmogący

  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 22.01.2012 16:05

R3X jak zwykle gdy zobaczy że ktoś ma z czymś problem (sebul - blokada he, stachu - sockety) to za kilka dni mamy wszystko pięknie w .inc
  • +
  • -
  • 0
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#11 Stachuu :D ??

    Wszechobecny

  • Użytkownik

Reputacja: 237
Wszechwidzący

  • Postów:476
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Karsznice
Offline

Napisano 22.01.2012 18:51

all dziala jak nalezy :D
  • +
  • -
  • 0

#12 atdirmaq

    Profesjonalista

  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:194
  • GG:
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Otwock
Offline

Napisano 22.01.2012 18:55

Proste pytanie : Do czego tu służy, bo coś mocno pomyliłem :D
R3X (22.01.2012 19:40):
napisz jeszcze raz, bo zupełnie nie czaję

Użytkownik atdirmaq edytował ten post 22.01.2012 19:44

  • +
  • -
  • 0

Ale fajny serw :o

Dołączona grafika


#13 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 22.01.2012 19:28

A jak to ma się do obciążenia serwera? Czyli jeśli, np. pobierałbym te informacje o serwerze co parę sekund (nie chcę tego robić, tylko tak pytam), to nie będzie któregoś serwera jakoś lagowało?
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#14 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 22.01.2012 19:39

Tak samo działają wszystkie Game Monitory, statusy itp, więc o odpytywane serwery bym się nie martwił. Moja implementacja jest oparta na kolejce, więc nie powinno też być problemu z serwerem odpytującym. W czasie testów zauważyłem tylko niezłe zwiechy jeśli jako IP podamy jakieś bzdury, np. 1246.3453.5435.346.
  • +
  • -
  • 0

#15 FetaGreen

    Profesjonalista

  • Użytkownik

Reputacja: 40
Pomocny

  • Postów:178
  • Imię:Łukasz
  • Lokalizacja:Nysa
Offline

Napisano 22.01.2012 20:22

A moglbys pokazac jak pobrac nazwe serwera i czy da sie to uzyc w www i jak?
+ jest i będzie :)
  • +
  • -
  • 0

#16 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 981
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 22.01.2012 21:28

i czy da sie to uzyc w www i jak?

do tego to masz np GameQ
  • +
  • -
  • 0

#17 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 22.01.2012 22:12

A moglbys pokazac jak pobrac nazwe serwera

pierwszy post to praktycznie nic więcej jak przykłady....
  • +
  • -
  • 0

#18 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 26.01.2012 09:42

A gdy np. na podstawię tego zrobie system /serwery, gdzie sieć na której prosperuje ma ponad 15 serwerów.. Czy serwer, który będzie pytać, na którym jest plugin i będzie pobierał tam : nazwę serwera, ip, mape i ilosc graczy obecnych na maksymalną ilość slotów ? 5 *15 = 75 co chwile pyta serwery mój w sensie.. Tu też na pewno aby nie będzie przeciążenia ? ;>

@@ No dobra, 3*15, bo IP se mogę z define wstawić, tak samo jak nazwę interesuje mnie, czy będzie przeciążenie w 'menu' z serwerami, gdzie jest ich ilość równa 15/16 na 3 parametry : ilość graczy, max. ilość slotów, grana mapa.

A jeszcze jedna prośba.. Umiałbyś zrobić, aby też pokazywalo ile czasu do konca mapy jest na ow serwerze ? Tak bym mógł to tak wykorzystać np.
[mapa, czas do konca] NazwaSerwera [OnlineGracze/Max.Slot]

Użytkownik ogieR- edytował ten post 26.01.2012 09:48

  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#19 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 27.01.2012 22:24

Z pobieraniem czasu tego nie pobierzesz , raczej się nie da tak.
Ja zrobiłem menu dałem w nim ilość graczy / max graczy i mapę i zrobiłem tak dla 5 serwerów , i nie mam ścinek więc też nie powinieneś mieć :)
Co do tematu
Zarąbiste coś :D
+
tu drobne ostrzeżenie
 ServerResponseParseInfo(Response, szName, 63, szMap, 63, szDirectory, 63, szDescription, 63, iPlayers, iMaxPlayers);
Jak mamy hosta który ma więcej niż 63 znaki to pobieranie się wyłozy np . Za graczy będzie pokazywać folder etc.
Dlatego najlepiej dać 127 a zmienną szName na 128 :)
  • +
  • -
  • 0

If you can dream it, you can do it.


#20 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 27.01.2012 22:38

skoro dziala to jak gamemonitory z php to powinno dać się pobierać cvary wiec tez czas do konca mapy xD
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych