Files
TravianZ/Admin/Templates/playerheroinfo.tpl
T
Catalin Novgorodschi f1854c1559 Add Translation to Admin Panel
Add Translation to Admin Panel
2026-07-26 07:58:41 +03:00

191 lines
10 KiB
Smarty
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
#################################################################################
## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ##
## --------------------------------------------------------------------------- ##
## Filename : playerheroinfo.tpl ##
## Type : Admin Panel Frontend ##
## --------------------------------------------------------------------------- ##
## Developed by : Dzoki (Original) ##
## Refactored by : Shadow ##
## Redesign by : Shadow ##
## --------------------------------------------------------------------------- ##
## Contact : cata7007@gmail.com ##
## Project : TravianZ ##
## GitHub : https://github.com/Shadowss/TravianZ ##
## --------------------------------------------------------------------------- ##
## License : TravianZ Project ##
## Copyright : TravianZ (c) 2010-2025. All rights reserved. ##
## --------------------------------------------------------------------------- ##
#################################################################################
include_once("../GameEngine/Data/hero_full.php");
include_once("../GameEngine/Units.php");
$id = (int) $_GET['uid'];
$hero = $units->Hero($id,1);
$heroAliveIndex = -1;
if ($hero !== false) {
foreach ($hero as $hid => $h) {
if (!$h['dead']) { $heroAliveIndex = $hid; break; }
}
}
?>
<style>
.hero-wrap{width:100%;margin-top:15px;font-family:system-ui}
.hero-table{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid #e5e7eb;border-radius:10px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.04)}
.hero-table th,.hero-table td{vertical-align:middle;padding:3px 8px;border-bottom:1px solid #f1f5f9;font-size:12px;color:#1e293b;line-height:1.2}
.hero-table thead th{background:linear-gradient(180deg,#f8fafc,#eef2f7);text-align:center;font-weight:600;color:#334155;border-bottom:1px solid #e2e8f0;padding:4px 8px}
.hero-table tr:last-child td{border-bottom:0}
.hero-table thead th.hero-head{background:linear-gradient(135deg,#66CCFF,#66CCCC) !important;color:#fff !important;padding:6px 10px !important;font-size:13px}
.hero-sub{background:#e2e8f0 !important;font-weight:600;color:#1e293b;text-align:center;padding:3px 8px !important}
.hero-name{font-weight:600;color:#0f172a}
.badge{display:inline-block;padding:1px 6px;border-radius:5px;font-size:10.5px;font-weight:600}
.badge-alive{background:#dcfce7;color:#166534}
.badge-dead{background:#fee2e2;color:#991b1b}
.hero-actions{display:flex;align-items:center;gap:8px}
.hero-icon{display:inline-flex;opacity:.8;transition:.15s}
.hero-icon:hover{opacity:1}
.hero-icon svg{width:14px;height:14px;stroke:#64748b;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round}
.hero-icon.edit:hover svg{stroke:#2563eb}
.hero-icon.kill:hover svg{stroke:#dc2626}
.hero-icon.revive:hover svg{stroke:#16a34a}
.hero-unit img{vertical-align:middle;margin-right:3px;width:16px;height:16px}
.hero-bar{height:4px;background:#e5e7eb;border-radius:2px;overflow:hidden;margin-top:2px}
.hero-bar-fill{height:100%;background:linear-gradient(90deg,#22c55e,#16a34a)}
.add-hero a{margin:0 2px;opacity:.9}
.add-hero a:hover{opacity:1}
.add-hero img{width:18px;height:18px}
.notice{margin-top:6px;text-align:center;font-size:12px;padding:4px;border-radius:5px}
.notice-blue{background:#eff6ff;color:#1d4ed8}
.notice-red{background:#fef2f2;color:#b91c1c}
</style>
<div class="hero-wrap">
<table class="hero-table">
<thead>
<tr><th colspan="3" class="hero-head"><?php echo ADM_PLAYER_HEROES; ?></th></tr>
</thead>
<?php if ($hero === false) {?>
<tr>
<td colspan="3" align="center" class="add-hero"><?php echo ADM_NONE_3; ?><span style="color:#2563eb;font-weight:600"><?php echo ADM_ADD_HERO; ?></span>
<?php
$utribe=($user['tribe']-1)*10;
// Sloturile 1-6 care au erou definit in hero_full.php (generic pentru toate triburile)
for ($hs = 1; $hs <= 6; $hs++) {
$huid = $utribe + $hs;
if (!isset(${'h'.$huid})) continue;
echo "&nbsp;<a href='?action=addHero&uid=".$id."&u=".$huid."'><img class=\"unit u".$huid."\" src=\"img/x.gif\" alt=\"".$technology->getUnitName($huid)."\" title=\"".$technology->getUnitName($huid)."\" /></a>";
}
?>
</td>
</tr>
<?php } else {
$x = 1;
foreach ($hero as $h) { ?>
<tr><td colspan="3" class="hero-sub" style="text-align:center">Hero #<?php echo $x++; ?></td></tr>
<tr>
<td width="35%"><?php echo ADM_HERO_NAME; ?></td>
<td colspan="2" class="hero-name"><?php echo htmlspecialchars($h['name']); ?></td>
</tr>
<tr>
<td><?php echo ADM_HERO_LEVEL; ?></td>
<td colspan="2"><?php echo $h['level']; ?></td>
</tr>
<tr>
<td><?php echo ADM_HERO_UNIT; ?></td>
<td colspan="2" class="hero-unit"><?php echo "<img class=\"unit u".$h['unit']."\" src=\"img/x.gif\" alt=\"".$technology->getUnitName($h['unit'])."\" title=\"".$technology->getUnitName($h['unit'])."\" /> ".$technology->getUnitName($h['unit']); ?></td>
</tr>
<tr>
<td><?php echo ADM_STATUS; ?></td>
<td colspan="2" class="hero-actions">
<?php if (!$h['dead']) { ?>
<span class="badge badge-alive"><?php echo ADM_ALIVE; ?></span>
<a class="hero-icon edit" href='admin.php?p=editHero&uid=<?php echo $id; ?>&amp;hid=<?php echo $h['heroid'] ?>' title="<?php echo ADM_EDIT; ?>">
<svg viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z"/></svg>
</a>
<?php if (defined('NEW_FUNCTIONS_HERO_T4') && NEW_FUNCTIONS_HERO_T4) { ?>
<a class="hero-icon edit" href='admin.php?p=editHeroT4&uid=<?php echo $id; ?>' title="<?php echo ADM_T4_ITEMS_SILVER_AUCTIONS; ?>">
<svg viewBox="0 0 24 24"><path d="M6 2l1.5 4h9L18 2"/><path d="M4 6h16l-2 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L4 6z"/></svg>
</a>
<?php } ?>
<a class="hero-icon kill" href='?action=killHero&uid=<?php echo $id; ?>' title="<?php echo ADM_KILL; ?>">
<svg viewBox="0 0 24 24"><path d="M3 6h18M8 6V4h8v2m-1 0v14a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2V6h10z"/></svg>
</a>
<?php } else { ?>
<span class="badge badge-dead"><?php echo ADM_DEAD; ?></span>
<?php if ($heroAliveIndex === -1) { ?>
<a class="hero-icon revive" href="?action=reviveHero&uid=<?php echo $id;?>&amp;hid=<?php echo $h['heroid'] ?>" title="<?php echo ADM_REVIVE; ?>">
<svg viewBox="0 0 24 24"><path d="M21 12a9 9 0 1 1-3-6.7"/><path d="M21 3v6h-6"/></svg>
</a>
<?php } else { echo '<span style="color:#64748b;font-size:11px">(kill living hero first)</span>'; } ?>
<?php } ?>
</td>
</tr>
<?php if (!$h['dead']) { ?>
<tr><th><?php echo ADM_DETAILS; ?></th><th><?php echo ADM_POINT; ?></th><th><?php echo ADM_LEVEL_2; ?></th></tr>
<tr><td><?php echo ADM_OFFENCE_2; ?></td><td><?php echo $h['atk']; ?></td><td><?php echo $h['attack']; ?></td></tr>
<tr><td><?php echo ADM_DEFENCE_2; ?></td><td><?php echo $h['di']."/".$h['dc']; ?></td><td><?php echo $h['defence']; ?></td></tr>
<tr><td><?php echo ADM_OFF_BONUS_2; ?></td><td><?php echo ($h['ob']-1)*100; ?>%</td><td><?php echo $h['attackbonus']; ?></td></tr>
<tr><td><?php echo ADM_DEF_BONUS_2; ?></td><td><?php echo ($h['db']-1)*100; ?>%</td><td><?php echo $h['defencebonus']; ?></td></tr>
<tr><td><?php echo ADM_REGENERATION; ?></td><td><?php echo min(100,$h['regeneration'])*5*SPEED; ?>/Day</td><td><?php echo $h['regeneration']; ?></td></tr>
<?php if (defined('NEW_FUNCTIONS_HERO_T4') && NEW_FUNCTIONS_HERO_T4) {
$hResPoints = (int) ($h['resources'] ?? 0);
$hResType = (int) ($h['res_type'] ?? 0);
$hPerAll = defined('HERO_RES_PER_POINT_ALL') ? (int) HERO_RES_PER_POINT_ALL : 3;
$hPerOne = defined('HERO_RES_PER_POINT_ONE') ? (int) HERO_RES_PER_POINT_ONE : 10;
$hResNames = [0 => 'all', 1 => 'lumber', 2 => 'clay', 3 => 'iron', 4 => 'crop'];
$hResAmount = ($hResType >= 1 && $hResType <= 4)
? (int) round($hResPoints * $hPerOne * SPEED)
: (int) round($hResPoints * $hPerAll * SPEED);
?>
<tr><td><?php echo ADM_RESOURCES_2; ?></td><td><?php echo $hResAmount; ?>/h (<?php echo $hResNames[$hResType] ?? 'all'; ?>)</td><td><?php echo $hResPoints; ?></td></tr>
<?php } ?>
<tr>
<?php
// 1. puncte rămase - nu lăsa negativ
$used = (int)$h['attack'] + (int)$h['defence'] + (int)$h['attackbonus']
+ (int)$h['defencebonus'] + (int)$h['regeneration'] + (int)($h['resources'] ?? 0);
// totalul de puncte vine din tabelul de niveluri: 5 initiale + 5 per nivel
$hMaxLevel = isset($hero_levels) ? max(array_keys($hero_levels)) - 1 : 119;
$hMaxPoints = 5 + ($hMaxLevel * 5);
$count_level_exp = max(0, $hMaxPoints - $used);
if ($h['points'] > $count_level_exp) $h['points'] = $count_level_exp;
// 2. procent XP - protejat pentru level 100
$level = (int)$h['level'];
if ($level >= $hMaxLevel || !isset($hero_levels[$level+1])) {
$expPct = 100;
} else {
$curr = $hero_levels[$level] ?? 0;
$next = $hero_levels[$level+1] ?? $curr;
$den = $next - $curr;
$expPct = ($den > 0 && $h['experience'] < $next)
? (int)(($h['experience'] - $curr) * 100 / $den)
: 100;
}
$expPct = max(0, min(100, $expPct));
?>
<td>Experience: <?php echo $expPct; ?>%</td>
<td colspan="2"><?php echo $h['points']; ?><div class="hero-bar"><div class="hero-bar-fill" style="width:<?php echo $expPct; ?>%"></div></div></td>
</tr>
<tr><td><?php echo ADM_HEALTH_2; ?></td><td colspan="2"><?php echo round($h['health']); ?>%<div class="hero-bar"><div class="hero-bar-fill" style="width:<?php echo round($h['health']); ?>%"></div></div></td></tr>
<tr><td colspan="3" style="height:8px;background:#f8fafc"></td></tr>
<?php } else { ?>
<tr><td colspan="3" style="height:8px;background:#f8fafc"></td></tr>
<?php } } } ?>
</table>
<?php
if(isset($_GET['e'])) echo '<div class="notice notice-red"><b>Hero could not be killed.</b></div>';
elseif(isset($_GET['kc'])) echo '<div class="notice notice-blue"><b>Hero has been killed.</b></div>';
elseif(isset($_GET['rc'])) echo '<div class="notice notice-blue"><b>Hero has been revived.</b></div>';
elseif(isset($_GET['re'])) echo '<div class="notice notice-red"><b>Cannot revive another hero lives.</b></div>';
elseif(isset($_GET['ac'])) echo '<div class="notice notice-blue"><b>New hero added.</b></div>';
elseif(isset($_GET['cs'])) echo '<div class="notice notice-blue"><b>Hero information saved.</b></div>';
elseif(isset($_GET['ce'])) echo '<div class="notice notice-red"><b>Edit failed.</b></div>';
?>
</div>