• 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!
  • If you're using Gesior 2012 or MyAAC, please review this thread for information about a serious security vulnerability and a fix.

TFS 1.X+ Event Schedule

QuebradaZN

Member
Joined
May 5, 2019
Messages
43
Solutions
3
Reaction score
5
Well my friends, I'm having problems in the Event Schedule, I'm using MyAAC, Login.php Tibia 12 and OTServer TFS 1.3 and even configuring the XML/Events.xml I'm not getting any feedback, Can anyone help me?
even.PNG

Login.php

PHP:
<?php
require_once('common.php');
require_once('config.php');
require_once('config.local.php');
require_once(SYSTEM . 'functions.php');
require_once(SYSTEM . 'init.php');
require_once(SYSTEM . 'status.php');

# error function
function sendError($msg){
    $ret = [];
    $ret["errorCode"] = 3;
    $ret["errorMessage"] = $msg;
    die(json_encode($ret));
}

$request = file_get_contents('php://input');
$result = json_decode($request);
$action = isset($result->type) ? $result->type : '';

switch ($action) {
    case 'cacheinfo':
        die(json_encode([
            'playersonline' => $status['players'],
            'twitchstreams' => 0,
            'twitchviewer' => 0,
            'gamingyoutubestreams' => 0,
            'gamingyoutubeviewer' => 0
        ]));
    break;
    
    case 'eventschedule':
        die(json_encode([
            'eventlist' => []
        ]));
    break;

    case 'boostedcreature':
        $boostDB = $db->query("select * from " . $db->tableName('boosted_creature'))->fetchAll();
        foreach ($boostDB as $Tableboost) {
        die(json_encode([
            'boostedcreature' => true,
            'raceid' => intval($Tableboost['raceid'])
        ]));
        }
    break;

    case 'login':
    
        $port = $config['lua']['gameProtocolPort'];
    
        // default world info
        $world = [
            'id' => 0,
            'name' => $config['lua']['serverName'],
            'externaladdress' => $config['lua']['ip'],
            'externalport' => $port,
            'externaladdressprotected' => $config['lua']['ip'],
            'externalportprotected' => $port,
            'externaladdressunprotected' => $config['lua']['ip'],
            'externalportunprotected' => $port,
            'previewstate' => 0,
            'location' => 'BRA', // BRA, EUR, USA
            'anticheatprotection' => false,
            'pvptype' => array_search($config['lua']['worldType'], ['pvp', 'no-pvp', 'pvp-enforced']),
            'istournamentworld' => false,
            'restrictedstore' => false,
            'currenttournamentphase' => 2
        ];

        $characters = [];
        $account = null;
        
        // common columns
        $columns = 'name, level, sex, vocation, looktype, lookhead, lookbody, looklegs, lookfeet, lookaddons, deletion, lastlogin';
        
        $account = new OTS_Account();
        $account->findByEmail($result->email);
        $config_salt_enabled = fieldExist('salt', 'accounts');
        $current_password = encrypt(($config_salt_enabled ? $account->getCustomField('salt') : '') . $result->password);

        if (!$account->isLoaded() || $account->getPassword() != $current_password) {
            sendError('Email or password is not correct.');
        }

        $players = $db->query("select {$columns} from players where account_id = " . $account->getId())->fetchAll();
        foreach ($players as $player) {
            $characters[] = create_char($player);
        }

        $worlds = [$world];
        $playdata = compact('worlds', 'characters');
        $session = [
            'sessionkey' => "$result->email\n$result->password",
            'lastlogintime' => (!$account) ? 0 : $account->getLastLogin(),
            'ispremium' => (!$account) ? true : $account->isPremium(),
            'premiumuntil' => (!$account) ? 0 : (time() + ($account->getPremDays() * 86400)),
            'status' => 'active', // active, frozen or suspended
            'returnernotification' => false,
            'showrewardnews' => true,
            'isreturner' => true,
            'fpstracking' => false,
            'optiontracking' => false,
            'tournamentticketpurchasestate' => 0,
            'emailcoderequest' => false
        ];
        die(json_encode(compact('session', 'playdata')));
    break;
    
    default:
        sendError("Unrecognized event {$action}.");
    break;
}

function create_char($player) {
    global $config;
    return [
        'worldid' => 0,
        'name' => $player['name'],
        'ismale' => intval($player['sex']) === 1,
        'tutorial' => false, //intval($player['lastlogin']) === 0,
        'level' => intval($player['level']),
        'vocation' => $config['vocations'][$player['vocation']],
        'outfitid' => intval($player['looktype']),
        'headcolor' => intval($player['lookhead']),
        'torsocolor' => intval($player['lookbody']),
        'legscolor' => intval($player['looklegs']),
        'detailcolor' => intval($player['lookfeet']),
        'addonsflags' => intval($player['lookaddons']),
        'ishidden' => intval($player['deletion']) === 1,
        'istournamentparticipant' => false,
        'remainingdailytournamentplaytime' => 0
    ];
}
 
Solution
up
@EDIT
SOLVED

missing part of login.php

Lua:
# event schedule function
function parseEvent($table1, $date, $table2)
{
if ($table1) {
    if ($date) {
        if ($table2) {
            $date = $table1->getAttribute('startdate');
            return date_create("{$date}")->format('U');
        } else {
            $date = $table1->getAttribute('enddate');
            return date_create("{$date}")->format('U');
        }
    } else {
        foreach($table1 as $attr) {
            if ($attr) {
                return $attr->getAttribute($table2);
            }
        }
    }
}
    return;
}

----------------------------

case 'eventschedule':
    $eventlist = [];
    $file_path = config('server_path') . 'data/XML/events.xml';
    if...
OP
OP
Q

QuebradaZN

Member
Joined
May 5, 2019
Messages
43
Solutions
3
Reaction score
5
up
@EDIT
SOLVED

missing part of login.php

Lua:
# event schedule function
function parseEvent($table1, $date, $table2)
{
if ($table1) {
    if ($date) {
        if ($table2) {
            $date = $table1->getAttribute('startdate');
            return date_create("{$date}")->format('U');
        } else {
            $date = $table1->getAttribute('enddate');
            return date_create("{$date}")->format('U');
        }
    } else {
        foreach($table1 as $attr) {
            if ($attr) {
                return $attr->getAttribute($table2);
            }
        }
    }
}
    return;
}

----------------------------

case 'eventschedule':
    $eventlist = [];
    $file_path = config('server_path') . 'data/XML/events.xml';
    if (!file_exists($file_path)) {
        die(json_encode([]));
        break;
    }
    $xml = new DOMDocument;
    $xml->load($file_path);
    $tmplist = [];
    $tableevent = $xml->getElementsByTagName('event');

    foreach ($tableevent as $event) {
        if ($event) { $tmplist = [
        'colorlight' => parseEvent($event->getElementsByTagName('colors'), false, 'colorlight'),
        'colordark' => parseEvent($event->getElementsByTagName('colors'), false, 'colordark'),
        'description' => parseEvent($event->getElementsByTagName('description'), false, 'description'),
        'displaypriority' => intval(parseEvent($event->getElementsByTagName('details'), false, 'displaypriority')),
        'enddate' => intval(parseEvent($event, true, false)),
        'isseasonal' => getBoolean(intval(parseEvent($event->getElementsByTagName('details'), false, 'isseasonal'))),
        'name' => $event->getAttribute('name'),
        'startdate' => intval(parseEvent($event, true, true)),
        'specialevent' => intval(parseEvent($event->getElementsByTagName('details'), false, 'specialevent'))
            ];
        $eventlist[] = $tmplist; } }
    die(json_encode(['eventlist' => $eventlist, 'lastupdatetimestamp' => time()]));
    break;
 
Last edited:
Solution

edwinaaa

Member
Joined
Jan 31, 2014
Messages
53
Reaction score
8
up
@EDIT
SOLVED

missing part of login.php

Lua:
# event schedule function
function parseEvent($table1, $date, $table2)
{
if ($table1) {
    if ($date) {
        if ($table2) {
            $date = $table1->getAttribute('startdate');
            return date_create("{$date}")->format('U');
        } else {
            $date = $table1->getAttribute('enddate');
            return date_create("{$date}")->format('U');
        }
    } else {
        foreach($table1 as $attr) {
            if ($attr) {
                return $attr->getAttribute($table2);
            }
        }
    }
}
    return;
}

----------------------------

case 'eventschedule':
    $eventlist = [];
    $file_path = config('server_path') . 'data/XML/events.xml';
    if (!file_exists($file_path)) {
        die(json_encode([]));
        break;
    }
    $xml = new DOMDocument;
    $xml->load($file_path);
    $tmplist = [];
    $tableevent = $xml->getElementsByTagName('event');

    foreach ($tableevent as $event) {
        if ($event) { $tmplist = [
        'colorlight' => parseEvent($event->getElementsByTagName('colors'), false, 'colorlight'),
        'colordark' => parseEvent($event->getElementsByTagName('colors'), false, 'colordark'),
        'description' => parseEvent($event->getElementsByTagName('description'), false, 'description'),
        'displaypriority' => intval(parseEvent($event->getElementsByTagName('details'), false, 'displaypriority')),
        'enddate' => intval(parseEvent($event, true, false)),
        'isseasonal' => getBoolean(intval(parseEvent($event->getElementsByTagName('details'), false, 'isseasonal'))),
        'name' => $event->getAttribute('name'),
        'startdate' => intval(parseEvent($event, true, true)),
        'specialevent' => intval(parseEvent($event->getElementsByTagName('details'), false, 'specialevent'))
            ];
        $eventlist[] = $tmplist; } }
    die(json_encode(['eventlist' => $eventlist, 'lastupdatetimestamp' => time()]));
    break;

hello friend, a query, do you have by chance the code to call the information from the login.php to show information in the compendium?
 
Top