diff --git a/Templates/Ranking/general.tpl b/Templates/Ranking/general.tpl
index 12c8824e..184741fb 100644
--- a/Templates/Ranking/general.tpl
+++ b/Templates/Ranking/general.tpl
@@ -4,367 +4,310 @@
## -= YOU MAY NOT REMOVE OR CHANGE THIS NOTICE =- ##
## --------------------------------------------------------------------------- ##
## Project: TravianZ ##
-## Version: 01.09.2013 ##
+## Version: 22.06.2026 ##
## Filename general.tpl ##
## Refactored by Shadow ##
## License: TravianZ Project ##
-## Copyright: TravianZ (c) 2010-2013. All rights reserved. ##
-## URLs: http://travian.shadowss.ro ##
+## Copyright: TravianZ (c) 2010-2026. All rights reserved. ##
+## URLs: http://travianz.org ##
## Source code: http://github.com/Shadowss/TravianZ/ ##
## ##
#################################################################################
-// =========================
-// TRIBES COUNT (optimized)
-// =========================
-$tribesRes = mysqli_query(
- $database->dblink,
- "SELECT tribe, COUNT(*) AS Total
- FROM ".TB_PREFIX."users
- WHERE tribe BETWEEN 1 AND 3
- GROUP BY tribe"
-);
+mysqli_report(MYSQLI_REPORT_OFF);
+// =========================
+// 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)) {
- $tribeId = (int)$row['tribe'] - 1;
- if (isset($tribes[$tribeId])) {
- $tribes[$tribeId] = (int)$row['Total'];
- }
+ $tribes[(int)$row['tribe']-1] = (int)$row['Total'];
}
}
-// total users
-$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;
-
+$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;
+$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;
-
+$total_pop = $popRes? (int)mysqli_fetch_assoc($popRes)['totalpop'] : 0;
// =========================
// ONLINE / ACTIVE USERS
// =========================
-$activeRes = mysqli_query(
- $database->dblink,
- "SELECT COUNT(*) AS Total
- FROM ".TB_PREFIX."users
- WHERE timestamp > ".(time() - 86400)."
- AND tribe BETWEEN 1 AND 3"
-);
-$active = ($activeRes) ? (int)mysqli_fetch_assoc($activeRes)['Total'] : 0;
-
-$onlineRes = mysqli_query(
- $database->dblink,
- "SELECT COUNT(*) AS Total
- FROM ".TB_PREFIX."users
- WHERE timestamp > ".(time() - 600)."
- AND tribe BETWEEN 1 AND 3"
-);
-$online = ($onlineRes) ? (int)mysqli_fetch_assoc($onlineRes)['Total'] : 0;
+$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;
+$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;
+}
?>
-
- |
- | |
-
-
-
-| = $num_villages ?> |
-= $total_pop ?> |
-
-
+ |
+ | |
+| = $num_villages?> | = $total_pop?> |
-
-
- |
-
+ |
- | = $users ?> |
- | = $active ?> |
-| Players online | = $online ?> |
+ | = $users?> |
+ | = $active?> |
+| Players online | = $online?> |
+
+
+
+| Server Information |
+
+| Days Since Start | = $daysSinceStart?> |
+| Active Alliance | = $alliCount?> |
+| Natars Villages | = $natars?> |
+| Conquered Oasis | = $oasis?> |
+| New Players Today | = $newToday?> |
+
+
+
+
-
- |
- | | |
-
+ |
+ | | |
-
0) ? round(100 * $roman / $users, 2) : 0;
-$teutonPct = ($users > 0) ? round(100 * $teuton / $users, 2) : 0;
-$gaulPct = ($users > 0) ? round(100 - $romanPct - $teutonPct, 2) : 0;
+$roman=$tribes[0]; $teuton=$tribes[1]; $gaul=$tribes[2];
+$romanPct=($users>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;
?>
-
- | = $roman ?> | = $users ? $romanPct.'%' : '---' ?> |
- | = $teuton ?> | = $users ? $teutonPct.'%' : '---' ?> |
- | = $gaul ?> | = $users ? $gaulPct.'%' : '---' ?> |
-
+ | = $roman?> | = $romanPct?>% |
+ | = $teuton?> | = $teutonPct?>% |
+ | = $gaul?> | = $gaulPct?>% |
+
-
-
-
-Total = SERVER_NAME ?>
-Gold
- |
-
-
+Total = SERVER_NAME?> Gold |
+ | = $total_gold?> |
+
+
+
+
+
+| Top 5 Alliances |
+| Tag | Nume | Members |
-
- |
-= $total_gold ?> |
-
+
+| =htmlspecialchars($a['tag'])?> | =htmlspecialchars($a['name'])?> | =(int)$a['members']?> |
+- | ';?>
-
-
- |
-
-
-  | |
-  | |
-  | |
-
-
-
+ |
+ | |
+ | |
+ | |
-
-dblink, "
- SELECT
- SUM(u1) AS u1,
- SUM(u2) AS u2,
- SUM(u3) AS u3,
- SUM(u4) AS u4,
- SUM(u5) AS u5,
- SUM(u6) AS u6,
- SUM(u7) AS u7,
- SUM(u8) AS u8,
- SUM(u9) AS u9,
- SUM(u10) AS u10,
-
- SUM(u11) AS u11,
- SUM(u12) AS u12,
- SUM(u13) AS u13,
- SUM(u14) AS u14,
- SUM(u15) AS u15,
- SUM(u16) AS u16,
- SUM(u17) AS u17,
- SUM(u18) AS u18,
- SUM(u19) AS u19,
- SUM(u20) AS u20,
-
- SUM(u21) AS u21,
- SUM(u22) AS u22,
- SUM(u23) AS u23,
- SUM(u24) AS u24,
- SUM(u25) AS u25,
- SUM(u26) AS u26,
- SUM(u27) AS u27,
- SUM(u28) AS u28,
- SUM(u29) AS u29,
- SUM(u30) AS u30
-
- FROM ".TB_PREFIX."units
-");
-
-if ($result) {
- $units = mysqli_fetch_assoc($result);
-}
-
-// helper safe output
-function u($units, $key) {
- return isset($units[$key]) ? (int)$units[$key] : 0;
-}
-?>
-
-
+
-  |
- = u($units, 'u1') ?> |
-
-  |
- = u($units, 'u11') ?> |
-
-  |
- = u($units, 'u21') ?> |
+ | =u($units,'u'.$i)?> |
+ | =u($units,'u'.($i+10))?> |
+ | =u($units,'u'.($i+20))?> |
-
-
-
-  |
- = u($units, 'u2') ?> |
-
-  |
- = u($units, 'u12') ?> |
-
-  |
- = u($units, 'u22') ?> |
-
-
-
-
-  |
- = u($units, 'u3') ?> |
-
-  |
- = u($units, 'u13') ?> |
-
-  |
- = u($units, 'u23') ?> |
-
-
-
-
-  |
- = u($units, 'u4') ?> |
-
-  |
- = u($units, 'u14') ?> |
-
-  |
- = u($units, 'u24') ?> |
-
-
-
-
-  |
- = u($units, 'u5') ?> |
-
-  |
- = u($units, 'u15') ?> |
-
-  |
- = u($units, 'u25') ?> |
-
-
-
-
-  |
- = u($units, 'u6') ?> |
-
-  |
- = u($units, 'u16') ?> |
-
-  |
- = u($units, 'u26') ?> |
-
-
-
-
-  |
- = u($units, 'u7') ?> |
-
-  |
- = u($units, 'u17') ?> |
-
-  |
- = u($units, 'u27') ?> |
-
-
-
-
-  |
- = u($units, 'u8') ?> |
-
-  |
- = u($units, 'u18') ?> |
-
-  |
- = u($units, 'u28') ?> |
-
-
-
-
-  |
- = u($units, 'u9') ?> |
-
-  |
- = u($units, 'u19') ?> |
-
-  |
- = u($units, 'u29') ?> |
-
-
-
-
-  |
- = u($units, 'u10') ?> |
-
-  |
- = u($units, 'u20') ?> |
-
-  |
- = u($units, 'u30') ?> |
-
-
+
-
-
+
+
- |
- | | |
+| Top Players |
+
+ | Population | Pct |
+ Attackers | Pct |
+ Defenders | Pct |
+
-
-
+
-| = $database->getAttackByDate(time()-(86400*$d)) ?> |
-= $database->getAttackCasualties(time()-(86400*$d)) ?> |
-= date("j. M", time()-(86400*$d)) ?> |
+
+ = ($i+1).'. '.($p ? htmlspecialchars($p['username']) : '-') ?> |
+ = $p ? (int)($p['totalpop'] ?? 0) : 0 ?> |
+
+
+ = ($i+1).'. '.($a ? htmlspecialchars($a['username']) : '-') ?> |
+ = $a ? (int)$a['points'] : 0 ?> |
+
+
+ = ($i+1).'. '.($d ? htmlspecialchars($d['username']) : '-') ?> |
+ = $d ? (int)$d['points'] : 0 ?> |
-
-
+
+
+
+
+| Endgame |
+| WW | Level | Artefacts |
+
+| "; if(empty($wonders)) echo "-";?> |
+"; if(empty($wonders)) echo "-";?> |
+"; if(empty($artefacts)) echo "-";?> |
+
+
+
+
+
+
+ |
+ | | |
+
+
+
+| = $database->getAttackByDate(time()-(86400*$d))?> |
+= $database->getAttackCasualties(time()-(86400*$d))?> |
+= date("j. M", time()-(86400*$d))?> |
+
+
+
+
+
+
\ No newline at end of file