Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Lukaso
Beiträge: 720 Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:
Beitrag
von Lukaso » 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.
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
Viel Spaß
MFG Lukaso
SoS
Beiträge: 340 Registriert: 29.08.2004 09:31
Kontaktdaten:
Beitrag
von SoS » 05.05.2005 15:11
ich spiele zwar weder HL1 noch HL2 aber gebrauchen kann ich das trotzdem.
Woher bekommt man überhaupt die Infos zum Aufbau der Structuren ?
Lukaso
Beiträge: 720 Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:
Beitrag
von Lukaso » 05.05.2005 16:41
SoS hat geschrieben: ich spiele zwar weder HL1 noch HL2 aber gebrauchen kann ich das trotzdem.
Woher bekommt man überhaupt die Infos zum Aufbau der Structuren ?
Die Structure hat damit nix zu tun, die hab ich selba gemacht. Wie das Protocol aufgebaut ist, steht in der HL-SDK.
Auszug:
"players"
Server responds with the following packet:
(int32) -1
(byte) ASCII 'D' (players response, S2A_PLAYER)
(byte) active client count
for each active client
(byte) client number / index
(string) player name
(int32) client's frag total
(float32) client's total time in-game
"details"
(int32) -1
(byte) ASCII 'm' ( S2A_INFO_DETAILED )
(string) net address of server
(string) name of the host / server
(string) name of the map
(string) game directory (i.e. valve/)
(string) Game description (e.g. "half-life multiplay")
(byte) active client count
(byte) maximum clients allowed
(byte) protocol version
(byte) type of server == 'l' for listen or 'd' for dedicated
(byte) os of server == 'w' for win32 or 'l' for linux
(byte) password on server == 1 or yes, 0, for no
(byte) is server running a mod? == 1 for yes, 0 for no
IFF the server is running mod byte was 1:
(string) URL for mod's "info" website
(string) URL for mod's download ftp server
(string) Empty string, unused (used to be HL version)
(int32) mod version #
(int32) mod download size ( in bytes, approx. )
(byte) is the mod a server side only mod? 1 == yes, 0 == no
(byte) does this server require you to have a custom client side .dll ( client.dll )? 1 == yes, 0 == no.
Protocol extension (SDK 2.3), sent whether or not the mod byte is 0 or 1
(byte) server is a secure server == 1 for yes, 0 for no
MFG Lukaso
Lukaso
Beiträge: 720 Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:
Beitrag
von Lukaso » 12.02.2006 20:40
Hier nen Update da mich da einige Leute danach fragten:
Nach einem Update wurde das Query Protokoll dem SourceQuery Protokoll angepasst. Jetzt könnt ihr auch Source Server abfragen.
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 #
; # Kontakt: lukaso@gpfclan.de #
; # www.gpfclan.de #
; # Datum: 24. November 2005 #
; ############################################################################
;{ Structures
Structure Ping
Ping.l
Avarge.l
Total.l
Count.l
EndStructure
Structure Details
IsSource.b
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
Structure Players
Id.b
Name.s
Score.l
Time.l
EndStructure
Structure Rules
Key.s
Value.s
EndStructure
;}
;{ Globals
Global HL2Server.UDPConnect
Global HL2Server_IPAddress.s
Global HL2Server_Details.Details
Global HL2Server_Ping.Ping
Global HL2Server_Players_Count.b
Global HL2Server_Rules_Count.w
;}
;{ Procedures
Procedure.b LoByte(Value.b)
ProcedureReturn Value & $F
EndProcedure
Procedure.b HiByte(Value.b)
ProcedureReturn (Value >> 4) & $F
EndProcedure
Procedure.s LongToBytes(Long.l)
*Memory = AllocateMemory(4)
PokeL(*Memory, Long)
For Num = 0 To 4
Output$ + PeekS(*Memory + Num, 1)
Next
FreeMemory(*Memory)
ProcedureReturn Output$
EndProcedure
Procedure.b HL2Server_InitNetwork()
If UDPInitNetwork()
RetVal = #True
EndIf
ProcedureReturn RetVal
EndProcedure
Procedure.b HL2Server_Connect(Server.s, Port.l)
If UDPIsAvailable() <> #False
HL2Server_IPAddress = Server + ":" + Str(Port)
If UDPConnectServer(Port, Server, HL2Server.UDPConnect)
UDPStartCaptureEvents(HL2Server.UDPConnect)
RetVal = #True
EndIf
EndIf
ProcedureReturn RetVal
EndProcedure
Procedure.l HL2Server_Receive()
Repeat
*PreBuffer = AllocateMemory(1400)
If *PreBuffer
If Start = 0
Start = ElapsedMilliseconds()
EndIf
Repeat
BytesReceived = UDPReceive(HL2Server.UDPConnect, *PreBuffer, 1400)
Delay(1)
Until BytesReceived > 0 Or (ElapsedMilliseconds() - Start) > 1000
If BytesReceived > 0
Type = PeekL(*PreBuffer)
If Type = -1
FreeMemory(*FinalBuffer)
ProcedureReturn *PreBuffer
ElseIf Type = -2
PacketId = PeekL(*PreBuffer + 4)
Packet = HiByte(PeekL(*PreBuffer + 8))
Packets = LoByte(PeekL(*PreBuffer + 8))
If Sucsessful = 0
*FinalBuffer = AllocateMemory(1391 * Packets)
EndIf
CopyMemory(*PreBuffer + 9, *FinalBuffer + (Packet * 1391), 1391) : Sucsessful + 1
FreeMemory(*PreBuffer)
If Sucsessful = Packets
ProcedureReturn *FinalBuffer
Else
Start = ElapsedMilliseconds()
EndIf
EndIf
EndIf
FreeMemory(*PreBuffer)
EndIf
Until (ElapsedMilliseconds() - Start) > 2000
If *FinalBuffer
FreeMemory(*FinalBuffer)
EndIf
ProcedureReturn #False
EndProcedure
Procedure.b HL2Server_Disconnect()
If UDPIsAvailable() <> #False
UDPEndCaptureEvents(HL2Server.UDPConnect)
UDPCloseConnection(HL2Server)
RetVal = #True
EndIf
ProcedureReturn RetVal
EndProcedure
Procedure.l HL2Server_GetChallange()
If UDPIsAvailable() <> #False
Command.s = Chr($FF) + Chr($FF) + Chr($FF) + Chr($FF) + Chr($57) + Chr($0)
Start = ElapsedMilliseconds()
UDPSend(HL2Server.UDPConnect, @Command, Len(Command))
*Buffer = HL2Server_Receive()
If *Buffer
HL2Server_Ping\Ping = ElapsedMilliseconds() - Start
HL2Server_Ping\Total + HL2Server_Ping\Ping
HL2Server_Ping\Count + 1
HL2Server_Ping\Avarge = HL2Server_Ping\Total / HL2Server_Ping\Count
Len + 4
Type = PeekB(*Buffer + Len) : Len + 1
If Type = $41
Challenge = PeekL(*Buffer + Len)
EndIf
EndIf
FreeMemory(*Buffer)
EndIf
ProcedureReturn Challenge
EndProcedure
Procedure.b HL2Server_ResetPing()
HL2Server_Ping\Ping = 0
HL2Server_Ping\Total = 0
HL2Server_Ping\Count = 0
HL2Server_Ping\Avarge = 0
ProcedureReturn #True
EndProcedure
Procedure.b HL2Server_GetDetails()
If UDPIsAvailable() <> #False
Command.s = Chr($FF) + Chr($FF) + Chr($FF) + Chr($FF) + Chr($54) + "Source Engine Query" + Chr($0)
UDPSend(HL2Server.UDPConnect, @Command, Len(Command))
*Buffer = HL2Server_Receive()
If *Buffer
Len + 4
Type = PeekB(*Buffer + Len) : Len + 1
If Type = $6D
HL2Server_Details\IsSource = #False
HL2Server_Details\Address = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Address) + 1
If HL2Server_Details\Address <> HL2Server_IPAddress : HL2Server_Details\Address = HL2Server_IPAddress : EndIf
HL2Server_Details\Name = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Name) + 1
HL2Server_Details\Map = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Map) + 1
HL2Server_Details\Directory = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Directory) + 1
HL2Server_Details\Description = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Description) + 1
HL2Server_Details\Players = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Maxplayers = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Protocol = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Type = Chr(PeekB(*Buffer + Len)) : Len + 1
HL2Server_Details\OS = Chr(PeekB(*Buffer + Len)) : Len + 1
HL2Server_Details\Password = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Modded = PeekB(*Buffer + Len) : Len + 1
If HL2Server_Details\Modded = #True
HL2Server_Details\Modwebsite = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Modwebsite) + 1
HL2Server_Details\Moddownload = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Moddownload) + 1
Unused$ = PeekS(*Buffer + Len) : Len + Len(Unused$) + 1
HL2Server_Details\Modversion = PeekL(*Buffer + Len) : Len + 4
HL2Server_Details\Modsize = PeekL(*Buffer + Len) : Len + 4
HL2Server_Details\Modserverside = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Modcustomdll = PeekB(*Buffer + Len) : Len + 1
EndIf
HL2Server_Details\Secure = PeekB(*Buffer + Len)
RetVal = #True
ElseIf Type = $49
HL2Server_Details\IsSource = #True
HL2Server_Details\Address = HL2Server_IPAddress
HL2Server_Details\Protocol = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Name = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Name) + 1
HL2Server_Details\Map = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Map) + 1
HL2Server_Details\Directory = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Directory) + 1
HL2Server_Details\Description = PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Description) + 1
PeekW(*Buffer + Len) : Len + 2 ; Steam Application number (currently always set to 0)
HL2Server_Details\Players = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Maxplayers = PeekB(*Buffer + Len) : Len + 1
PeekB(*Buffer + Len) : Len + 1 ; Number of bot players currently on the server
If PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Type = "d"
Else
HL2Server_Details\Type = "l"
EndIf
HL2Server_Details\OS = Chr(PeekB(*Buffer + Len)) : Len + 1
HL2Server_Details\Password = PeekB(*Buffer + Len) : Len + 1
HL2Server_Details\Secure = PeekB(*Buffer + Len) : Len + 1
PeekS(*Buffer + Len) : Len + Len(HL2Server_Details\Address) + 1 ; The version of the game
RetVal = #True
EndIf
EndIf
FreeMemory(*Buffer)
EndIf
ProcedureReturn RetVal
EndProcedure
Procedure.b HL2Server_GetPlayers(Challange.l)
If UDPIsAvailable() <> #False
Command.s = Chr($FF) + Chr($FF) + Chr($FF) + Chr($FF) + Chr($55) + LongToBytes(Challange) + Chr($0)
UDPSend(HL2Server.UDPConnect, @Command, Len(Command))
*Buffer = HL2Server_Receive()
If *Buffer
Len + 4
Type = PeekB(*Buffer + Len) : Len + 1
If Type = $44
HL2Server_Players_Count = PeekB(*Buffer + Len) : Len + 1
If HL2Server_Players_Count > 0
Dim HL2Server_Players.Players(HL2Server_Players_Count - 1)
For Player = 0 To HL2Server_Players_Count - 1
HL2Server_Players(Player)\Id = PeekB(*Buffer + Len) : Len + 1
HL2Server_Players(Player)\Name = PeekS(*Buffer + Len) : Len + Len(HL2Server_Players(Player)\Name) + 1
HL2Server_Players(Player)\Score = PeekL(*Buffer + Len) : Len + 4
HL2Server_Players(Player)\Time = Round(PeekF(*Buffer + Len), 1) : Len + 4
Next
RetVal = #True
EndIf
EndIf
EndIf
FreeMemory(*Buffer)
EndIf
ProcedureReturn RetVal
EndProcedure
Procedure.b HL2Server_GetRules(Challange.l)
If UDPIsAvailable() <> #False
Command.s = Chr($FF) + Chr($FF) + Chr($FF) + Chr($FF) + Chr($56) + LongToBytes(Challange) + Chr($0)
UDPSend(HL2Server.UDPConnect, @Command, Len(Command))
*Buffer = HL2Server_Receive()
If *Buffer
Len + 4
Type = PeekB(*Buffer + Len) : Len + 1
If Type = $45
HL2Server_Rules_Count = PeekW(*Buffer + Len) : Len + 2
If HL2Server_Rules_Count > 0
Dim HL2Server_Rules.Rules(HL2Server_Rules_Count - 1)
For Rule = 0 To HL2Server_Rules_Count - 1
HL2Server_Rules(Rule)\Key = PeekS(*Buffer + Len) : Len + Len(HL2Server_Rules(Rule)\Key) + 1
HL2Server_Rules(Rule)\Value = PeekS(*Buffer + Len) : Len + Len(HL2Server_Rules(Rule)\Value) + 1
Next
RetVal = #True
EndIf
EndIf
EndIf
FreeMemory(*Buffer)
EndIf
ProcedureReturn RetVal
EndProcedure
Procedure.s HL2Server_GetVariable(Variable.s)
If HL2Server_Rules_Count > 0
For Rule = 0 To HL2Server_Rules_Count - 1
If HL2Server_Rules(Rule)\Key = Variable
ProcedureReturn HL2Server_Rules(Rule)\Value
EndIf
Next
ProcedureReturn ""
Else
ProcedureReturn ""
EndIf
EndProcedure
;}
;{ Testexample
If HL2Server_InitNetwork() AND HL2Server_Connect("gpfclan.de", 27015) ; Connected zum Server
Challange = HL2Server_GetChallange() ; Fragt den Challengewert ab, wird für GetPlayers und GetRules gebraucht
HL2Server_GetDetails() ; Fragt den Server nach den 'Details' und schreibt diese in 'HL2Server_Details'
HL2Server_GetPlayers(Challange) ; Speichert Alle Spieler in das 'HL2Server_Players' Array
HL2Server_GetRules(Challange) ; Speichert Alle Regeln in das 'HL2Server_Rules' Array
HL2Server_Disconnect() ; Beendet die Verbindung zum Server
Debug HL2Server_Ping\Ping ; Ping zum Server
Debug HL2Server_Details\IsSource ; Ist Source Server?
Debug HL2Server_Details\Address ; IP-Adresse des Servers
Debug HL2Server_Details\Name ; Name des Servers
Debug HL2Server_Details\Map ; Map die auf dem Server läuft
Debug HL2Server_Details\Directory ; Pfad des Spieles (bei Counter-Strike = cstrike)
Debug HL2Server_Details\Description ; Name des Spieles z.b. Counter-Strike
Debug HL2Server_Details\Players ; Spieler auf dem Server
Debug HL2Server_Details\Maxplayers ; Maximale Anzahl Spieler
Debug HL2Server_Details\Protocol ; Protocol Version
Debug HL2Server_Details\Type ; Typ des Servers (d = Dedicated, l = Listen)
Debug HL2Server_Details\OS ; Betriebssystem (w = Windows, l = Linux)
Debug HL2Server_Details\Password ; Ist der Server Passwortgeschützt?
Debug HL2Server_Details\Modded ; Läuft ein MOD?
If HL2Server_Details\Modded = #True
Debug HL2Server_Details\Modwebsite ; Seite des MODs
Debug HL2Server_Details\Moddownload ; Downloadmöglichkeit des MODs
Debug HL2Server_Details\Modversion ; Die Version des MODs
Debug HL2Server_Details\Modsize ; Größe des MODs
Debug HL2Server_Details\Modserverside ; Serverseitiger MOD
Debug HL2Server_Details\Modcustomdll ; Eigene DLL?
EndIf
Debug HL2Server_Details\Secure ; Ist der Server im Secure Modus?
SortStructuredArray(HL2Server_Players(), 1, OffsetOf(Players\Score), #PB_Sort_Long) ; Sortiert die Liste nach Frags
For Player = 0 To HL2Server_Players_Count - 1 ; Gibt alles aus der Liste aus (HL2Server_Players_Count = Global)
Debug "-------------------------------------"
Debug HL2Server_Players(Player)\Id ; ID des Spielers
Debug HL2Server_Players(Player)\Name ; Nick des Spielers
Debug HL2Server_Players(Player)\Score ; Frags (Punkte) des Spielers
Debug HL2Server_Players(Player)\Time ; Zeit die der Spieler auf dem Server verbracht hat
Next
For Rule = 0 To HL2Server_Rules_Count - 1 ; Gibt alles aus der Liste aus (HL2Server_Rules_Count = Global)
Debug "-------------------------------------"
Debug HL2Server_Rules(Rule)\Key ; Name der Server Variable
Debug HL2Server_Rules(Rule)\Value ; Wert der Server Variable
Next
EndIf
;}
MFG Lukas