mirror of
https://github.com/Znote/ZnoteAAC.git
synced 2025-04-26 01:09:22 +02:00
979 lines
33 KiB
PHP
979 lines
33 KiB
PHP
<?php require_once 'engine/init.php'; include 'layout/overall/header.php';
|
|
|
|
if ($config['log_ip']) {
|
|
znote_visitor_insert_detailed_data(4);
|
|
}
|
|
|
|
if (isset($_GET['name']) === true && empty($_GET['name']) === false) {
|
|
$name = getValue($_GET['name']);
|
|
$user_id = user_character_exist($name);
|
|
|
|
if ($user_id !== false) {
|
|
$loadOutfits = $config['show_outfits']['characterprofile'];
|
|
|
|
if ($config['ServerEngine'] == 'TFS_10') {
|
|
if (!$loadOutfits) {
|
|
$profile_data = user_character_data($user_id, 'account_id', 'name', 'level', 'group_id', 'vocation', 'health', 'healthmax', 'experience', 'mana', 'manamax', 'sex', 'lastlogin');
|
|
} else { // Load outfits
|
|
if ($config['client'] < 780) {
|
|
$profile_data = user_character_data($user_id, 'account_id', 'name', 'level', 'group_id', 'vocation', 'health', 'healthmax', 'experience', 'mana', 'manamax', 'sex', 'lastlogin', 'lookbody', 'lookfeet', 'lookhead', 'looklegs', 'looktype');
|
|
} else {
|
|
$profile_data = user_character_data($user_id, 'account_id', 'name', 'level', 'group_id', 'vocation', 'health', 'healthmax', 'experience', 'mana', 'manamax', 'sex', 'lastlogin', 'lookbody', 'lookfeet', 'lookhead', 'looklegs', 'looktype', 'lookaddons');
|
|
}
|
|
}
|
|
$profile_data['online'] = user_is_online_10($user_id);
|
|
|
|
if ($config['Ach']) {
|
|
$user_id = (int) $user_id;
|
|
$achievementPoints = mysql_select_single("SELECT SUM(`value`) AS `sum` FROM `player_storage` WHERE `key` LIKE '30___' AND `player_id`={$user_id} LIMIT 1");
|
|
}
|
|
} else { // TFS 0.2, 0.3
|
|
if (!$loadOutfits) {
|
|
$profile_data = user_character_data($user_id, 'name', 'account_id', 'level', 'group_id', 'vocation', 'health', 'healthmax', 'experience', 'mana', 'manamax', 'lastlogin', 'online', 'sex');
|
|
} else { // Load outfits
|
|
if ($config['ServerEngine'] !== 'OTHIRE') {
|
|
if ($config['client'] < 780) {
|
|
$profile_data = user_character_data($user_id, 'name', 'account_id', 'level', 'group_id', 'vocation', 'health', 'healthmax', 'experience', 'mana', 'manamax', 'lastlogin', 'online', 'sex', 'lookbody', 'lookfeet', 'lookhead', 'looklegs', 'looktype');
|
|
} else {
|
|
$profile_data = user_character_data($user_id, 'name', 'account_id', 'level', 'group_id', 'vocation', 'health', 'healthmax', 'experience', 'mana', 'manamax', 'lastlogin', 'online', 'sex', 'lookbody', 'lookfeet', 'lookhead', 'looklegs', 'looktype', 'lookaddons');
|
|
}
|
|
} else {
|
|
$profile_data = user_character_data($user_id, 'name', 'account_id', 'level', 'group_id', 'vocation', 'health', 'healthmax', 'experience', 'mana', 'manamax', 'lastlogin', 'online', 'sex', 'lookbody', 'lookfeet', 'lookhead', 'looklegs', 'looktype');
|
|
}
|
|
}
|
|
}
|
|
|
|
$profile_znote_data = user_znote_character_data($user_id, 'created', 'hide_char', 'comment');
|
|
$guild_exist = false;
|
|
if (get_character_guild_rank($user_id) > 0) {
|
|
$guild_exist = true;
|
|
$guild = get_player_guild_data($user_id);
|
|
$guild_name = get_guild_name($guild['guild_id']);
|
|
}
|
|
?>
|
|
|
|
<!-- PROFILE MARKUP HERE-->
|
|
<table id="characterProfileTable">
|
|
<thead>
|
|
<tr class="yellow">
|
|
<th>
|
|
<?php if ($loadOutfits): ?>
|
|
<div class="outfit">
|
|
<img src="<?php echo $config['show_outfits']['imageServer']; ?>?id=<?php echo $profile_data['looktype']; ?>&addons=<?php echo $profile_data['lookaddons']; ?>&head=<?php echo $profile_data['lookhead']; ?>&body=<?php echo $profile_data['lookbody']; ?>&legs=<?php echo $profile_data['looklegs']; ?>&feet=<?php echo $profile_data['lookfeet']; ?>" alt="img">
|
|
</div>
|
|
<?php endif;
|
|
$flags = $config['country_flags'];
|
|
if ($flags['enabled'] && $flags['characterprofile']) {
|
|
$account_data = user_znote_account_data($profile_data['account_id'], 'flag');
|
|
if (strlen($account_data['flag']) > 0):
|
|
?><!-- Player country data -->
|
|
<div class="flag">
|
|
<img src="<?php echo $flags['server'] . '/' . $account_data['flag']; ?>.png">
|
|
</div>
|
|
<?php
|
|
endif;
|
|
}
|
|
?>
|
|
</th>
|
|
<th>
|
|
<h1><?php echo $profile_data['name']; ?></h1>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<!-- Player Position -->
|
|
<?php if ($profile_data['group_id'] > 1): ?>
|
|
<tr>
|
|
<td>Position</td>
|
|
<td><?php echo group_id_to_name($profile_data['group_id']); ?></td>
|
|
</tr>
|
|
<?php endif;
|
|
// pending deletion?
|
|
$deletion_time = mysql_select_single("SELECT `time` FROM `znote_deleted_characters` WHERE `character_name`='{$name}' AND `done` = '0' LIMIT 1;");
|
|
if ($deletion_time !== false): ?>
|
|
<tr>
|
|
<td colspan="2" style="color: red;">Flagged for deletion by owner after <?php echo $deletion_time['time']; ?>.</td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<!-- Player male / female -->
|
|
<tr>
|
|
<td>Sex</td>
|
|
<td><?php echo ($profile_data['sex'] == 1) ? 'Male' : 'Female'; ?></td>
|
|
</tr>
|
|
<!-- Player level -->
|
|
<tr>
|
|
<td>Level</td>
|
|
<td><?php echo $profile_data['level']; ?></td>
|
|
</tr>
|
|
<!-- Player vocation -->
|
|
<tr>
|
|
<td>Vocation</td>
|
|
<td><?php echo vocation_id_to_name($profile_data['vocation']); ?></td>
|
|
</tr>
|
|
<!-- Player guild -->
|
|
<?php if ($guild_exist): ?>
|
|
<tr>
|
|
<td>Guild</td>
|
|
<td><b><?php echo $guild['rank_name']; ?> </b> of <a href="guilds.php?name=<?php echo $guild_name; ?>"><?php echo $guild_name; ?></a></td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<!-- Player last login -->
|
|
<tr>
|
|
<td>Last Login</td>
|
|
<td><?php echo ($profile_data['lastlogin'] != 0) ? getClock($profile_data['lastlogin'], true, true) : 'Never.'; ?></td>
|
|
</tr>
|
|
<!-- Achievement start -->
|
|
<?php if ($config['Ach'] && (int)$achievementPoints['sum'] > 0): ?>
|
|
<tr>
|
|
<td>Achievement Points</td>
|
|
<td><?php echo (int)$achievementPoints['sum']; ?></td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<!-- Display house start -->
|
|
<?php
|
|
if ($config['ServerEngine'] !== 'TFS_02') {
|
|
// Compatibility fix
|
|
$column_town_id = array(
|
|
'OTHIRE' => 'townid',
|
|
'TFS_03' => 'town'
|
|
// Default: town_id
|
|
);
|
|
$column_town_id = (isset($column_town_id[$config['ServerEngine']]))
|
|
? $column_town_id[$config['ServerEngine']]
|
|
: 'town_id';
|
|
|
|
$houses = mysql_select_multi("
|
|
SELECT `id`, `owner`, `name`, `{$column_town_id}` AS `town_id`
|
|
FROM `houses`
|
|
WHERE `owner` = {$user_id};
|
|
");
|
|
|
|
if ($houses !== false) {
|
|
foreach ($houses as $h): ?>
|
|
<tr>
|
|
<td>House</td>
|
|
<td><?php echo $h['name'] . ', ' . $config['towns'][$h['town_id']]; ?></td>
|
|
</tr>
|
|
<?php endforeach;
|
|
}
|
|
}
|
|
?>
|
|
<!-- Display player status -->
|
|
<tr class="status_<?php echo ($profile_data['online']) ? 'online' : 'offline'; ?>">
|
|
<td>Status</td>
|
|
<td><?php echo ($profile_data['online']) ? 'online' : 'offline'; ?></td>
|
|
</tr>
|
|
<!-- Player created -->
|
|
<tr>
|
|
<td>Created</td>
|
|
<td><?php echo getClock($profile_znote_data['created'], true); ?></td>
|
|
</tr>
|
|
|
|
<!-- EQ shower -->
|
|
<?php if ($config['EQ_shower']['enabled']): ?>
|
|
<tr>
|
|
<?php
|
|
// Item image server
|
|
$imageServer = $config['shop']['imageServer'];
|
|
$imageType = $config['shop']['imageType'];
|
|
$PEQ = mysql_select_multi("
|
|
SELECT
|
|
`player_id`,
|
|
`pid`,
|
|
`itemtype`,
|
|
`count`
|
|
FROM `player_items`
|
|
WHERE `player_id`={$user_id}
|
|
AND `pid`<'11'
|
|
");
|
|
|
|
$soulStamina = (in_array($config['ServerEngine'], ['TFS_10']))
|
|
? " `soul`, `stamina`,"
|
|
: " `p`.`soul`, `p`.`stamina`,";
|
|
|
|
if ($config['client'] < 780) {
|
|
$soulStamina = " 0 AS `soul`, 0 AS `stamina`,";
|
|
}
|
|
|
|
$player_query = (in_array($config['ServerEngine'], ['TFS_10']))
|
|
? /* true */ "SELECT
|
|
`health`, `healthmax`,
|
|
`mana`, `manamax`,
|
|
`cap`,
|
|
`experience`, `level`,
|
|
{$soulStamina}
|
|
`maglevel`,
|
|
`skill_fist`,
|
|
`skill_club`,
|
|
`skill_sword`,
|
|
`skill_axe`,
|
|
`skill_dist`,
|
|
`skill_shielding`,
|
|
`skill_fishing`
|
|
FROM `players`
|
|
WHERE `id`={$user_id}
|
|
LIMIT 1;"
|
|
: /* false */ "SELECT
|
|
`p`.`health`, `p`.`healthmax`,
|
|
`p`.`mana`, `p`.`manamax`,
|
|
`p`.`cap`,
|
|
`p`.`experience`, `p`.`level`,
|
|
{$soulStamina}
|
|
`p`.`maglevel`,
|
|
`fist`.`value` AS `skill_fist`,
|
|
`club`.`value` AS `skill_club`,
|
|
`sword`.`value` AS `skill_sword`,
|
|
`axe`.`value` AS `skill_axe`,
|
|
`dist`.`value` AS `skill_dist`,
|
|
`shield`.`value` AS `skill_shielding`,
|
|
`fish`.`value` AS `skill_fishing`
|
|
FROM `players` AS `p`
|
|
LEFT JOIN `player_skills` AS `fist` ON `p`.`id` = `fist`.`player_id` AND `fist`.`skillid` = 0
|
|
LEFT JOIN `player_skills` AS `club` ON `p`.`id` = `club`.`player_id` AND `club`.`skillid` = 1
|
|
LEFT JOIN `player_skills` AS `sword` ON `p`.`id` = `sword`.`player_id` AND `sword`.`skillid` = 2
|
|
LEFT JOIN `player_skills` AS `axe` ON `p`.`id` = `axe`.`player_id` AND `axe`.`skillid` = 3
|
|
LEFT JOIN `player_skills` AS `dist` ON `p`.`id` = `dist`.`player_id` AND `dist`.`skillid` = 4
|
|
LEFT JOIN `player_skills` AS `shield` ON `p`.`id` = `shield`.`player_id` AND `shield`.`skillid` = 5
|
|
LEFT JOIN `player_skills` AS `fish` ON `p`.`id` = `fish`.`player_id` AND `fish`.`skillid` = 6
|
|
WHERE `p`.`id`= {$user_id}
|
|
LIMIT 1;";
|
|
$playerstats = mysql_select_single($player_query);
|
|
|
|
$playerstats['experience'] = number_format($playerstats['experience'],0,'',',');
|
|
$playerstats['stamina'] = number_format($playerstats['stamina']/60,2,':','');
|
|
|
|
$bar_length = 100;
|
|
$bar_health = (int)($bar_length * ($playerstats['health'] / $playerstats['healthmax']));
|
|
if ($playerstats['manamax'] > 0) {
|
|
$bar_mana = (int)($bar_length * ($playerstats['mana'] / $playerstats['manamax']));
|
|
}
|
|
else {
|
|
$bar_mana = 100;
|
|
}
|
|
|
|
$outfit_server = $config['show_outfits']['imageServer'];
|
|
$outfit_storage = $config['EQ_shower']['storage_value'];
|
|
|
|
$male_outfits = array(
|
|
[128,129,130,131,132],
|
|
[133,134,143,144,145],
|
|
[146,151,152,153,154],
|
|
[251,268,273,278,289],
|
|
[325,328,335,367,430],
|
|
[432,463,465,472,512],
|
|
//516,541,574,577,610,619,633,634,637,665,667,684,695,697,699,725,733,746,750,760,846,853,873,884,899
|
|
);
|
|
|
|
$female_outfits = array(
|
|
[136,137,138,139,140],
|
|
[141,142,147,148,149],
|
|
[150,155,156,157,158],
|
|
[252,269,270,279,288],
|
|
[324,329,336,366,431],
|
|
[433,464,466,471,513],
|
|
//514,542,575,578,618,620,632,635,636,664,666,683,694,696,698,724,732,745,749,759,845,852,874,885,900
|
|
);
|
|
|
|
$featured_outfits = ($profile_data['sex'] == 1) ? $male_outfits : $female_outfits;
|
|
$outfit_list = array();
|
|
$outfit_rows = COUNT($featured_outfits);
|
|
$outfit_columns = COUNT($featured_outfits[0]);
|
|
|
|
foreach ($featured_outfits as $row) {
|
|
if (COUNT($row) > $outfit_columns) {
|
|
$outfit_columns = COUNT($row);
|
|
}
|
|
foreach ($row as $column) {
|
|
$outfit_list[] = $column;
|
|
}
|
|
}
|
|
|
|
$highest_outfit_id = MAX($outfit_list);
|
|
$outfit_storage_max = $outfit_storage + $highest_outfit_id + 1;
|
|
|
|
$player_outfits = array();
|
|
$storage_sql = mysql_select_multi("
|
|
SELECT `key`, `value`
|
|
FROM `player_storage`
|
|
WHERE `player_id`={$user_id}
|
|
AND `key` > {$outfit_storage}
|
|
AND `key` < {$outfit_storage_max}
|
|
");
|
|
if ($storage_sql !== false && !empty($storage_sql)) {
|
|
foreach ($storage_sql as $row) {
|
|
$player_outfits[$row['key']] = $row['value'];
|
|
}
|
|
}
|
|
|
|
$aquired_outfits = array();
|
|
foreach ($outfit_list as $outfit_id) {
|
|
$outfit_key = $outfit_storage + $outfit_id;
|
|
if (isset($player_outfits[$outfit_key]) && $player_outfits[$outfit_key] == 3) {
|
|
$aquired_outfits[$outfit_id] = true;
|
|
}
|
|
}
|
|
?>
|
|
<td colspan="2" id="piv">
|
|
<div id="piv_flex">
|
|
|
|
<?php if ($config['EQ_shower']['equipment']): ?>
|
|
<div id="piv_i">
|
|
<img class="bg" src="/engine/img/outfit.png">
|
|
<div id="piv_lifebar"></div><div id="piv_lifetext"><span><?php echo $playerstats['health']; ?></span></div>
|
|
<div id="piv_manabar"></div><div id="piv_manatext"><span><?php echo $playerstats['mana']; ?></span></div>
|
|
<?php if ($PEQ !== false && !empty($PEQ)): foreach($PEQ as $item): ?>
|
|
<div class="itm itm-<?php echo $item['pid']; ?>">
|
|
<img src="<?php echo "http://{$imageServer}/".$item['itemtype'].".{$imageType}"; ?>">
|
|
</div>
|
|
<?php endforeach; endif; ?>
|
|
<span id="piv_cap">Cap:<br><?php echo $playerstats['cap']; ?></span>
|
|
<?php if ($loadOutfits): ?>
|
|
<div class="inventory_outfit">
|
|
<img src="<?php echo $config['show_outfits']['imageServer']; ?>?id=<?php echo $profile_data['looktype']; ?>&addons=<?php echo $profile_data['lookaddons']; ?>&head=<?php echo $profile_data['lookhead']; ?>&body=<?php echo $profile_data['lookbody']; ?>&legs=<?php echo $profile_data['looklegs']; ?>&feet=<?php echo $profile_data['lookfeet']; ?>" alt="img">
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($config['EQ_shower']['skills']): ?>
|
|
<div id="piv_s">
|
|
<img class="bg" src="/engine/img/skillsbackground.png">
|
|
<span id="s_exp" class="txt"><?php echo $playerstats['experience']; ?></span>
|
|
<span id="s_lvl" class="txt"><?php echo $playerstats['level']; ?></span>
|
|
<span id="s_hp" class="txt"><?php echo number_format($playerstats['health'],0,'',','); ?></span>
|
|
<span id="s_mp" class="txt"><?php echo number_format($playerstats['mana'],0,'',','); ?></span>
|
|
<span id="s_soul" class="txt"><?php echo $playerstats['soul']; ?></span>
|
|
<span id="s_cap" class="txt"><?php echo number_format($playerstats['cap'],0,'',','); ?></span>
|
|
<span id="s_stamina" class="txt"><?php echo $playerstats['stamina']; ?></span>
|
|
<span id="s_maglevel" class="txt"><?php echo $playerstats['maglevel']; ?></span>
|
|
<span id="s_skill_fist" class="txt"><?php echo $playerstats['skill_fist']; ?></span>
|
|
<span id="s_skill_club" class="txt"><?php echo $playerstats['skill_club']; ?></span>
|
|
<span id="s_skill_sword" class="txt"><?php echo $playerstats['skill_sword']; ?></span>
|
|
<span id="s_skill_axe" class="txt"><?php echo $playerstats['skill_axe']; ?></span>
|
|
<span id="s_skill_dist" class="txt"><?php echo $playerstats['skill_dist']; ?></span>
|
|
<span id="s_skill_shielding" class="txt"><?php echo $playerstats['skill_shielding']; ?></span>
|
|
<span id="s_skill_fishing" class="txt"><?php echo $playerstats['skill_fishing']; ?></span>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($config['EQ_shower']['outfits']): ?>
|
|
<div id="piv_o">
|
|
<div class="bg">
|
|
<div class="bg_t">
|
|
<div class="t_m"></div>
|
|
<div class="t_l"></div>
|
|
<div class="t_r"></div>
|
|
</div>
|
|
<div class="bg_m">
|
|
<div class="m_l"></div>
|
|
<div class="m_m"></div>
|
|
<div class="m_r"></div>
|
|
</div>
|
|
<div class="bg_b">
|
|
<div class="b_m"></div>
|
|
<div class="b_l"></div>
|
|
<div class="b_r"></div>
|
|
</div>
|
|
</div>
|
|
<div id="piv_o_container">
|
|
<?php foreach ($featured_outfits as $row): foreach($row as $outfit_id): $g = (isset($aquired_outfits[$outfit_id])) ? "" : "grayimg"; ?>
|
|
<img class="o <?php echo $g; ?>" src="<?php echo $outfit_server . "?id=" . $outfit_id; ?>&addons=3&head=0&body=0&legs=0&feet=0">
|
|
<?php endforeach; endforeach; ?>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<!-- Inventory style positioning -->
|
|
<style type="text/css">
|
|
#piv {
|
|
background-image: url("/engine/img/o/m_m.png");
|
|
}
|
|
#piv_flex {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
/*align-items: center;*/
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
font-family: Verdana,Geneva,sans-serif;
|
|
font-size: 7.0pt;
|
|
line-height: 1;
|
|
color: rgb(201,201,201);
|
|
}
|
|
#piv_i, #piv_s, #piv_o {
|
|
position: relative;
|
|
}
|
|
|
|
#piv_i {
|
|
width: 126px;
|
|
height: 207px;
|
|
}
|
|
#piv_s {
|
|
width: 184px;
|
|
height: 232px;
|
|
}
|
|
#piv_o {
|
|
width: <?php echo 16 + $outfit_columns * 40; ?>px;
|
|
height: <?php echo 29 + $outfit_rows * 33; ?>px;
|
|
}
|
|
#piv_flex img {
|
|
position: absolute;
|
|
}
|
|
#piv_i .inventory_outfit {
|
|
position: absolute;
|
|
top: 130px;
|
|
left: -24px;
|
|
}
|
|
#piv_lifebar {
|
|
position: absolute;
|
|
border-radius: 6px;
|
|
top: 6px;
|
|
left: 14px;
|
|
height: 11px;
|
|
/*width: 95px;*/
|
|
width: <?php echo $bar_health; ?>px;
|
|
background-image: url("/engine/img/lifebarra.png");
|
|
}
|
|
#piv_manabar {
|
|
position: absolute;
|
|
border-radius: 6px;
|
|
top: 19px;
|
|
left: 14px;
|
|
height: 11px;
|
|
/*width: 95px;*/
|
|
width: <?php echo $bar_mana; ?>px;
|
|
background-image: url("/engine/img/manabar.png");
|
|
}
|
|
#piv_lifetext,
|
|
#piv_manatext {
|
|
position: absolute;
|
|
display: block;
|
|
left: 15px;
|
|
width: <?php echo $bar_length; ?>px;
|
|
text-align: center;
|
|
}
|
|
#piv_lifetext {
|
|
top: 7px;
|
|
}
|
|
#piv_manatext {
|
|
top: 20px;
|
|
}
|
|
#piv_lifetext span,
|
|
#piv_manatext span {
|
|
background-color: rgba(0,0,0,0.7);
|
|
border-radius: 3px;
|
|
}
|
|
#piv_flex .itm {
|
|
background-image: url("/engine/img/bg.png");
|
|
width: 32px;
|
|
height: 32px;
|
|
position: absolute;
|
|
}
|
|
#piv_flex .itm-1 { left: 48px; top: 39px; }
|
|
#piv_flex .itm-2 { left: 11px; top: 53px; }
|
|
#piv_flex .itm-3 { left: 85px; top: 53px; }
|
|
#piv_flex .itm-4 { left: 48px; top: 76px; }
|
|
#piv_flex .itm-5 { left: 85px; top: 90px; }
|
|
#piv_flex .itm-6 { left: 11px; top: 90px; }
|
|
#piv_flex .itm-7 { left: 48px; top: 113px; }
|
|
#piv_flex .itm-8 { left: 48px; top: 150px; }
|
|
#piv_flex .itm-9 { left: 11px; top: 127px; }
|
|
#piv_flex .itm-10 { left: 85px; top: 127px; }
|
|
#piv_cap {
|
|
position: absolute;
|
|
top: 162px;
|
|
left: 85px;
|
|
min-width: 32px;
|
|
text-align: center;
|
|
}
|
|
|
|
#piv_s .txt {
|
|
position: absolute;
|
|
}
|
|
#s_exp { right: 22px; top: 16px; }
|
|
#s_lvl { right: 22px; top: 30px; }
|
|
#s_hp { right: 22px; top: 44px; }
|
|
#s_mp { right: 22px; top: 58px; }
|
|
#s_soul { right: 22px; top: 71px; }
|
|
#s_cap { right: 22px; top: 86px; }
|
|
#s_stamina { right: 22px; top: 100px; }
|
|
#s_maglevel { right: 22px; top: 114px; }
|
|
#s_skill_fist { right: 22px; top: 132px; }
|
|
#s_skill_club { right: 22px; top: 146px; }
|
|
#s_skill_sword { right: 22px; top: 160px; }
|
|
#s_skill_axe { right: 22px; top: 174px; }
|
|
#s_skill_dist { right: 22px; top: 188px; }
|
|
#s_skill_shielding { right: 22px; top: 202px; }
|
|
#s_skill_fishing { right: 22px; top: 215px; }
|
|
|
|
/* Dynamically render background container size for outfits */
|
|
#piv_o .bg {
|
|
width: inherit;
|
|
height: inherit;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
}
|
|
#piv_o .bg_t {
|
|
height: 21px;
|
|
width: 100%;
|
|
}
|
|
#piv_o .bg_m {
|
|
width: 100%;
|
|
height: <?php echo $outfit_rows * 33; ?>px;
|
|
}
|
|
#piv_o .t_l {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
background-image: url("/engine/img/o/t_l.png");
|
|
width: 8px;
|
|
height: 21px;
|
|
}
|
|
#piv_o .t_m {
|
|
position: absolute;
|
|
right: 0;
|
|
top: 0;
|
|
background-image: url("/engine/img/o/t_m.png");
|
|
width: 100%;
|
|
height: 21px;
|
|
}
|
|
#piv_o .t_r {
|
|
position: absolute;
|
|
right: 0;
|
|
top: 0;
|
|
background-image: url("/engine/img/o/t_r.png");
|
|
width: 50px;
|
|
height: 21px;
|
|
}
|
|
#piv_o .m_l {
|
|
background-image: url("/engine/img/o/m_l.png");
|
|
width: 8px;
|
|
height: inherit;
|
|
float: left;
|
|
}
|
|
#piv_o .m_m {
|
|
background-image: url("/engine/img/o/m_m.png");
|
|
width: calc(100% - 16px);
|
|
height: inherit;
|
|
float: left;
|
|
}
|
|
#piv_o .m_r {
|
|
background-image: url("/engine/img/o/m_r.png");
|
|
width: 8px;
|
|
height: inherit;
|
|
float: left;
|
|
}
|
|
#piv_o .b_l {
|
|
position: absolute;
|
|
left: 0;
|
|
bottom: 0;
|
|
background-image: url("/engine/img/o/b_l.png");
|
|
width: 8px;
|
|
height: 8px;
|
|
}
|
|
#piv_o .b_m {
|
|
position: absolute;
|
|
right: 0;
|
|
bottom: 0;
|
|
background-image: url("/engine/img/o/b_m.png");
|
|
width: 100%;
|
|
height: 8px;
|
|
}
|
|
#piv_o .b_r {
|
|
position: absolute;
|
|
right: 0;
|
|
bottom: 0;
|
|
background-image: url("/engine/img/o/b_r.png");
|
|
width: 8px;
|
|
height: 8px;
|
|
}
|
|
|
|
/* Render outfit player sprites */
|
|
#piv_o_container {
|
|
height: inherit;
|
|
width: inherit;
|
|
}
|
|
#piv_o_container .o {
|
|
position: absolute;
|
|
right: 0;
|
|
bottom: 0;
|
|
}
|
|
|
|
/* Outfit column positions */
|
|
<?php for ($column = 1; $column <= $outfit_columns; $column++): ?>
|
|
#piv_o_container .o:nth-child(<?php echo $outfit_columns.'n+'.$column;?>) { right: <?php echo 10 + 40 * ($outfit_columns-$column); ?>px; }
|
|
<?php endfor; ?>
|
|
|
|
/* Outfit row positions */
|
|
<?php for ($row = 1; $row <= $outfit_rows; $row++): ?>
|
|
#piv_o_container .o:nth-child(n+<?php echo $outfit_columns * ($row-1)+1; ?>):nth-child(-n+<?php echo $outfit_columns*$row; ?>) { bottom: <?php echo 10 + 33 * ($outfit_rows-$row); ?>px; }
|
|
<?php endfor; ?>
|
|
|
|
#piv_o_container .o.grayimg {
|
|
filter: none;
|
|
-webkit-filter: grayscale(100%);
|
|
-moz-filter: grayscale(100%);
|
|
-ms-filter: grayscale(100%);
|
|
-o-filter: grayscale(100%);
|
|
opacity: .5;
|
|
filter: alpha(opacity=50);
|
|
margin-left: -25pt;
|
|
margin-top: -25px;
|
|
}
|
|
</style>
|
|
</td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<!-- End EQ shower -->
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- Player Comment -->
|
|
<?php if (!empty($profile_znote_data['comment'])): ?>
|
|
<table class="comment">
|
|
<thead>
|
|
<tr class="yellow">
|
|
<td><font class="profile_font" name="profile_font_comment">Comment:</font></td>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><?php echo preg_replace('/\v+|\\\r\\\n/','<br/>',$profile_znote_data['comment']); ?></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<?php endif; ?>
|
|
|
|
<!-- Achievements start -->
|
|
<?php if ($config['Ach']):
|
|
$achievements = mysql_select_multi("
|
|
SELECT `player_id`, `value`, `key`
|
|
FROM `player_storage`
|
|
WHERE `player_id`='$user_id'
|
|
AND `key` LIKE '30___';
|
|
");
|
|
$c_achs = $config['achievements'];
|
|
$toggle = array(
|
|
'show' => '<a href="#show">Show</a>',
|
|
'hide' => '<a href="#hide">Hide</a>'
|
|
);
|
|
if ($achievements !== false): ?>
|
|
<h3>Achievements: <label id="ac_label_hide" for="ac_toggle_hide"><?php echo $toggle['show']; ?></label></h3>
|
|
<!-- <div id="accordion">
|
|
<h3>Show/hide player achievements</h3>
|
|
<div>
|
|
|
|
</div>
|
|
</div><br> -->
|
|
<input type="checkbox" id="ac_toggle_hide" name="ac_toggle_hide">
|
|
<table class="achievements">
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Description</th>
|
|
<th>Points</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach($achievements as $a): ?>
|
|
<tr>
|
|
<td><?php echo $c_achs[$a['key']][0]; ?></td>
|
|
<td><?php echo $c_achs[$a['key']][1]; ?></td>
|
|
<td><?php echo $a['value']; ?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
<style type="text/css">
|
|
table.achievements,
|
|
#ac_toggle_hide {
|
|
display: none;
|
|
}
|
|
#ac_toggle_hide:checked + table.achievements {
|
|
display: table;
|
|
}
|
|
</style>
|
|
<script type="text/javascript">
|
|
document.getElementById("ac_label_hide").addEventListener("click", function(event){
|
|
event.preventDefault();
|
|
if (document.getElementById("ac_label_hide").innerHTML == "<?php echo str_replace('"', '\"', $toggle['show']); ?>") {
|
|
document.getElementById("ac_label_hide").innerHTML = "<?php echo str_replace('"', '\"', $toggle['hide']); ?>";
|
|
document.getElementById("ac_toggle_hide").checked = true;
|
|
} else {
|
|
document.getElementById("ac_label_hide").innerHTML = "<?php echo str_replace('"', '\"', $toggle['show']); ?>";
|
|
document.getElementById("ac_toggle_hide").checked = false;
|
|
}
|
|
});
|
|
</script>
|
|
<?php endif; ?>
|
|
<?php endif; ?>
|
|
|
|
<!-- DEATH LIST -->
|
|
<table class="deathlist">
|
|
<thead>
|
|
<tr class="yellow">
|
|
<th colspan="2">Death List</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php
|
|
if ($config['ServerEngine'] == 'TFS_10') {
|
|
$deaths = mysql_select_multi("
|
|
SELECT
|
|
`player_id`,
|
|
`time`,
|
|
`level`,
|
|
`killed_by`,
|
|
`is_player`,
|
|
`mostdamage_by`,
|
|
`mostdamage_is_player`,
|
|
`unjustified`,
|
|
`mostdamage_unjustified`
|
|
FROM `player_deaths`
|
|
WHERE `player_id`=$user_id
|
|
ORDER BY `time` DESC
|
|
LIMIT 10;
|
|
");
|
|
|
|
if ($deaths) {
|
|
foreach ($deaths as $d) {
|
|
$lasthit = ($d['is_player'])
|
|
? "<a href='characterprofile.php?name=".$d['killed_by']."'>".$d['killed_by']."</a>"
|
|
: $d['killed_by'];
|
|
|
|
?>
|
|
<tr>
|
|
<td><?php echo getClock($d['time'], true, true); ?></td>
|
|
<td>
|
|
<?php
|
|
echo "Killed at level ".$d['level']." by {$lasthit}";
|
|
if ($d['unjustified']) {
|
|
echo " <font color='red' style='font-style: italic;'>(unjustified)</font>";
|
|
}
|
|
$mostdmg = ($d['mostdamage_by'] !== $d['killed_by']) ? true : false;
|
|
if ($mostdmg) {
|
|
$mostdmg = ($d['mostdamage_is_player'])
|
|
? "<a href='characterprofile.php?name=".$d['mostdamage_by']."'>".$d['mostdamage_by']."</a>"
|
|
: $d['mostdamage_by'];
|
|
|
|
echo "<br>and by $mostdmg.";
|
|
|
|
if ($d['mostdamage_unjustified']) {
|
|
echo " <font color='red' style='font-style: italic;'>(unjustified)</font>";
|
|
}
|
|
} else {
|
|
echo " <b>(soloed)</b>";
|
|
}
|
|
?>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
} else {
|
|
?>
|
|
<tr>
|
|
<td colspan="2">This player has never died.</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
} elseif ($config['ServerEngine'] == 'TFS_02') {
|
|
$array = user_fetch_deathlist($user_id);
|
|
if ($array) {
|
|
foreach ($array as $value):
|
|
if ($value['is_player'] == 1) {
|
|
$value['killed_by'] = 'player: <a href="characterprofile.php?name='. $value['killed_by'] .'">'. $value['killed_by'] .'</a>';
|
|
} else {
|
|
$value['killed_by'] = 'monster: '. $value['killed_by'] .'.';
|
|
}
|
|
?>
|
|
<tr>
|
|
<td><?php echo getClock($value['time'], true, true); ?></td>
|
|
<td><?php echo 'Killed at level '. $value['level'] .' by '. $value['killed_by']; ?></td>
|
|
</tr>
|
|
<?php endforeach;
|
|
} else {
|
|
?>
|
|
<tr>
|
|
<td colspan="2">This player has never died.</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
} elseif (in_array($config['ServerEngine'], array('TFS_03', 'OTHIRE'))) {
|
|
//mysql_select_single("SELECT * FROM players WHERE name='TEST DEBUG';");
|
|
$array = user_fetch_deathlist03($user_id);
|
|
if ($array) {
|
|
// Design and present the list
|
|
foreach ($array as $value):
|
|
$value[3] = user_get_killer_id(user_get_kid($value['id']));
|
|
if ($value[3] !== false && $value[3] >= 1) {
|
|
$namedata = user_character_data((int)$value[3], 'name');
|
|
if ($namedata !== false) {
|
|
$value[3] = $namedata['name'];
|
|
$value[3] = 'player: <a href="characterprofile.php?name='. $value[3] .'">'. $value[3] .'</a>';
|
|
} else {
|
|
$value[3] = 'deleted player.';
|
|
}
|
|
} else {
|
|
$value[3] = user_get_killer_m_name(user_get_kid($value['id']));
|
|
if ($value[3] === false) {
|
|
$value[3] = 'deleted player.';
|
|
}
|
|
}
|
|
?>
|
|
<tr>
|
|
<td><?php echo getClock($value['date'], true, true); ?></td>
|
|
<td><?php echo 'Killed at level '. $value['level'] .' by '. $value[3]; ?></td>
|
|
</tr>
|
|
<?php endforeach;
|
|
} else {
|
|
?>
|
|
<tr>
|
|
<td colspan="2">This player has never died.</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- QUEST PROGRESSION -->
|
|
<?php
|
|
$totalquests = 0;
|
|
$completedquests = 0;
|
|
$firstrun = 1;
|
|
|
|
if ($config['EnableQuests'] == true) {
|
|
$sqlquests = mysql_select_multi("
|
|
SELECT `player_id`, `key`, `value`
|
|
FROM player_storage
|
|
WHERE `player_id` = {$user_id}
|
|
");
|
|
if (isset($config['quests']) && !empty($config['quests'])) {
|
|
foreach ($config['quests'] as $cquest) {
|
|
$totalquests = $totalquests + 1;
|
|
if ($sqlquests !== false) {
|
|
foreach ($sqlquests as $dbquest) {
|
|
if ($cquest[0] == $dbquest['key'] && $cquest[1] == $dbquest['value']) {
|
|
$completedquests = $completedquests + 1;
|
|
}
|
|
}
|
|
}
|
|
if ($cquest[3] == 1) {
|
|
if ($completedquests != 0) {
|
|
if ($firstrun == 1): ?>
|
|
<b> Quest progression </b>
|
|
<table id="characterprofileQuest" class="table table-striped table-hover">
|
|
<thead>
|
|
<tr class="yellow">
|
|
<th>Quest:</th>
|
|
<th>progression:</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php
|
|
$firstrun = 0;
|
|
endif;
|
|
$completed = $completedquests / $totalquests * 100;
|
|
?>
|
|
<tr>
|
|
<td><?php echo $cquest[2]; ?></td>
|
|
<td id="progress">
|
|
<span id="percent"><?php echo round($completed); ?>%</span>
|
|
<div id="bar" style="width: '.$completed.'%"></div>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
$completedquests = 0;
|
|
$totalquests = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($firstrun == 0): ?>
|
|
</tbody></table>
|
|
<?php endif; ?>
|
|
<!-- END QUEST PROGRESSION -->
|
|
|
|
<!-- CHARACTER LIST -->
|
|
<?php
|
|
// Backward compatibility
|
|
$select_online = "CASE WHEN `l`.`player_id` IS NULL THEN 0 else 1 END as `online`";
|
|
$join_online = "LEFT JOIN `players_online` as `l` ON `p`.`id` = `l`.`player_id`";
|
|
if ($config['ServerEngine'] != 'TFS_10') {
|
|
$select_online = "`p`.`online`";
|
|
$join_online = "";
|
|
}
|
|
|
|
// Load other visible characters
|
|
$otherChars = mysql_select_multi("
|
|
SELECT
|
|
`p`.`id`,
|
|
`p`.`name`,
|
|
`p`.`level`,
|
|
`p`.`vocation`,
|
|
`p`.`lastlogin`,
|
|
{$select_online}
|
|
FROM `players` as `o`
|
|
JOIN `players` as `p`
|
|
ON `o`.`account_id` = `p`.`account_id`
|
|
LEFT JOIN `znote_players` as `z`
|
|
ON `p`.`id` = `z`.`player_id`
|
|
LEFT JOIN `znote_players` as `z2`
|
|
ON `o`.`id` = `z2`.`player_id`
|
|
{$join_online}
|
|
WHERE `o`.`id` = {$user_id}
|
|
AND `p`.`id` != `o`.`id`
|
|
AND `z`.`hide_char` = 0
|
|
AND `z2`.`hide_char` = 0
|
|
ORDER BY `p`.`experience` DESC;
|
|
");
|
|
|
|
// Render table if there are any characters to show
|
|
if ($otherChars !== false) {
|
|
?>
|
|
<li>
|
|
<b>Other visible characters on this account:</b><br>
|
|
<table id="characterprofileTable" class="table table-striped table-hover">
|
|
<tr class="yellow">
|
|
<th>Name:</th>
|
|
<th>Level:</th>
|
|
<th>Vocation:</th>
|
|
<th>Last login:</th>
|
|
<th>Status:</th>
|
|
</tr>
|
|
<?php
|
|
// Add character rows
|
|
foreach ($otherChars as $char):
|
|
?>
|
|
<tr>
|
|
<td><a href="characterprofile.php?name=<?php echo $char['name']; ?>"><?php echo $char['name']; ?></a></td>
|
|
<td><?php echo (int)$char['level']; ?></td>
|
|
<td><?php echo vocation_id_to_name($char['vocation']); ?></td>
|
|
<td><?php echo ($char['lastlogin'] != 0) ? getClock($char['lastlogin'], true, true) : 'Never.'; ?></td>
|
|
<td><?php echo ($char['online']) ? 'online' : 'offline'; ?></td>
|
|
</tr>
|
|
<?php
|
|
endforeach;
|
|
?>
|
|
</table>
|
|
</li>
|
|
<?php
|
|
}
|
|
?>
|
|
<!-- END CHARACTER LIST -->
|
|
|
|
<p class="address">Address: <a href="<?php echo ($config['htwrite']) ? "//" . $_SERVER['HTTP_HOST']."/" . $profile_data['name'] : "//" . $_SERVER['HTTP_HOST'] . "/characterprofile.php?name=" . $profile_data['name']; ?>"><?php echo ($config['htwrite']) ? $_SERVER['HTTP_HOST']."/". $profile_data['name'] : $_SERVER['HTTP_HOST']."/characterprofile.php?name=". $profile_data['name']; ?></a></p>
|
|
|
|
<?php
|
|
} else {
|
|
echo htmlentities(strip_tags($name, ENT_QUOTES)) . ' does not exist.';
|
|
}
|
|
} else {
|
|
header('Location: index.php');
|
|
}
|
|
include 'layout/overall/footer.php'; ?>
|