Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Узнать кол-во игроков и слотов на другом сервере?
Узнать кол-во игроков и слотов на другом сервере?
Naykon Дата: Воскресенье, 16.11.2014, 15:55:40 | Сообщение # 1
Сообщений: 439
Репутация: -4 [ +/- ]
Вопрос в названии темы.

Тут же еще вопрос.. как получить имя другого сервера..?
Тут же как узнать карту на другом сервере?


Сообщение отредактировал Naykon - Воскресенье, 16.11.2014, 16:08:59
 
dron216 Дата: Воскресенье, 16.11.2014, 20:31:52 | Сообщение # 2
Сообщений: 151
Репутация: 18 [ +/- ]
Без сайта, думаю, нельзя... (ну может как то с Socket, но я в нём вообще не шарю). Можешь использовать что-то готовое (LGSL), например. Можешь сам с нуля страничку написать.
 
хвостег Дата: Воскресенье, 16.11.2014, 20:57:16 | Сообщение # 3
Сообщений: 161
Репутация: 53 [ +/- ]
https://developer.valvesoftware.com/wiki/Server_queries

A2S_INFO
через UDP.


Сообщение отредактировал хвостег - Воскресенье, 16.11.2014, 20:58:00
 
хвостег Дата: Понедельник, 17.11.2014, 03:08:39 | Сообщение # 4
Сообщений: 161
Репутация: 53 [ +/- ]
Вот набросал от нечего делать...
Код

#include <socket>

public OnPluginStart()
{
  Send("193.26.217.63", 27625, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
}

stock Send(String:Ip[], Port, String:Data[]) {
  new Handle:hData = CreateDataPack();
  WritePackString(hData, Data);
  ResetPack(hData);
   
  new Handle:socket = SocketCreate(SOCKET_UDP, OnSocketError);
  SocketSetArg(socket, hData);
  SocketConnect(socket, OnSocketConnected, OnSocketReceive, OnSocketDisconnected, Ip, Port);
}

public OnSocketConnected(Handle:socket, any:hData) {
  PrintToServer("> Connect");
   
  decl String:Data[128];
  ReadPackString(hData, Data, sizeof(Data));
  SocketSend(socket, Data, strlen(Data)+1);
   
  CloseHandle(hData);
}

public OnSocketReceive(Handle:socket, String:receiveData[], const dataSize, any:hData) {
  PrintToServer("> Receive");
  PrintToServer("> Data Size: %d", dataSize);
   
  new pos = SkipHeader(receiveData);
   
  new Header = ReadByte(receiveData, pos);
  PrintToServer("Header: %02X", Header);
   
  new Protocol = ReadByte(receiveData, pos);
  PrintToServer("Protocol: %d", Protocol);
   
  decl String:Name[128];
  ReadString(receiveData, pos, Name);
  PrintToServer("Name: %s", Name);
   
  decl String:Map[64];
  ReadString(receiveData, pos, Map);
  PrintToServer("Map: %s", Map);
   
  decl String:Folder[32];
  ReadString(receiveData, pos, Folder);
  PrintToServer("Folder: %s", Folder);
   
  decl String:Game[64];
  ReadString(receiveData, pos, Game);
  PrintToServer("Game: %s", Game);
   
  new ID = ReadShort(receiveData, pos);
  PrintToServer("Steam Application ID: %d", ID);
   
  new Players = ReadByte(receiveData, pos);
  PrintToServer("Players: %d", Players);
   
  new MaxPlayers = ReadByte(receiveData, pos);
  PrintToServer("Max. Players: %d", MaxPlayers);
   
  new Bots = ReadByte(receiveData, pos);
  PrintToServer("Bots: %d", Bots);
   
  new ServerType = ReadByte(receiveData, pos);
  PrintToServer("Server type: %c", ServerType);
   
  new Environment = ReadByte(receiveData, pos);
  PrintToServer("Environment: %c", Environment);
   
  new Visibility = ReadByte(receiveData, pos);
  PrintToServer("Visibility: %d", Visibility);
   
  new VAC = ReadByte(receiveData, pos);
  PrintToServer("VAC: %d", VAC);
   
  decl String:Version[64];
  ReadString(receiveData, pos, Version);
  PrintToServer("Version: %s", Version);
   
  PrintToServer("> End");
   
  CloseHandle(socket);
}

public OnSocketDisconnected(Handle:socket, any:hData) {
  PrintToServer("> Disconnected");
  CloseHandle(socket);
}

public OnSocketError(Handle:socket, const errorType, const errorNum, any:hData) {
  PrintToServer("> socket error %d (errno %d)", errorType, errorNum);
  CloseHandle(socket);
}

stock SkipHeader(String:data[])
{
  new Idx = StrContains(data, "\xFF\xFF\xFF\xFF");
  if(Idx != -1) { Idx += 4; } else { Idx = 0; }
  return Idx;
}

stock ReadByte(String:data[], &pos)
{
  pos++;
  return (data[pos-1] & 0xFF);
}

stock ReadShort(String:data[], &pos)
{
  pos += 2;
  return ((data[pos-1] & 0xFF) << 8) | ((data[pos-2] & 0xFF) << 0);
}

stock ReadString(String:data[], &pos, String:out[])
{
  new start = pos;
  while((data[pos] & 0xFF) != 0x0)
  {
   out[pos - start] = data[pos] & 0xFF;
   pos++;
  }
  out[pos - start] = data[pos] & 0xFF;
  pos++;
  return (pos - start)-1;
}

Прикрепления: serverinfo.sp(3.2 Kb)
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Узнать кол-во игроков и слотов на другом сервере?
  • Страница 1 из 1
  • 1
Поиск: