Vlozit prikaz z webu

Technická podpora k herním serverům Minecraft a Tekkit
Message
Autor
marty_
Příspěvky: 1191
Věk: 54
Registrován: 27 srp 2012, 10:10
Reputation: 0
Bydliště: Hranice na Morave
Kontaktovat uživatele:

Vlozit prikaz z webu

#1 Příspěvekod marty_ » 12 úno 2013, 07:53

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.
Všechny své servery jsem sloučil pomocí BungeeCordu na jediny multiserver play.hero-craft.cz a jsem maximálně spokojenej :)
Jsou to tyto:
Lobby (1.11), Creativ(1.12), Skyblock(1.12), Planet(1.12), Games(1.9.4), Hranice(1.11), Classic(1.12), , Seniorcraft (1.12), a dalsi pripravuji... (aktualne RPG 1.12)

vojtamaniak
Příspěvky: 3512
Věk: 26
Registrován: 18 úno 2012, 21:02
Reputation: 11

Re: Vlozit prikaz z webu

#2 Příspěvekod vojtamaniak » 12 úno 2013, 08:09

Prakticky by to šlo přes rcon, jako je to staré automatické VIP. http://forum.fakaheda.eu/viewtopic.php?f=85&t=3962

marty_
Příspěvky: 1191
Věk: 54
Registrován: 27 srp 2012, 10:10
Reputation: 0
Bydliště: Hranice na Morave
Kontaktovat uživatele:

Re: Vlozit prikaz z webu

#3 Příspěvekod marty_ » 12 úno 2013, 15:10

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
Všechny své servery jsem sloučil pomocí BungeeCordu na jediny multiserver play.hero-craft.cz a jsem maximálně spokojenej :)
Jsou to tyto:
Lobby (1.11), Creativ(1.12), Skyblock(1.12), Planet(1.12), Games(1.9.4), Hranice(1.11), Classic(1.12), , Seniorcraft (1.12), a dalsi pripravuji... (aktualne RPG 1.12)

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: Vlozit prikaz z webu

#4 Příspěvekod Mysteria » 12 úno 2013, 15:49

Pokud je ta třída pořád funkční tak to fungovat bude.

vojtamaniak
Příspěvky: 3512
Věk: 26
Registrován: 18 úno 2012, 21:02
Reputation: 11

Re: Vlozit prikaz z webu

#5 Příspěvekod vojtamaniak » 12 úno 2013, 18:28

A vyplnil jsi ty údaje jako IP, rcon port, rcon pass?

marty_
Příspěvky: 1191
Věk: 54
Registrován: 27 srp 2012, 10:10
Reputation: 0
Bydliště: Hranice na Morave
Kontaktovat uživatele:

Re: Vlozit prikaz z webu

#6 Příspěvekod marty_ » 13 úno 2013, 21:10

jasne ze vyplnil :-)
nicmene jsem jen tak na pul cesty.

kod pro fly.php:

Spoiler: zobrazit

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)

Spoiler: zobrazit

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.1

a 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 142



radek 142 je :
return $ret[$this->_Id]['S1'];

tady me schopnosti trid jsou slabe.
nekde se neco nenaplnilo.

dokazete prosim nekdo poradit?
Všechny své servery jsem sloučil pomocí BungeeCordu na jediny multiserver play.hero-craft.cz a jsem maximálně spokojenej :)
Jsou to tyto:
Lobby (1.11), Creativ(1.12), Skyblock(1.12), Planet(1.12), Games(1.9.4), Hranice(1.11), Classic(1.12), , Seniorcraft (1.12), a dalsi pripravuji... (aktualne RPG 1.12)

marty_
Příspěvky: 1191
Věk: 54
Registrován: 27 srp 2012, 10:10
Reputation: 0
Bydliště: Hranice na Morave
Kontaktovat uživatele:

Re: Vlozit prikaz z webu

#7 Příspěvekod marty_ » 13 úno 2013, 21:43

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] erver] Hraci pavel bylo povoleno nachvili litat

ale prikaz na fly a zkusebne na den se neprovede a nevypise chyb hlasku...
takze jde jen a pouze say
Naposledy upravil(a) marty_ dne 13 úno 2013, 21:43, celkem upraveno 1 x.
Všechny své servery jsem sloučil pomocí BungeeCordu na jediny multiserver play.hero-craft.cz a jsem maximálně spokojenej :)
Jsou to tyto:
Lobby (1.11), Creativ(1.12), Skyblock(1.12), Planet(1.12), Games(1.9.4), Hranice(1.11), Classic(1.12), , Seniorcraft (1.12), a dalsi pripravuji... (aktualne RPG 1.12)

Uživatelský avatar
Mysteria
Příspěvky: 9122
Registrován: 26 pro 2009, 15:40
Reputation: 7
Bydliště: Česká republika
Kontaktovat uživatele:

Re: Vlozit prikaz z webu

#8 Příspěvekod Mysteria » 13 úno 2013, 21:43

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.

marty_
Příspěvky: 1191
Věk: 54
Registrován: 27 srp 2012, 10:10
Reputation: 0
Bydliště: Hranice na Morave
Kontaktovat uživatele:

Re: Vlozit prikaz z webu

#9 Příspěvekod marty_ » 13 úno 2013, 21:47

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 :-(
Všechny své servery jsem sloučil pomocí BungeeCordu na jediny multiserver play.hero-craft.cz a jsem maximálně spokojenej :)
Jsou to tyto:
Lobby (1.11), Creativ(1.12), Skyblock(1.12), Planet(1.12), Games(1.9.4), Hranice(1.11), Classic(1.12), , Seniorcraft (1.12), a dalsi pripravuji... (aktualne RPG 1.12)

marty_
Příspěvky: 1191
Věk: 54
Registrován: 27 srp 2012, 10:10
Reputation: 0
Bydliště: Hranice na Morave
Kontaktovat uživatele:

Re: Vlozit prikaz z webu

#10 Příspěvekod marty_ » 13 úno 2013, 22:55

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 :-D
Všechny své servery jsem sloučil pomocí BungeeCordu na jediny multiserver play.hero-craft.cz a jsem maximálně spokojenej :)
Jsou to tyto:
Lobby (1.11), Creativ(1.12), Skyblock(1.12), Planet(1.12), Games(1.9.4), Hranice(1.11), Classic(1.12), , Seniorcraft (1.12), a dalsi pripravuji... (aktualne RPG 1.12)


Zpět na „Minecraft, Tekkit“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 33 hostů