Skocz do zawartości
Pecetowicz Forum komputerowe

Synchronizacja konta MTA z IP.Board


Rekomendowane odpowiedzi

Gość test

Cześć. Dodaję kod na synchronizację MTA (Multi Theft Auto) z IP.Board 34.x. Kod jest lekko przestarzały ale wciąż działa.

Gdy gracz zarejestruje się na serwerze MTA, ten skrypt automatycznie utworzy konto na forum z tą samą nazwą użytkownika i hasłem. Wszystko czego potrzebujesz to PHP SDK, forum oparte o IP.Board i serwer MTA.

1. Pobierz PHP SDK. Więcej informacji o PHP SDK na MTA Wiki

2. Utwórz nowy folder w ścieżce twojeforum/admin/sources/base/ o nazwie sdk i rozpakuj do niego wszystko z archiwum php sdk

3. Utwórz nowy plik PHP o nazwie mtaforum.php w twojeforum/admin/sources/base/ i dodaj ten fragment kodu do pliku:

<?php
require( "../../../initdata.php");  //we need to include this because ipsRegistry requires it 
include( "sdk/mta_sdk.php" );  //the sdk is a must  
require( "ipsRegistry.php" );  //this will give us the functions to modify things in the forum platform  
  
ipsRegistry::init();            
$input = mta::getInput(); // $input[0] is username, $input[1] is password, $input[2] is e-mail 
mta::doReturn($input[0]); 
  
//$passSalt = IPSMember::generatePasswordSalt(5);   
//$passCompiled = IPSMember::generateCompiledPasshash($passSalt, md5($input[1])); 
$user = IPSMember::create( array( 'core' => array( 'email' => $input[2], 'password' => $input[1], 'name' => $input[0], 'members_display_name' => $input[0] ) ) );
?>

4. Teraz przechodzimy do naszego serwera MTA i dodajmy to w naszej funkcji Register:

callRemote("http://FORUM ADRESS/admin/sources/base/mtaforum.php", inReturn,username, password, mail) 

5. Dodaj kod do pliku .lua jako callRemote, aby w konsoli pojawiała się informacja za każdym razem, gdy ktoś utworzy konto na forum:

function inReturn(name) 
    outputDebugString("[FORUM] " ..tostring(name).. " registered.") 
end 
Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość tetris

Jeżeli ktoś chce połączyć Invision Community (IPS Community Suite) z serwerem MTA to poniższe wskazówki mogą mu się przydać.

W applications/core/sources miałem klasę "Panel" w której miałem funkcje do łączenia z zewnętrza bazą danych (serwera).

class _Panel extends \IPS\Node\Model implements \IPS\Node\Ratings, \IPS\Content\Embeddable
{

public static $databasePrefix = '';
static $_mysql;
public function connectServerMysql()
{
$conndata['sql_host'] = \IPS\Settings::i()->panel_sql_host;
$conndata['sql_user'] = \IPS\Settings::i()->panel_sqluser;
$conndata['sql_pass'] = str_rot13(\IPS\Settings::i()->panel_sqlpass);
$conndata['sql_database'] = \IPS\Settings::i()->panel_sqldb;

try
{
$_mysql = \IPS\Db::i("__panel", $conndata);
}
catch ( \UnderflowException $e ) {
return false;
}
return $_mysql;
}
...
}

Poniżej dam Ci dwa przykłady wykorzystania

  • integracja konta forum z serwerem (w tabeli core_members dodałem kolumne server_id do zapisywania id z bazy serwera).
  • wyszukiwanie gracza by zobaczyć jego profil z serwera na forum

Oczywiście nie są to gotowce ale jeśli ktoś rozumie kod IPS Community Suite i potrafi napisać aplikację to może mu ten kod pomóc.

protected function showplayer()
{

$panel = new \IPS\panel\Panel;

if(isset(\IPS\Request::i()->id))
$player = $panel->getPlayerData(\IPS\Request::i()->id, 'id')->fetch_assoc();
else if(isset(\IPS\Request::i()->nick))
$player = $panel->getPlayerData(\IPS\Request::i()->nick, 'nick')->fetch_assoc();
else
{
if ( \IPS\Request::i()->isAjax() )
{
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'game', 'panel', 'front' )->playerError("Nie odnaleziono konta") );
}
else
{
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'game', 'panel', 'front' )->playerError("Nie odnaleziono konta");
}
return false;
}

if(!is_array($player))
{

if ( \IPS\Request::i()->isAjax() )
{
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'game', 'panel', 'front' )->playerError("Nie odnaleziono konta") );
}
else
{
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'game', 'panel', 'front' )->playerError("Nie odnaleziono konta");
}
return false;

}
$player['__nick'] = $panel->getRangeNick($player['nick'], $player['admin'], $player['vip']);
$player['__time'] = $panel->timePlayer1($player['timeplay']);

if ( \IPS\Request::i()->isAjax() )
{
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'game', 'panel', 'front' )->playerShow($player) );
}
else
{
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'game', 'panel', 'front' )->playerShow($player);
}

}
protected function manage()
{
$form = new \IPS\Helpers\Form( 'fromPlayers', 'playersStats_submit' );
$panel = new \IPS\panel\Panel;

$form->add( new \IPS\Helpers\Form\Text( 'panel_name', NULL, TRUE, array( 'multiple' => 1, 'minLength' => 3, 'maxLength' => 24, 'autocomplete' => array('source' => $panel->getPlayers(), 'maxItems' => 1, 'maxLength' => 25) ),

function( $val ) {

}
) );

if ( $values = $form->values() ) {

$dane = $panel->getPlayerData($values['panel_name'], 'nick')->fetch_assoc();

if(is_array($dane))
{
return header("location: ". \IPS\Http\Url::internal( 'app=panel&module=game&controller=players&do=showplayer&id='.$dane['id'], '' ) );
}

}
\IPS\Output::i()->output .= $form;

}
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Założyciel
Godzinę temu, LoveHate napisał:

does this way work on 4.5?

No, it doesn't work

  • Wrr 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...