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

Porblem with tibia client 12.51

tomaszek123

Member
Joined
May 29, 2014
Messages
71
Solutions
1
Reaction score
18
Hello,

I have a problem with 12.51 client, I am using ubuntu 20.04 and datapack otservbr-global with gesior.
I have changed login web service with my server ip https://185.249.198.229/login.php in my own client even tried with domain still doesnt work

1606162092981.png

1606162145147.png

Even when i am using retro client 10 after putting account details and then pressing enter crashes straight away (using otland IP changer)
1606162400616.png

Is my IP too long or domain ?? shadowserver.online

Can someone help me please?


login.php
________________

Lua:
<?php
$_GET['subtopic'] = 'ws_login';
$_REQUEST['subtopic'] = 'ws_login';
include('index.php');


ws_login.php
________________

Lua:
<?php
header('Content-Type: application/json');

if(!defined('INITIALIZED'))
    exit;

# error function
function sendError($msg){
    $ret = [];
    $ret["errorCode"] = 3;
    $ret["errorMessage"] = $msg;
    die(json_encode($ret));
}
# event schedule function
function parseEvent($table1, $date, $table2, $bool){
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) {
                if ($bool) {
                    if (intval($attr->getAttribute($table2)) > 0) {
                        return true;
                    }
                        return false;
                }
                return $attr->getAttribute($table2);
            }
        }
    }
}
    return;
}

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

switch ($action) {
    case 'cacheinfo':
        $playersonline = $SQL->query("select count(*) from `players_online`")->fetchAll();
        die(json_encode([
            'playersonline' => (intval($playersonline[0][0])),
            'twitchstreams' => 0,
            'twitchviewer' => 0,
            'gamingyoutubestreams' => 0,
            'gamingyoutubeviewer' => 0
        ]));
    break;
    case 'eventschedule':
    $eventlist = array();
    $lastupdatetimestamp = time();
    $file_path = Website::getWebsiteConfig()->getValue('serverPath') . 'data/XML/events.xml';
    if (!Website::fileExists($file_path)) {
        die(json_encode([]));
        break;
    }
    $xml = new DOMDocument;
    $xml->load($file_path);
    $tableevent = $xml->getElementsByTagName('event');
    foreach ($tableevent as $event) {
        if ($event) {
        $tmplist = array();
        $tmplist['colorlight'] = parseEvent($event->getElementsByTagName('colors'), false, 'colorlight', false);
        $tmplist['colordark'] = parseEvent($event->getElementsByTagName('colors'), false, 'colordark', false);
        $tmplist['description'] = parseEvent($event->getElementsByTagName('description'), false, 'description', false);
        $tmplist['displaypriority'] = (intval(parseEvent($event->getElementsByTagName('details'), false, 'displaypriority', false)));
        $tmplist['enddate'] = (intval(parseEvent($event, true, false, false)));
        $tmplist['isseasonal'] = parseEvent($event->getElementsByTagName('details'), false, 'isseasonal', true);
        $tmplist['name'] = $event->getAttribute('name');
        $tmplist['startdate'] = (intval(parseEvent($event, true, true, false)));
        $tmplist['specialevent'] = (intval(parseEvent($event->getElementsByTagName('details'), false, 'specialevent', false)));
        $eventlist[] = $tmplist;
        }
    }
    die(json_encode(compact('eventlist', 'lastupdatetimestamp')));
    break;
    case 'boostedcreature':
        $boostDB = $SQL->query("select * from " . $SQL->tableName('boosted_creature'))->fetchAll();
        foreach ($boostDB as $Tableboost) {
        die(json_encode([
            'boostedcreature' => true,
            'raceid' => intval($Tableboost['raceid'])
        ]));
        }
    break;
    case 'login':
 
        $port = Website::getServerConfig()->getValue('gameProtocolPort');
 
        // default world info
        $world = [
            'id' => 0,
            'name' => Website::getServerConfig()->getValue('serverName'),
            'externaladdress' => Website::getServerConfig()->getValue('ip'),
            'externalport' => $port,
            'externaladdressprotected' => Website::getServerConfig()->getValue('ip'),
            'externalportprotected' => $port,
            'externaladdressunprotected' => Website::getServerConfig()->getValue('ip'),
            'externalportunprotected' => $port,
            'previewstate' => 0,
            'location' => 'BRA', // BRA, EUR, USA
            'anticheatprotection' => false,
            'pvptype' => array_search(Website::getServerConfig()->getValue('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, deleted, lastlogin';
     
        $account = new Account();
        $account->loadByEmail($result->email);
        $current_password = Website::encryptPassword($result->password);
        if (!$account->isLoaded() || !$account->isValidPassword($result->password)) {
            sendError('Email or password is not correct.');
        }
        $players = $SQL->query("select {$columns} from players where account_id = " . $account->getId() . " order by name asc")->fetchAll();
        foreach ($players as $player) {
            $characters[] = create_char($player);
        }

        $save = false;
        $timeNow = time();
        $query = $SQL->query("select `premdays`, `lastday` from `accounts` where `id` = " . $account->getId());
            if($query->rowCount() > 0) {
                $query = $query->fetch();
                $premDays = (int)$query['premdays'];
                $lastDay = (int)$query['lastday'];
                $lastLogin = $lastDay;
            }
            else {
                sendError("Error while fetching your account data. Please contact admin.");
        }
        if($premDays != 0 && $premDays != PHP_INT_MAX ) {
            if($lastDay == 0) {
                $lastDay = $timeNow;
                $save = true;
            } else {
                $days = (int)(($timeNow - $lastDay) / 86400);
                if($days > 0) {
                    if($days >= $premDays) {
                        $premDays = 0;
                        $lastDay = 0;
                    } else {
                        $premDays -= $days;
                        $reminder = (int)(($timeNow - $lastDay) % 86400);
                        $lastDay = $timeNow - reminder;
                    }

                    $save = true;
                }
            }
        } else if ($lastDay != 0) {
            $lastDay = 0;
            $save = true;
        }
        if($save) {
            $SQL->query("update `accounts` set `premdays` = " . $premDays . ", `lastday` = " . $lastDay . " where `id` = " . $account->getId());
        }
        $premiumAccount = $premDays > 0;
        $timePremium = time() + ($premDays * 86400);

        $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) {
    return [
        'worldid' => 0,
        'name' => $player['name'],
        'ismale' => intval($player['sex']) === 1,
        'tutorial' => false, //intval($player['lastlogin']) === 0,
        'level' => intval($player['level']),
        'vocation' => Website::getVocationName($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
    ];
}
Post automatically merged:

Solved
 
Last edited:
Back
Top