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

TFS 1.X+ How to fix login.php Tibia 11 (Wrong api?)

Szafi

www.rookwar.pl
Joined
Mar 2, 2009
Messages
165
Reaction score
10
Location
Poland
Hello i have problem.
I can connect to character list in Tibia 11 client, cant login to game if i check character.

PS: Tibia 10.xx work normal. Problem is only on Tibia 11.


Api request if enter acc and password
Code:
{"session":{"fpstracking":false,"isreturner":true,"returnernotification":false,"showrewardnews":false,"sessionkey":"333\n1","lastlogintime":"0","ispremium":false,"premiumuntil":1037224,"status":"active"},"playdata":{"worlds":[{"id":0,"name":"Szafi rl mapka","externaladdress":"192.168.10.7","externalport":7172,"previewstate":0,"location":"PL","anticheatprotection":false}],"characters":[{"worldid":0,"name":"Community Manager","ismale":true,"tutorial":false},{"worldid":0,"name":"Szafi","ismale":true,"tutorial":false}]}}

login.php
Code:
<?php
/**
 * Created by Notepad++.
 * User: Malucooo - Erick Nunes
 * Remaked of login.php by JLCVP and parts of login.php by Monteiro. Thanks for both!
 * Date: 18/09/17
 * Time: 03:01
 */

require 'config/config.php';

// comment to show E_NOTICE [undefinied variable etc.], comment if you want make script and see all errors
error_reporting(E_ALL ^ E_STRICT ^ E_NOTICE);

// true = show sent queries and SQL queries status/status code/error message
define('DEBUG_DATABASE', false);
define('INITIALIZED', true);

if (!defined('ONLY_PAGE'))
    define('ONLY_PAGE', true);

// check if site is disabled/requires installation
include_once('./system/load.loadCheck.php');

// fix user data, load config, enable class auto loader
include_once('./system/load.init.php');

// DATABASE
include_once('./system/load.database.php');
if (DEBUG_DATABASE)
    Website::getDBHandle()->setPrintQueries(true);

// DATABASE END
/*error example:
{
    "errorCode":3,
    "errorMessage":"Account name or password is not correct."
}*/

# Declare variables with array structure
$characters = array();
$playerData = array();
$data = array();
$isCasting = false;

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

# getting infos
    $request = file_get_contents('php://input');
    $result = json_decode($request, true);

# account infos
    $accountName = $result["accountname"];
    $password = $result["password"];
  
  
# game port
    $port = 7172;

# check if player wanna see cast list
if (strtolower($accountName) == "cast")
    $isCasting = true;
if ($isCasting) {
    $casts = $SQL->query("SELECT `player_id` FROM `live_casts`")->fetchAll();
    if (count($casts[0]) == 0)
        sendError("There is no live casts right now!");
    foreach($casts as $cast) {
        $character = new Player();
        $character->load($cast['player_id']);
      
        if ($character->isLoaded()) {
            $char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
            $characters[] = $char;
        }          
    }
    $port = 7173;
    $lastLogin = 0;
    $premiumAccount = true;
    $timePremium = 0;
} else {
    $account = new Account();
    $account->find($accountName);
  
    if (!$account->isLoaded())
        sendError("Failed to get account. Try again!");
    if ($account->getPassword() != Website::encryptPassword($password))
        sendError("The password for this account is wrong. Try again!");
  
    foreach($account->getPlayersList() as $character) {
        $char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
        $characters[] = $char;
    }
  
    $lastLogin = $account->getLastLogin();
    $premiumAccount = ($account->isPremium()) ? true : false;
    $timePremium = time() + ($account->getPremDays() * 86400);
}
$session = array(
    "fpstracking" => false,
    "isreturner" => true,
    "returnernotification" => false,
    "showrewardnews" => false,
    "sessionkey" => $accountName . "\n" . $password,
    "lastlogintime" => $lastLogin,
    "ispremium" => $premiumAccount,
    "premiumuntil" => $timePremium,
    "status" => "active"  
);
$world = array(
    "id" => 0,
    "name" => $config['server']['serverName'],
    "externaladdress" => $config['server']['ip'],
    "externalport" => $port,
    "previewstate" => 0,
    "location" => "PL",
    "anticheatprotection" => false
);

//Survey by: Cjaker
$survey = array(
    "id" => rand(0, 999999),
    "invitationtext" => "Querido tibiano, obrigado por usar OTX, a base mais atualizada do Tibia Global.\n'Mensagem dita por Cjaker'.",
    "invitationtoken" => "1751f1beddf001e1d36dee78ace974",
    "endtimestamp" => 1510614000
);

// https://limesurvey.cipsoft.com/index.php/survey/index/sid/527875/lang-en?token=1751f1beddf001e1d36dee78ace974
// token=invitationtoken
// o endtimestamp acima é o tempo convertido em unix timestamp, onde o mesmo é o prazo que irá acabar o survey!

$worlds = array($world);
$data["session"] = $session;
$playerData["worlds"] = $worlds;
$playerData["characters"] = $characters;
$data["playdata"] = $playerData;
//$data["survey"] = $survey;

echo json_encode($data);

Thanks for help and info,
Regards.
 
Hello i have problem.
I can connect to character list in Tibia 11 client, cant login to game if i check character.

PS: Tibia 10.xx work normal. Problem is only on Tibia 11.


Api request if enter acc and password
Code:
{"session":{"fpstracking":false,"isreturner":true,"returnernotification":false,"showrewardnews":false,"sessionkey":"333\n1","lastlogintime":"0","ispremium":false,"premiumuntil":1037224,"status":"active"},"playdata":{"worlds":[{"id":0,"name":"Szafi rl mapka","externaladdress":"192.168.10.7","externalport":7172,"previewstate":0,"location":"PL","anticheatprotection":false}],"characters":[{"worldid":0,"name":"Community Manager","ismale":true,"tutorial":false},{"worldid":0,"name":"Szafi","ismale":true,"tutorial":false}]}}

login.php
Code:
<?php
/**
 * Created by Notepad++.
 * User: Malucooo - Erick Nunes
 * Remaked of login.php by JLCVP and parts of login.php by Monteiro. Thanks for both!
 * Date: 18/09/17
 * Time: 03:01
 */

require 'config/config.php';

// comment to show E_NOTICE [undefinied variable etc.], comment if you want make script and see all errors
error_reporting(E_ALL ^ E_STRICT ^ E_NOTICE);

// true = show sent queries and SQL queries status/status code/error message
define('DEBUG_DATABASE', false);
define('INITIALIZED', true);

if (!defined('ONLY_PAGE'))
    define('ONLY_PAGE', true);

// check if site is disabled/requires installation
include_once('./system/load.loadCheck.php');

// fix user data, load config, enable class auto loader
include_once('./system/load.init.php');

// DATABASE
include_once('./system/load.database.php');
if (DEBUG_DATABASE)
    Website::getDBHandle()->setPrintQueries(true);

// DATABASE END
/*error example:
{
    "errorCode":3,
    "errorMessage":"Account name or password is not correct."
}*/

# Declare variables with array structure
$characters = array();
$playerData = array();
$data = array();
$isCasting = false;

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

# getting infos
    $request = file_get_contents('php://input');
    $result = json_decode($request, true);

# account infos
    $accountName = $result["accountname"];
    $password = $result["password"];
 
 
# game port
    $port = 7172;

# check if player wanna see cast list
if (strtolower($accountName) == "cast")
    $isCasting = true;
if ($isCasting) {
    $casts = $SQL->query("SELECT `player_id` FROM `live_casts`")->fetchAll();
    if (count($casts[0]) == 0)
        sendError("There is no live casts right now!");
    foreach($casts as $cast) {
        $character = new Player();
        $character->load($cast['player_id']);
     
        if ($character->isLoaded()) {
            $char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
            $characters[] = $char;
        }         
    }
    $port = 7173;
    $lastLogin = 0;
    $premiumAccount = true;
    $timePremium = 0;
} else {
    $account = new Account();
    $account->find($accountName);
 
    if (!$account->isLoaded())
        sendError("Failed to get account. Try again!");
    if ($account->getPassword() != Website::encryptPassword($password))
        sendError("The password for this account is wrong. Try again!");
 
    foreach($account->getPlayersList() as $character) {
        $char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
        $characters[] = $char;
    }
 
    $lastLogin = $account->getLastLogin();
    $premiumAccount = ($account->isPremium()) ? true : false;
    $timePremium = time() + ($account->getPremDays() * 86400);
}
$session = array(
    "fpstracking" => false,
    "isreturner" => true,
    "returnernotification" => false,
    "showrewardnews" => false,
    "sessionkey" => $accountName . "\n" . $password,
    "lastlogintime" => $lastLogin,
    "ispremium" => $premiumAccount,
    "premiumuntil" => $timePremium,
    "status" => "active" 
);
$world = array(
    "id" => 0,
    "name" => $config['server']['serverName'],
    "externaladdress" => $config['server']['ip'],
    "externalport" => $port,
    "previewstate" => 0,
    "location" => "PL",
    "anticheatprotection" => false
);

//Survey by: Cjaker
$survey = array(
    "id" => rand(0, 999999),
    "invitationtext" => "Querido tibiano, obrigado por usar OTX, a base mais atualizada do Tibia Global.\n'Mensagem dita por Cjaker'.",
    "invitationtoken" => "1751f1beddf001e1d36dee78ace974",
    "endtimestamp" => 1510614000
);

// https://limesurvey.cipsoft.com/index.php/survey/index/sid/527875/lang-en?token=1751f1beddf001e1d36dee78ace974
// token=invitationtoken
// o endtimestamp acima é o tempo convertido em unix timestamp, onde o mesmo é o prazo que irá acabar o survey!

$worlds = array($world);
$data["session"] = $session;
$playerData["worlds"] = $worlds;
$playerData["characters"] = $characters;
$data["playdata"] = $playerData;
//$data["survey"] = $survey;

echo json_encode($data);

Thanks for help and info,
Regards.

change your login.php for this

PHP:
<?php
/**
* Created by Notepad++.
* User: Malucooo - Erick Nunes
* Remaked of login.php by JLCVP and parts of login.php by Monteiro. Thanks for both!
* Modified for MyAAC by slawkens
* Date: 18/09/17
* Time: 03:01
*/

require_once('common.php');
require 'config.php';
require 'config.local.php';
// comment to show E_NOTICE [undefinied variable etc.], comment if you want make script and see all errors
error_reporting(E_ALL ^ E_STRICT ^ E_NOTICE);

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

/*error example:
{
    "errorCode":3,
    "errorMessage":"Account name or password is not correct."
}*/

# Declare variables with array structure
$characters = array();
$playerData = array();
$data = array();
$isCasting = false;

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

# getting infos
$request = file_get_contents('php://input');
$result = json_decode($request, true);

# account infos
$accountName = $result["accountname"];
$password = $result["password"];

# game port
$port = $config['lua']['gameProtocolPort'];

# check if player wanna see cast list
if (strtolower($accountName) == "cast")
    $isCasting = true;

if ($isCasting) {
    $casts = $db->query("SELECT `player_id` FROM `live_casts`")->fetchAll();
    if (count($casts[0]) == 0)
        sendError("There is no live casts right now!");
    foreach($casts as $cast) {
        $character = new OTS_Player();
        $character->load($cast['player_id']);
       
        if ($character->isLoaded()) {
            $char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
            $characters[] = $char;
        }
    }
   
    $port = 7173;
    $lastLogin = 0;

    $premiumAccount = true;
    $timePremium = 30 * 86400;
}
else {
    $account = new OTS_Account();
    $account->find($accountName);
   
    if (!$account->isLoaded())
        sendError("Failed to get account. Try again!");

    $config_salt_enabled = fieldExist('salt', 'accounts');
    $current_password = encrypt(($config_salt_enabled ? $account->getCustomField('salt') : '') . $password);
    if ($account->getPassword() != $current_password)
        sendError("The password for this account is wrong. Try again!");
   
    foreach($account->getPlayersList() as $character) {
        $char = array("worldid" => 0, "name" => $character->getName(), "ismale" => (($character->getSex() == 1) ? true : false), "tutorial" => false);
        $characters[] = $char;
    }
   
    $save = false;
    $timeNow = time();

    $query = $db->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;
                    $remainder = (int)(($timeNow - $lastDay) % 86400);
                    $lastDay = $timeNow - remainder;
                }

                $save = true;
            }
        }
    } else if ($lastDay != 0) {
        $lastDay = 0;
        $save = true;
    }

    if($save) {
        $db->query('UPDATE `accounts` SET `premdays` = ' . $premDays . ', `lastday` = ' . $lastDay . ' WHERE `id` = ' . $account->getId());
    }

    $premiumAccount = $premDays > 0;
    $timePremium = time() + ($premDays * 86400);
}

$session = array(
/*    "fpstracking" => false,
    "isreturner" => true,
    "returnernotification" => false,
    "showrewardnews" => false,*/
    "sessionkey" => $accountName . "\n" . $password,
    "lastlogintime" => $lastLogin,
    "ispremium" => $premiumAccount,
    "premiumuntil" => $timePremium,
    "status" => "active"
);

$world = array(
    "id" => 0,
    "name" => $config['lua']['serverName'],
    "externaladdress" => $config['lua']['ip'],
    "externalport" => $port,
    "previewstate" => 0,
    "location" => "BRA",
    "anticheatprotection" => false,
    "externaladdressunprotected" => $config["lua"]["ip"],
    "externaladdressprotected" => $config["lua"]["ip"]
);

$worlds = array($world);

$data["session"] = $session;
$playerData["worlds"] = $worlds;
$playerData["characters"] = $characters;
$data["playdata"] = $playerData;

echo json_encode($data);
//echo '<pre>' . var_export($data, true) . '</pre>';
 
Back
Top