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; }
Гости не могут скачивать файлы
|
|
|
| |