Stránka 1 z 1
Vlozit prikaz z webu
Napsal: 12 úno 2013, 07:53
od marty_
Da se nejak pomoci php (pripadne mysql) vlozit do hry prikaz z webu?
napr: /day ? nebo nekomu neco givnout?
PHP mi neni cizi, ale netusim jak to protlacit do hry samotne.
diky za rady.
Re: Vlozit prikaz z webu
Napsal: 12 úno 2013, 08:09
od vojtamaniak
Prakticky by to šlo přes rcon, jako je to staré automatické VIP.
http://forum.fakaheda.eu/viewtopic.php?f=85&t=3962
Re: Vlozit prikaz z webu
Napsal: 12 úno 2013, 15:10
od marty_
takze po zapnuti rcone a nastaveni hesla a portu pro to rcone,
zavolam stranku napr fly.php ktera bude obsahovat soubor v code:
Kód: Vybrat vše
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Aktivace fly</title>
</head>
<body>
<?php
// V nasledujici casti nahradte text v uvozovkach.
$server = "IP vaseho serveru bez portu";
$port = "port, nejedna se o port serveru! Jedna se o rcon port v server.properties";
$heslo = "heslo od rconu, podle server.properties";
$hrac = "pavel"; // toto casem upravim ted je to natvrdo
include_once("rcon.php");
$r = new rcon($server,$port,$heslo);
// Spusti prikaz ktery da hraci fly
$r->rconCommand("fly ".$hrac."");
// Spusti prikaz ktery napise spravu o tom, hrac muze docasne litat
$r->rconCommand("say Hraci ".$hrac."bylo povoleno nachvili litat");
?>
</body>
</html>
mam to tak spravne?
pisu to z tabletu, tak nemam moznost to otestovat , ale verim ze zde sjou borci na php a reknou mi zda ma uprava z automatickych VIP na mnou rucne odesilane prikazy by mohly prijit do hry.
diky
Re: Vlozit prikaz z webu
Napsal: 12 úno 2013, 15:49
od Mysteria
Pokud je ta třída pořád funkční tak to fungovat bude.
Re: Vlozit prikaz z webu
Napsal: 12 úno 2013, 18:28
od vojtamaniak
A vyplnil jsi ty údaje jako IP, rcon port, rcon pass?
Re: Vlozit prikaz z webu
Napsal: 13 úno 2013, 21:10
od marty_
jasne ze vyplnil

nicmene jsem jen tak na pul cesty.
kod pro fly.php:
Kód: Vybrat vše
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Aktivace fly</title>
</head>
<body>
<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);
// V nasledujici casti nahradte text v uvozovkach.
$server = "127.0.0.1"; //local test server
$port = "25555";
$heslo = "heslo";
$hrac = "pavel"; // toto casem upravim ted je to natvrdo
include_once("rcon.php");
$r = new rcon($server,$port,$heslo);
// Spusti prikaz ktery da hraci fly
$r->rconCommand("fly ".$hrac."");
// Spusti prikaz ktery napise spravu o tom, hrac muze docasne litat
$r->rconCommand("say Hraci ".$hrac."bylo povoleno nachvili litat");
?>
</body>
</html>
nyni kod rcon.php (ten jsem needitoval)
Kód: Vybrat vše
<?php
/*
RCON remote console class, modified for minecraft compability by Tehbeard.
!!!YOU MUST CONFIGURE RCON ON YOUR MINECRAFT SERVER FOR THIS TO WORK
AT TIME OF WRITING ONLY 1.9pr4+ HAVE BUILTIN RCON SUPPORT!!!
Example Code:
============
include_once("rcon.class.php"); //Include this file
$r = new rcon("127.0.0.1",25575,"foobar"); //create rcon object for server on the rcon port with a specific password
if($r->Auth()){ //Connect and attempt to authenticate
{
$r->rconCommand("say Saving in 10 seconds!"); //send a command
sleep(10);
$r->rconCommand("save-all"); //send a command
$r->rconCommand("say Save complete!");//send a command
echo $r->rconCommand("list");//send a command, echo returned value
}
============
Based upon the following work:
[<<<
Basic CS:S Rcon class by Freman. (V1.00)
----------------------------------------------
Ok, it's a completely working class now with with multi-packet responses
Contact: printf("%s%s%s%s%s%s%s%s%s%d%s%s%s","rc","on",chr(46),"cl","ass",chr(64),"pri","ya",chr(46),2,"y",chr(46),"net")
Behaviour I've noticed:
rcon is not returning the packet id.
>>>]
*/
define("SERVERDATA_EXECCOMMAND",2);
define("SERVERDATA_AUTH",3);
class RCon {
var $Password;
var $Host;
var $Port = 27015;
var $_Sock = null;
var $_Id = 0;
function RCon ($Host,$Port,$Password) {
$this->Password = $Password;
$this->Host = $Host;
$this->Port = $Port;
$this->_Sock = @fsockopen($this->Host,$this->Port, $errno, $errstr, 30) or
die("Unable to open socket: $errstr ($errno)\n");
$this->_Set_Timeout($this->_Sock,2,500);
}
function Auth () {
$PackID = $this->_Write(SERVERDATA_AUTH,$this->Password);
// Real response (id: -1 = failure)
$ret = $this->_PacketRead();
//var_dump($ret);
if ($ret[0]['ID'] == -1) {
return false;
}
return true;
}
function _Set_Timeout(&$res,$s,$m=0) {
if (version_compare(phpversion(),'4.3.0','<')) {
return socket_set_timeout($res,$s,$m);
}
return stream_set_timeout($res,$s,$m);
}
function _Write($cmd, $s1='', $s2='') {
// Get and increment the packet id
$id = ++$this->_Id;
// Put our packet together
$data = pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0);
// Prefix the packet size
$data = pack("V",strlen($data)).$data;
// Send packet
fwrite($this->_Sock,$data,strlen($data));
// In case we want it later we'll return the packet id
return $id;
}
function _PacketRead() {
//Declare the return array
$retarray = array();
//Fetch the packet size
while ($size = @fread($this->_Sock,4)) {
$size = unpack('V1Size',$size);
//Work around valve breaking the protocol
if ($size["Size"] > 4096) {
//pad with 8 nulls
$packet = "\x00\x00\x00\x00\x00\x00\x00\x00".fread($this->_Sock,4096);
} else {
//Read the packet back
$packet = fread($this->_Sock,$size["Size"]);
}
array_push($retarray,unpack("V1ID/V1Response/a*S1/a*S2",$packet));
}
return $retarray;
}
function Read() {
$Packets = $this->_PacketRead();
foreach($Packets as $pack) {
if (isset($ret[$pack['ID']])) {
$ret[$pack['ID']]['S1'] .= $pack['S1'];
$ret[$pack['ID']]['S2'] .= $pack['S1'];
} else {
$ret[$pack['ID']] = array(
'Response' => $pack['Response'],
'S1' => $pack['S1'],
'S2' => $pack['S2'],
);
}
}
return $ret;
}
function sendCommand($Command) {
//$Command = '"'.trim(str_replace(' ','" "', $Command)).'"';
//$Command="stop";
$this->_Write(SERVERDATA_EXECCOMMAND,$Command,'');
}
function rconCommand($Command) {
$this->sendcommand($Command);
$ret = $this->Read();
//ATM: Source servers don't return the request id, but if they fix this the code below should read as
// return $ret[$this->_Id]['S1'];
return $ret[$this->_Id]['S1'];
}
}
?>
a vysledek kdyz zavolam soubor fly.php
v konzoli je toto:
2013-02-13 19:49:36 [INFO] Rcon connection from: /127.0.0.1a nic vic
zadny prikaz se neprovede
je to nejspise timto vypisem eroru:
Notice: Undefined offset: 1 in C:\www\minecraft\fly\rcon.php on line 142
Notice: Undefined offset: 2 in C:\www\minecraft\fly\rcon.php on line 142radek 142 je :
return $ret[$this->_Id]['S1'];
tady me schopnosti trid jsou slabe.
nekde se neco nenaplnilo.
dokazete prosim nekdo poradit?
Re: Vlozit prikaz z webu
Napsal: 13 úno 2013, 21:43
od marty_
zmena:
uprava kodu na toto:
Kód: Vybrat vše
include_once("rcon.php");
$r = new rcon($server,$port,$heslo);
$r->Auth();
// Spusti prikaz ktery da hraci fly
$r->rconCommand("fly pavel");
// Spusti prikaz ktery napise spravu o tom, hrac muze docasne litat
$r->rconCommand("say Hraci ".$hrac." bylo povoleno nachvili litat");
// Spusti test prikaz na den
$r->rconCommand("day");
udela konzole jen toto:
2013-02-13 20:31:36 [INFO] Rcon connection from: /127.0.0.1
2013-02-13 20:31:40 [INFO]
[Server] Hraci pavel bylo povoleno nachvili litatale prikaz na fly a zkusebne na den se neprovede a nevypise chyb hlasku...
takze jde jen a pouze say
Re: Vlozit prikaz z webu
Napsal: 13 úno 2013, 21:43
od Mysteria
Jaká náhodička, pro reload UltraBans pluginu používám (respektive budu používat, nejsou dokončené) stejnou třídu a je bez problémů funkční.
Sice jsem si ji hodně modifikoval, ale i v základu mi fungovala dobře, takže problém není ve třídě ale v jejím použití.
Zkus co ti vrátí příkaz version.
Re: Vlozit prikaz z webu
Napsal: 13 úno 2013, 21:47
od marty_
a netusis kde je chyba?
kdyz udelam
$r->rconCommand("say aaaa");
$r->rconCommand("say bbbb");
tak to obe promenne $r posle do hry, ale cokoliv jineho nez
say uz ne... a eror reportiing take mlci

Re: Vlozit prikaz z webu
Napsal: 13 úno 2013, 22:55
od marty_
s potesenim musim oznamit ze to funguje

/fly se vypne/zapne pri
$r->rconCommand("fly marty");a pouze to neda zadnou hlasku ani do hry a ani do konzole.
Tak se omlouvam za monology

prisel sem na to tak ze z beznadeje jsem si chtel zaletet do lavy a vono nic, nelital sem
