HL-Server Informationen abfragen
Verfasst: 05.05.2005 12:46
Hallo,
ich habe nen paar Funktionen für das Abfragen von Informationen eines HL1-Servers gemacht, die für 125ers IRC-Bot programmiert habe. Villeicht kann der eine oder andere es dennoch gebrauchen. Achtung ist nicht für HL2-Server (CSS). Ihr könnt nur HL1 Server damit abfragen incl. Mods. Für HL2-Server werde ich allerdings auch was proggen.
Viel Spaß
MFG Lukaso
ich habe nen paar Funktionen für das Abfragen von Informationen eines HL1-Servers gemacht, die für 125ers IRC-Bot programmiert habe. Villeicht kann der eine oder andere es dennoch gebrauchen. Achtung ist nicht für HL2-Server (CSS). Ihr könnt nur HL1 Server damit abfragen incl. Mods. Für HL2-Server werde ich allerdings auch was proggen.
Code: Alles auswählen
; #######################################################################################################################
; # #
; # Author: Lukas 'Lukaso' Niewalda #
; # Kommentar: Ihr benötigt UDPNetwork Libary von 'PureFan' #
; # http://www.purearea.net/pb/download/userlibs/Udpnetwork.zip #
; # # #
; #######################################################################################################################
Procedure HLServer_Connect(Server.s, Port.l)
Global HLServer.UDPConnect
If UDPInitNetwork()
If UDPConnectServer(Port, Server, HLServer.UDPConnect)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure HLServer_Disconnect()
UDPCloseConnection(HLServer)
EndProcedure
Procedure HLServer_GetDetails()
Structure Details
Address.s
Name.s
Map.s
Directory.s
Description.s
Players.b
Maxplayers.b
Protocol.b
Type.s
OS.s
Password.b
Modded.b
Modwebsite.s
Moddownload.s
Modversion.l
Modsize.l
Modserverside.b
Modcustomdll.b
Secure.b
EndStructure
Global HLServer_Details.Details
Command.s = Chr($FF) + Chr($FF) + Chr($FF) + Chr($FF) + "details" + Chr($0)
UDPSend(HLServer.UDPConnect, @Command, Len(Command))
*Buffer = AllocateMemory(4096)
UDPWaitUntilReceive(HLServer.UDPConnect, *Buffer, 4096)
HLServer_Details\Address = PeekS(*Buffer + 5 + Len) : Len + Len(HLServer_Details\Address)
HLServer_Details\Name = PeekS(*Buffer + 6 + Len) : Len + Len(HLServer_Details\Name)
HLServer_Details\Map = PeekS(*Buffer + 7 + Len) : Len + Len(HLServer_Details\Map)
HLServer_Details\Directory = PeekS(*Buffer + 8 + Len) : Len + Len(HLServer_Details\Directory)
HLServer_Details\Description = PeekS(*Buffer + 9 + Len) : Len + Len(HLServer_Details\Description)
HLServer_Details\Players = PeekB(*Buffer + 10 + Len)
HLServer_Details\Maxplayers = PeekB(*Buffer + 11 + Len)
HLServer_Details\Protocol = PeekB(*Buffer + 12 + Len)
HLServer_Details\Type = Chr(PeekB(*Buffer + 13 + Len))
HLServer_Details\OS = Chr(PeekB(*Buffer + 14 + Len))
HLServer_Details\Password = PeekB(*Buffer + 15 + Len)
HLServer_Details\Modded = PeekB(*Buffer + 16 + Len)
If HLServer_Details\Modded = #True
HLServer_Details\Modwebsite = PeekS(*Buffer + 17 + Len) : Len + Len(HLServer_Details\Modwebsite)
HLServer_Details\Moddownload = PeekS(*Buffer + 18 + Len) : Len + Len(HLServer_Details\Moddownload)
HLServer_Details\Modversion = PeekL(*Buffer + 20 + Len) : Len + 4
HLServer_Details\Modsize = PeekL(*Buffer + 21 + Len) : Len + 4
HLServer_Details\Modserverside = PeekB(*Buffer + 22 + Len)
HLServer_Details\Modcustomdll = PeekB(*Buffer + 23 + Len)
HLServer_Details\Secure = PeekB(*Buffer + 24 + Len)
Else
HLServer_Details\Secure = PeekB(*Buffer + 17 + Len)
EndIf
EndProcedure
Procedure HLServer_GetPlayers()
Structure Players
Id.b
Name.s
Score.l
Time.l
EndStructure
Global HLServer_Players_Count
Command.s = Chr($FF) + Chr($FF) + Chr($FF) + Chr($FF) + "players" + Chr($0)
UDPSend(HLServer.UDPConnect, @Command, Len(Command))
*Buffer = AllocateMemory(10240)
UDPWaitUntilReceive(HLServer.UDPConnect, *Buffer, 10240)
HLServer_Players_Count = PeekB(*Buffer + 5 + Len)
Dim HLServer_Players.Players(HLServer_Players_Count - 1)
For Player = 0 To HLServer_Players_Count - 1
HLServer_Players(Player)\Id = PeekB(*Buffer + 6 + Len + Player)
HLServer_Players(Player)\Name = PeekS(*Buffer + 7 + Len + Player) : Len + Len(HLServer_Players(Player)\Name)
HLServer_Players(Player)\Score = PeekL(*Buffer + 8 + Len + Player) : Len + 4
HLServer_Players(Player)\Time = Round(PeekF(*Buffer + 8 + Len + Player), 1) : Len + 4
Len + 1
Next
EndProcedure
If HLServer_Connect("80.190.246.150", 27016) ;HLServer_Connect("213.202.198.168", 27015) ; Connected zum Server
HLServer_GetDetails() ; Fragt den Server nach den 'Details' und schreibt diese in 'HLServer_Details'
HLServer_GetPlayers() ; Speichert Alle Spieler in das 'HLServer_Players' Array
HLServer_Disconnect() ; Beendet die Verbindung zum Server
Debug HLServer_Details\Address ; IP-Adresse des Servers
Debug HLServer_Details\Name ; Name des Servers
Debug HLServer_Details\Map ; Map die auf dem Server läuft
Debug HLServer_Details\Directory ; Pfad des Spieles (bei Counter-Strike = cstrike)
Debug HLServer_Details\Description ; Name des Spieles z.b. Counter-Strike
Debug HLServer_Details\Players ; Spieler auf dem Server
Debug HLServer_Details\Maxplayers ; Maximale Anzahl Spieler
Debug HLServer_Details\Protocol ; Protocol Version
Debug HLServer_Details\Type ; Typ des Servers (d = Dedicated, l = Listen)
Debug HLServer_Details\OS ; Betriebssystem (w = Windows, l = Linux)
Debug HLServer_Details\Password ; Ist der Server Passwortgeschützt?
Debug HLServer_Details\Modded ; Läuft ein MOD?
If HLServer_Details\Modded = #True
Debug HLServer_Details\Modwebsite ; Seite des MODs
Debug HLServer_Details\Moddownload ; Downloadmöglichkeit des MODs
Debug HLServer_Details\Modversion ; Die Version des MODs
Debug HLServer_Details\Modsize ; Größe des MODs
Debug HLServer_Details\Modserverside ; Serverseitiger MOD
Debug HLServer_Details\Modcustomdll ; Eigene DLL?
EndIf
Debug HLServer_Details\Secure ; Ist der Server im Secure Modus? (Funtzt glaub ich nicht)
SortStructuredArray(HLServer_Players(), 1, OffsetOf(Players\Score), #PB_Sort_Long) ; Sortiert die Liste nach Punkten
For Player = 0 To HLServer_Players_Count - 1 ; Gibt alles aus der Liste aus (HLServer_Players_Count = Global)
Debug "-------------------------------------"
Debug HLServer_Players(Player)\Id ; ID des Spielers
Debug HLServer_Players(Player)\Name ; Nick des Spielers
Debug HLServer_Players(Player)\Score ; Frags (Punkte) des Spielers
Debug HLServer_Players(Player)\Time ; Zeit die der Spieler auf dem Server verbracht hat
Next
EndIf

MFG Lukaso