Entwickler-Ecke

Internet / Netzwerk - Auf Battlefiel 1942 Server connecten


superchatti - Fr 07.11.03 23:19
Titel: Auf Battlefiel 1942 Server connecten
Ich würde gerne den Ping von einem BF server ermitteln und Wenn man connect sagt darauf connecten wie mache ich sowas?


MrSaint - Sa 08.11.03 14:40

ping dürfte ja kein problem sein... die IP des servers wirst du ja kennen.... schwieriger wirds beim connecten... da brauchst du das protokoll, das BF da verwednet. und wenn das net öffentlich is, gehts nur durch reversed engineering... das wird aber heftig, sag ich dir gleich :?



MrSaint


superchatti - Sa 08.11.03 14:48

wie ermittle ich den Ping denn?


MrSaint - Sa 08.11.03 14:53

guck dir mal die Indy Kompos an, da is glaub was dabei.. oder die ICS Kompos ( http://www.overbyte.be )


MrSaint


Currywurst - Sa 08.11.03 18:37

zum joinen natürlich einfach die bf1942.exe mit parameter starten, zb. BF1942.exe +joinServer 217.160.178.129:14567 +restart 1

aber weisst du wie man die server liste vom gamespymaster bekommt??? das scheint wohl nich öffentlich zu sein, irgendein key muss da in der kommunikation mit dem gamespy master ausgetauscht werden, weiss zufällig jemand mehr dazu?


superchatti - Di 11.11.03 18:18

stimmen diese angegeben Parameter?


Currywurst - Di 11.11.03 18:32

was meinst du mit stimmen?, ist halt ein beispiel, 217.160.178.129 ist die ip und 14567 der port des servers, hab ich beides auch so getestet und ging


superchatti - Di 11.11.03 19:45

weißt du denn auch wie ich den Ping ermittle?


Currywurst - Mi 12.11.03 07:56

zum theme pingen solltest du eigentlich in der (google) suche reichlich finden, mein tipp, nimm indy und schau in den demos http://www.indyproject.org/download/Indy9.html

aber woher bekommst du denn die server ip?, bekommste eine liste der ganzen server?, wenn ja woher??, wie gesagt, bin sehr interessiert daran wie man an eine battlefield server liste kommt :-)


lemming - Mi 12.11.03 09:47

superchatti. Das was du pingen meinst glaube ich ist nicht das was du wirklich willst. Du willst doch schauen ob der BF Server auf einem rechner irgendwo im Internet gerade läuft und am besten noch ob gerade ein Platz darauf frei ist.

Das kennen wir ja alle von half-Life. Bei Half-Life war es sehr einfach, da man RCON hatte. Das Urgestein aus Quake 1 ff..

Bei Battelefield verhält es sich ähnlich. Da solltest du mal nach einem SDK für Modder ausschau halten. Darin wird meistens erklärt wie man auch die Console des Servers fernsteuert oder wie z.B. GameSpy den Status abfrägt.

Ich kann dir gern dabei helfen, die Infos musst allerdings du auftreiben. Dafür hab ich keine Zeit.


Currywurst - Mi 12.11.03 10:40

also ich habe grade mal ein bissel gegoogelt, hier das forum von kquery http://www.kquery.com/forums/index.php?showforum=7 dort hat jemand selbiges gefragt, und es ist ein beispiel dabei, allerdings in c#
http://www.kquery.com/forums/index.php?showtopic=495

meine frage wurde dort auch beantwortet, die serverliste ist nich public :-( sch** gamespy (und für ASE gibs nen extra master, der natürlich aber auch nich öffentlich ist)


superchatti - Mi 12.11.03 18:54

sanke das ihr mir bis jetzt geholfen habt.
Also is ja schön und gut mit dem C# Code...
Aber war bringt er mir in C#?

Danke für die ganzen Antworten


Currywurst - Do 13.11.03 08:05

superchatti hat folgendes geschrieben:
Aber war bringt er mir in C#?


sorry für den spruch, aber man könnte es mit denken versuchen! :shock:
ich hab genau wie du keine ahnung von c#, mit indy und udp hab ich auch nie wirklich was gemacht, aber nach harten 3 minuten habe ich erkannt das man lediglich ein udp paket mit dem inhalt '\\info\\' an den server (seinem query port) schicken muss, und dann kommen die daten zurück...

das wesentliche in stolzen zwei zeilen:

Delphi-Quelltext
1:
2:
3:
  IdUDPClient1.Send('\\info\\');
  ShowMessage(IdUDPClient1.ReceiveString(-1));
  //natürlich is der port/die ip im objektinspektor eingestellt gewesen


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


superchatti - Do 13.11.03 16:43

also...
Ich habe das gemacht, aber irgendwie hängt sich dann das ganze Programm weg!


Obi-Wan - Sa 22.04.06 16:57

Sorry das ich den Thread ausgrabe aber ich fänd es unnütz einen neuen dafür aufzumachen. Ich habe das hier so gemacht wie beschrieben, allerdings mit Battlefield 2 und es funzt auch wunderbar, wenn man nur die serverstats haben will...
Denn der Server scheint mehrere UDP Packets zu schicken (max 1400 bytes wenn ich mich nicht irre). Wenn ich das hier mache:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
udp.Active := true;
udp.Host := '81.3.59.98';
udp.Port := 31531;
udp.Send('\status\');
udp.ReceiveBuffer()
status := udp.ReceiveString(1000);
udp.Active := false;


bekomme ich zwar einen string zurück mit den serverinfos, jedoch sind hinten dran noch die spielerinfos und ca. bei spieler 20/21 sind die abgeschnitten. LAnge rede kurzer sinn, wie bekomme ich es bei dem tidudpclient hin das der die packets hintereinander ausliest und zusammenfügt? Bin jetzt schon seit 2 stunden am suchen (delphi-forum, delphi-source, delphi-praxis, google, ...) aber ich finde einfach nichts.

Wäre schön wenn da einer was wüßte, stehe echt auf dem schlauch :)

MfG

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt