* @author Slawkens * @copyright 2017 MyAAC * @version 0.0.2 * @link http://my-aac.org */ defined('MYAAC') or die('Direct access not allowed!'); $title = 'Characters'; require(SYSTEM . 'item.php'); $groups = new OTS_Groups_List(); function generate_search_table($script = false) { global $config, $template_path; $ret = '
Search Character
Name:
'; if($script) $ret .= ' '; return $ret; } function generate_player_lookup($player) { global $db; $eq_sql = $db->query('SELECT `pid`, `itemtype` FROM player_items WHERE player_id = '.$player->getId().' AND (`pid` >= 1 and `pid` <= 10)'); $player_eq = array(); foreach($eq_sql as $eq) $player_eq[$eq['pid']] = $eq['itemtype']; $empty_slots = array("", "no_helmet", "no_necklace", "no_backpack", "no_armor", "no_handleft", "no_handright", "no_legs", "no_boots", "no_ring", "no_ammo"); for($i = 0; $i <= 10; $i++) { if(!isset($player_eq[$i]) || $player_eq[$i] == 0) $player_eq[$i] = $empty_slots[$i]; } //for($i = 1; $i < 11; $i++) //{ //if(!itemImageExists($player_eq[$i])) // Items::generate($player_eq[$i]); //} return '
'.getItemImage($player_eq[2]).'
'.getItemImage($player_eq[6]).'
'.getItemImage($player_eq[9]).'
'.($player->getSkull() > 0 ? '' : '').'
'.getItemImage($player_eq[1]).'
'.getItemImage($player_eq[4]).'
'.getItemImage($player_eq[7]).'
'.getItemImage($player_eq[8]).'
'.getItemImage($player_eq[3]).'
'.getItemImage($player_eq[5]).'
'.getItemImage($player_eq[10]).'
'; } function retrieve_former_name($name) { global $oldName, $db; if(tableExist('player_namelocks') && fieldExist('name', 'player_namelocks')) { $newNameSql = $db->query('SELECT `name`, `new_name` FROM `player_namelocks` WHERE `name` = ' . $db->quote($name)); if($newNameSql->rowCount() > 0) // namelocked { $newNameSql = $newNameSql->fetch(); $oldName = ' (Former name: ' . $newNameSql['name'] . ')'; return $newNameSql['new_name']; } } return ""; } $name = ''; if(isset($_REQUEST['name'])) $name = stripslashes(ucwords(strtolower(trim($_REQUEST['name'])))); if(empty($name)) { $tmp_link = getPlayerLink($name); echo 'Here you can get detailed information about a certain player on '.$config['lua']['serverName'].'.
'; echo generate_search_table(true); return; } $name = str_replace('/', '', $name); if(check_name($name)) { $oldName = ''; $player = $ots->createObject('Player'); $player->find($name); if(!$player->isLoaded()) { $tmp_zmienna = ""; $tmp_name = retrieve_former_name($name); while(!empty($tmp_name)) { $tmp_zmienna = $tmp_name; $tmp_name = retrieve_former_name($tmp_zmienna); } if(!empty($tmp_zmienna)) $player->find($tmp_zmienna); } if($player->isLoaded() && !$player->isDeleted()) { $title = $player->getName() . ' - ' . $title; $account = $player->getAccount(); $rows = 0; ?>
getCustomField('country')); echo ''. ''; echo ''; if($config['characters']['marriage_info'] && fieldExist('marriage', 'players')) { echo ''; } echo ''. ''. ''; if($config['characters']['level']) echo ''; if($config['characters']['experience']) echo ''; if($config['characters']['magic_level']) echo''; //frags if(tableExist('player_killers') && $config['characters']['frags']) { $frags_count = 0; $frags_query = $db->query( 'SELECT COUNT(`player_id`) as `frags`' . 'FROM `player_killers`' . 'WHERE `player_id` = ' .$player->getId() . ' ' . 'GROUP BY `player_id`' . 'ORDER BY COUNT(`player_id`) DESC'); if($frags_query->rowCount() > 0) { $frags_query = $frags_query->fetch(); $frags_count = $frags_query['frags']; } echo ''; } if(!empty($config['towns'][$player->getTownId()])) echo ''; if($config['characters']['balance']) echo ''; $town_field = 'town'; if(fieldExist('town_id', 'houses')) $town_field = 'town_id'; else if(fieldExist('townid', 'houses')) $town_field = 'townid'; $house = $db->query('SELECT `id`, `paid`, `name`, `' . $town_field . '` FROM `houses` WHERE `owner` = '.$player->getId())->fetch(); if(isset($house['id'])) { if($house['paid'] > 0) $add = ' is paid until '.date("M d Y", $house['paid']); echo ''; } $rank_of_player = $player->getRank(); if($rank_of_player->isLoaded()) { $guild_name = $rank_of_player->getGuild()->getName(); echo ''. ''. ''; } echo ''; if($config['characters']['creation_date']) echo ''; $comment = $player->getComment();/* $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '
', $comment, $count); if($count < 50) $comment = $comment_with_lines;*/ if(!empty($comment)) echo ''; echo ''. '
Character Information
Name: ' . $flag . ' '.$player->getName().''.$oldName. '
Sex:'. ($player->getSex() == 0 ? 'female' : 'male'). '
Marital status:'; $marriage = new OTS_Player(); $marriage->load($player->getMarriage()); if($marriage->isLoaded()) echo 'married to ' . getPlayerLink($marriage->getName()); else echo 'single'; echo '
Profession:' . $config['vocations'][$player->getVocation()] . '
Level:'.$player->getLevel().'
Experience:'.$player->getExperience().'
Magic Level:'.$player->getMagLevel().'
Frags:' . $frags_count . '
Residence:' . $config['towns'][$player->getTownId()] . '
Balance:'.$player->getBalance().' Gold Coins.
House:
'.$house['name'].' ('.$config['towns'][$house[$town_field]].')'.$add.'
Guild membership:'.$rank_of_player->getName().' of the ' . getGuildLink($guild_name) . '
Last login:'; $lastlogin = $player->getLastLogin(); if(empty($lastlogin)) echo'Never logged in.'; else echo date("M d Y, H:i:s", $lastlogin).' CEST'; echo '
Created:'.date("M d Y, H:i:s", $player->getCreated()).' CEST
Comment:' . wordwrap(nl2br($comment), 60, "
", true) . '
Account Status:' . (($account->isPremium()) ? 'Premium Account' : 'Free Account') . '
'; echo '
'. ''; if($config['characters']['skills']) { if(fieldExist('skill_fist', 'players')) {// tfs 1.0+ $skills_db = $db->query('SELECT `skill_fist`, `skill_club`, `skill_sword`, `skill_axe`, `skill_dist`, `skill_shielding`, `skill_fishing` FROM `players` WHERE `id` = ' . $player->getId())->fetch(); $skill_ids = array( POT::SKILL_FIST => 'skill_fist', POT::SKILL_CLUB => 'skill_club', POT::SKILL_SWORD => 'skill_sword', POT::SKILL_AXE => 'skill_axe', POT::SKILL_DIST => 'skill_dist', POT::SKILL_SHIELD => 'skill_shielding', POT::SKILL_FISH => 'skill_fishing', ); $skills = array(); foreach($skill_ids as $skillid => $field_name) { $skills[] = array('skillid' => $skillid, 'value' => $skills_db[$field_name]); } } else $skills = $db->query('SELECT `skillid`, `value` FROM `player_skills` WHERE `player_id` = ' . $player->getId() . ' LIMIT 7'); echo ' '; } if($config['characters']['quests'] && !empty($config['quests'])) { $quests = $config['quests']; $sql_query_in = ''; $i = 0; foreach($quests as $quest_name => $quest_storage) { if($i != 0) $sql_query_in .= ', '; $sql_query_in .= $quest_storage; $i++; } $storage_sql = $db->query('SELECT `key`, `value` FROM `player_storage` WHERE `player_id` = '.$player->getId().' AND `key` IN (' . $sql_query_in . ')'); $player_storage = array(); foreach($storage_sql as $storage) $player_storage[$storage['key']] = $storage['value']; echo ' '; } if($config['characters']['equipment']) { echo ' '; } echo '
'. ''; $i = 0; foreach($skills as $skill) { echo ''; } echo '
Skills
' . getSkillName($skill['skillid']) . ' ' . $skill['value'] . '
'. ''; //for($i=0; $i < count($quests); $i++) $i = 0; foreach($quests as $name => $storage) { $i++; echo ''; } echo '
Quests
'.$name.'
'. ''. ''. '
Equipment
'.generate_player_lookup($player).'
'; if(tableExist('killers')) { $player_deaths = $db->query('SELECT `id`, `date`, `level` FROM `player_deaths` WHERE `player_id` = '.$player->getId().' ORDER BY `date` DESC LIMIT 0,10;'); if(count($player_deaths)) { $dead_add_content = '
'; $number_of_rows = 0; foreach($player_deaths as $death) { $dead_add_content .= ""; } if($number_of_rows > 0) echo $dead_add_content . '
Character Deaths
".date("j M Y, H:i", $death['date'])." "; $killers = $db->query("SELECT environment_killers.name AS monster_name, players.name AS player_name, players.deleted AS player_exists FROM killers LEFT JOIN environment_killers ON killers.id = environment_killers.kill_id LEFT JOIN player_killers ON killers.id = player_killers.kill_id LEFT JOIN players ON players.id = player_killers.player_id WHERE killers.death_id = '".$death['id']."' ORDER BY killers.final_hit DESC, killers.id ASC")->fetchAll(); $i = 0; $count = count($killers); foreach($killers as $killer) { $i++; if($killer['player_name'] != "") { if($i == 1) $dead_add_content .= "Killed at level ".$death['level'].""; else if($i == $count) $dead_add_content .= " and"; else $dead_add_content .= ","; $dead_add_content .= " by "; if($killer['monster_name'] != "") $dead_add_content .= $killer['monster_name']." summoned by "; if($killer['player_exists'] == 0) $dead_add_content .= getPlayerLink($killer['player_name']); else $dead_add_content .= $killer['player_name']; } else { if($i == 1) $dead_add_content .= "Died at level ".$death['level'].""; else if($i == $count) $dead_add_content .= " and"; else $dead_add_content .= ","; $dead_add_content .= " by ".$killer['monster_name']; } } $dead_add_content .= ".
'; } } else { $deaths = $db->query('SELECT `player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified` FROM `player_deaths` WHERE `player_id` = ' . $player->getId() . ' ORDER BY `time` DESC LIMIT 10;'); if(count($deaths)) { $dead_add_content = '
'; $number_of_rows = 0; foreach($deaths as $death) { $dead_add_content .= ""; } if($number_of_rows > 0) echo $dead_add_content . '
Character Deaths
".date("j M Y, H:i", $death['time'])." "; $lasthit = ($death['is_player']) ? getPlayerLink($death['killed_by']) : $death['killed_by']; $dead_add_content .= 'Killed at level ' . $death['level'] . ' by ' . $lasthit; if($death['unjustified']) { $dead_add_content .= " (unjustified)"; } $mostdmg = ($death['mostdamage_by'] !== $death['killed_by']) ? true : false; if($mostdmg) { $mostdmg = ($death['mostdamage_is_player']) ? getPlayerLink($death['mostdamage_by']) : $death['mostdamage_by']; $dead_add_content .= '
and by ' . $mostdmg; if ($death['mostdamage_unjustified']) { $dead_add_content .= " (unjustified)"; } } else { $dead_add_content .= " (soloed)"; } $dead_add_content .= ".
'; } } if($config['characters']['frags']) { //frags list by Xampy $i = 0; $frags_limit = 10; // frags limit to show? // default: 10 $player_frags = $db->query('SELECT `player_deaths`.*, `players`.`name`, `killers`.`unjustified` FROM `player_deaths` LEFT JOIN `killers` ON `killers`.`death_id` = `player_deaths`.`id` LEFT JOIN `player_killers` ON `player_killers`.`kill_id` = `killers`.`id` LEFT JOIN `players` ON `players`.`id` = `player_deaths`.`player_id` WHERE `player_killers`.`player_id` = '.$player->getId().' ORDER BY `date` DESC LIMIT 0,'.$frags_limit.';'); if(count($player_frags)) { $frags = 0; $frag_add_content .= '
'; foreach($player_frags as $frag) { $frags++; $frag_add_content .= '"; } if($frags > 0) echo $frag_add_content . '
Victims
' . date("j M Y, H:i", $frag['date']) . ' Fragged ' . $frag[name] . ' at level ' . $frag[level]; $frag_add_content .= ". (".(($frag['unjustified'] == 0) ? "Justified" : "Unjustified").")
'; } } //Signature //Js if($config['signature_enabled']) { echo ''; echo '
Signature
'; $signature_url = BASE_URL . 'tools/signature/?name=' . urlencode($player->getName()); if($config['friendly_urls']) $signature_url = BASE_URL . urlencode($player->getName()) . '.png'; echo ' Signature for player '.$player->getName().'
Show links
'; } if($player->getCustomField('hidden') != 1) { $rows = 0; echo '

'; $realName = $account->getCustomField('rlname'); if(!empty($realName)) { echo ' '; } $group = $player->getGroup(); if($group->isLoaded() && $group->getId() != 1) { echo ''; } $realLocation = $account->getCustomField('location'); if(isset($realLocation[0])) { echo ''; } echo ''; $bannedUntil = ''; if(tableExist('account_bans')) $banned = $db->query('SELECT `expires_at` as `expires` FROM `account_bans` WHERE `account_id` = '.$account->getId().' and `expires_at` > ' . time()); else $banned = $db->query('SELECT `expires` FROM `bans` WHERE (`value` = '.$account->getId().' or `value` = '.$player->getId().') and `active` = 1 and `type` != 2 and `type` != 4 and `expires` > ' . time()); foreach($banned as $ban) { if($ban['type'] != 2 and $ban['type'] != 4) $bannedUntil = ' [Banished '.($ban['expires'] == "-1" ? 'forever' : 'until '.date("d F Y, h:s", $ban['expires'])).']'; } echo '
Account Information
Real name: '.$realName.'
Position: ' . ucfirst($group->getName()) . '
Location: '.$realLocation.'
Created:'.date("j F Y, g:i a", $account->getCustomField("created")).$bannedUntil.'
'; echo '

'; $account_players = $account->getPlayersList(); $account_players->orderBy('name'); $player_number = 0; foreach($account_players as $player_list) { $player_list_status = ''; if($player_list->isHidden()) continue; $player_number++; if($player_list->isOnline()) $player_list_status = 'Online'; echo ''; } echo '
Characters
Name Level Status  
'.$player_number.'. '.$player_list->getName(); echo ($player_list->isDeleted()) ? ' [DELETED]' : ''; echo ''.$player_list->getLevel().' '.$config['vocations'][$player_list->getVocation()].'' . $player_list_status . '
'; } echo '

' . generate_search_table(); echo ''; } else { $search_errors[] = 'Character ' . $name . ' does not exist or has been deleted.'; output_errors($search_errors); $search_errors = array(); $promotion = ''; if(fieldExist('promotion', 'players')) $promotion = ', `promotion`'; $deleted = 'deleted'; if(fieldExist('deletion', 'players')) $deleted = 'deletion'; $query = $db->query('SELECT `name`, `level`, `vocation`' . $promotion . ' FROM `players` WHERE `name` LIKE ' . $db->quote('%' . $name . '%') . ' AND ' . $deleted . ' != 1;'); if($query->rowCount() > 0) { echo 'Did you mean:'; } echo generate_search_table(true); } } else $search_errors[] = 'This name contains invalid letters. Please use only A-Z, a-z and space. Minimum length is 3 characters.'; if(!empty($search_errors)) output_errors($search_errors);