• 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!

AAC MyAcc Offline Training list.

OTcreator

Active Member
Joined
Feb 14, 2022
Messages
425
Solutions
1
Reaction score
44
Hello!
I need need function to MyAcc Slawkens.
If a player has a given storage it will show up online as OFFLINE TRAINING in the online list.
I add storage in game, but i don't idea how add information on website...
 
Solution
Last try: (seems you didnt had any players online?)
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order =...
I assume you are running myaac 0.8.

If so, here's the code.

system/pages/online.php:
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` ORDER BY ' . $order);
    }
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'],
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>

system/templates/online.html.twig:
Code:
<table border="0" cellspacing="1" cellpadding="4" width="100%">
    <tr bgcolor="{{ config.vdarkborder }}">
        <td class="white"><b>Server Status</b></td>
    </tr>
{% if players|length == 0 %}
    <tr bgcolor="{{ config.darkborder }}"><td>Currently no one is playing on {{ config.lua.serverName }}.</td></tr></table>
{% else %}
    <tr bgcolor="{{ config.darkborder }}">
        <td>
            {% if not status.online %}
            Server is offline.<br/>
            {% else %}
                {% if config.online_afk %}
                    {% set players_count = players|length %}
                    {% set afk = players_count - status.players %}
                    {% if afk < 0 %}
                        {% set players_count = players_count + afk|abs %}
                        {% set afk = 0 %}
                    {% endif %}
                    Currently there are <b>{{ status.players }}</b> active and <b>{{ afk }}</b> AFK players.<br/>
                    Total number of players: <b>{{ players_count }}</b>.<br/>
                {% else %}
                    Currently {{ players|length }} players are online.<br/>
                {% endif %}
            {% endif %}
        </td>
    </tr>
</table>
<br/>
    {# vocation statistics #}
    {% if config.online_vocations %}
<br/>
        {% if config.online_vocations_images %}
    <table width="200" cellspacing="1" cellpadding="0" border="0" align="center">
        <tr bgcolor="{{ config.darkborder }}">
            <td><img src="images/sorcerer.png" /></td>
            <td><img src="images/druid.png" /></td>
            <td><img src="images/paladin.png" /></td>
            <td><img src="images/knight.png" /></td>
        </tr>
        <tr bgcolor="{{ config.vdarkborder }}">
            <td class="white" style="text-align: center;"><strong>Sorcerers</strong></td>
            <td class="white" style="text-align: center;"><strong>Druids</strong></td>
            <td class="white" style="text-align: center;"><strong>Paladins</strong></td>
            <td class="white" style="text-align: center;"><strong>Knights</strong></td>
        </tr>
        <tr bgcolor="{{ config.lightborder }}">
            <td style="text-align: center;">{{ vocs[1] }}</td>
            <td style="text-align: center;">{{ vocs[2] }}</td>
            <td style="text-align: center;">{{ vocs[3] }}</td>
            <td style="text-align: center;">{{ vocs[4] }}</td>
        </tr>
    </table>
    <div style="text-align: center;">&nbsp;</div>
        {% else %}
    <table border="0" cellspacing="1" cellpadding="4" width="100%">
        <tr bgcolor="{{ config.vdarkborder }}">
            <td class="white" colspan="2"><b>Vocation statistics</b></td>
        </tr>

        {% for i in 1..config.vocations_amount %}
        <tr bgcolor="{{ getStyle(i) }}">
            <td width="25%">{{ config.vocations[i] }}</td>
            <td width="75%">{{ vocs[i] }}</td>
        </tr>
        {% endfor %}
    </table>
<br/>
        {% endif %}
    {% endif %}

    {# show skulls #}
    {% if config.online_skulls %}
<table width="100%" cellspacing="1">
    <tr>
        <td style="background: {{ config.darkborder }};" align="center">
            <img src="images/white_skull.gif"/> - 1 - 6 Frags<br/>
            <img src="images/red_skull.gif"/> - 6+ Frags or Red Skull<br/>
            <img src="images/black_skull.gif"/> - 10+ Frags or Black Skull
        </td>
    </tr>
</table>
    {% endif %}

<table border="0" cellspacing="1" cellpadding="4" width="100%">
    <tr bgcolor="{{ config.vdarkborder }}">
        {% if config.account_country %}
        <td width="11px"><a href="?subtopic=online&order=country" class="white">#</A></td>
        {% endif %}
        {% if config.online_outfit %}
        <td class="white"><b>Outfit</b></td>
        {% endif %}
        <td width="60%"><a href="?subtopic=online&order=name" class="white">Name</A></td>
        <td class="white">#</td>
        <td width="20%"><a href="?subtopic=online&order=level" class="white">Level</A></td>
        <td width="20%"><a href="?subtopic=online&order=vocation" class="white">Vocation</td>
    </tr>
    {% set i = 0 %}
    {% for player in players %}
        {% set i = i + 1 %}
        <tr bgcolor="{{ getStyle(i) }}">
        {% if config.account_country %}
            <td>{{ player.country_image|raw }}</td>
        {% endif %}
        {% if config.online_outfit %}
            <td width="5%"><img style="position:absolute;margin-top:{% if player.player.looktype in [75, 266, 302] %}-20px;margin-left:-0px;{% else %}-45px;margin-left:-25px;{%  endif %}" src="{{ player.outfit }}" alt="player outfit"/></td>
        {% endif %}
            <td>{{ player.name|raw }}{{ player.skull }}</td>
            <td>{% if player.storage_value == 1 %}Offline Training{% endif %}</td>
            <td>{{ player.level }}</td>
            <td>{{ player.vocation }}</td>
        </tr>
    {% endfor %}
</table>
{% endif %}

Thanks to @Nekiro for helping with query.
Post automatically merged:

Ah I forgot to make storage configurable.

I've edited the script, and you can set storage at the top:
Code:
$offlineStorage = 123456;
 
Last edited:
I assume you are running myaac 0.8.

If so, here's the code.

system/pages/online.php:
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` ORDER BY ' . $order);
    }
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'],
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>

system/templates/online.html.twig:
Code:
<table border="0" cellspacing="1" cellpadding="4" width="100%">
    <tr bgcolor="{{ config.vdarkborder }}">
        <td class="white"><b>Server Status</b></td>
    </tr>
{% if players|length == 0 %}
    <tr bgcolor="{{ config.darkborder }}"><td>Currently no one is playing on {{ config.lua.serverName }}.</td></tr></table>
{% else %}
    <tr bgcolor="{{ config.darkborder }}">
        <td>
            {% if not status.online %}
            Server is offline.<br/>
            {% else %}
                {% if config.online_afk %}
                    {% set players_count = players|length %}
                    {% set afk = players_count - status.players %}
                    {% if afk < 0 %}
                        {% set players_count = players_count + afk|abs %}
                        {% set afk = 0 %}
                    {% endif %}
                    Currently there are <b>{{ status.players }}</b> active and <b>{{ afk }}</b> AFK players.<br/>
                    Total number of players: <b>{{ players_count }}</b>.<br/>
                {% else %}
                    Currently {{ players|length }} players are online.<br/>
                {% endif %}
            {% endif %}
        </td>
    </tr>
</table>
<br/>
    {# vocation statistics #}
    {% if config.online_vocations %}
<br/>
        {% if config.online_vocations_images %}
    <table width="200" cellspacing="1" cellpadding="0" border="0" align="center">
        <tr bgcolor="{{ config.darkborder }}">
            <td><img src="images/sorcerer.png" /></td>
            <td><img src="images/druid.png" /></td>
            <td><img src="images/paladin.png" /></td>
            <td><img src="images/knight.png" /></td>
        </tr>
        <tr bgcolor="{{ config.vdarkborder }}">
            <td class="white" style="text-align: center;"><strong>Sorcerers</strong></td>
            <td class="white" style="text-align: center;"><strong>Druids</strong></td>
            <td class="white" style="text-align: center;"><strong>Paladins</strong></td>
            <td class="white" style="text-align: center;"><strong>Knights</strong></td>
        </tr>
        <tr bgcolor="{{ config.lightborder }}">
            <td style="text-align: center;">{{ vocs[1] }}</td>
            <td style="text-align: center;">{{ vocs[2] }}</td>
            <td style="text-align: center;">{{ vocs[3] }}</td>
            <td style="text-align: center;">{{ vocs[4] }}</td>
        </tr>
    </table>
    <div style="text-align: center;">&nbsp;</div>
        {% else %}
    <table border="0" cellspacing="1" cellpadding="4" width="100%">
        <tr bgcolor="{{ config.vdarkborder }}">
            <td class="white" colspan="2"><b>Vocation statistics</b></td>
        </tr>

        {% for i in 1..config.vocations_amount %}
        <tr bgcolor="{{ getStyle(i) }}">
            <td width="25%">{{ config.vocations[i] }}</td>
            <td width="75%">{{ vocs[i] }}</td>
        </tr>
        {% endfor %}
    </table>
<br/>
        {% endif %}
    {% endif %}

    {# show skulls #}
    {% if config.online_skulls %}
<table width="100%" cellspacing="1">
    <tr>
        <td style="background: {{ config.darkborder }};" align="center">
            <img src="images/white_skull.gif"/> - 1 - 6 Frags<br/>
            <img src="images/red_skull.gif"/> - 6+ Frags or Red Skull<br/>
            <img src="images/black_skull.gif"/> - 10+ Frags or Black Skull
        </td>
    </tr>
</table>
    {% endif %}

<table border="0" cellspacing="1" cellpadding="4" width="100%">
    <tr bgcolor="{{ config.vdarkborder }}">
        {% if config.account_country %}
        <td width="11px"><a href="?subtopic=online&order=country" class="white">#</A></td>
        {% endif %}
        {% if config.online_outfit %}
        <td class="white"><b>Outfit</b></td>
        {% endif %}
        <td width="60%"><a href="?subtopic=online&order=name" class="white">Name</A></td>
        <td class="white">#</td>
        <td width="20%"><a href="?subtopic=online&order=level" class="white">Level</A></td>
        <td width="20%"><a href="?subtopic=online&order=vocation" class="white">Vocation</td>
    </tr>
    {% set i = 0 %}
    {% for player in players %}
        {% set i = i + 1 %}
        <tr bgcolor="{{ getStyle(i) }}">
        {% if config.account_country %}
            <td>{{ player.country_image|raw }}</td>
        {% endif %}
        {% if config.online_outfit %}
            <td width="5%"><img style="position:absolute;margin-top:{% if player.player.looktype in [75, 266, 302] %}-20px;margin-left:-0px;{% else %}-45px;margin-left:-25px;{%  endif %}" src="{{ player.outfit }}" alt="player outfit"/></td>
        {% endif %}
            <td>{{ player.name|raw }}{{ player.skull }}</td>
            <td>{% if player.storage_value == 1 %}Offline Training{% endif %}</td>
            <td>{{ player.level }}</td>
            <td>{{ player.vocation }}</td>
        </tr>
    {% endfor %}
</table>
{% endif %}

Thanks to @Nekiro for helping with query.
Post automatically merged:

Ah I forgot to make storage configurable.

I've edited the script, and you can set storage at the top:
Code:
$offlineStorage = 123456;

Now all players from database have status online and in online list have status AFK.
I change storage value, but still the same...

Maybe change this code, when: players.offlinetraining_skill > -1 ?
Then there will be no need to resort to storage.

Unfortunately, I don't have that much knowledge to implement it myself....
 
Last edited:
Ahh sorry, didn't notice that one.

Try this then, I tried myself and it worked:
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` WHERE players_online.player_id IS NOT NULL ORDER BY ' . $order);
}
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'],
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>
 
Ahh sorry, didn't notice that one.

Try this then, I tried myself and it worked:
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` WHERE players_online.player_id IS NOT NULL ORDER BY ' . $order);
}
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'],
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>
Hi,
It now displays "offline training" if the player is online and has storage.
And the idea is to display if he is offline and has this storage (because it is offline training).
If he is online then his storage is changed to something else.
 
Try this:
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` WHERE players_online.player_id IS NOT NULL ORDER BY ' . $order)->fetchAll();

    $playersOnlineIds = [];
    foreach ($playersOnline as $player) {
        $playersOnlineIds[] = $player['id'];
    }

    $playersOffline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 WHERE player_storage.key = ' . $offlineStorage . ' AND player_storage.value > 0 AND players.id NOT IN (' . implode(', ', $playersOnlineIds) . ') ORDER BY ' . $order)->fetchAll();

    $playersOnline = array_merge($playersOnline, $playersOffline);
}
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'],
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>
 
Try this:
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` WHERE players_online.player_id IS NOT NULL ORDER BY ' . $order)->fetchAll();

    $playersOnlineIds = [];
    foreach ($playersOnline as $player) {
        $playersOnlineIds[] = $player['id'];
    }

    $playersOffline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 WHERE player_storage.key = ' . $offlineStorage . ' AND player_storage.value > 0 AND players.id NOT IN (' . implode(', ', $playersOnlineIds) . ') ORDER BY ' . $order)->fetchAll();

    $playersOnline = array_merge($playersOnline, $playersOffline);
}
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'],
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>

Not working - white page.
 
Set env to dev in config.local.php, then refresh page, you should see the error message.
Code:
Exception class: PDOException()

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY name' at line 1

File: /var/www/html/system/libs/pot/OTS_Base_DB.php
Line: 86


Backtrace:

#0 /var/www/html/system/libs/pot/OTS_Base_DB.php(86): PDO->query()
#1 /var/www/html/system/libs/pot/OTS_DB_PDOQuery.php(13): OTS_Base_DB->doQuery()
#2 /var/www/html/system/pages/online.php(64): OTS_Base_DB->query()
#3 /var/www/html/index.php(363): require('/var/www/html/s...')
#4 {main}
 
Last try: (seems you didnt had any players online?)
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` WHERE players_online.player_id IS NOT NULL ORDER BY ' . $order)->fetchAll();

    $playersOnlineIds = [];
    foreach ($playersOnline as $player) {
        $playersOnlineIds[] = $player['id'];
    }

    $playersOffline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 WHERE player_storage.key = ' . $offlineStorage . ' AND player_storage.value > 0 ' . (count($playersOnlineIds) ? ' AND players.id NOT IN (' . implode(', ', $playersOnlineIds) . ')' : '') . ' ORDER BY ' . $order)->fetchAll();

    $playersOnline = array_merge($playersOnline, $playersOffline);
}
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'] ?? '0',
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>
 
Solution
Last try: (seems you didnt had any players online?)
PHP:
<?php
/**
 * Online
 *
 * @package   MyAAC
 * @author    Gesior <[email protected]>
 * @author    Slawkens <[email protected]>
 * @copyright 2019 MyAAC
 * @link      https://my-aac.org
 */
defined('MYAAC') or die('Direct access not allowed!');
$title = 'Who is online?';

$offlineStorage = 123456;
if($config['account_country'])
    require SYSTEM . 'countries.conf.php';

$promotion = '';
if($db->hasColumn('players', 'promotion'))
    $promotion = '`promotion`,';
$order = isset($_GET['order']) ? $_GET['order'] : 'name';
if(!in_array($order, array('country', 'name', 'level', 'vocation')))
    $order = $db->fieldName('name');
else if($order == 'country')
    $order = $db->tableName('accounts') . '.' . $db->fieldName('country');
else if($order == 'vocation')
    $order = $promotion . 'vocation ASC';

$skull_type = 'skull';
if($db->hasColumn('players', 'skull_type')) {
    $skull_type = 'skull_type';
}

$skull_time = 'skulltime';
if($db->hasColumn('players', 'skull_time')) {
    $skull_time = 'skull_time';
}

$outfit_addons = false;
$outfit = '';
if($config['online_outfit']) {
    $outfit = ', lookbody, lookfeet, lookhead, looklegs, looktype';
    if($db->hasColumn('players', 'lookaddons')) {
        $outfit .= ', lookaddons';
        $outfit_addons = true;
    }
}

if($config['online_vocations']) {
    $vocs = array();
    foreach($config['vocations'] as $id => $name)
        $vocs[$id] = 0;
}

if($db->hasTable('players_online')) // tfs 1.0
{
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN `players_online` ON `players`.`id` = `players_online`.`player_id` WHERE players_online.player_id IS NOT NULL ORDER BY ' . $order)->fetchAll();

    $playersOnlineIds = [];
    foreach ($playersOnline as $player) {
        $playersOnlineIds[] = $player['id'];
    }

    $playersOffline = $db->query('SELECT `accounts`.`country`, `players`.`id`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull`, `player_storage`.`value` as storage_value FROM `accounts` LEFT JOIN `players` ON `players`.`account_id` = `accounts`.`id` LEFT JOIN player_storage ON players.id = player_storage.player_id AND player_storage.key = ' . $offlineStorage . ' AND player_storage.value = 1 WHERE player_storage.key = ' . $offlineStorage . ' AND player_storage.value > 0 ' . (count($playersOnlineIds) ? ' AND players.id NOT IN (' . implode(', ', $playersOnlineIds) . ')' : '') . ' ORDER BY ' . $order)->fetchAll();

    $playersOnline = array_merge($playersOnline, $playersOffline);
}
else
    $playersOnline = $db->query('SELECT `accounts`.`country`, `players`.`name`, `players`.`level`, `players`.`vocation`' . $outfit . ', ' . $promotion . ' `' . $skull_time . '` as `skulltime`, `' . $skull_type . '` as `skull` FROM `accounts`, `players` WHERE `players`.`online` > 0 AND `accounts`.`id` = `players`.`account_id`  ORDER BY ' . $order);

$players_data = array();
$players = 0;
$data = '';
foreach($playersOnline as $player)
{
    $skull = '';
    if($config['online_skulls'])
    {
        if($player['skulltime'] > 0)
        {
            if($player['skull'] == 3)
                $skull = ' <img style="border: 0;" src="images/white_skull.gif"/>';
            elseif($player['skull'] == 4)
                $skull = ' <img style="border: 0;" src="images/red_skull.gif"/>';
            elseif($player['skull'] == 5)
                $skull = ' <img style="border: 0;" src="images/black_skull.gif"/>';
        }
    }

    if(isset($player['promotion'])) {
        if((int)$player['promotion'] > 0)
            $player['vocation'] += ($player['promotion'] * $config['vocations_amount']);
    }

    $players_data[] = array(
        'name' => getPlayerLink($player['name']),
        'player' => $player,
        'level' => $player['level'],
        'storage_value' => $player['storage_value'] ?? '0',
        'vocation' => $config['vocations'][$player['vocation']],
        'country_image' => $config['account_country'] ? getFlagImage($player['country']) : null,
        'outfit' => $config['online_outfit'] ? $config['outfit_images_url'] . '?id=' . $player['looktype'] . ($outfit_addons ? '&addons=' . $player['lookaddons'] : '') . '&head=' . $player['lookhead'] . '&body=' . $player['lookbody'] . '&legs=' . $player['looklegs'] . '&feet=' . $player['lookfeet'] : null
    );

    if($config['online_vocations'])
        $vocs[($player['vocation'] > $config['vocations_amount'] ? $player['vocation'] - $config['vocations_amount'] : $player['vocation'])]++;
}

$record = '';
if($players > 0)
{
    if($config['online_record'])
    {
        $timestamp = false;
        if($db->hasTable('server_record')) {
            $query =
                $db->query(
                    'SELECT `record`, `timestamp` FROM `server_record` WHERE `world_id` = ' . (int)$config['lua']['worldId'] .
                    ' ORDER BY `record` DESC LIMIT 1');
            $timestamp = true;
        }
        else if($db->hasTable('server_config')) { // tfs 1.0
            $query = $db->query('SELECT `value` as `record` FROM `server_config` WHERE `config` = ' . $db->quote('players_record'));
        }
        else
            $query = NULL;

        if(isset($query) && $query->rowCount() > 0)
        {
            $result = $query->fetch();
            $record = 'The maximum on this game world was ' . $result['record'] . ' players' . ($timestamp ? ' on ' . date("M d Y, H:i:s", $result['timestamp']) . '.' : '.');
        }
    }
}

$twig->display('online.html.twig', array(
    'players' => $players_data,
    'record' => $record
));

//search bar
$twig->display('online.form.html.twig');
?>

Perfect !!! Thank you so much !
 
Back
Top