Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Połączenie RCON z serwerem Minecraft


Rekomendowane odpowiedzi

Opublikowano

Witam serdecznie , zauważyłem że wiele osób szuka darmowych skryptów sklepu minecrafta (itemshopu) .

Rozwiązanie przychodzi jedno . Połączenie rcon z serwerem za pomocą którego możemy zbudować taki sklep.

 

Konfiguracja jest bardzo prosta , zacznijmy od pliku serwer.properties :

 

rcon.port=0000  - Tu wybierz port od 0000 do 9999 jednak musi być inny niż port gry !
enable-rcon=true - Tu ustawiamy na True aby włączyć dostęp do komend przez rcon
rcon.password=twoje_hasło - Tu ustaw własne hasło do portu rcon

 

Konfigurację mamy już za sobą , teraz przejdźmy do skryptu który połączy nam się z serwerem gry .

 

Skrypt należy zapisać na serwerze strony internetowej. Jest podstawą do łączenie się z serwerem .

 

<?php
class MinecraftRconException extends Exception
{
	// Exception thrown by MinecraftRcon class
}

class MinecraftRcon
{

	// 
	const SERVERDATA_EXECCOMMAND    = 2;
	const SERVERDATA_AUTH           = 3;
	
	// 
	const SERVERDATA_RESPONSE_VALUE = 0;
	const SERVERDATA_AUTH_RESPONSE  = 2;
	
	private $Socket;
	private $RequestId;
	
	public function __destruct( )
	{
		$this->Disconnect( );
	}
	
	public function Connect( $Ip, $Port = 25575, $Password, $Timeout = 3 )
	{
		$this->RequestId = 0;
		
		if( $this->Socket = FSockOpen( $Ip, (int)$Port ) )
		{
			Socket_Set_TimeOut( $this->Socket, $Timeout );
			
			if( !$this->Auth( $Password ) )
			{
				$this->Disconnect( );
				
				throw new MinecraftRconException( "Authorization failed." );
			}
		}
		else
		{
			throw new MinecraftRconException( "Can't open socket." );
		}
	}
	
	public function Disconnect( )
	{
		if( $this->Socket )
		{
			FClose( $this->Socket );
			
			$this->Socket = null;
		}
	}
	
	public function Command( $String )
	{
		if( !$this->WriteData( self :: SERVERDATA_EXECCOMMAND, $String ) )
		{
			return false;
		}
		
		$Data = $this->ReadData( );
		
		if( $Data[ 'RequestId' ] < 1 || $Data[ 'Response' ] != self :: SERVERDATA_RESPONSE_VALUE )
		{
			return false;
		}
		
		return $Data[ 'String' ];
	}
	
	private function Auth( $Password )
	{
		if( !$this->WriteData( self :: SERVERDATA_AUTH, $Password ) )
		{
			return false;
		}
		
		$Data = $this->ReadData( );
		
		return $Data[ 'RequestId' ] > -1 && $Data[ 'Response' ] == self :: SERVERDATA_AUTH_RESPONSE;
	}
	
	private function ReadData( )
	{
		$Packet = Array( );
		
		$Size = FRead( $this->Socket, 4 );
		$Size = UnPack( 'V1Size', $Size );
		$Size = $Size[ 'Size' ];
		
		// TODO: Add multiple packets (Source)
		
		$Packet = FRead( $this->Socket, $Size );
		$Packet = UnPack( 'V1RequestId/V1Response/a*String/a*String2', $Packet );
		
		return $Packet;
	}
	
	private function WriteData( $Command, $String = "" )
	{
		// Pack the packet together
		$Data = Pack( 'VV', $this->RequestId++, $Command ) . $String . "\x00\x00\x00"; 
		
		// Prepend packet length
		$Data = Pack( 'V', StrLen( $Data ) ) . $Data;
		
		$Length = StrLen( $Data );
		
		return $Length === FWrite( $this->Socket, $Data, $Length );
	}
}

 

Kolejną rzeczą jaką musimy zrobić jest dodanie krótkiego kodu do podstrony witryny która ma się z serwerem łączyć .

Kod wygląda tak :

<?php
	define( 'MQ_SERVER_ADDR', '46.105.121.104' ) ; // adres IP Twojego Serwera
	define( 'MQ_SERVER_PORT', 0000 ); // Port rcon który ustawiłeś/aś w pliku serwer.properties
	define( 'MQ_SERVER_PASS', 'Twoje_Hasło' ); // hasło które ustawiłeś/aś w pliku serwer.properties
	define( 'MQ_TIMEOUT', 2 );
	
	require __DIR__ . '/MinecraftRcon.class.php'; // tutaj ścieżka do wcześniej zdefioniowanego  //pliku dla połączenia się z rcon
    
    $nick=$_POST['gracz'];
	
	echo "<pre>";
	
	try
	{
		$Rcon = new MinecraftRcon;
		
		$Rcon->Connect( MQ_SERVER_ADDR, MQ_SERVER_PORT, MQ_SERVER_PASS, MQ_TIMEOUT );
		
		$Data = $Rcon->Command( "setrank nick VIP 7d" ); // Przykładowa komenda która da użytkownikowi rangę VIP na 7 dni .
		
		if( $Data === false )
		{
			throw new MinecraftRconException( "Failed to get command result." );
		}
		else if( StrLen( $Data ) == 0 )
		{
			throw new MinecraftRconException( "Got command result, but it's empty." );
		}
		
		echo HTMLSpecialChars( $Data );
	}
	catch( MinecraftRconException $e )
	{
		echo $e->getMessage( );
	}
	
	$Rcon->Disconnect( );

$urlthx="http://paradisecraft.pl/dziekujemy.php";  //  Strona na którą gracz zostanie przeniesiony np. o dokonaniu zakupu VIP-a
header("Location: " . $urlthx);
?>

 

Plik taki umieszczamy na serwerze, po uruchomieniu go w przeglądarce wykona się kod , gracz otrzyma VIP na 7 dni .

Komendę możemy zmienić na dowolną np. na give item ilość .

Komendy oczywiście wpisujemy bez znaku / , ponieważ konsola uzna je z takim znakiem za błąd.

 

Myślę że to chyba na tyle, jeśli macie jakieś pytania odnośnie tutorialu pisać na PW .

Nie zbieram lajków więc klikać nie musicie , satysfakcja pomocy mi wystarczy :)

 

Dodam tylko że taki plik/skrypt musimy odpowiednio zabezpieczyć aby dostęp do niego był np. po wysłaniu smsa.

Każdy dostawca usług premium sms dostarcza takie skrypty dla użytkowników.

 

Pozdrawiam i mam nadzieję że pomogłem :)

„Każdy szermierz dupa, kiedy wrogów kupa”


                                                                             Rudy Krasnolud z Wiedźmina

Opublikowano

Dobre, szukałem czegoś takiego, ale zanim użyję do zbudowania itemshopu to muszę poćwiczyć php ;/

Pomogłem? Nie bądź skąpy, daj Like:)

Opublikowano

OO

ladnie zrobiony tut

do tego przydatny.

Leci like.

1365336413-U179206.png



avatar147.jpg



1365336413-U179206.png



|Grafik|Let´sPlayerowiec|Administrator PCM PVP|Administrator Rzeznia SV+FR|


Aktualnie Na mchc.pl (O.n.l.i.n.e)





Opublikowano

Warning: fsockopen() [function.fsockopen]: unable to connect to :0 (Failed to parse address "") in /home/robak/public_html/rcon/class.php on line 30

Can't open socket.

Warning: Cannot modify header information - headers already sent by (output started at /home/robak/public_html/rcon/index.php:11) in /home/robak/public_html/rcon/index.php on line 40

 

co to za błąd?

  • 3 miesiące temu...
Opublikowano

Niestety ale mi nie działa, może mi ktoś pomóc?

Po zapisaniu wszystkiego i odpowiednim zedytowanniu plików gdy otwieram plik z drugim kodem (index.php)to nie mam nic, po prostu pusta strona.

Hosting serwera to enderchest.pl

b_560_95_1.png
  • 2 miesiące temu...
Opublikowano

Niestety ale mi nie działa, może mi ktoś pomóc?

Po zapisaniu wszystkiego i odpowiednim zedytowanniu plików gdy otwieram plik z drugim kodem (index.php)to nie mam nic, po prostu pusta strona.

Hosting serwera to enderchest.pl

 

Strona będzie pusta ponieważ skrypt nic nie wyświetla tylko wprowadza komendę do konsoli. Wykonuje komendę w grze . To wszystko .

Więc info o np, zakupie VIPA musisz dodać sam, powiedzmy po poprawnym wykonaniu skryptu ....

echo 'Info o zakupie...' ;

Inaczej skrypt nic nie wyświetli.

„Każdy szermierz dupa, kiedy wrogów kupa”


                                                                             Rudy Krasnolud z Wiedźmina

  • 1 miesiąc temu...
  • 3 miesiące temu...
Opublikowano

Mogłeś lepiej rozpisać cytaty i wyjaśnić dla czego tak a nie inaczej. Ja nie miałem z tym problemu ale Świeżak może czegoś nie zrozumieć.

  • 1 miesiąc temu...
  • 2 miesiące temu...
  • 4 miesiące temu...
Opublikowano

$Data = $Rcon->Command( "setrank nick VIP 7d" );

Nie powinno byc $ przed nick?

$Data = $Rcon->Command( "setrank $nick VIP 7d" )

baner1.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...