Skip to content

Instantly share code, notes, and snippets.

@RafaelClaumann
Created April 3, 2023 03:17
Show Gist options
  • Select an option

  • Save RafaelClaumann/6c3af8d3b4adab9fbaaf6cf7cf6e5034 to your computer and use it in GitHub Desktop.

Select an option

Save RafaelClaumann/6c3af8d3b4adab9fbaaf6cf7cf6e5034 to your computer and use it in GitHub Desktop.
simple login.php for otserv 12x
// https://github.com/otsoft/myaac
// https://github.com/opentibiabr/canary
// https://github.com/dudantas/tibia-client/releases/tag/12.91.12329
<?php
$databaseURL = "172.18.0.1";
$databaseUser = "forgottenserver";
$databaseUserPassword = "noob";
$databaseName = "forgottenserver";
$mysqli = mysqli_connect($databaseURL,$databaseUser, $databaseUserPassword, $databaseName);
$request = json_decode(file_get_contents('php://input'));
file_put_contents('01_resquestBody.json', json_encode($request));
$current_password = sha1($request->password);
$characters = [];
// buscar conta, validar email e password
$query = $mysqli->query("SELECT * FROM accounts WHERE email = '$request->email'");
$account = $query->fetch_object();
if (strcmp($account->password, $current_password) != 0) {
sendError(($request->email != false ? 'Email' : 'Account name') . ' or password is not correct.');
}
// buscar characters da conta e definir o main char
$columns = 'id, name, level, sex, vocation, looktype, lookhead, lookbody, looklegs, lookfeet, lookaddons';
$query = $mysqli->query("SELECT {$columns} FROM players WHERE account_id = '$account->id' AND deletion = 0");
if($query) {
$players = $query->fetch_all(MYSQLI_BOTH);
$highestLevelId = 0;
$highestLevel = 0;
foreach ($players as $player) {
if ($player['level'] >= $highestLevel) {
$highestLevel = $player['level'];
$highestLevelId = $player['id'];
}
}
foreach ($players as $player) {
$characters[] = create_char($player, $highestLevelId);
}
}
$worlds = [[
'id' => 0,
'name' => "OTServBR-Global", // igual ao campo serverName do config.lua
'externaladdress' => "172.18.0.1", // endereço da rede docker
'externalport' => 7172,
'externaladdressprotected' => "172.18.0.1", // endereço da rede docker
'externalportprotected' => 7172,
'externaladdressunprotected' => "172.18.0.1", // endereço da rede docker
'externalportunprotected' => 7172,
'previewstate' => 0,
'location' => 'BRA',
'anticheatprotection' => false,
'pvptype' => "pvp",
'istournamentworld' => false,
'restrictedstore' => false,
'currenttournamentphase' => 2
]];
$session = [
'sessionkey' => $request->email."\n".$request->password,
'lastlogintime' => 0,
'ispremium' => true,
'premiumuntil' => 0,
'status' => 'active',
'returnernotification' => false,
'showrewardnews' => false,
'isreturner' => true,
'fpstracking' => false,
'optiontracking' => false,
'tournamentticketpurchasestate' => 0,
'emailcoderequest' => false
];
$playdata = compact('worlds', 'characters');
$responseBody = compact('session', 'playdata');
file_put_contents('01_responseBody.json', json_encode($responseBody));
die(json_encode($responseBody));
function create_char($player, $highestLevelId) {
$vocations = [
"1" => "Sorcerer",
"2" => "Druid",
"3" => "Paladin",
"4" => "Knight"
];
return [
'worldid' => 0,
'name' => $player['name'],
'ismale' => intval($player['sex']) === 1,
'tutorial' => isset($player['istutorial']) && $player['istutorial'],
'level' => intval($player['level']),
'vocation' => ($vocations[$player['vocation']]) ?? 'No 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' => isset($player['deletion']) && (int)$player['deletion'] === 1,
'istournamentparticipant' => false,
'ismaincharacter' => $highestLevelId == $player['id'],
'dailyrewardstate' => isset($player['isreward']) ? intval($player['isreward']) : 0,
'remainingdailytournamentplaytime' => 0
];
}
function sendError($message, $code = 3){
$ret = [];
$ret['errorCode'] = $code;
$ret['errorMessage'] = $message;
die(json_encode($ret));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment