Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Counterstrike Server ansteuern (https://www.delphipraxis.net/1816-counterstrike-server-ansteuern.html)

unaimed 25. Dez 2002 17:59


Counterstrike Server ansteuern
 
Hallo,
weiß einer, wie ich einen Counterstrike server von Delphi aus ansteuern kann?
Ich möchte ein Programm schreiben, dass mir das Rcon Passwort des Servers überprüft und bei richtigem Passwort weitere Serverbefehle erlaubt(ähnlich wie HLSW). Mir fehlt dazu aber der Befehl, um den Server anzusteuern.

Wenn mir jemand weiterhelfen könnte, wäre ich dankbar.

MfG
unaimed

Privateer3000 25. Dez 2002 22:55

Hi,

da ich auch ein "Counterstriker" bin, hatte ich mir auchschonmal diese Frage gestellt.
Da aber alles über diese Server(GS,4NetPlayers usw) undokumentiert ist, wird es garnicht so einfach.
Vielleicht sollte man es aber "im Auge behalten" *gg*

DerKapitalist 26. Dez 2002 00:48

hi

zuerst würde ich mal einfach ne Runde zocken und nebenher ein Netzwerksniffer laufen lassen, dann die Befehle ausführen, die dich interessieren und dann im Sniffer sortieren und schauen, ob du schlau draus wirst.

iaby 26. Dez 2002 10:03

du bekommst keine rückmeldung von dem server ob dein rcon-passwort richtig war!
wie das aber genau geht???
das mit dem sniffer hört sich mal interessant an! ;-)

unaimed 26. Dez 2002 15:08

Erstmal vielen Dank für die Antworten, das mit dem Netzwerksniffer muss ich auf jedenfall mal ausprobieren...

Danke an alle, wenn noch jemand Befehle oder andere nützliche Tips hat, würde ich mich auch freuen.

MfG
unaimed

Jan 26. Dez 2002 16:34

Hallo Unaimed,

ich habe bereits in einem anderen Beitrag etwas zu dem Thema gepostet, handelt sich da zwar um php, aber die Befehle sollten die gleichen sein.
Du musst dich allerdings durch die angefügte class in php durcharbeiten, obwohl es nicht sehr schwer ist die codes zu finden.
http://www.delphipraxis.net/viewtopic.php?t=1823
greetz
Jan

unaimed 26. Dez 2002 17:13

Hallo Jan,
die Class ist leider nicht mehr auf dem Server.
Ich weiß, dass ich den Server über UDP ansteuern kann, bzw. muss, wenn ich Ergebnisse will. Die Strings sind z.B. rules, ping, usw...

Ich weiss aber nicht, wie ich das jetzt in Delphi umsetzen kann.

Trotzdem mal danke für deinen Post.

Achso, in Php bin ich zwar nicht so besonders gut, aber der Mensch ist ja lernfähig, muss mich mal durchg00glen...

Jan 26. Dez 2002 17:20

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Unaimed,
Oh sry, wusste nicht, dass die datei nichtmehr existiert.
Werde sie hier mal anfügen.
Aber das ist schon etwas aufwendiger als du dir vorstellst, naja, und es ist halt erstmal nur zum Infos lesen, nicht zum Befehle senden.
Gruss
Jan

unaimed 26. Dez 2002 17:23

Vielen Dank, dass du so schnell gepostet hast.

Zunächst geht es mir sowieso erstmal darum, überhaupt etwas vom Server zu empfangen, usw...

Danke für die Datei, ich werde sie mal durcharbeiten.

radhome 27. Dez 2002 10:01

Ein bischen Code ...
 
Moin!

Hab schon vor länger Zeit was programmiert um HL-Server abzufragen.
Stelle den Quellcode gerne auch online. Hier ein kleiner Auszug:



Delphi-Quellcode:
var
    NMUDP1: TNMUDP;

procedure DoUpdate;

var
  TmpStr: String;
  buffer:array[0..25]of Char;
  I:Integer;
Begin
  NMUDP1.ReportLevel := Status_Basic;
  NMUDP1.RemoteHost := 'irgendeine IP';
  NMUDP1.RemotePort := 'meistens irgendwas mit 27000';
  // Sende 4x Das Char 255 und dann 'details' und am Ende Char 0
  TmpStr := Chr(255)+Chr(255)+Chr(255)+Chr(255)+'details'+Chr(0);
  For i:= 1 to Length(TMPStr) do
   buffer[i-1]:=tmpstr[i];
  NMUDP1.SendBuffer(buffer,Length(TmpStr));
  // Sende 4x Das Char 255 und dann 'players' und am Ende Char 0
    TmpStr := Chr(255)+Chr(255)+Chr(255)+Chr(255)+'players'+Chr(0);
  For i:= 1 to Length(TMPStr) do
   buffer[i-1]:=tmpstr[i];
  NMUDP1.SendBuffer(buffer,Length(TmpStr));
  // Sende 4x Das Char 255 und dann 'rules' und am Ende Char 0
    TmpStr := Chr(255)+Chr(255)+Chr(255)+Chr(255)+'rules'+Chr(0);
  For i:= 1 to Length(TMPStr) do
   buffer[i-1]:=tmpstr[i];
  NMUDP1.SendBuffer(buffer,Length(TmpStr));
end;


// Und zum auswerten:

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  MyStream: TMemoryStream;
  TmpStr,TmpStr2: String;
  buffer:array[0..2048] of Char;
  I,j:Integer;
  ID,styp,os:Char;
  mccount,ccount,count,pv,pass:Word;
  pfrag:longInt;
  ptime:single;
  tfrag:longint;
begin
   NMUDP1.ReadBuffer(buffer, NumberBytes);
   ID:=buffer[4];
case ID of
 'D':begin
     //No. of Players ub ein Stringgrid namens "pl"
     i:=0; J:=5;tfrag:=0;
     pl.RowCount:=2; pl.cells[0,1]:=''; pl.cells[1,1]:='';
     count:=Ord(buffer[J]); J:=7;
     if count > 0 then begin
      repeat
      tmpstr:=''; pfrag:=0;
      While buffer[j] <> Chr(0) do
      begin
       tmpstr:=tmpStr+buffer[j];
       Inc(j);
      end;
      J:=j+10;
      // Ein kleiner "Workaround" für Frags <= 0
      pfrag:=Ord(buffer[j-9]); if Ord(buffer[j-8])=255 then
      pfrag:=pfrag -256; tfrag:=tfrag+pfrag;
      inc(i);
      pl.cells[0,I]:=IntToStr(pfrag);
      pl.cells[1,I]:=tmpStr;
      pl.RowCount:=I+1;
      until I =count;
     end;
     DoSort;
    end;
  'E':begin     // jetzt kommen Serverdaten, also RULES
     i:=0; J:=5; // im Format "variable=irgendwas"
    count:=Ord(buffer[J])+Ord(buffer[j+1])*256; J:=7;
     if count > 0 then begin
      repeat
      tmpstr:='';
      tmpstr2:='';
      While buffer[j] <> Chr(0) do
      begin
       tmpstr:=tmpStr+buffer[j];
       Inc(j);
      end;
      Inc(J);
      rg.Cells[0,i+1]:=tmpstr;
      While buffer[j] <> Chr(0) do
      begin
       tmpstr2:=tmpStr2+buffer[j];
       Inc(j);
      end;
      rg.Cells[1,i+1]:=tmpstr2;
      if tmpstr='sv_contact' then // steht da Punkbuster drin?
       If Pos('{PB',tmpStr2)> 0 then
       // pbimg.Visible:=True else pbimg.Visible:=False;
      Inc(j);
      Inc(I);
      until I =count;
      rg.RowCount:=count+1;
     end;
    end;
  'm':begin // Server-Kurzinfo
      J:=5; I:=0;
      repeat
      INC(I);
     tmpstr:='';
      While buffer[j] <> Chr(0) do
     begin
      tmpstr:=tmpStr+buffer[j];
      Inc(j);
     end;
     Inc(J);
      case I of
      2: form1.Caption:='go2bf - '+tmpStr;
      3: status.caption:='Map: '+tmpstr; //if lmap.Caption <> tmpstr then
      4: begin lmod.caption:=tmpstr; status.caption:=status.caption+' Mod: '+tmpstr; end;
      end;
      until I=5;
      ccount:=Ord(buffer[J]);Inc(J);
      mccount:=Ord(buffer[J]);Inc(J);
      status.caption:=status.caption+' Spieler: '+IntToStr(ccount)+'/'+IntToStr(mccount);
      if ccount=mccount then full.Visible:=True else
        full.Visible:=False;
      // Protocol Version - unused
      // pv:=Ord(buffer[J]);
      Inc(J);
      styp:=buffer[J];Inc(J);
      os:=buffer[J];Inc(J);
       case styp of // Servertyp
       'd': tmpstr:='Dedicated';
       'l': tmpstr:='Listen ';
      end;
{      case os of // OS => w=windows l=linux
       'w': begin osimg.Visible:=true; osimg.hint:=tmpstr; end;
       'l': begin osimg2.Visible:=true; osimg2.hint:=tmpstr; end;
      end;
      osimg.visible:=True;}
      pass:=Ord(buffer[J]);
      if pass=1 then // Passwort?
      begin
       pw.visible:=true;
       labelpassw.Visible:=true;
       passw.visible:=true;
      end else
      begin
       pw.Visible:=false;
       labelpassw.Visible:=False;
       passw.Visible:=false;
      end;
     end;
 end;
end;
Werde es wohl doch hochladen ... :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz