Avatar billede sputii Nybegynder
02. marts 2010 - 19:44 Der er 12 kommentarer og
1 løsning

Send Command til Counter-Strike Source

Hejsa..

Hvordan sender jeg en Console command til Counter-Strike Source..
Det eneste jeg ved er at det har noget med sockets at gøre..

Jeg ved bare ikke hvor jeg skal starte og om der er en kode et sted jeg kan hente ned og bruge..

Fx ville jeg sende fra php siden test.php at mp_roundtime skal være 5..

Det er en stor omgang men jeg har set lidt på dette..
Der ingen pære i midt hoved der ved hvordan jeg skal gøre..
http://developer.valvesoftware.com/wiki/Server_queries
Avatar billede zynzz Praktikant
02. marts 2010 - 19:55 #1
Du kan bruge:
http://dk2.php.net/manual/en/function.fsockopen.php


Men tror det er nemmere for dig at bruge et allerede færdig framework...
Avatar billede sputii Nybegynder
02. marts 2010 - 20:06 #2
Hvor kan man finde sådan noget... Men ja jeg har set fsockopen før..
Avatar billede zynzz Praktikant
02. marts 2010 - 20:44 #3
phpclasses.org ?
Avatar billede sputii Nybegynder
02. marts 2010 - 20:49 #4
Kan du give bestemt link?
Avatar billede jantzen88 Nybegynder
02. marts 2010 - 21:21 #5
For at sende en console command til en Counter Strike Source server kræver det at du kender - Rcon password, ip og port.

Så kræver det en TCP og en UDP connection.

Du modtager data (log data) fra UDP og du sender data i TCP.

-----

Har ikke selv testet det her... Men du kan lege lidt med det og prøve frem og tilbage fandt det i noget meget gammelt kode jeg havde liggende.

<?php
$id = 1;
// Her pakker vi data som vi sender til serveren

$data = pack("VV", $requestId, 3).$rcon.chr(0).chr(32).chr(0);
$data = pack("V",strlen($data)).$data;

// Så sender du din data til serveren
fwrite ($SOCKET, $data, strlen($data));

// Der efter skal du +1 på dit id
$id++;

// Læser data fra socket - status bruger vi til at tjekke at rcon password er ok
$junk = fread($SOCKET, 1400);
$string = fread($SOCKET, 1400);
$size = getLong($string);
$status = getLong($string);

if ($status == -1) {
  // Error - Det noget skidt
  die ('Auth failed: bad password!');
}
else {
  // Her kan du sende din rcon command til serveren
  $data = pack("VV", $id, 2).$RCONCOMMAND.chr(0).chr(32).chr(0) ;
  $data = pack("V", strlen($data)).$data ;
  fwrite ($SOCKET, $data, strlen($data));
}

function getLong(&$string) {
  $data = substr($string, 0, 4);
  $string = substr($string, 4);
  $data = unpack('Vvalue', $data);
  return $data['value'];
}
?>
Avatar billede jantzen88 Nybegynder
02. marts 2010 - 21:23 #6
Skal lige huske at sige at det at det jeg har smidt et eks. på er til TCP.
Avatar billede sputii Nybegynder
02. marts 2010 - 21:39 #7
øøhhhh.. Hvor skriver jeg ip, port og rcon henne??

Jeg gætter på det er der hvor du har skrevet V
Avatar billede sputii Nybegynder
02. marts 2010 - 21:42 #8
Jeg er helt blackout her.. Men jeg fik dette tilbage da jeg bare prøvede at køre din kode igennem oppe over..

Warning: fwrite(): supplied argument is not a valid stream resource in /usr/home/web/web274075/counter_strike_ava.php on line 11

Warning: fread(): supplied argument is not a valid stream resource in /usr/home/web/web274075/counter_strike_ava.php on line 17

Warning: fread(): supplied argument is not a valid stream resource in /usr/home/web/web274075/counter_strike_ava.php on line 18

Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /usr/home/web/web274075/counter_strike_ava.php on line 36

Warning: unpack() [function.unpack]: Type V: not enough input, need 4, have 0 in /usr/home/web/web274075/counter_strike_ava.php on line 36

Warning: fwrite(): supplied argument is not a valid stream resource in /usr/home/web/web274075/counter_strike_ava.php on line 30
Avatar billede jantzen88 Nybegynder
03. marts 2010 - 00:05 #9
Du skal selv lige oprette din socket..

Placer det over $id = 1;

$ip = "127.0.0.1";
$port = 27015;
$rcon = "rcon";
$sock = fsockopen ('tcp://'.$ip, $port, $errno, $errstr, 20);
Avatar billede sputii Nybegynder
03. marts 2010 - 14:00 #10
Vil det så sige at jeg skal lave $RCONCOMMAND til den rcon command jeg ville have..

Altså..

$RCONCOMMAND = "mp_roundtime 5";

Og hvad med $errno $errstr de variabler er heller ikke blevet lavet..
Avatar billede sputii Nybegynder
03. marts 2010 - 14:03 #11
Tror du lavede en lille fejl...

$ip = "188.138.32.33";
$port = 27021;
$rcon = "***";
$SOCKET = fsockopen ('tcp://'.$ip, $port, $errno, $errstr, 20);

$sock skulle være $SOCKET
Avatar billede sputii Nybegynder
03. marts 2010 - 14:05 #12
JEG FIK DET TIL AT VIRKE!!..

Lig dit svar og du for point...

<?php

$ip = "188.138.32.33";
$port = 27021;
$rcon = "****";
$SOCKET = fsockopen ('tcp://'.$ip, $port, $errno, $errstr, 20);
$RCONCOMMAND = "mp_roundtime 5";

$id = 1;
// Her pakker vi data som vi sender til serveren

$data = pack("VV", $requestId, 3).$rcon.chr(0).chr(32).chr(0);
$data = pack("V",strlen($data)).$data;

// Så sender du din data til serveren
fwrite ($SOCKET, $data, strlen($data));

// Der efter skal du +1 på dit id
$id++;

// Læser data fra socket - status bruger vi til at tjekke at rcon password er ok
$junk = fread($SOCKET, 1400);
$string = fread($SOCKET, 1400);
$size = getLong($string);
$status = getLong($string);

if ($status == -1) {
  // Error - Det noget skidt
  die ('Auth failed: bad password!');
}
else {
  // Her kan du sende din rcon command til serveren
  $data = pack("VV", $id, 2).$RCONCOMMAND.chr(0).chr(32).chr(0) ;
  $data = pack("V", strlen($data)).$data ;
  fwrite ($SOCKET, $data, strlen($data));
}

function getLong(&$string) {
  $data = substr($string, 0, 4);
  $string = substr($string, 4);
  $data = unpack('Vvalue', $data);
  return $data['value'];
}
?>
Avatar billede sputii Nybegynder
16. marts 2010 - 18:57 #13
Lukker..

intet svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester