Sure I can ;)
; Zeit speichern
Local time1 = MilliSecs()
; Stream erstellen
Local udp = CreateUDPStream(ServerPort)
; Request in den Stream schreiben
WriteByte udp,$FF
WriteByte udp,$FF
WriteByte udp,$FF
WriteByte udp,$FF
WriteByte udp,$54
WriteByte udp,$53
WriteByte udp,$6F
WriteByte udp,$75
WriteByte udp,$72
WriteByte udp,$63
WriteByte udp,$65
WriteByte udp,$20
WriteByte udp,$45
WriteByte udp,$6E
WriteByte udp,$67
WriteByte udp,$69
WriteByte udp,$6E
WriteByte udp,$65
WriteByte udp,$20
WriteByte udp,$51
WriteByte udp,$75
WriteByte udp,$65
WriteByte udp,$72
WriteByte udp,$70
WriteByte udp,$00
Local ServerIP% = INT_IP(IP)
; Nachricht an den Server schicken
SendUDPMsg(udp,ServerIP,ServerPort)
Local found = 0
; WHEN NOT DOING THIS NOTIFY,
; THE Repeat/Forever LOOP
; WILL NOT BE EXECUTED.
Notify "Klappt"
Repeat
; Überprüfen ob es einen Timeout gibt
If MilliSecs()-time1 > timeout Then
Return 1
End If
; Überprüfen ob eine Nachricht eingetroffen ist
If RecvUDPMsg(udp) Then
; TServerList Objekt erstellen
Local a.TServerList
; Alle TServerList Einträge abfragen
For a = Each TServerList
; Wenn es schon einen Eintrag für den
; abzufragenden Server gibt ...
If a\IP$ = IP$ And a\Port = ServerPort Then
; found = 1
found = 1
; -1 lesen
a\server\OK = ReadInt(udp)
; Request auslesen
a\server\Typ = ReadByte(udp)
; Protokollversion auslesen
a\server\Version = ReadByte(udp)
; Hostname lesen
a\server\Hostname = ReadZeroTerminatedString(udp)
; Map lesen
a\server\Map = ReadZeroTerminatedString(udp)
; Spielverzeichnis lesen
a\server\GameDirectory = ReadZeroTerminatedString(udp)
; Spielname lesen
a\server\GameDescription = ReadZeroTerminatedString(udp)
; Spiel ID lesen
a\server\AppID = ReadShort(udp)
; Anzahl der Spieler lesen
a\server\NumPlayers = ReadByte(udp)
; MaxSpieler lesen
a\server\MaxPlayers = ReadByte(udp)
; Anzahl der Bots lesen
a\server\NumOfBots = ReadByte(udp)
; Server-Typ lesen
a\server\Dedicated = ReadByte(udp)
; OS lesen
a\server\OS = ReadByte(udp)
; Password lesen
a\server\Password = ReadByte(udp)
; Server secure ?
a\server\Secure = ReadByte(udp)
; Spielversion lesen
a\server\GameVersion = ReadZeroTerminatedString(udp)
; Gerade gelesene Daten in die Felder eintragen
SetGadgetText(txtGame,a\server\GameDescription)
SetGadgetText(txtHost,a\server\Hostname)
SetGadgetText(txtMap,a\server\Map)
SetGadgetText(txtSpieler,a\server\NumPlayers + " von " + a\server\MaxPlayers)
If a\server\NumOfBots = 0 Then
SetGadgetText(txtBots,"Keine Bots")
Else
SetGadgetText(txtBots,a\server\NumOfBots + " Bots")
End If
If Chr(a\server\OS) = "l" Then
SetGadgetText(txtOS,"Linux")
ElseIf Chr(a\server\OS) = "w" Then
SetGadgetText(txtOS,"Windows")
End If
If Chr(a\server\Dedicated) = "d" Then
SetGadgetText(txtTyp,"Dedicated")
ElseIf Chr(a\server\Dedicated) = "l" Then
SetGadgetText(txtTyp,"Listen")
ElseIf Chr(a\server\Dedicated) = "h" Then
SetGadgetText(txtTyp,"HLTV")
End If
End If
Next
Forever
Sorry, it looks a bit ... un-organized ;)
There's a Notify directly in front of the Repeat/Forever loop. If I don't call Notify there, the loop won't be executed.
|