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

gesior 0.3.4(beta4) error Help!!!!

Calon

Experienced Member
Joined
Feb 6, 2009
Messages
1,070
Reaction score
21
my server located at
C:\Documents and Settings\XPPRESP3\Desktop\xd

the error
Warning: parse_ini_file(C:\Documents and Settings\XPPRESP3\Desktop\xd/ signatures = 1config.lua) [function.parse-ini-file]: failed to open stream: Invalid argument in C:\xampp\htdocs\config-and-functions.php on line 13
Database error. Unknown database type in C:\Documents and Settings\XPPRESP3\Desktop\xd/ signatures = 1config.lua . Must be equal to: "mysql" or "sqlite". Now is: ""


config .ini:
install = "no"
server_path = C:\Documents and Settings\XPPRESP3\Desktop\xd/"
signatures = "1"

config:
<?PHP
$config['site']['worlds'] = array(0 => 'Server Name', 1 => 'Server 2 Name');
// ACCOUNT config
$config['site']['one_email'] = 0; // one e-mail can be used only to create one account 0 / 1
$config['site']['verify_code'] = 1; // show verify code to block stupid scripts, set 0 if you have problems with image
$config['site']['email_days_to_change'] = 2; // how many days user need to change e-mail to account - block hackers
$config['site']['newaccount_premdays'] = 0; // how many days receive new account
// USE ONLY IF YOU CONFIGURED E-MAIL AND IT WORK
$config['site']['create_account_verify_mail'] = 0; // when create account player must use right e-mail, he will receive random password to account like on RL tibia, 1 = yes, 0 = no
$config['site']['generate_new_reckey'] = 0; // let player generate new recovery key, he will receive e-mail with new rec key (not display on page, hacker can't generate rec key)
$config['site']['generate_new_reckey_price'] = 5; // you can get some Premium Points for new rec key
$config['site']['send_mail_when_change_password'] = 0; // send e-mail with new password when change password to account, set 0 if someone abuse to send spam
$config['site']['send_mail_when_generate_reckey'] = 0; // send e-mail with rec key (key is displayed on page anyway when generate), set 0 if someone abuse to send spam
$config['site']['send_register_email'] = 0; // send e-mail when register account

// CHARACTER config, format: ID_of_vocation => 'Name of Character to copy', load vocation name from $vocation_name[0] (below)
$config['site']['newchar_vocations'][0] = array(1 => 'Sorcerer Sample', 2 => 'Druid Sample', 3 => 'Paladin Sample', 4 => 'Knight Sample');
$config['site']['newchar_vocations'][1] = array(1 => 'Sorcerer Sample', 2 => 'Druid Sample', 3 => 'Paladin Sample', 4 => 'Knight Sample');
// sample, if rook only: $config['site']['newchar_vocations'][0] = array(0 => 'Rook Sample');
$config['site']['newchar_towns'][0] = array(1);
$config['site']['newchar_towns'][1] = array(1);
// sample, if all players should spawn in one city (city with ID 4): $config['site']['newchar_towns'] = array(4);

// list of vocations on ots (world 0)
$vocation_name[0][0] = array(0 => 'None', 1 => 'Sorcerer', 2 => 'Druid', 3 => 'Paladin', 4 => 'Knight'); // id => 'name' , $vocation_name[0] - promotion level 0, $vocation_name[0] - for world ID 0
$vocation_name[0][1] = array(1 => 'Master Sorcerer', 2 => 'Elder Druid', 3 => 'Royal Paladin', 4 => 'Elite Knight'); // id => 'name' , $vocation_name[1] - promotion level 1, $vocation_name[0] - for world ID 0
// list of vocations on ots (world 1)
$vocation_name[1][0] = array(0 => 'None', 1 => 'Sorcerer', 2 => 'Druid', 3 => 'Paladin', 4 => 'Knight'); // id => 'name' , $vocation_name[0] - promotion level 0, $vocation_name[1] - for world ID 1
$vocation_name[1][1] = array(1 => 'Master Sorcerer', 2 => 'Elder Druid', 3 => 'Royal Paladin', 4 => 'Elite Knight'); // id => 'name' , $vocation_name[1] - promotion level 1, $vocation_name[1] - for world ID 1

// list of towns on ots
$towns_list[0] = array(0 => 'Venore', 1 => 'lol', 2 => 'lol', 3 => 'lol', 4 => 'lol', 5 => 'Venore', 6 => 'Venore', 7 => 'Venore',8 => 'Venore'); // list of towns, id => 'name', $towns_list[0] - for world id 0
$towns_list[1] = array(0 => 'Venore', 1 => 'lol', 2 => 'lol', 3 => 'lol', 4 => 'lol', 5 => 'Venore', 6 => 'Venore', 7 => 'Venore',8 => 'Venore'); // list of towns, id => 'name', $towns_list[0] - for world id 1

// list of monsters on ots - names blocked, you can generate list of your monsters in acc. maker admin panel ( Reload Monsters )
$config['site']['monsters'] = array("amazon","valkyrie","carrion worm","rotworm","rotworm queen","cockroach","kongra","merlkin","sibang","crystal spider","giant spider","poison spider","scorpion","spider","tarantula","achad","axeitus headbanger","bloodpaw","bovinus","colerian the barbarian","cursed gladiator","frostfur","orcus the cruel","rocky","the hairy one","avalanche","drasilla","grimgor guteater","kreebosh the exile","slim","spirit of earth","spirit of fire","spirit of water","the dark dancer","the hag","darakan the executioner","deathbringer","fallen mooh'tah master ghar","gnorre chyllson","norgle glacierbeard","svoren the mad","the masked marauder","the obliverator","the pit lord","webster","barbarian bloodwalker","barbarian brutetamer","barbarian headsplitter","barbarian skullhunter","bear","panda","polar bear","braindeath","beholder","elder beholder","gazer","chicken","dire penguin","flamingo","parrot","penguin","seagull","terror bird","bazir","infernatil","thul","munster","son of verminor","xenia","zoralurk","big boss trolliver","foreman kneebiter","mad technomancer","man in the cave","lord of the elements","the count","the plasmother","dracola","the abomination","the handmaiden","mr. punish","the countess sorrow","the imperor","massacre","apocalypse","brutus bloodbeard","deadeye devious","demodras","dharalion","fernfang","ferumbras","general murius","ghazbaran","grorlam","lethal lissy","morgaroth","necropharus","orshabaal","ron the ripper","the evil eye","the horned fox","the old widow","tiquandas revenge","apprentice sheng","dog","hellhound","war wolf","winter wolf","wolf","chakoya toolshaper","chakoya tribewarden","chakoya windcaller","blood crab","crab","frost giant","frost giantess","ice golem","yeti","acolyte of the cult","adept of the cult","enlightened of the cult","novice of the cult","ungreez","dark torturer","demon","destroyer","diabolic imp","fire devil","fury","hand of cursed fate","juggernaut","nightmare","plaguesmith","blue djinn","efreet","green djinn","marid","frost dragon","wyrm","sea serpent","dragon lord","dragon","hydra","dragon hatchling","dragon lord hatchling","frost dragon hatchling","dwarf geomancer","dwarf guard","dwarf soldier","dwarf","dworc fleshhunter","dworc venomsniper","dworc voodoomaster","elephant","mammoth","elf arcanist","elf scout","elf","charged energy elemental","energy elemental","massive energy elemental","overcharged energy elemental","energy overlord","cat","lion","tiger","azure frog","coral frog","crimson frog","green frog","orchid frog","toad","jagged earth elemental","muddy earth elemental","earth elemental","massive earth elemental","earth overlord","gargoyle","stone golem","ghost","phantasm","phantasm","pirate ghost","spectre","cyclops smith","cyclops drone","behemoth","cyclops","slick water elemental","roaring water elemental","ice overlord","water elemental","massive water elemental","ancient scarab","butterfly","bug","centipede","exp bug","larva","scarab","wasp","lizard sentinel","lizard snakecharmer","lizard templar","minotaur archer","minotaur guard","minotaur mage","minotaur","squirrel","goblin demon","badger","bat","deer","the halloween hare","hyaena","pig","rabbit","silver rabbit","skunk","wisp","dark monk","monk","tha exp carrier","necromancer","priestess","orc berserker","orc leader","orc rider","orc shaman","orc spearman","orc warlord","orc warrior","orc","goblin leader","goblin scavenger","goblin","goblin assassin","assasin","bandit","black knight","hero","hunter","nomad","smuggler","stalker","poacher","wild warrior","ashmunrah","dipthrah","mahrdis","morguthis","omruc","rahemos","thalas","vashresamun","pirate buccaneer","pirate corsair","pirate cutthroat","pirate marauder","carniphila","spit nettle","fire overlord","massive fire elemental","blistering fire elemental","blazing fire elemental","fire elemental","hellfire fighter","quara constrictor scout","quara hydromancer scout","quara mantassin scout","quara pincher scout","quara predator scout","quara constrictor","quara hydromancer","quara mantassin","quara pincher","quara predator","cave rat","rat","cobra","crocodile","serpent spawn","snake","wyvern","black sheep","sheep","mimic","betrayed wraith","bonebeast","demon skeleton","lost soul","pirate skeleton","skeleton","skeleton warrior","undead dragon","defiler","slime2","slime","bog raider","ice witch","warlock","witch","bones","fluffy","grynch clan goblin","hacker","minishabaal","primitive","tibia bug","undead minion","annihilon","hellgorak","latrivan","madareth","zugurosh","ushuriel","golgordan","thornback tortoise","tortoise","eye of the seven","deathslicer","flamethrower","magicthrower","plaguethrower","poisonthrower","shredderthrower","troll champion","frost troll","island troll","swamp troll","troll","banshee","blightwalker","crypt shambler","ghoul","lich","mummy","vampire","grim reaper","trainer","forest dragon","knight","paladin","druid","sorcerer","guard","mercenary","thief","toxiros","pyramo","lazarus","zathroth","goshnar","durin","demora","orc champion","lumenia","dracula","alezzo","prince almirith","elf warlord","random noob","magebomb");
// list of NPCs on ots - names blocked
$config['site']['npc'] = array('alice', 'oarkhal', 'equer', 'parkhal', 'leoric', 'sarkhal', 'pallo', 'riona', 'her miona', 'varkhal', 'eura', 'blitz', 'markhal', 'wengo', 'larkhal');
$config['site']['max_players_per_account'] = 35; // max. number of characters on account


// GUILDS config
$config['site']['guild_need_level'] = 8; // minimum level to create guild
$config['site']['guild_need_pacc'] = 0; // guild need pacc 0 / 1
$config['site']['guild_image_size_kb'] = 50; // maximum size of image in KB
$config['site']['guild_description_chars_limit'] = 1000; // limit of guild description
$config['site']['guild_description_lines_limit'] = 6; // limit of lines, if description has more lines it will be showed as long text, without 'enters'
$config['site']['guild_motd_chars_limit'] = 150; // limit of MOTD (show in game?)


// E-MAIL config
$config['site']['send_emails'] = 0; // is acc. maker configured to send e-mails?
$config['site']['mail_address'] = "[email protected]"; // e-mail address
$config['site']['smtp_enabled'] = "yes"; // send by smtp or mail function (set 0 if use mail function)
$config['site']['smtp_host'] = "smtp.poczta.onet.pl"; // address
$config['site']['smtp_port'] = 25; // port
$config['site']['smtp_auth'] = "yes"; // need authorization? (set 0 if not need auth)
$config['site']['smtp_user'] = "[email protected]"; // login
$config['site']['smtp_pass'] = "secretpassword"; // password



// ACC MAKER OPTIONS config
$config['site']['access_news'] = 2; // access level needed to edit news
$config['site']['access_admin_panel'] = 3; // access level needed to open admin panel
$config['site']['news_big_limit'] = 3; // limit of news on latest news page
$config['site']['news_ticks_limit'] = 5; // limit of ticker news on latest news page
$config['site']['forum_link'] = ""; // link to server forum, leave empty if server doesn't have forum
$config['site']['show_creationdate'] = 1; // show date of character creation 1 = yes, 0 = no (when use Search Player)
$config['site']['last_deaths_limit'] = 40; // max. number of death on last death page
$config['site']['players_group_id_block'] = 4; // don't show in statistics players with group ID higher (or equal) then (show tutors, senior tutors and normal players)
$config['site']['support_group_id'] = 2; // on game masters list show players with group id 2 or higher
$config['site']['shop_system'] = 1; // show server shop page? 1 = yes, 0 = no, use only if you installed LUA scripts of shop
$config['site']['download_page'] = 1; // show download page? 1 = yes, 0 = no
$config['site']['serverinfo_page'] = 1; // show server info page? 1 = yes, 0 = no
$config['site']['verify_code_shop'] = 0; // show verify code when player try to check premium code
$config['site']['gallery_page'] = 1; // show gallery page? 1 = yes, 0 = no
$config['site']['email_lai_sec_interval'] = 180; // time in seconds between e-mails to one account from lost account interface, block spam
$config['site']['show_marriage_info'] = 0; // show marriage, 1 = yes, 0 = no
$config['site']['show_skills_info'] = 0;
$config['site']['show_vip_status'] = 1;// show vip status, 1 = yes, 0 = no
$config['site']['show_vip_storage'] = 0;// the storage of vip
// layout, available layouts: rasta,tibiacom,darkritual
$config['site']['layout'] = "tibiacom"; // layout name
?>



config-and-functions:
<?PHP
// ###################### CONFIG ########################
//load page config file
$config['site'] = parse_ini_file('config/config.ini');
include('config/config.php');
//check install
if($config['site']['install'] != "no")
{
header("Location: install.php");
exit;
}
//load server config
$config['server'] = parse_ini_file($config['site']['server_path'].'config.lua');
if(isset($config['server']['mysqlHost']))
{
//new (0.2.6+) ots config.lua file
$mysqlhost = $config['server']['mysqlHost'];
$mysqluser = $config['server']['mysqlUser'];
$mysqlpass = $config['server']['mysqlPass'];
$mysqldatabase = $config['server']['mysqlDatabase'];
}
elseif(isset($config['server']['sqlHost']))
{
//old (0.2.4) ots config.lua file
$mysqlhost = $config['server']['sqlHost'];
$mysqluser = $config['server']['sqlUser'];
$mysqlpass = $config['server']['sqlPass'];
$mysqldatabase = $config['server']['sqlDatabase'];
}
$sqlitefile = $config['server']['sqliteDatabase'];
$passwordency = '';
if(strtolower($config['server']['useMD5Passwords']) == 'yes' || strtolower($config['server']['passwordType']) == 'md5')
$passwordency = 'md5';
if(strtolower($config['server']['passwordType']) == 'sha1')
$passwordency = 'sha1';
// loads #####POT mainfile#####
include('pot/OTS.php');
// PDO and POT connects to database
$ots = POT::getInstance();
if(strtolower($config['server']['sqlType']) == "mysql")
{
//connect to MySQL database
try
{
$ots->connect(POT::DB_MYSQL, array('host' => $mysqlhost, 'user' => $mysqluser, 'password' => $mysqlpass, 'database' => $mysqldatabase) );
}
catch(PDOException $error)
{
echo 'Database error - can\'t connect to MySQL database. Possible reasons:<br>1. MySQL server is not running on host.<br>2. MySQL user, password, database or host isn\'t configured in: <b>'.$config['site']['server_path'].'config.lua</b> .<br>3. MySQL user, password, database or host is wrong.';
exit;
}
}
elseif(strtolower($config['server']['sqlType']) == "sqlite")
{
//connect to SQLite database
$link_to_sqlitedatabase = $config['site']['server_path'].$sqlitefile;
try
{
$ots->connect(POT::DB_SQLITE, array('database' => $link_to_sqlitedatabase));
}
catch(PDOException $error)
{
echo 'Database error - can\'t open SQLite database. Possible reasons:<br><b>'.$link_to_sqlitedatabase.'</b> - file isn\'t valid SQLite database.<br><b>'.$link_to_sqlitedatabase.'</b> - doesn\'t exist.<br><font color="red">Wrong PHP configuration. Default PHP does not work with SQLite databases!</font>';
exit;
}
}
else
{
echo 'Database error. Unknown database type in <b>'.$config['site']['server_path'].'config.lua</b> . Must be equal to: "<b>mysql</b>" or "<b>sqlite</b>". Now is: "<b>'.strtolower($config['server']['sqlType']).'"</b>';
exit;
}

$SQL = POT::getInstance()->getDBHandle();
$layout_name = "layouts/".$layout_name = $config['site']['layout'];;
$layout_ini = parse_ini_file($layout_name.'/layout_config.ini');
foreach($layout_ini as $key => $value)
$config['site'][$key] = $value;
//###################### FUNCTIONS ######################
function isPremium($premdays, $lastday)
{
return ($premdays - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $lastday))) - date("z", $lastday)) > 0);
}
//save config in ini file
function saveconfig_ini($config)
{
$file = fopen("config/config.ini", "w");
foreach($config as $param => $data)
{
$file_data .= $param.' = "'.str_replace('"', '', $data).'"
';
}
rewind($file);
fwrite($file, $file_data);
fclose($file);
}
//return password to db
function password_ency($password)
{
$ency = $GLOBALS['passwordency'];
if($ency == 'sha1')
return sha1($password);
elseif($ency == 'md5')
return md5($password);
elseif($ency == '')
return $password;
}
//delete player with name
function delete_player($name) {
$SQL = $GLOBALS['SQL'];
$player = new OTS_Player();
$player->find($name);
if($player->isLoaded()) {
try { $SQL->query("DELETE FROM player_skills WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM guild_invites WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM player_items WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM player_depotitems WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM player_spells WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM player_storage WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM player_viplist WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM player_deaths WHERE player_id = '".$player->getId()."';"); } catch(PDOException $error) {}
try { $SQL->query("DELETE FROM player_deaths WHERE killed_by = '".$player->getId()."';"); } catch(PDOException $error) {}
$rank = $player->getRank();
if(!empty($rank)) {
$guild = $rank->getGuild();
if($guild->getOwner()->getId() == $player->getId()) {
$rank_list = $guild->getGuildRanksList();
if(count($rank_list) > 0) {
$rank_list->orderBy('level');
foreach($rank_list as $rank_in_guild) {
$players_with_rank = $rank_in_guild->getPlayersList();
$players_with_rank->orderBy('name');
$players_with_rank_number = count($players_with_rank);
if($players_with_rank_number > 0) {
foreach($players_with_rank as $player_in_guild) {
$player_in_guild->setRank();
$player_in_guild->save();
}
}
$rank_in_guild->delete();
}
$guild->delete();
}
}
}
$player->delete();
return TRUE;
}
}

//delete guild with id
function delete_guild($id) {
$guild = new OTS_Guild();
$guild->load($id);
if($guild->isLoaded()) {
$rank_list = $guild->getGuildRanksList();
if(count($rank_list) > 0) {
$rank_list->orderBy('level');
foreach($rank_list as $rank_in_guild) {
$players_with_rank = $rank_in_guild->getPlayersList();
if(count($players_with_rank) > 0) {
foreach($players_with_rank as $player_in_guild) {
$player_in_guild->setRank();
$player_in_guild->save();
}
}
$rank_in_guild->delete();
}
}
$guild->delete();
return TRUE;
}
else
return FALSE;
}

//is it valid nick?
function check_name($name)//sprawdza name
{
$temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM- [ ] '");
if ($temp != strlen($name)) {
return false;
}
else
{
$ok = "/[a-zA-Z ']{1,25}/";
return (preg_match($ok, $name))? true: false;
}
}

//is it valid nick?
function check_account_name($name)//sprawdza name
{
$temp = strspn("$name", "QWERTYUIOPASDFGHJKLZXCVBNM0123456789");
if ($temp != strlen($name))
return false;
if(strlen($name) > 32)
return false;
else
{
$ok = "/[A-Z0-9]/";
return (preg_match($ok, $name))? true: false;
}
}

//is it valid nick for new char?
function check_name_new_char($name)//sprawdza name
{
$name_to_check = strtolower($name);
//first word can't be:
//names blocked:
$names_blocked = array('gm','cm', 'god', 'tutor');
$first_words_blocked = array('gm ','cm ', 'god ','tutor ', "'", '-');
//name can't contain:
$words_blocked = array('gamemaster', 'game master', 'game-master', "game'master", '--', "''","' ", " '", '- ', ' -', "-'", "'-", 'fuck', 'sux', 'suck', 'noob', 'tutor');
foreach($first_words_blocked as $word)
if($word == substr($name_to_check, 0, strlen($word)))
return false;
if(substr($name_to_check, -1) == "'" || substr($name_to_check, -1) == "-")
return false;
if(substr($name_to_check, 1, 1) == ' ')
return false;
if(substr($name_to_check, -2, 1) == " ")
return false;
foreach($names_blocked as $word)
if($word == $name_to_check)
return false;
foreach($GLOBALS['config']['site']['monsters'] as $word)
if($word == $name_to_check)
return false;
foreach($GLOBALS['config']['site']['npc'] as $word)
if($word == $name_to_check)
return false;
for($i = 0; $i < strlen($name_to_check); $i++)
if($name_to_check[$i-1] == ' ' && $name_to_check[$i+1] == ' ')
return false;
foreach($words_blocked as $word)
if (!(strpos($name_to_check, $word) === false))
return false;
for($i = 0; $i < strlen($name_to_check); $i++)
if($name_to_check[$i] == $name_to_check[($i+1)] && $name_to_check[$i] == $name_to_check[($i+2)])
return false;
for($i = 0; $i < strlen($name_to_check); $i++)
if($name_to_check[$i-1] == ' ' && $name_to_check[$i+1] == ' ')
return false;
$temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM- '");
if ($temp != strlen($name))
return false;
else
{
$ok = "/[a-zA-Z ']{1,25}/";
return (preg_match($ok, $name))? true: false;
}
}

//is rank name valid?
function check_rank_name($name)//sprawdza name
{
$temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789-[ ] ");
if ($temp != strlen($name)) {
return false;
}
else
{
$ok = "/[a-zA-Z ]{1,60}/";
return (preg_match($ok, $name))? true: false;
}
}
//is guild name valid?
function check_guild_name($name)
{
$temp = strspn("$name", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789- ");
if ($temp != strlen($name)) {
return false;
}
else
{
$ok = "/[a-zA-Z ]{1,60}/";
return (preg_match($ok, $name))? true: false;
}
}
//is it valid password?
function check_password($pass)//sprawdza haslo
{
$temp = strspn("$pass", "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890");
if ($temp != strlen($pass)) {
return false;
}
else
{
$ok = "/[a-zA-Z0-9]{1,40}/";
return (preg_match($ok, $pass))? true: false;
}
}
//is it valid e-mail?
function check_mail($email)//sprawdza mail
{
$ok = "/[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}/";
return (preg_match($ok, $email))? true: false;
}

//################### DISPLAY FUNCTIONS #####################
//return shorter text (news ticker)
function short_text($text, $chars_limit)
{
if (strlen($text) > $chars_limit)
return substr($text, 0, strrpos(substr($text, 0, $chars_limit), " ")).'...';
else return $text;
}
//return text to news msg
function news_place() {
if($GLOBALS['subtopic'] == "latestnews") {
//add tickers to site - without it tickers will not be showed
//$news .= $GLOBALS['news_content'];
/*
//featured article
$layout_name = $GLOBALS['layout_name'];
$news .= ' <div id="featuredarticle" class="Box">
<div class="Corner-tl" style="background-image:url('.$layout_name.'/images/content/corner-tl.gif);"></div>
<div class="Corner-tr" style="background-image:url('.$layout_name.'/images/content/corner-tr.gif);"></div>
<div class="Border_1" style="background-image:url('.$layout_name.'/images/content/border-1.gif);"></div>
<div class="BorderTitleText" style="background-image:url('.$layout_name.'/images/content/title-background-green.gif);"></div>
<img class="Title" src="'.$layout_name.'/images/strings/headline-featuredarticle.gif" alt="Contentbox headline" />
<div class="Border_2">
<div class="Border_3">
<div class="BoxContent" style="background-image:url('.$layout_name.'/images/content/scroll.gif);">
<div id=\'TeaserThumbnail\'><img src="'.$layout_name.'/images/news/features.jpg" width=150 height=100 border=0 alt="" /></div><div id=\'TeaserText\'><div style="position: relative; top: -2px; margin-bottom: 2px;" >
<b>Tutaj wpisz tytul</b></div>
tutaj wpisz tresc newsa<br>
zdjecie laduje sie w <i>tibiacom/images/news/features.jpg</i><br>
skad sie laduje mozesz zmienic linijke ponad komentarzem
</div> </div>
</div>
</div>
<div class="Border_1" style="background-image:url('.$layout_name.'/images/content/border-1.gif);"></div>
<div class="CornerWrapper-b"><div class="Corner-bl" style="background-image:url('.$layout_name.'/images/content/corner-bl.gif);"></div></div>
<div class="CornerWrapper-b"><div class="Corner-br" style="background-image:url('.$layout_name.'/images/content/corner-br.gif);"></div></div>
</div>';
*/
}
return $news;
}
//set monster of week
function logo_monster() {
return str_replace(" ", "", trim(mb_strtolower($GLOBALS['layout_ini']['logo_monster'])));
}
$statustimeout = 1;
foreach(explode("*", str_replace(" ", "", $config['server']['statusTimeout'])) as $status_var)
if($status_var > 0)
$statustimeout = $statustimeout * $status_var;
$statustimeout = $statustimeout / 1000;
$config['status'] = parse_ini_file('config/serverstatus');
if($config['status']['serverStatus_lastCheck']+$statustimeout < time())
{
$config['status']['serverStatus_checkInterval'] = $statustimeout+3;
$config['status']['serverStatus_lastCheck'] = time();
$info = chr(6).chr(0).chr(255).chr(255).'info';
$sock = @fsockopen("127.0.0.1", $config['server']['statusPort'], $errno, $errstr, 1);
if ($sock)
{
fwrite($sock, $info);
$data='';
while (!feof($sock))
$data .= fgets($sock, 1024);
fclose($sock);
preg_match('/players online="(\d+)" max="(\d+)"/', $data, $matches);
$config['status']['serverStatus_online'] = 1;
$config['status']['serverStatus_players'] = $matches[1];
$config['status']['serverStatus_playersMax'] = $matches[2];
preg_match('/uptime="(\d+)"/', $data, $matches);
$h = floor($matches[1] / 3600);
$m = floor(($matches[1] - $h*3600) / 60);
$config['status']['serverStatus_uptime'] = $h.'h '.$m.'m';
preg_match('/monsters total="(\d+)"/', $data, $matches);
$config['status']['serverStatus_monsters'] = $matches[1];
}
else
{
$config['status']['serverStatus_online'] = 0;
$config['status']['serverStatus_players'] = 0;
$config['status']['serverStatus_playersMax'] = 0;
}
$file = fopen("config/serverstatus", "w");
foreach($config['status'] as $param => $data)
{
$file_data .= $param.' = "'.str_replace('"', '', $data).'"
';
}
rewind($file);
fwrite($file, $file_data);
fclose($file);
}

//PAGE VIEWS COUNTER :)
$views_counter = "usercounter.dat";
// checking if the file exists
if (file_exists($views_counter)) {
// het bestand bestaat, waarde + 1
$actie = fopen($views_counter, "r+");
$page_views = fgets($actie, 9);
$page_views++;
rewind($actie);
fputs($actie, $page_views, 9);
fclose($actie);
}
else
{
// the file doesn't exist, creating a new one with value 1
$actie = fopen($views_counter, "w");
$page_views = 1;
fputs($actie, $page_views, 9);
fclose($actie);
}
function makeOrder($arr, $order, $default) {
// Function by Colandus!
$type = 'asc';
if(isset($_GET['order'])) {
$v = explode('_', strrev($_GET['order']), 2);
if(count($v) == 2)
if($orderBy = $arr[strrev($v[1])])
$default = $orderBy;
$type = (strrev($v[0]) == 'asc' ? 'desc' : 'asc');
}

return 'ORDER BY ' . $default . ' ' . $type;
}

function getOrder($arr, $order, $this) {
// Function by Colandus!
$type = 'asc';
if($orderBy = $arr[$this])
if(isset($_GET[$order])) {
$v = explode('_', strrev($_GET[$order]), 2);
if(strrev($v[1]) == $this)
$type = (strrev($v[0]) == 'asc' ? 'desc' : 'asc');
}

return $this . '_' . $type;
}

?>
 
i never use acc page before and idk what is cod tag
and idk what i do with config in distro
 
Last edited:
Code:
install = "no"
server_path = C:\Documents and Settings\XPPRESP3\Desktop\xd/"
signatures = "1"

Should be

Code:
install = "no"
server_path = C:\Documents and Settings\XPPRESP3\Desktop\xd\"
signatures = "1"
 
Code:
install = "no"
server_path = C:\Documents and Settings\XPPRESP3\Desktop\xd/"
signatures = "1"

Should be

Code:
install = "no"
server_path = C:\Documents and Settings\XPPRESP3\Desktop\xd\"
signatures = "1"

Or: (depends on what windows version you are using)
Code:
install = "no"
server_path = C:/Documents and Settings/XPPRESP3/Desktop/xd/"
signatures = "1"
 
best if you do it like this:
Code:
install = "start"
server_path = C:/Documents and Settings/XPPRESP3/Desktop/xd/"
signatures = "1"
And then u will install it and you can see if the path is right then...
 
when i try to make Step 5:

Set Admin Account

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'field list'' in C:\xampp\htdocs\pot\OTS_Account.php:229 Stack trace: #0 C:\xampp\htdocs\pot\OTS_Account.php(229): PDO->query('SELECT `id`, `n...') #1 C:\xampp\htdocs\install.php(467): OTS_Account->load(1) #2 {main} thrown in C:\xampp\htdocs\pot\OTS_Account.php on line 229


<?php

/**#@+
* @version 0.0.1
*/

/**
* @package POT
* @version 0.1.5
* @author Wrzasq <[email protected]>
* @copyright 2007 - 2008 (C) by Wrzasq
* @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
*/

/**
* OTServ account abstraction.
*
* @package POT
* @version 0.1.5
* @property string $name Account name.
* @property string $password Password.
* @property string $eMail Email address.
* @property int $premiumEnd Timestamp of PACC end.
* @property bool $blocked Blocked flag state.
* @property bool $deleted Deleted flag state.
* @property bool $warned Warned flag state.
* @property bool $banned Ban state.
* @property-read int $id Account number.
* @property-read bool $loaded Loaded state.
* @property-read OTS_Players_List $playersList Characters of this account.
* @property-read int $access Access level.
* @tutorial POT/Accounts.pkg
*/
class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
{
/**
* Account data.
*
* @var array
* @version 0.1.5
*/
private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0);

/**
* Creates new account.
*
* <p>
* This method creates new account with given name. Account number is generated automaticly and saved into {@link OTS_Account::getId() ID field}.
* </p>
*
* <p>
* If you won't specify account name then random one will be generated.
* </p>
*
* <p>
* If you use own account name then it will be returned after success, and exception will be generated if it will be alredy used as name will be simply used in query with account create attempt.
* </p>
*
* @version 0.1.5
* @since 0.1.5
* @param string $name Account name.
* @return string Account name.
* @throws PDOException On PDO operation error.
* @example examples/create.php create.php
* @tutorial POT/Accounts.pkg#create
*/
public function createNamed($name = null)
{
// if name is not passed then it will be generated randomly
if( !isset($name) )
{
// reads already existing names
foreach( $this->db->query('SELECT ' . $this->db->fieldName('name') . ' FROM ' . $this->db->tableName('accounts') )->fetchAll() as $account)
{
$exist[] = $account['name'];
}

// initial name
$name = uniqid();

// repeats until name is unique
while( in_array($name, $exist) )
{
$name .= '_';
}

// resets array for account numbers loop
$exist = array();
}

// saves blank account info
$this->db->query('INSERT INTO ' . $this->db->tableName('accounts') . ' (' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ') VALUES (' . $this->db->quote($name) . ', \'\', \'\')');

// reads created account's ID
$this->data['id'] = $this->db->lastInsertId();

// return name of newly created account
return $name;
}

/**
* Creates new account.
*
* <p>
* Create new account in given range (1 - 9999999 by default).
* </p>
*
* <p>
* Note: If account name won't be speciffied random will be created.
* </p>
*
* <p>
* Note: Since 0.0.3 version this method doesn't require buffered queries.
* </p>
*
* <p>
* Note: Since 0.1.5 version you should use {@link OTS_Account::createNamed() createNamed() method} since OTServ now uses account names.
* </p>
*
* <p>
* Note: Since 0.1.1 version this method throws {@link E_OTS_Generic E_OTS_Generic} exceptions instead of general Exception class objects. Since all exception classes are child classes of Exception class so your old code will still handle all exceptions.
* </p>
*
* <p>
* Note: Since 0.1.5 version this method no longer creates account as blocked.
* </p>
*
* @version 0.1.5
* @param int $min Minimum number.
* @param int $max Maximum number.
* @param string $name Account name.
* @return int Created account number.
* @throws E_OTS_Generic When there are no free account numbers.
* @throws PDOException On PDO operation error.
* @deprecated 0.1.5 Use createNamed().
*/
public function create($min = 1, $max = 9999999, $name = null)
{
// generates random account number
$random = rand($min, $max);
$number = $random;
$exist = array();

// if name is not passed then it will be generated randomly
if( !isset($name) )
{
// reads already existing names
foreach( $this->db->query('SELECT ' . $this->db->fieldName('name') . ' FROM ' . $this->db->tableName('accounts') )->fetchAll() as $account)
{
$exist[] = $account['name'];
}

// initial name
$name = uniqid();

// repeats until name is unique
while( in_array($name, $exist) )
{
$name .= '_';
}

// resets array for account numbers loop
$exist = array();
}

// reads already existing accounts
foreach( $this->db->query('SELECT ' . $this->db->fieldName('id') . ' FROM ' . $this->db->tableName('accounts') )->fetchAll() as $account)
{
$exist[] = $account['id'];
}

// finds unused number
while(true)
{
// unused - found
if( !in_array($number, $exist) )
{
break;
}

// used - next one
$number++;

// we need to re-set
if($number > $max)
{
$number = $min;
}

// we checked all possibilities
if($number == $random)
{
throw new E_OTS_Generic(E_OTS_Generic::CREATE_ACCOUNT_IMPOSSIBLE);
}
}

// saves blank account info
$this->data['id'] = $number;

$this->db->query('INSERT INTO ' . $this->db->tableName('accounts') . ' (' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('created') . ') VALUES (' . $number . ', ' . $this->db->quote($name) . ', \'\', \'\',' . time() . ')');

return $number;
}

/**
* @version 0.0.6
* @since 0.0.4
* @param OTS_Group $group Group to be assigned to account.
* @param int $min Minimum number.
* @param int $max Maximum number.
* @return int Created account number.
* @deprecated 0.0.6 There is no more group_id field in database, use create().
*/
public function createEx(OTS_Group $group, $min = 1, $max = 9999999)
{
return $this->create($min, $max);
}

/**
* Loads account with given number.
*
* @version 0.0.6
* @param int $id Account number.
* @throws PDOException On PDO operation error.
*/
public function load($id)
{
// SELECT query on database
$this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();
}

/**
* Loads account by it's name.
*
* <p>
* Note: Since 0.1.5 version this method loads account by it's name not by e-mail address. To find account by it's e-mail address use {@link OTS_Account::findByEMail() findByEMail() method}.
* </p>
*
* @version 0.1.5
* @since 0.0.2
* @param string $name Account's name.
* @throws PDOException On PDO operation error.
*/
public function find($name)
{
// finds player's ID
$id = $this->db->query('SELECT ' . $this->db->fieldName('id') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('name') . ' = ' . $this->db->quote($name) )->fetch();

// if anything was found
if( isset($id['id']) )
{
$this->load($id['id']);
}
}

/**
* Loads account by it's e-mail address.
*
* @version 0.1.5
* @since 0.1.5
* @param string $email Account's e-mail address.
* @throws PDOException On PDO operation error.
*/
public function findByEMail($email)
{
// finds player's ID
$id = $this->db->query('SELECT ' . $this->db->fieldName('id') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($email) )->fetch();

// if anything was found
if( isset($id['id']) )
{
$this->load($id['id']);
}
}

/**
* Checks if object is loaded.
*
* @return bool Load state.
*/
public function isLoaded()
{
return isset($this->data['id']);
}

/**
* Updates account in database.
*
* <p>
* Unlike other DAO objects account can't be saved without ID being set. It means that you can't just save unexisting account to automaticly create it. First you have to create record by using {@link OTS_Account::createName() createNamed() method}
* </p>
*
* <p>
* Note: Since 0.0.3 version this method throws {@link E_OTS_NotLoaded E_OTS_NotLoaded exception} instead of triggering E_USER_WARNING.
* </p>
*
* @version 0.1.5
* @throws E_OTS_NotLoaded If account doesn't have ID assigned.
* @throws PDOException On PDO operation error.
*/
public function save()
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

// UPDATE query on database
$this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);
}

/**
* Account number.
*
* <p>
* Note: Since 0.0.3 version this method throws {@link E_OTS_NotLoaded E_OTS_NotLoaded} exception instead of triggering E_USER_WARNING.
* </p>
*
* @version 0.0.3
* @return int Account number.
* @throws E_OTS_NotLoaded If account is not loaded.
*/
public function getId()
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['id'];
}

public function getRLName()
{
if( !isset($this->data['rlname']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['rlname'];
}

public function getLocation()
{
if( !isset($this->data['location']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['location'];
}

public function getPageAccess()
{
if( !isset($this->data['page_access']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['page_access'];
}

public function getPremDays()
{
if( !isset($this->data['premdays']) || !isset($this->data['lastday']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday']));
}

public function getLastLogin()
{
if( !isset($this->data['lastday']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['lastday'];
}

public function isPremium()
{
return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0);
}

public function getCreated()
{
if( !isset($this->data['created']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['created'];
}
/**
* @version 0.1.0
* @since 0.0.4
* @return OTS_Group Group of which current account is member (currently random group).
* @throws E_OTS_NotLoaded If account is not loaded.
* @deprecated 0.0.6 There is no more group_id field in database.
*/
public function getGroup()
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

// loads default group
$groups = new OTS_Groups_List();
$groups->rewind();
return $groups->current();
}

/**
* @version 0.0.6
* @param OTS_Group $group Group to be a member.
* @deprecated 0.0.6 There is no more group_id field in database.
*/
public function setGroup(OTS_Group $group)
{
}

/**
* Name.
*
* @version 0.1.5
* @since 0.1.5
* @return string Name.
* @throws E_OTS_NotLoaded If account is not loaded.
*/
public function getName()
{
if( !isset($this->data['name']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['name'];
}

/**
* Sets account's name.
*
* <p>
* This method only updates object state. To save changes in database you need to use {@link OTS_Account::save() save() method} to flush changed to database.
* </p>
*
* @version 0.1.5
* @since 0.1.5
* @param string $name Account name.
*/
public function setName($name)
{
$this->data['name'] = (string) $name;
}

/**
* Account's password.
*
* <p>
* Doesn't matter what password hashing mechanism is used by OTServ - this method will just return RAW database content. It is not possible to "decrypt" hashed strings, so it even wouldn't be possible to return real password string.
* </p>
*
* <p>
* Note: Since 0.0.3 version this method throws {@link E_OTS_NotLoaded E_OTS_NotLoaded} exception instead of triggering E_USER_WARNING.
* </p>
*
* @version 0.0.3
* @return string Password.
* @throws E_OTS_NotLoaded If account is not loaded.
*/
public function getPassword()
{
if( !isset($this->data['password']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['password'];
}

/**
* Sets account's password.
*
* <p>
* This method only updates object state. To save changes in database you need to use {@link OTS_Account::save() save() method} to flush changed to database.
* </p>
*
* <p>
* Remember that this method just sets database field's content. It doesn't apply any hashing/encryption so if OTServ uses hashing for passwords you have to apply it by yourself before passing string to this method.
* </p>
*
* @param string $password Password.
*/
public function setPassword($password)
{
$this->data['password'] = (string) $password;
}

/**
* E-mail address.
*
* <p>
* Note: Since 0.0.3 version this method throws {@link E_OTS_NotLoaded E_OTS_NotLoaded} exception instead of triggering E_USER_WARNING.
* </p>
*
* @version 0.0.3
* @return string E-mail.
* @throws E_OTS_NotLoaded If account is not loaded.
*/
public function getEMail()
{
if( !isset($this->data['email']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['email'];
}

/**
* Sets account's email.
*
* <p>
* This method only updates object state. To save changes in database you need to use {@link OTS_Account::save() save() method} to flush changed to database.
* </p>
*
* @param string $email E-mail address.
*/
public function setEMail($email)
{
$this->data['email'] = (string) $email;
}

/**
* Checks if account is blocked.
*
* <p>
* Note: Since 0.0.3 version this method throws {@link E_OTS_NotLoaded E_OTS_NotLoaded} exception instead of triggering E_USER_WARNING.
* </p>
*
* @version 0.0.3
* @return bool Blocked state.
* @throws E_OTS_NotLoaded If account is not loaded.
*/
public function isBlocked()
{
if( !isset($this->data['blocked']) )
{
throw new E_OTS_NotLoaded();
}

return $this->data['blocked'];
}

/**
* Unblocks account.
*
* <p>
* This method only updates object state. To save changes in database you need to use {@link OTS_Account::save() save() method} to flush changed to database.
* </p>
*/
public function unblock()
{
$this->data['blocked'] = false;
}

/**
* Blocks account.
*
* <p>
* This method only updates object state. To save changes in databaseed to use {@link OTS_Account::save() save() method} to flush changed to database.
* </p>
*/
public function block()
{
$this->data['blocked'] = true;
}



/**
* Reads custom field.
*
* <p>
* Reads field by it's name. Can read any field of given record that exists in database.
* </p>
*
* <p>
* Note: You should use this method only for fields that are not provided in standard setters/getters (SVN fields). This method runs SQL query each time you call it so it highly overloads used resources.
* </p>
*
* @version 0.0.5
* @since 0.0.3
* @param string $field Field name.
* @return string Field value.
* @throws E_OTS_NotLoaded If account is not loaded.
* @throws PDOException On PDO operation error.
*/
public function getCustomField($field)
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

$value = $this->db->query('SELECT ' . $this->db->fieldName($field) . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id'])->fetch();
return $value[$field];
}

/**
* Writes custom field.
*
* <p>
* Write field by it's name. Can write any field of given record that exists in database.
* </p>
*
* <p>
* Note: You should use this method only for fields that are not provided in standard setters/getters (SVN fields). This method runs SQL query each time you call it so it highly overloads used resources.
* </p>
*
* <p>
* Note: Make sure that you pass $value argument of correct type. This method determinates whether to quote field name. It is safe - it makes you sure that no unproper queries that could lead to SQL injection will be executed, but it can make your code working wrong way. For example: $object->setCustomField('foo', '1'); will quote 1 as as string ('1') instead of passing it as a integer.
* </p>
*
* @version 0.0.5
* @since 0.0.3
* @param string $field Field name.
* @param mixed $value Field value.
* @throws E_OTS_NotLoaded If account is not loaded.
* @throws PDOException On PDO operation error.
*/
public function setCustomField($field, $value)
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

// quotes value for SQL query
if(!( is_int($value) || is_float($value) ))
{
$value = $this->db->quote($value);
}

$this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName($field) . ' = ' . $value . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);
}

/**
* @version 0.1.0
* @return array Array of OTS_Player objects from given account.
* @throws E_OTS_NotLoaded If account is not loaded.
* @deprecated 0.0.5 Use getPlayersList().
*/
public function getPlayers()
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

$players = array();

foreach( $this->db->query('SELECT ' . $this->db->fieldName('id') . ' FROM ' . $this->db->tableName('players') . ' WHERE ' . $this->db->fieldName('account_id') . ' = ' . $this->data['id'])->fetchAll() as $player)
{
// creates new object
$object = new OTS_Player();
$object->load($player['id']);
$players[] = $object;
}

return $players;
}

/**
* List of characters on account.
*
* <p>
* In difference to {@link OTS_Account::getPlayers() getPlayers() method} this method returns filtered {@link OTS_Players_List OTS_Players_List} object instead of array of {@link OTS_Player OTS_Player} objects. It is more effective since OTS_Player_List doesn't perform all rows loading at once.
* </p>
*
* <p>
* Note: Returned object is only prepared, but not initialised. When using as parameter in foreach loop it doesn't matter since it will return it's iterator, but if you will wan't to execute direct operation on that object you will need to call {@link OTS_Base_List::rewind() rewind() method} first.
* </p>
*
* @version 0.1.4
* @since 0.0.5
* @return OTS_Players_List List of players from current account.
* @throws E_OTS_NotLoaded If account is not loaded.
*/
public function getPlayersList()
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

// creates filter
$filter = new OTS_SQLFilter();
$filter->compareField('account_id', (int) $this->data['id']);

// creates list object
$list = new OTS_Players_List();
$list->setFilter($filter);

return $list;
}

/**
* @version 0.1.5
* @since 0.0.5
* @param int $time Time for time until expires (0 - forever).
* @throws PDOException On PDO operation error.
* @deprecated 0.1.5 Use OTS_AccountBan class.
*/
public function ban($time = 0)
{
// can't ban nothing
if( !$this->isLoaded() )
{
throw new E_OTS_NotLoaded();
}

// creates ban entry
$ban = new OTS_AccountBan();
$ban->setValue($this->data['id']);
$ban->setExpires($time);
$ban->setAdded( time() );
$ban->activate();
$ban->save();
}

/**
* @version 0.1.5
* @since 0.0.5
* @throws PDOException On PDO operation error.
* @deprecated 0.1.5 Use OTS_AccountBan class.
*/
public function unban()
{
// can't unban nothing
if( !$this->isLoaded() )
{
throw new E_OTS_NotLoaded();
}

// deletes ban entry
$ban = new OTS_AccountBan();
$ban->find($this->data['id']);
$ban->delete();
}

/**
* @version 0.1.5
* @since 0.0.5
* @return bool True if account is banned, false otherwise.
* @throws PDOException On PDO operation error.
* @deprecated 0.1.5 Use OTS_AccountBan class.
*/
public function isBanned()
{
// nothing can't be banned
if( !$this->isLoaded() )
{
throw new E_OTS_NotLoaded();
}
if( !isset($this->data['banned']) )
$this->loadBan();
return ($this->data['banned'] == 1);
}

public function getBanTime()
{
// nothing can't be banned
if( !$this->isLoaded() )
{
throw new E_OTS_NotLoaded();
}
if( !isset($this->data['banned_time']) )
$this->loadBan();
return $this->data['banned_time'];
}

public function loadBan()
{
// nothing can't be banned
if( !$this->isLoaded() )
{
throw new E_OTS_NotLoaded();
}
$ban = $this->db->query('SELECT ' . $this->db->fieldName('active') . ', ' . $this->db->fieldName('expires') . ' FROM ' . $this->db->tableName('bans') . ' WHERE (' . $this->db->fieldName('type') . ' = 3 OR ' . $this->db->fieldName('type') . ' = 5) AND ' . $this->db->fieldName('active') . ' = 1 AND ' . $this->db->fieldName('value') . ' = ' . $this->data['id'] . ' AND (' . $this->db->fieldName('expires') . ' > ' . time() .' OR ' . $this->db->fieldName('expires') . ' = -1) ORDER BY ' . $this->db->fieldName('expires') . ' DESC')->fetch();
$this->data['banned'] = $ban['active'];
$this->data['banned_time'] = $ban['expires'];
}

/**
* Deletes account.
*
* <p>
* This method physicly deletes account from database! To set <i>deleted</i> flag use {@link OTS_Account::setDeleted() setDeleted() method}.
* </p>
*
* @version 0.0.5
* @since 0.0.5
* @throws E_OTS_NotLoaded If account is not loaded.
* @throws PDOException On PDO operation error.
*/
public function delete()
{
if( !isset($this->data['id']) )
{
throw new E_OTS_NotLoaded();
}

// deletes row from database
$this->db->query('DELETE FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);

// resets object handle
unset($this->data['id']);
}

/**
* Checks highest access level of account.
*
* @return int Access level (highest access level of all characters).
* @throws PDOException On PDO operation error.
*/
public function getAccess()
{
// by default
$access = 0;

// finds groups of all characters
foreach( $this->getPlayersList() as $player)
{
$group = $player->getGroup();

// checks if group's access level is higher then previouls found highest
if( $group->getAccess() > $access)
{
$access = $group->getAccess();
}
}

return $access;
}

/**
* Checks highest access level of account in given guild.
*
* @param OTS_Guild $guild Guild in which access should be checked.
* @return int Access level (highest access level of all characters).
* @throws PDOException On PDO operation error.
*/
public function getGuildAccess(OTS_Guild $guild)
{
// by default
$access = 0;

// finds ranks of all characters
foreach($account as $player)
{
$rank = $player->getRank();

// checks if rank's access level is higher then previouls found highest
if( isset($rank) && $rank->getGuild()->getId() == $guild->getId() && $rank->getLevel() > $access)
{
$access = $rank->getLevel();
}
}

return $access;
}

/**
* Returns players iterator.
*
* <p>
* There is no need to implement entire Iterator interface since we have {@link OTS_Players_List players list class} for it.
* </p>
*
* @version 0.0.5
* @since 0.0.5
* @throws E_OTS_NotLoaded If account is not loaded.
* @throws PDOException On PDO operation error.
* @return Iterator List of players.
*/
public function getIterator()
{
return $this->getPlayersList();
}

/**
* Returns number of player within.
*
* @version 0.0.5
* @since 0.0.5
* @throws E_OTS_NotLoaded If account is not loaded.
* @throws PDOException On PDO operation error.
* @return int Count of players.
*/
public function count()
{
return $this->getPlayersList()->count();
}

/**
* Magic PHP5 method.
*
* @version 0.1.5
* @since 0.1.0
* @param string $name Property name.
* @return mixed Property value.
* @throws E_OTS_NotLoaded If account is not loaded.
* @throws OutOfBoundsException For non-supported properties.
* @throws PDOException On PDO operation error.
*/
public function __get($name)
{
switch($name)
{
case 'id':
return $this->getId();

case 'name':
return $this->getName();

case 'password':
return $this->getPassword();

case 'eMail':
return $this->getEMail();

case 'premiumEnd':
return $this->getPremiumEnd();

case 'loaded':
return $this->isLoaded();

case 'playersList':
return $this->getPlayersList();

case 'blocked':
return $this->isBlocked();

case 'deleted':
return $this->isDeleted();

case 'banned':
return $this->isBanned();

case 'access':
return $this->getAccess();

default:
throw new OutOfBoundsException();
}
}

/**
* Magic PHP5 method.
*
* @version 0.1.5
* @since 0.1.0
* @param string $name Property name.
* @param mixed $value Property value.
* @throws E_OTS_NotLoaded If account is not loaded.
* @throws OutOfBoundsException For non-supported properties.
* @throws PDOException On PDO operation error.
*/
public function __set($name, $value)
{
switch($name)
{
case 'name':
$this->setName($name);
break;

case 'password':
$this->setPassword($value);
break;

case 'eMail':
$this->setEMail($value);
break;

case 'premiumEnd':
$this->setPremiumEnd($value);
break;

case 'blocked':
if($value)
{
$this->block();
}
else
{
$this->unblock();
}
break;

case 'deleted':
if($value)
{
$this->setDeleted();
}
else
{
$this->unsetDeleted();
}
break;

case 'banned':
if($value)
{
$this->ban();
}
else
{
$this->unban();
}
break;

default:
throw new OutOfBoundsException();
}
}

/**
* Returns string representation of object.
*
* <p>
* If any display driver is currently loaded then it uses it's method. Otherwise just returns account number.
* </p>
*
* @version 0.1.3
* @since 0.1.0
* @return string String representation of object.
*/
public function __toString()
{
$ots = POT::getInstance();

// checks if display driver is loaded
if( $ots->isDisplayDriverLoaded() )
{
return $ots->getDisplayDriver()->displayAccount($this);
}

return $this->getId();
}
}

/**#@-*/

?>
 
=..= i use [8.41/42] The Forgotten Server 0.3.4PL2 (Crying Damson) by elf


asdanb.png
 
Back
Top