Toon posts:

[DELPHI/CS] Userlist krijgen bij CS

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi.,

Ik wil een programma maken die naar een bepaald ip connect.
dit ip geef ik zelf op, en is bijvoorbeeld een Counter-strike server. Dan wil ik een userlist krijgen. Want gamespy en gametiger hebben ook zoiets. Hoe gaat het protocol van counter-strike. Waar kan ik ut vinden. En is het mogelijk. Ik weet dat het via UDP gaat.

Kan iemand mij informatie geven

Thanks

  • Splatter
  • Registratie: December 2000
  • Laatst online: 26-11-2021
Uit de Half-Life SDK: (server protocol.txt)
Game servers will answer the following messages:
Messages are sent to the server by sending 4 consecutive bytes of 255 (32-bit integer -1) and then the string command followed by a zero byte to terminate it

"ping"
Server responds with a single byte code ASCII 'j'

"info"
Server responds with the following packet:
(int32)-1
(byte)ASCII 'C' (info response, S2A_INFO)
(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 (currently 7)

"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

"rules"
Server responds with the following packet:
(int32)-1
(byte)ASCII 'E' (rules response, S2A_RULES)
(int16)number of rules

for each rule
(string)rule name
(string)rule value
Edit: Ik heb het stuk over het querien van de Master Server weggehaald omdat je dat niet nodig hebt.

Verwijderd

Topicstarter
hmm, nu heb ik deze php code:

fwrite($fp,"ÿÿÿÿdetails\x00");

hoe stuur ik deze via upd met delphi!!
Ik bedoel!!

die commandos met \x00 moet je die gewoon mee typen of apart?? want het werkt niet!! php werkt het wel!!

Verwijderd

Topicstarter
het werkt, je moet aan het einde +#13#10 doen!

marruh, heb ff snel een demo udp geopend, omdat ik niet weet hoe udp werkt:

ik heb dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
procedure TForm1.Button1Click(Sender: TObject);
var
  MyStream: TMemoryStream;
  TmpStr: String;
  command:string;
Begin
  NMUDP1.ReportLevel := Status_Basic;
  NMUDP1.RemoteHost := Edit1.Text;
  NMUDP1.RemotePort := StrToInt(Edit2.Text);
  command := edit3.text+#13#10;
  TmpStr := command;
  MyStream := TMemoryStream.Create;
  try
    MyStream.Write(TmpStr[1], Length(command));
    NMUDP1.SendStream(MyStream);
  finally
    MyStream.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Clear;
end;

procedure TForm1.NMUDP1Status(Sender: TComponent; status: String);
begin
  If StatusBar1 <> nil then
    StatusBar1.SimpleText := status;
end;

procedure TForm1.NMUDP1DataSend(Sender: TObject);
begin
  StatusBar1.SimpleText := 'Data Sent';
end;

procedure TForm1.NMUDP1InvalidHost(var handled: Boolean);
var
  TmpStr: String;
begin
  If InputQuery('Invalid Host!', 'Specify a new host:', TmpStr) then
  Begin
    NMUDP1.RemoteHost := TmpStr;
    Handled := TRUE;
  End;
end;

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  MyStream: TMemoryStream;
  TmpStr: String;
begin
  MyStream := TMemoryStream.Create;
  try
    NMUDP1.ReadStream(MyStream);
    SetLength(TmpStr,NumberBytes);
    MyStream.Read(TmpStr[1],NumberBytes);
    Memo1.Lines.Add(TmpStr);
  finally
    MyStream.Free;
  end;
end;

Nu geef ik het commando:

ÿÿÿÿdetails

Maar nu krijg ik alleen : ÿÿÿÿm213.239.57.46:27045 terug!!
De rest blijft ergens achter!!
Want ik moet nog de servername krijgen en mod type, os, enz enz!!
Hoe krijg ik dit nu voor elkaar??
Please help me, ik moet graag een goede documantatie van het cs protocol hebben, :)

  • Splatter
  • Registratie: December 2000
  • Laatst online: 26-11-2021
Mijn quote komt regelrecht uit dat bestandje.
Maar nu krijg ik alleen : ÿÿÿÿm213.239.57.46:27045 terug!!
De rest blijft ergens achter!!
Neej je krijgt meer, maar de info (ip, players, names, etc) zijn gescheiden doormiddel van een null character. Na "ÿÿÿÿm213.239.57.46:27045" komt dus eerst een null karakter. Daar moet je overheen lopen voordat je de andere info kan zien.

Verwijderd

Topicstarter
Op dinsdag 01 januari 2002 22:45 schreef Splatter het volgende:
Mijn quote komt regelrecht uit dat bestandje.
[..]

Neej je krijgt meer, maar de info (ip, players, names, etc) zijn gescheiden doormiddel van een null character. Na "ÿÿÿÿm213.239.57.46:27045" komt dus eerst een null karakter. Daar moet je overheen lopen voordat je de andere info kan zien.
uhhh.... Enig idee hoe ??

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Hoef je niet te maken want het is er al :)

Zoek eens in google op qstat

  • Splatter
  • Registratie: December 2000
  • Laatst online: 26-11-2021
Op woensdag 02 januari 2002 10:13 schreef Stoel het volgende:

[..]

uhhh.... Enig idee hoe ??
Hmm ik heb me niet zo verdiept in Delphi, maar het idee is dat je erachter komt hoe lang de string is die je terugkrijgt (met VB is dat Len(string). En dat je de string van achteren naar voren met een 'for-loopje' gaat parsen. Als je met dat for-loopje een Chr(0) tegenkomt (dit is in VB een null-character) weet je dat het stukje info na dat character begint.
In VB kan je dan met de functie Mid(string,start,length) het stukje string eruit halen.
string = de string die je terugkrijgt van de server
start = (de positie waar het for loopje de chr(0) heeft gevonden) + 1
length = deze kan je weglaten omdat de functie toch niet verder kijkt dan het volgende null-character.

Verwijderd

Topicstarter
weet iemand hoe het in delphi moet??

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 15:41

mulder

ik spuug op het trottoir

Length, Pos, Copy en F1

oogjes open, snaveltjes dicht

Pagina: 1