ÕPETUS: Minecrafti SMS Skript | RCON
Lehekülg 1, lehekülgi kokku 1 • Share
- Breakdown
- Liitus : 15/02/2014
Postitusi : 3559
Hei,
jagaks veel midagi.
Kindlasti peab veebimajutuses avatud olema port mis vastab Sinu minecraft serveri RCON pordiga.
jagaks veel midagi.
- sms.php:
- Kood:
?php
require_once('rcon.php'); //Nõuab rcon.php olemas olekut
// Kontroll, kas ühendus tuleb Fortumo serveritest.
if(!in_array($_SERVER['REMOTE_ADDR'],
array('79.125.125.1', '79.125.5.205',
'79.125.5.95', '54.72.6.126', '54.72.6.27', '54.72.6.17', '54.72.6.23'))) {
header("HTTP/1.0 403 Forbidden");
die("Viga: See IP pole lubatud");
}
//Andmed
$ip = 'SERVERI IP'; //Serveri IP ilma pordita
$port = 25567; //RCON'i port
$parool = 'RCONIPAROOL'; //RCON'i parooli saab muuta server.properties failis
$aegub = 3; //Millal ühendus aegub?
//Teenuse nimi peab võrduma auastme nimetusega,
// kui teenus ei sisalda auastme lisamist tellijale, siis kustuta kõik $teenus väärtused.
$teenus = "SIIA SISESTA TEENUSENIMI"; //Kustuta kogu rida kui pole vaja
$kasutajanimi = $_GET['message']; //See rida kontrollib kasutajanime
if($kasutajanimi == ""){ //Kui tellija ei sisestanud kasutajanime saab ta vastuse
echo("Te ei sisestanud kasutajanime."); //Muuda teksti "" märkide vahel, kui vaja.
}else{ //Juhul kui tellija sisestas kasutajanime toimub tegevus.
$rcon = new Rcon($ip, $port, $parool, $aegub); //Ühendus toimub ainult siis, kui sisestatakse oma kasutajanimi.
if ($rcon->connect()){ //Kui RCON saab ühendust serveriga, siis
$rcon->send_command("pex user ".$kasutajanimi." group add ".$teenus.""); //jätkub käskluse saatmine serverisse
$rcon->send_command("msg ".$kasutajanimi." Sinu teenus on nüüd aktiivne."); //See on lisa rida, see käsklus toimib täpselt samamoodi. Kustuta kui soovid.
$reply = "$kasutajanimi, Sinu tellitud $teenus auaste on nüüd aktiivne."; //Muuda teksti "" märkide vahel kui vaja.
echo($reply);
}
}
?>
- rcon.php:
- Kood:
<?php
/**
* Skript loodud -> https://developer.valvesoftware.com/wiki/Source_RCON_Protocol põhjal
*/
class Rcon {
private $host;
private $port;
private $password;
private $timeout;
private $socket;
private $authorized;
private $last_response;
const PACKET_AUTHORIZE = 5;
const PACKET_COMMAND = 6;
const SERVERDATA_AUTH = 3;
const SERVERDATA_AUTH_RESPONSE = 2;
const SERVERDATA_EXECCOMMAND = 2;
const SERVERDATA_RESPONSE_VALUE = 0;
public function __construct($host, $port, $password, $timeout)
{
$this->host = $host;
$this->port = $port;
$this->password = $password;
$this->timeout = $timeout;
}
public function get_response() {
return $this->last_response;
}
public function connect() {
$this->socket = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
if (!$this->socket)
{
$this->last_response = $errstr;
return false;
}
stream_set_timeout($this->socket, 3, 0);
$auth = $this->authorize();
if ($auth) {
return true;
}
return false;
}
public function disconnect()
{
if ($this->socket)
{
fclose($this->socket);
}
}
public function is_connected() {
return $this->authorized;
}
public function send_command($command)
{
if (!$this->is_connected()) return false;
$this->write_packet(Rcon::PACKET_COMMAND, Rcon::SERVERDATA_EXECCOMMAND, $command);
$response_packet = $this->read_packet();
if ($response_packet['id'] == Rcon::PACKET_COMMAND)
{
if ($response_packet['type'] == Rcon::SERVERDATA_RESPONSE_VALUE)
{
$this->last_response = $response_packet['body'];
return $response_packet['body'];
}
}
return false;
}
private function authorize() {
$this->write_packet(Rcon::PACKET_AUTHORIZE, Rcon::SERVERDATA_AUTH, $this->password);
$response_packet = $this->read_packet();
if ($response_packet['type'] == Rcon::SERVERDATA_AUTH_RESPONSE)
{
if ($response_packet['id'] == Rcon::PACKET_AUTHORIZE)
{
$this->authorized = true;
return true;
}
}
$this->disconnect();
return false;
}
private function write_packet($packet_id, $packet_type, $packet_body)
{
$packet = pack("VV", $packet_id, $packet_type);
$packet = $packet . $packet_body . "\x00";
$packet = $packet . "\x00";
$packet_size = strlen($packet);
$packet = pack("V", $packet_size) . $packet;
fwrite($this->socket, $packet, strlen($packet));
}
private function read_packet()
{
$size_data = fread($this->socket, 4);
$size_pack = unpack("V1size", $size_data);
$size = $size_pack['size'];
$packet_data = fread($this->socket, $size);
$packet_pack = unpack("V1id/V1type/a*body", $packet_data);
return $packet_pack;
}
}
?>
Kindlasti peab veebimajutuses avatud olema port mis vastab Sinu minecraft serveri RCON pordiga.
Soovid vestluses osaleda?
Selleks logi sisse või tee endale kasutaja.
Lehekülg 1, lehekülgi kokku 1
Permissions in this forum:
Sa ei saa vastata siinsetele teemadele