getMilestones() : []; // Lightens ($percent > 0) or darkens ($percent < 0) a "#rrggbb" color, used // to build each badge's radial-gradient inline (kept as plain computed hex // stops rather than CSS color-mix()/custom properties, for broader browser // compatibility with this project's existing baseline). function tzms_shade($hex, $percent) { $hex = ltrim($hex, '#'); $r = hexdec(substr($hex, 0, 2)); $g = hexdec(substr($hex, 2, 2)); $b = hexdec(substr($hex, 4, 2)); $adjust = function ($c) use ($percent) { $c = $percent < 0 ? $c * (1 + $percent / 100) : $c + (255 - $c) * ($percent / 100); return max(0, min(255, (int) round($c))); }; return sprintf('#%02x%02x%02x', $adjust($r), $adjust($g), $adjust($b)); } // Simple line-icon set (inline SVG, no external image files, so there's // nothing that can 404 regardless of where this is deployed). $milestoneIcons = [ 'village' => '', 'population' => '', 'artifact' => '', 'wonder' => '', 'plan' => '', 'alliance' => '', 'conquest' => '', ]; $milestoneDefs = [ 'second_village' => ['label' => TZ_MILESTONE_SECOND_VILLAGE, 'icon' => 'village', 'color' => '#c0783c'], 'population_1000' => ['label' => TZ_MILESTONE_POPULATION_1000, 'icon' => 'population', 'color' => '#3c78c0'], 'first_artifact' => ['label' => TZ_MILESTONE_FIRST_ARTIFACT, 'icon' => 'artifact', 'color' => '#8a4fc0'], 'first_ww' => ['label' => TZ_MILESTONE_FIRST_WW, 'icon' => 'wonder', 'color' => '#c0a030'], 'first_ww_plan' => ['label' => TZ_MILESTONE_FIRST_WW_PLAN, 'icon' => 'plan', 'color' => '#2f9e8f'], 'first_alliance' => ['label' => TZ_MILESTONE_FIRST_ALLIANCE, 'icon' => 'alliance', 'color' => '#3fa14a'], 'first_pvp_conquest' => ['label' => TZ_MILESTONE_FIRST_PVP_CONQUEST, 'icon' => 'conquest', 'color' => '#b6362f'], ]; // ========================= // TRIBES COUNT // ========================= $tribesRes = mysqli_query($database->dblink, "SELECT tribe, COUNT(*) AS Total FROM ".TB_PREFIX."users WHERE tribe BETWEEN 1 AND 3 GROUP BY tribe"); $tribes = [0, 0, 0]; if ($tribesRes) { while ($row = mysqli_fetch_assoc($tribesRes)) { $tribes[(int)$row['tribe']-1] = (int)$row['Total']; } } $userRes = mysqli_query($database->dblink, "SELECT COUNT(*) AS Total FROM ".TB_PREFIX."users WHERE tribe BETWEEN 1 AND 3"); $users = $userRes? (int)mysqli_fetch_assoc($userRes)['Total'] : 0; // ========================= // VILLAGES + POPULATION // ========================= $villageRes = mysqli_query($database->dblink, "SELECT COUNT(*) AS Total FROM ".TB_PREFIX."vdata"); $num_villages = $villageRes? (int)mysqli_fetch_assoc($villageRes)['Total'] : 0; $popRes = mysqli_query($database->dblink, "SELECT SUM(pop) AS totalpop FROM ".TB_PREFIX."vdata"); $total_pop = $popRes? (int)mysqli_fetch_assoc($popRes)['totalpop'] : 0; // ========================= // ONLINE / ACTIVE USERS // ========================= $active = 0; $res = mysqli_query($database->dblink, "SELECT COUNT(*) AS Total FROM ".TB_PREFIX."users WHERE timestamp > ".(time()-86400)." AND tribe BETWEEN 1 AND 3"); if($res) $active = (int)mysqli_fetch_assoc($res)['Total']; $online = 0; $res = mysqli_query($database->dblink, "SELECT COUNT(*) AS Total FROM ".TB_PREFIX."users WHERE timestamp > ".(time()-600)." AND tribe BETWEEN 1 AND 3"); if($res) $online = (int)mysqli_fetch_assoc($res)['Total']; // ========================= // GOLD TOTAL // ========================= $goldRes = mysqli_query($database->dblink, "SELECT SUM(gold) AS totalgold FROM ".TB_PREFIX."users"); $total_gold = $goldRes? (int)mysqli_fetch_assoc($goldRes)['totalgold'] : 0; // ========================= // 2026 - NEW STATISTICS // ========================= $daysSinceStart = defined('COMMENCE')? floor((time()-COMMENCE)/86400) : 0; // Natars $natars = 0; $q = mysqli_query($database->dblink, "SELECT COUNT(*) AS n FROM ".TB_PREFIX."vdata WHERE natar=1"); if($q) $natars = (int)mysqli_fetch_assoc($q)['n']; // Occupied Oasis $oasis = 0; $q = mysqli_query($database->dblink, "SELECT COUNT(*) AS o FROM ".TB_PREFIX."odata WHERE owner <> 2 AND owner <> 0 AND owner IS NOT NULL"); if($q) $oasis = (int)mysqli_fetch_assoc($q)['o']; // Alliances $alliCount = 0; $q = mysqli_query($database->dblink, "SELECT COUNT(*) AS a FROM ".TB_PREFIX."alidata"); if($q) $alliCount = (int)mysqli_fetch_assoc($q)['a']; $topAlliances = []; $q = mysqli_query($database->dblink, "SELECT a.tag, a.name, COUNT(u.id) AS members FROM ".TB_PREFIX."alidata a LEFT JOIN ".TB_PREFIX."users u ON u.alliance=a.id GROUP BY a.id ORDER BY members DESC LIMIT 5"); if($q) while($r=mysqli_fetch_assoc($q)) $topAlliances[] = $r; // New Players Today $newToday = 0; $q = mysqli_query($database->dblink, "SELECT COUNT(*) AS n FROM ".TB_PREFIX."users WHERE regtime > ".(time()-86400)." AND tribe BETWEEN 1 AND 3"); if($q) $newToday = (int)mysqli_fetch_assoc($q)['n']; // Top 10 $topPop = []; $q = mysqli_query($database->dblink, "SELECT u.username, COALESCE(SUM(v.pop),0) AS totalpop FROM ".TB_PREFIX."users u LEFT JOIN ".TB_PREFIX."vdata v ON v.owner = u.id WHERE u.tribe BETWEEN 1 AND 3 GROUP BY u.id ORDER BY totalpop DESC LIMIT 10"); if($q) while($r = mysqli_fetch_assoc($q)) $topPop[] = $r; $topAtk = []; $q = mysqli_query($database->dblink, "SELECT username, ap AS points FROM ".TB_PREFIX."users WHERE tribe BETWEEN 1 AND 3 ORDER BY ap DESC LIMIT 10"); if($q) while($r = mysqli_fetch_assoc($q)) $topAtk[] = $r; $topDef = []; $q = mysqli_query($database->dblink, "SELECT username, dp AS points FROM ".TB_PREFIX."users WHERE tribe BETWEEN 1 AND 3 ORDER BY dp DESC LIMIT 10"); if($q) while($r = mysqli_fetch_assoc($q)) $topDef[] = $r; // WW $wonders=[]; $q=mysqli_query($database->dblink, "SELECT v.name AS village, u.username, f.f99 AS level FROM ".TB_PREFIX."fdata f JOIN ".TB_PREFIX."vdata v ON f.vref=v.wref JOIN ".TB_PREFIX."users u ON v.owner=u.id WHERE f.f99t=40 AND f.f99>0 ORDER BY f.f99 DESC LIMIT 3"); if($q) while($r=mysqli_fetch_assoc($q)) $wonders[]=$r; // Artefacts $artefacts=[]; $q=mysqli_query($database->dblink, "SELECT a.name, u.username FROM ".TB_PREFIX."artefacts a LEFT JOIN ".TB_PREFIX."users u ON a.owner=u.id WHERE a.active=1 LIMIT 5"); if($q) while($r=mysqli_fetch_assoc($q)) $artefacts[]=$r; // Troops $units=[]; $result=mysqli_query($database->dblink,"SELECT ".implode(',',array_map(fn($i)=>"SUM(u$i) AS u$i",range(1,30)))." FROM ".TB_PREFIX."units"); if($result) $units=mysqli_fetch_assoc($result); function u($units,$k){ return isset($units[$k])? (int)$units[$k] : 0; } ?>
$mdef): $achieved = $milestonesData[$mkey] ?? null; $light = tzms_shade($mdef['color'], 28); $dark = tzms_shade($mdef['color'], -32); $bg = $achieved ? sprintf('background:radial-gradient(circle at 32%% 28%%, %s, %s 55%%, %s 100%%);border-color:rgba(255,255,255,0.35);', $light, $mdef['color'], $dark) : 'background:#d8d8d8;border-color:rgba(0,0,0,0.08);'; $title = htmlspecialchars($mdef['label'], ENT_QUOTES, 'UTF-8'); $meta = $achieved ? htmlspecialchars(($achieved['username'] ?: '-') . ' — ' . date('d.m.y G:i:s', (int)$achieved['achieved_time']), ENT_QUOTES, 'UTF-8') : htmlspecialchars(TZ_MILESTONE_NOT_YET, ENT_QUOTES, 'UTF-8'); ?>

Players online

Server Information
Days Since Start
Active Alliance
Natars Villages
Conquered Oasis
New Players Today

0)?round(100*$roman/$users,2):0; $teutonPct=($users>0)?round(100*$teuton/$users,2):0; $gaulPct=($users>0)?round(100*$gaul/$users,2):0; ?>
%
%
%

Total Gold

';?>
Top 5 Alliances
TagNumeMembers
-


Top Players
PopulationPct AttackersPct DefendersPct

Endgame
WWLevelArtefacts
"; if(empty($wonders)) echo "-";?> "; if(empty($wonders)) echo "-";?> "; if(empty($artefacts)) echo "-";?>

getAttackByDate(time()-(86400*$d))?> getAttackCasualties(time()-(86400*$d))?>