Hallo guten Morgen
Ich bastel seit ein paar Tagen an einem Launcher/Joiner fr meinen Gameserver (Arma2 - Dayz).
Dieser kann erkennen ob die richtigen Mods in der richtigern Version vorliegen und kann bei bedarf auch korrupte oder neue Dateien anfordern und Downloaden.
Jetzt mchte ich im Launcher auch noch gerne anzeigen Lassen wie viele Spieler sich aktuell auf dem Server befinden. Eventuell auch die Spielernamen; ist aber nicht so wichtig.
Aktuell regel ich das ber ein PHP-
Query-Script, da ich dies als fertige Lsung gefunden habe.
Quelle:
https://github.com/xPaw/PHP-Source-Query-Class
Hier ein Link zum bereits konfigurierten Script:
http://last-templers.de/a2epoch/query/query.php
Jedoch mchte ich mit meinem Launcher nicht erst Text aus einer von PHP erstellten Seite auslesen und ihn dann anzeigen. Das kann ja auch direkt geschehen.
Zum Thema Delphi &
Query an Source Server habe ich schon einiges gefunden, jedoch stoe ich an einem Punkt an meine Grenzen.
Es gibt ein Beispielprojekt, welches aufzeigt, wie ein
Query an einen Source Server gesendet wird und empfangene Daten ausliest.
Quelle:
http://www.planet-source-code.com/vb...=2022&lngWId=7
Dies Funktioniert auch ganz gut wenn man den Server und Port angibt.
In meinem Fall wre das
IP:5.45.97.44 Port:2301
Wer sich das Projekt nicht erst laden mchte ums selber auszuprobieren... hier die Ausgabe:
Code:
I[L-T-S] Epoch Origins (1.0.5.1/125548)Taviarma2arrowpcDayZ Epoch OriginsŠ„dw1.63.125548 `7'X@bt,r163,n125548,s7,i1,mf,lf,vf,dt,tcoop,g65545,c2147483647-2147483647,pw,Š„žP…Nb~PP30#f/D0žB0jCz'P3„#f/D„žB„jCz',جq!8x7P7wqbju<–q'ƒHbu0u„4kukua~'ƒ ”Ž/}u€Uv' ”Ž`uhtu'; )sP' ”Ž)soY.Dz'z'JAY<Ba<B;&DX0wh€
Œ@"A$Z<+w
œ0w$W-w<+wȹw6ŒPŒz'|PŒtŒmuPŒ(
pP˜ŸY˜ŸŒŠ0wh€ŒP`(Œ0wЪ8+w“ɹwŒŒP˜ŸP3'PŒŒPŒ(jC5wŒ(Š5w˜Ÿ€ŒŒPŒ„(qeW0W3wh45wŒŒ*wŒŒ*wx5w8Œ”5wɹwŒ
Das ist auch erstmal ganz okay dass das so ausgegeben wird. Jedoch kann ich keine Ausgabe der aktuellen Anzahl der Spieler bzw. das Maximum der Spieler erkennen. Und ja, der Server war nicht Spielerlos.
Weiterfhrende Informationen sollte ich hier bekommen:
Quelle:
https://developer.valvesoftware.com/wiki/Server_queries
Das einzige was ich noch verstehe ist, dass der Header & das Paket von A2S_Info im Delphi Quellcode angegeben wurde. Laut der Informationen auf der Valve Seite sollte doch auch die Anzahl der Spieler mit ausgegeben werden.
Nun gut. ich poste nochmal den Code der das Paket senden und Empfngt:
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var
x:
array[0..25]
of byte;
y:
array[0..1248]
of byte;
i,ctr,r,p: integer;
servername:
string;
currentmap:
string;
begin
memo1.Clear;
udp1.RemotePort:= edit2.Text;
udp1.RemoteHost:= edit1.Text;
udp1.Active:= true;
// The following bytes represent the query 'TSource Engine Query'
// This can be applicable to HL1 too.
x[0]:= $FF;
x[1]:= $FF;
x[2]:= $FF;
x[3]:= $FF;
x[4]:= $54;
x[5]:= $53;
x[6]:= $6F;
x[7]:= $75;
x[8]:= $72;
x[9]:= $63;
x[10]:= $65;
x[11]:= $20;
x[12]:= $45;
x[13]:= $6E;
x[14]:= $67;
x[15]:= $69;
x[16]:= $6E;
x[17]:= $65;
x[18]:= $20;
x[19]:= $51;
x[20]:= $75;
x[21]:= $65;
x[22]:= $72;
x[23]:= $79;
x[24]:= $00;
udp1.SendBuf(x,sizeof(x));
i:= 0;
ctr:= 0;
r:= 0;
udp1.ReceiveBuf(y,sizeof(y));
repeat
begin
if y[i] = $00
then
begin
inc(ctr);
if ctr = 1
then r:= i;
if ctr = 2
then
begin
p:= i;
servername:= copy(memo1.Text,r+1,(i-r)-1);
lblservername.Caption:= servername;
end;
if ctr = 3
then
begin
currentmap:= copy(memo1.Text,p,(i-p)-1);
lblcurrentmap.Caption:= currentmap;
end;
end;
memo1.Text:= memo1.Text + chr(y[i]);
inc(i);
end;
until i = 1248;
end;
Beim Kompilieren kommt bei mir die Meldung:
Die Methode udp1Receive, auf die udp1.OnReceive verweist, enthlt eine inkompatible Parameterliste. Soll der Verweis entfernt werden?
Dort kann NEIN geklickt werden und das Programm tut, was es soll.
Andere Quellen verwiesen auch auf die INDY9/10 Komponenten die man verwenden kann.
Ich bin verwirrt wie ich weiter machen kann und wrde mich sehr freuen wenn sich ein kundiger der Materie hier melden wrde um mir zu helfen.
Danke im Voraus.
Florian