• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[MyAAC][Plugin] login.php for Tibia 11

Same problem as guys b4, after character list:

yHTv0sp.jpg
 
Hello,
I'm using this plugin with MyAAC and otxserver-global for Tibia 11.49.
Everything works just fine but everytime I log-out and exit client, then login again, I have to complete tutorial. Character is saved properly and stay with the same place and with same items as before logged out.
The problem is not exist if I won't exit client.

Any ideas?
 
Change
Code:
$char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => true);
to
Code:
$char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
in login .php
 
Change
Code:
$char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => true);
to
Code:
$char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
in login .php

Can you confirm it works without tutorial?
 
Hello. First of all, great work, yours. The site is very good and the script is show too. Congratulations...

I wonder if it is functional with the tibia 11.57? I'm testing and I got some errors. I can open the list of characters, but if I activate the tutorial at the end of it is repeated again. If I disable it gives message of loss of connection.
 
Hello. First of all, great work, yours. The site is very good and the script is show too. Congratulations...

I wonder if it is functional with the tibia 11.57? I'm testing and I got some errors. I can open the list of characters, but if I activate the tutorial at the end of it is repeated again. If I disable it gives message of loss of connection.

Thanks for your kind words. I currently can't test this login plugin on the tibia 11.57. The function is open to the community, if you find some useful details, please let me know.
 
hey you can help me, i use this script tibia.exe works site no works
Code:
Warning: require_once(/var/www/html/config.local.php): failed to open stream: No such file or directory in /var/www/html/index.php on line 59

Fatal error: require_once(): Failed opening required '/var/www/html/config.local.php' (include_path='.:/usr/share/php') in /var/www/html/index.php on line 59
index.php
Code:
<?php
/**
 * Project: MyAAC
 *     Automatic Account Creator for Open Tibia Servers
 * File: index.php
 *
 * This is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * @package   MyAAC
 * @author    Slawkens <[email protected]>
 * @copyright 2017 MyAAC
 * @link      http://my-aac.org
 */

// uncomment if your php.ini have display_errors disabled and you want to see errors
// ini_set('display_errors', 1);
// ini_set('display_startup_errors', 1);
// error_reporting(E_ALL);

require_once('common.php');
require_once(SYSTEM . 'functions.php');

$uri = $_SERVER['REQUEST_URI'];

$tmp = BASE_DIR;
if(!empty($tmp))
    $uri = str_replace(BASE_DIR . '/', '', $uri);
else
    $uri = str_replace_first('/', '', $uri);

$uri = str_replace(array('index.php/', '?'), '', $uri);
define('URI', $uri);

if(preg_match("/^[A-Za-z0-9-_%\'+]+\.png$/i", $uri)) {
    $tmp = explode('.', $uri);
    $_REQUEST['name'] = urldecode($tmp[0]);
    
    chdir(TOOLS . 'signature');
    include(TOOLS . 'signature/index.php');
    exit();
}
else if(preg_match("/^(.*)\.(gif|jpg|png|jpeg|tiff|bmp|css|js|less|map|html|php|zip|rar|gz|ttf|woff|ico)$/i", $_SERVER['REQUEST_URI'])) {
    header("HTTP/1.0 404 Not Found");
    exit;
}

require_once(BASE . 'config.local.php');
if(file_exists(BASE . 'install') && (!isset($config['installed']) || !$config['installed']))
{
    header('Location: ' . BASE_URL . 'install/');
    die('Setup detected that <b>install/</b> directory exists. Please visit <a href="' . BASE_URL . 'install">this</a> url to start MyAAC Installation.<br/>Delete <b>install/</b> directory if you already installed MyAAC.<br/>Remember to REFRESH this page when you\'re done!');
}

$found = false;
if(empty($uri) || isset($_REQUEST['template'])) {
    $_REQUEST['p'] = 'news';
    $found = true;
}
else {
    $tmp = strtolower($uri);
    if(!preg_match('/[^A-z0-9_\-]/', $uri) && file_exists(SYSTEM . 'pages/' . $tmp . '.php')) {
        $_REQUEST['p'] = $uri;
        $found = true;
    }
    else {
        $rules = array(
            '/^account\/manage\/?$/' => array('subtopic' => 'accountmanagement'),
            '/^account\/create\/?$/' => array('subtopic' => 'createaccount'),
            '/^account\/lost\/?$/' => array('subtopic' => 'lostaccount'),
            '/^account\/logout\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'logout'),
            '/^account\/password\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'change_password'),
            '/^account\/register\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'register'),
            '/^account\/register\/new\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'register_new'),
            '/^account\/email\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'change_email'),
            '/^account\/info\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'change_info'),
            '/^account\/character\/create\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'create_character'),
            '/^account\/character\/name\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'change_name'),
            '/^account\/character\/sex\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'change_sex'),
            '/^account\/character\/delete\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'delete_character'),
            '/^account\/character\/comment\/[A-Za-z0-9-_%+\']+\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'change_comment', 'name' => '$3'),
            '/^account\/character\/comment\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'change_comment'),
            '/^account\/confirm_email\/[A-Za-z0-9-_]+\/?$/' => array('subtopic' => 'accountmanagement', 'action' => 'confirm_email', 'v' => '$2'),
            '/^characters\/[A-Za-z0-9-_%+\']+$/' => array('subtopic' => 'characters', 'name' => '$1'),
            '/^changelog\/[0-9]+\/?$/' => array('subtopic' => 'changelog', 'page' => '$1'),
            '/^commands\/add\/?$/' => array('subtopic' => 'commands', 'action' => 'add'),
            '/^commands\/edit\/?$/' => array('subtopic' => 'commands', 'action' => 'edit'),
            '/^faq\/add\/?$/' => array('subtopic' => 'faq', 'action' => 'add'),
            '/^faq\/edit\/?$/' => array('subtopic' => 'faq', 'action' => 'edit'),
            '/^forum\/add_board\/?$/' => array('subtopic' => 'forum', 'action' => 'add_board'),#
            '/^forum\/edit_board\/?$/' => array('subtopic' => 'forum', 'action' => 'edit_board'),
            '/^forum\/board\/[0-9]+\/?$/' => array('subtopic' => 'forum', 'action' => 'show_board', 'id' => '$2'),
            '/^forum\/board\/[0-9]+\/[0-9]+\/?$/' => array('subtopic' => 'forum', 'action' => 'show_board', 'id' => '$2', 'page' => '$3'),
            '/^forum\/thread\/[0-9]+\/?$/' => array('subtopic' => 'forum', 'action' => 'show_thread', 'id' => '$2'),
            '/^forum\/thread\/[0-9]+\/[0-9]+\/?$/' => array('subtopic' => 'forum', 'action' => 'show_thread', 'id' => '$2', 'page' => '$3'),
            '/^gallery\/add\/?$/' => array('subtopic' => 'gallery', 'action' => 'add'),
            '/^gallery\/edit\/?$/' => array('subtopic' => 'gallery', 'action' => 'edit'),
            '/^gallery\/[0-9]+\/?$/' => array('subtopic' => 'gallery', 'image' => '$1'),
            '/^gifts\/history\/?$/' => array('subtopic' => 'gifts', 'action' => 'show_history'),
            '/^guilds\/[A-Za-z0-9-_%+\']+$/' => array('subtopic' => 'guilds', 'action' => 'show', 'guild' => '$1'),
            '/^highscores\/[A-Za-z0-9-_]+\/[A-Za-z0-9-_]+\/[0-9]+\/?$/' => array('subtopic' => 'highscores', 'list' => '$1', 'vocation' => '$2', 'page' => '$3'),
            '/^highscores\/[A-Za-z0-9-_]+\/[0-9]+\/?$/' => array('subtopic' => 'highscores', 'list' => '$1', 'page' => '$2'),
            '/^highscores\/[A-Za-z0-9-_]+\/[A-Za-z0-9-_]+\/?$/' => array('subtopic' => 'highscores', 'list' => '$1', 'vocation' => '$2'),
            '/^highscores\/[A-Za-z0-9-_\']+\/?$/' => array('subtopic' => 'highscores', 'list' => '$1'),
            '/^news\/add\/?$/' => array('subtopic' => 'news', 'action' => 'add'),
            '/^news\/edit\/?$/' => array('subtopic' => 'news', 'action' => 'edit'),
            '/^news\/archive\/?$/' => array('subtopic' => 'newsarchive'),
            '/^news\/archive\/[0-9]+\/?$/' => array('subtopic' => 'newsarchive', 'id' => '$2'),
            '/^polls\/[0-9]+\/?$/' => array('subtopic' => 'polls', 'id' => '$1'),
            '/^spells\/[A-Za-z0-9-_%]+\/[A-Za-z0-9-_]+\/?$/' => array('subtopic' => 'spells', 'vocation' => '$1', 'order' => '$2'),
            '/^gifts\/history\/?$/' => array('subtopic' => 'gifts', 'action' => 'show_history'),
        );
        
        foreach($rules as $rule => $redirect) {
            if (preg_match($rule, $uri)) {
                $tmp = explode('/', $uri);
                foreach($redirect as $key => $value) {
                    
                    if(strpos($value, '$') !== false) {
                        $value = str_replace('$' . $value[1], $tmp[$value[1]], $value);
                    }
                    
                    $_REQUEST[$key] = $value;
                    $_GET[$key] = $value;
                }
                
                $found = true;
                break;
            }
        }
    }
}

// define page visited, so it can be used within events system
$page = isset($_REQUEST['subtopic']) ? $_REQUEST['subtopic'] : (isset($_REQUEST['p']) ? $_REQUEST['p'] : '');
if(empty($page) || !preg_match('/^[A-z0-9\_\-]+$/', $page)) {
    $tmp = URI;
    if(!empty($tmp)) {
        $page = $tmp;
    }
    else {
        if(!$found)
            $page = '404';
        else
            $page = 'news';
    }
}

$page = strtolower($page);
define('PAGE', $page);

$template_place_holders = array();

require_once(SYSTEM . 'init.php');
require_once(SYSTEM . 'template.php');
require_once(SYSTEM . 'login.php');
require_once(SYSTEM . 'status.php');

$twig->addGlobal('config', $config);
$twig->addGlobal('status', $status);

// database migrations
$tmp = '';
if(fetchDatabaseConfig('database_version', $tmp)) { // we got version
    $tmp = (int)$tmp;
    if($tmp < DATABASE_VERSION) { // import if older
        for($i = $tmp + 1; $i <= DATABASE_VERSION; $i++) {
            require(SYSTEM . 'migrations/' . $i . '.php');
            updateDatabaseConfig('database_version', $i);
        }
    }
}
else { // register first version
    registerDatabaseConfig('database_version', 0);
    for($i = 1; $i <= DATABASE_VERSION; $i++) {
        require(SYSTEM . 'migrations/' . $i . '.php');
        updateDatabaseConfig('database_version', $i);
    }
}

// event system
require_once(SYSTEM . 'hooks.php');
$hooks = new Hooks();
$hooks->load();
$hooks->trigger(HOOK_STARTUP);

// anonymous usage statistics
// sent only when user agrees
if(isset($config['anonymous_usage_statistics']) && $config['anonymous_usage_statistics']) {
    $report_time = 30 * 24 * 60 * 60; // report one time per 30 days
    $should_report = true;
    
    $value = '';
    if($cache->enabled() && $cache->fetch('last_usage_report', $value)) {
        $should_report = time() > (int)$value + $report_time;
    }
    else {
        $value = '';
        if(fetchDatabaseConfig('last_usage_report', $value)) {
            $should_report = time() > (int)$value + $report_time;
            if($cache->enabled()) {
                $cache->set('last_usage_report', $value);
            }
        }
        else {
            registerDatabaseConfig('last_usage_report', time() - ($report_time - (7 * 24 * 60 * 60))); // first report after a week
            $should_report = false;
        }
    }
    
    if($should_report) {
        require_once(LIBS . 'usage_statistics.php');
        Usage_Statistics::report();
        
        updateDatabaseConfig('last_usage_report', time());
        if($cache->enabled()) {
            $cache->set('last_usage_report', time());
        }
    }
}

if($config['views_counter'])
    require_once(SYSTEM . 'counter.php');

if($config['visitors_counter'])
{
    require_once(SYSTEM . 'libs/visitors.php');
    $visitors = new Visitors($config['visitors_counter_ttl']);
}

// page content loading
if(!isset($content[0]))
    $content = '';
$load_it = true;

// check if site has been closed
$site_closed = false;
if(fetchDatabaseConfig('site_closed', $site_closed)) {
    $site_closed = ($site_closed == 1);
    if($site_closed) {
        if(!admin())
        {
            $title = getDatabaseConfig('site_closed_title');
            $content .= '<p class="note">' . getDatabaseConfig('site_closed_message') . '</p><br/>';
            $load_it = false;
        }

        if(!$logged)
        {
            ob_start();
            require(SYSTEM . 'pages/accountmanagement.php');
            $content .= ob_get_contents();
            ob_end_clean();
            $load_it = false;
        }
    }
}
define('SITE_CLOSED', $site_closed);

// backward support for gesior
if($config['backward_support']) {
    define('INITIALIZED', true);
    $SQL = $db;
    $layout_header = template_header();
    $layout_name = $template_path;
    $news_content = '';
    $tickers_content = '';
    $subtopic = PAGE;
    $main_content = '';
    
    $config['access_admin_panel'] = 2;
    $group_id_of_acc_logged = 0;
    if($logged && $account_logged)
        $group_id_of_acc_logged = $account_logged->getGroupId();

    $config['site'] = &$config;
    $config['server'] = &$config['lua'];
    $config['site']['shop_system'] = $config['gifts_system'];

    if(!isset($config['vdarkborder']))
        $config['vdarkborder'] = '#505050';
    if(!isset($config['darkborder']))
        $config['darkborder'] = '#D4C0A1';
    if(!isset($config['lightborder']))
        $config['lightborder'] = '#F1E0C6';

    $config['site']['download_page'] = true;
    $config['site']['serverinfo_page'] = true;
    $config['site']['screenshot_page'] = true;
    
    if($config['forum'] != '')
        $config['forum_link'] = (strtolower($config['forum']) == 'site' ? getLink('forum') : $config['forum']);

    foreach($status as $key => $value)
        $config['status']['serverStatus_' . $key] = $value;
}

if($load_it)
{
    if(SITE_CLOSED && admin())
        $content .= '<p class="note">Site is under maintenance (closed mode). Only privileged users can see it.</p>';

    if($config['backward_support'])
        require(SYSTEM . 'compat_pages.php');

    $ignore = false;

    $logged_access = 1;
    if($logged && $account_logged && $account_logged->isLoaded()) {
        $logged_access = $account_logged->getAccess();
    }

    $query =
        $db->query(
            'SELECT `id`, `title`, `body`, `php`, `hidden`' .
            ' FROM `' . TABLE_PREFIX . 'pages`' .
            ' WHERE `name` LIKE ' . $db->quote($page) . ' AND `hidden` != 1 AND `access` <= ' . $db->quote($logged_access));
    if($query->rowCount() > 0) // found page
    {
        $ignore = true;
        $query = $query->fetch();
        $title = $query['title'];

        if($query['php'] == '1') // execute it as php code
        {
            $tmp = substr($query['body'], 0, 10);
            if(($pos = strpos($tmp, '<?php')) !== false) {
                $tmp = preg_replace('/<\?php/', '', $query['body'], 1);
            }
            else if(($pos = strpos($tmp, '<?')) !== false) {
                $tmp = preg_replace('/<\?/', '', $query['body'], 1);
            }
            else
                $tmp = $query['body'];

            $php_errors = array();
            function error_handler($errno, $errstr) {
                global $php_errors;
                $php_errors[] = array('errno' => $errno, 'errstr' => $errstr);
            }
            set_error_handler('error_handler');

            ob_start();
            eval($tmp);
            $content .= ob_get_contents();
            ob_end_clean();

            restore_error_handler();
            if(isset($php_errors[0]) && superAdmin()) {
                var_dump($php_errors);
            }
        }
        else
            $content .= $query['body']; // plain html
        
        if(hasFlag(FLAG_CONTENT_PAGES) || superAdmin()) {
            $content = $twig->render('admin.pages.links.html.twig', array(
                'page' => array('id' => $query['id'], 'hidden' => $query['hidden'])
            )) . $content;
        }
    }
    else
    {
        $file = SYSTEM . 'pages/' . $page . '.php';
        if(!@file_exists($file))
        {
            $page = '404';
            $file = SYSTEM . 'pages/404.php';
        }
    }

    ob_start();
    if($hooks->trigger(HOOK_BEFORE_PAGE)) {
        if(!$ignore)
            require($file);
    }

    if($config['backward_support'] && isset($main_content[0]))
        $content .= $main_content;

    $content .= ob_get_contents();
    ob_end_clean();
    $hooks->trigger(HOOK_AFTER_PAGE);
}

if($config['backward_support']) {
    $main_content = $content;
    if(!isset($title))
        $title = ucfirst($page);

    $topic = $title;
}

$title_full =  (isset($title) ? $title . $config['title_separator'] : '') . $config['lua']['serverName'];
if(file_exists($template_path . '/index.php'))
    require($template_path . '/index.php');
else if(file_exists($template_path . '/template.php')) // deprecated
    require($template_path . '/template.php');
else if($config['backward_support'] && file_exists($template_path . '/layout.php'))
{
    require($template_path . '/layout.php');
}
else
{
    // TODO: save more info to log file
    die('ERROR: Cannot load template.');
}

echo '<!-- MyAAC ' . MYAAC_VERSION . ' :: http://www.my-aac.org/ -->' . "\n";
if(($config['debug_level'] & 1) == 1)
    echo '<!-- Generated in :: ' . round(microtime(true) - START_TIME, 4) . ' -->';

if(($config['debug_level'] & 2) == 2)
    echo "\n" . '<!-- Queries done :: ' . $db->queries() . ' -->';

if(($config['debug_level'] & 4) == 4 && function_exists('memory_get_peak_usage'))
    echo "\n" . '<!-- Peak memory usage: ' . convert_bytes(memory_get_peak_usage(true)) . ' -->';

$hooks->trigger(HOOK_FINISH);
?>



http://realtibia.eu/
 
Last edited:
Return this error. (version is corretly)
Using 1149.5813

OTX 3

#Edit
Sorry, the problem is the executable. Solved
Thanks
 

Attachments

Last edited:
Hi,

I'm receiving the following error:

Code:
The remote host closed the connection.

The game server is offline...

I'm using Client version 11.59.5813, I also put login.php on my html folder, and configured my IP correctly in client.exe.

One more issue... Even if I turn the tutorial to false, I still seeing this damn tutorial on my screen. Please help! :(
 
I've been trying to solve this, but so far haven't found a good solution cus I don't quite know how to figure out what data the client can take or send to the php file, however it's quite easy to make an automated script that "logs in" with a post request. Infact, I had a server I was helping doing some work on having over 100k registred failed login (this was a custom system, not myaac but I do believe the issue is still present).

If there is a way to easily identify a client from a browser or any other type of request, that'd be hella helpful. Thouhgts on this Slawkens?
 

Login.php compatible with myacc (Most current version of Tibia (12.20) for the project: opentibiabr/OTServBR-Global (https://github.com/opentibiabr/OTServBR-Global)

'Cannot find plugin info .json file. Installation is discontinued.'

I have MyACC 0.8.0 and i can't install this plugin
 
Back
Top