diff --git a/GameEngine/Automation/AutomationBattleResolution.php b/GameEngine/Automation/AutomationBattleResolution.php index 0e56f199..f806d49a 100644 --- a/GameEngine/Automation/AutomationBattleResolution.php +++ b/GameEngine/Automation/AutomationBattleResolution.php @@ -317,7 +317,18 @@ trait AutomationBattleResolution { if ($i == 41) $i = 99; if ($bdo['f'.$i] > 0 && $i != 40) $list[] = $i; } - $catapultTarget2 = $list[ rand(0, count($list) - 1) ]; + // FIX (PHP log): daca $list e gol (niciun target alternativ + // cu nivel>0), rand(0, count($list)-1) devine rand(0,-1). + // PHP NU arunca eroare aici (verificat pe 8.3) - intoarce + // pseudo-random 0 sau -1, ambele chei inexistente in $list, + // deci "Undefined array key -1"/0 si $catapultTarget2=null. + // Pastram fallback-ul 99 folosit deja mai sus (linia ~301) + // pentru cazul "niciun target gasit". + if (!empty($list)) { + $catapultTarget2 = $list[ rand(0, count($list) - 1) ]; + } else { + $catapultTarget2 = 99; + } } /** diff --git a/GameEngine/Building.php b/GameEngine/Building.php index 84ef9ceb..fba90045 100755 --- a/GameEngine/Building.php +++ b/GameEngine/Building.php @@ -299,7 +299,7 @@ class Building { // upgrade $loopLevel = $this->isLoop($fieldId); $currentLevel = $this->isCurrent($fieldId); - + if ($this->isMax($gid, $fieldId, $loopLevel + $currentLevel)) { $this->redirect($fieldId); } @@ -524,6 +524,13 @@ class Building { switch ($resourceCheck) { + // FIX (PHP log): cod nou intors de checkResource() cand nivelul + // cerut nu mai e definit (deja la maxim) - vezi nota din + // checkResource(). Mapam la acelasi mesaj (MAX_LEVEL) ca gate-ul + // isMax() de mai sus (return 1 la inceputul functiei). + case 0: + return 1; + case 1: return 5; @@ -1208,6 +1215,21 @@ class Building { $nextLevel = $this->vil->resarray['f'.$fieldId] + $plus; + // FIX (PHP log): daca $nextLevel depaseste nivelul maxim definit in + // $dataarray, $dataarray[$nextLevel] nu exista -> "Undefined array + // key" + acces pe null pe liniile de mai jos. Costurile null + // comparate cu > (wood>maxstore etc.) treceau silentios drept 0, + // deci functia ajungea sa intoarca 4 ("resurse suficiente") pentru + // un upgrade care nu ar trebui sa mai fie posibil. In mod normal + // isMax() din canBuild()/canProcess() ar trebui sa opreasca cererea + // inainte sa ajunga aici - acesta e doar un fallback defensiv daca + // acele verificari sunt ocolite (vezi nota din canProcess() despre + // Master Builder). Cod nou (0), distinct de 1-4 existente, mapat mai + // jos in canBuild() la mesajul MAX_LEVEL. + if (!isset($dataarray[$nextLevel])) { + return 0; + } + $required = $dataarray[$nextLevel]; $wood = $required['wood']; @@ -1758,8 +1780,16 @@ class Building { $dataarray = isset($GLOBALS['bid'.$gid]) ? $GLOBALS['bid'.$gid] : null; - // safety - if (!$dataarray) { + $level = $this->vil->resarray['f'.$fieldId] + $plus; + + // FIX (PHP log): pattern-ul de siguranta de mai jos verifica doar daca + // $dataarray exista deloc, nu si daca $level (curent + plus) e in + // limitele lui. Cand cladirea a scapat deja la nivelul maxim definit + // (ex. gid normal cu nivel 20, plus=1 -> $dataarray[21] nu exista), + // $required devenea null si $required['wood'] etc. dadeau "Trying to + // access array offset on null". Extindem verificarea sa acopere si + // cazul asta, cu acelasi fallback de "cost zero" folosit deja mai jos. + if (!$dataarray || !isset($dataarray[$level])) { $empty = array( 'wood' => 0, @@ -1774,8 +1804,6 @@ class Building { return $this->resourceReqCache[$cacheKey] = $empty; } - $level = $this->vil->resarray['f'.$fieldId] + $plus; - $required = $dataarray[$level]; $result = array( diff --git a/GameEngine/Database/DatabaseBuildingQueries.php b/GameEngine/Database/DatabaseBuildingQueries.php index 4f12c7b1..71b26bc3 100644 --- a/GameEngine/Database/DatabaseBuildingQueries.php +++ b/GameEngine/Database/DatabaseBuildingQueries.php @@ -143,17 +143,29 @@ trait DatabaseBuildingQueries { global ${'bid'.$tid}, $bid15; $dataArray = ${'bid'.$tid}; + + $level = $buildingArray['f'.$id] + $plus; + + // FIX (PHP log): daca $level depaseste nivelul maxim definit in + // $dataArray (cladire deja la nivel maxim - acelasi guard pus si in + // Building::checkResource()/resourceRequired()), $dataArray[$level] + // nu exista -> "Undefined array key 21" + acces pe null pe ['time']. + // Timp 0 e fallback sigur (apelantii trateaza deja "cost zero" ca + // raspuns pentru cazul de nivel maxim, vezi resourceRequired()). + if (!isset($dataArray[$level])) { + return 0; + } //Check if we've the main building or not $mainBuilding = $this->getFieldLevelInVillage($wref, 15); if($tid == 15){ - if($mainBuilding == 0) return round($dataArray[$buildingArray['f'.$id] + $plus]['time'] / SPEED * 5); - else return round($dataArray[$buildingArray['f'.$id] + $plus]['time'] / SPEED); + if($mainBuilding == 0) return round($dataArray[$level]['time'] / SPEED * 5); + else return round($dataArray[$level]['time'] / SPEED); }else{ if($mainBuilding > 0) { - return round($dataArray[$buildingArray['f'.$id] + $plus]['time'] * ($bid15[$mainBuilding]['attri'] / 100) / SPEED); + return round($dataArray[$level]['time'] * ($bid15[$mainBuilding]['attri'] / 100) / SPEED); } - else return round($dataArray[$buildingArray['f'.$id] + $plus]['time'] * 5 / SPEED); + else return round($dataArray[$level]['time'] * 5 / SPEED); } } diff --git a/GameEngine/Database/DatabaseMessageQueries.php b/GameEngine/Database/DatabaseMessageQueries.php index fa67201f..5382104e 100644 --- a/GameEngine/Database/DatabaseMessageQueries.php +++ b/GameEngine/Database/DatabaseMessageQueries.php @@ -405,7 +405,11 @@ References: User ID/Message ID, Mode // first of all, check if we should be using cache and whether the field // required is already cached if ($use_cache && ($cachedValue = self::returnCachedContent(self::$noticesCacheById, $id)) && !is_null($cachedValue)) { - return $cachedValue[$field]; + // FIX (PHP log): cand $field e null (apelantul vrea randul intreg, + // nu un camp anume), vechiul cod facea $cachedValue[$field] cu + // $field=null -> PHP converteste cheia null in "" -> "Undefined + // array key \"\"". Acelasi tratament ca pe ramura fara cache mai jos. + return is_null($field) ? $cachedValue : $cachedValue[$field]; } $q = "SELECT * FROM " . TB_PREFIX . "ndata where `id` = $id ORDER BY time ".(isset($_GET['o']) && $_GET['o'] == 1 ? 'ASC' : 'DESC')." LIMIT 1"; @@ -413,6 +417,18 @@ References: User ID/Message ID, Mode $dbarray = mysqli_fetch_array($result); self::$noticesCacheById[$id] = $dbarray; + + // FIX (PHP log): id inexistent in ndata (notice sters / link stale) + // -> mysqli_fetch_array() intoarce null -> $dbarray e null. Vechiul + // cod incerca oricum self::$noticesCacheById[$id][$field] pe el, + // dand "Trying to access array offset on null". Notice-ul chiar nu + // exista, deci intoarcem null direct (comportament identic la + // consumatori: Message::getReadNotice() trateaza deja null ca + // "nu am gasit/nu am voie", vezi fix-ul din Message.php). + if (is_null($dbarray)) { + return null; + } + return is_null($field) ? self::$noticesCacheById[$id] : self::$noticesCacheById[$id][$field]; } diff --git a/GameEngine/Database/DatabaseStatisticsQueries.php b/GameEngine/Database/DatabaseStatisticsQueries.php index 429e8a2f..ad58419b 100644 --- a/GameEngine/Database/DatabaseStatisticsQueries.php +++ b/GameEngine/Database/DatabaseStatisticsQueries.php @@ -92,8 +92,12 @@ trait DatabaseStatisticsQueries { * jucatorii acelor triburi nu-si vedeau niciodata satele acolo. * * Aceeasi lista completa e folosita deja in winner.php. + * + * BUG REPARAT #2: u.access<8/10 excludea Multihunter(8)/Admin(9) dar nu si + * conturile banate (access=0, 0 < 8 e adevarat); u.access>0 adaugat, deci + * satele unui cont banat nu mai sunt colorate dupa rang pe harta lumii. */ - $q = "SELECT v.wref,v.name,v.owner,v.pop FROM " . TB_PREFIX . "vdata AS v," . TB_PREFIX . "users AS u WHERE v.owner=u.id AND u.tribe IN(1,2,3,6,7,8,9".(SHOW_NATARS ? ',5' : '').") AND v.wref != '' AND u.access<" . (INCLUDE_ADMIN ? "10" : "8"); + $q = "SELECT v.wref,v.name,v.owner,v.pop FROM " . TB_PREFIX . "vdata AS v," . TB_PREFIX . "users AS u WHERE v.owner=u.id AND u.tribe IN(1,2,3,6,7,8,9".(SHOW_NATARS ? ',5' : '').") AND v.wref != '' AND u.access>0 AND u.access<" . (INCLUDE_ADMIN ? "10" : "8"); $result = mysqli_query($this->dblink,$q); return $this->mysqli_fetch_all($result); } diff --git a/GameEngine/Message.php b/GameEngine/Message.php index 860f6bb6..0ca909ec 100755 --- a/GameEngine/Message.php +++ b/GameEngine/Message.php @@ -436,6 +436,15 @@ class Message { global $database, $session; $notice = $database->getNotice2($id); + + // FIX (PHP log): id inexistent (notice sters / link stale) -> + // getNotice2() intoarce null -> $notice['uid'] pica cu "Trying to + // access array offset on null". Tratam identic cu cazul + // "neautorizat" de mai jos (return null). + if ($notice === null) { + return null; + } + if ( $notice['uid'] == $session->uid || $notice['ally'] == $session->alliance diff --git a/GameEngine/Ranking.php b/GameEngine/Ranking.php index ba50ded2..84028433 100755 --- a/GameEngine/Ranking.php +++ b/GameEngine/Ranking.php @@ -277,6 +277,8 @@ if($GLOBALS['db']->countUser() > 0){ $holder = array(); $tribeCondition = SHOW_NATARS ? "(u.tribe <= 9) AND (u.id > 5 OR u.id = 3)" : "u.tribe IN (1,2,3,6,7,8,9) AND u.id > 5"; + // BUG REPARAT: access<8/10 excludea Multihunter(8)/Admin(9) dar nu si + // conturile banate (access=0, 0 < 8 e adevarat); access>0 adaugat. $q = " SELECT u.id AS userid, @@ -292,7 +294,7 @@ LEFT JOIN " . TB_PREFIX . "alidata a ON a.id = u.alliance WHERE - u.access < " . (INCLUDE_ADMIN ? 10 : 8) . " + u.access > 0 AND u.access < " . (INCLUDE_ADMIN ? 10 : 8) . " AND $tribeCondition GROUP BY u.id @@ -328,10 +330,11 @@ global $multisort, $database; $race = $database->escape((int) $race); $holder = array(); + // BUG REPARAT: vezi comentariul din procRankArray() de mai sus (access>0 adaugat). $q = "SELECT u.id AS userid, u.tribe, u.username, u.alliance, COALESCE(SUM(v.pop),0) AS totalpop, COUNT(CASE WHEN v.type != 99 THEN v.wref END) AS totalvillages, a.tag AS allitag FROM " . TB_PREFIX . "users u LEFT JOIN " . TB_PREFIX . "vdata v ON v.owner = u.id LEFT JOIN " . TB_PREFIX . "alidata a ON a.id = u.alliance WHERE u.tribe = $race - AND u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.id > 5 GROUP BY u.id ORDER BY totalpop DESC, totalvillages DESC, userid DESC"; + AND u.access > 0 AND u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.id > 5 GROUP BY u.id ORDER BY totalpop DESC, totalvillages DESC, userid DESC"; $result = (mysqli_query($database->dblink,$q)); $datas = []; while($row = mysqli_fetch_assoc($result)) { @@ -366,9 +369,10 @@ public function procAttRankArray() { global $multisort, $database; $holder = array(); + // BUG REPARAT: vezi comentariul din procRankArray() mai sus (access>0 adaugat). $q = "SELECT u.id AS userid, u.username, u.apall, COUNT(CASE WHEN v.type != 99 THEN v.wref END) AS totalvillages, COALESCE(SUM(v.pop),0) AS pop FROM " . TB_PREFIX . "users u LEFT JOIN " . TB_PREFIX . "vdata v ON v.owner = u.id - WHERE u.apall >= 0 AND u.access < " . (INCLUDE_ADMIN ? 10 : 8) . " AND u.tribe IN (1,2,3,6,7,8,9) AND u.id > 5 + WHERE u.apall >= 0 AND u.access > 0 AND u.access < " . (INCLUDE_ADMIN ? 10 : 8) . " AND u.tribe IN (1,2,3,6,7,8,9) AND u.id > 5 GROUP BY u.id ORDER BY u.apall DESC, pop DESC, u.id DESC"; $result = mysqli_query($database->dblink,$q) or die(mysqli_error($database->dblink)); $datas = []; @@ -394,9 +398,10 @@ public function procDefRankArray() { global $database; $holder = array(); + // BUG REPARAT: vezi comentariul din procRankArray() mai sus (access>0 adaugat). $q = "SELECT u.id AS userid, u.username, u.dpall, COUNT(CASE WHEN v.type != 99 THEN v.wref END) AS totalvillages, COALESCE(SUM(v.pop),0) AS pop FROM " . TB_PREFIX . "users u LEFT JOIN " . TB_PREFIX . "vdata v ON v.owner = u.id - WHERE u.dpall >= 0 AND u.access < " . (INCLUDE_ADMIN ? 10 : 8) . " AND u.tribe IN (1,2,3,6,7,8,9) AND u.id > 5 + WHERE u.dpall >= 0 AND u.access > 0 AND u.access < " . (INCLUDE_ADMIN ? 10 : 8) . " AND u.tribe IN (1,2,3,6,7,8,9) AND u.id > 5 GROUP BY u.id ORDER BY u.dpall DESC, pop DESC, u.id DESC"; $result = mysqli_query($database->dblink,$q) or die(mysqli_error($database->dblink)); $datas = []; diff --git a/Templates/Build/23.tpl b/Templates/Build/23.tpl index 0d5634bd..72b3ecc2 100644 --- a/Templates/Build/23.tpl +++ b/Templates/Build/23.tpl @@ -27,7 +27,13 @@ $multiplier = (($session->tribe == 3) ? 2 : 1) * CRANNY_CAPACITY; $actualLevel = (int)$village->resarray['f'.$id]; $level = min($actualLevel + 1 + $loopsame + $doublebuild + $master, 10); -$currentHidden = $database->getArtifactsValueInfluence($session->uid, $village->wid, 7, $bid23[$actualLevel]['attri'] * $multiplier); +// FIX (PHP log): $bid23 e indexat de la nivel 1 (nu are cheia 0). Daca +// cranny e la nivel 0 (abia demolat/darat jos de catapulte, sau link +// deschis inainte ca nivelul curent sa fi fost incarcat), $bid23[0] nu +// exista -> "Undefined array key 0" + acces pe null pe linia urmatoare. +// La nivel 0 nu exista "attri" curent, deci tratam ca 0 unitati ascunse. +$currentAttri = $actualLevel > 0 ? $bid23[$actualLevel]['attri'] : 0; +$currentHidden = $database->getArtifactsValueInfluence($session->uid, $village->wid, 7, $currentAttri * $multiplier); $nextHidden = $database->getArtifactsValueInfluence($session->uid, $village->wid, 7, $bid23[$level]['attri'] * $multiplier); ?>
diff --git a/Templates/Map/vilview.tpl b/Templates/Map/vilview.tpl index 9d7f32d3..8a0cd888 100644 --- a/Templates/Map/vilview.tpl +++ b/Templates/Map/vilview.tpl @@ -226,7 +226,16 @@ if($isOasis){ } ?> - "Undefined array key wid". Fallback 0 (nu poate + * fi egal cu niciun wref real). + */ +} elseif($basearray['occupied'] && $basearray['wref']!= ($_SESSION['wid'] ?? 0)){ $tbl = $isOasis? 'odata' : 'vdata'; $qr = $database->dblink->query('SELECT owner FROM `'.TB_PREFIX.$tbl.'` WHERE wref='.(int)$d); $ownerId = $qr? $qr->fetch_assoc() : array('owner'=>0); diff --git a/Templates/News/newsbox1.tpl b/Templates/News/newsbox1.tpl index cc312b4d..ff9904f6 100644 --- a/Templates/News/newsbox1.tpl +++ b/Templates/News/newsbox1.tpl @@ -37,11 +37,15 @@ if ($online_query) { // ====================================================== $top_username = '-'; +// BUG REPARAT: cu INCLUDE_ADMIN pornit nu exista deloc filtru pe access, iar cu +// INCLUDE_ADMIN oprit "access < 8" nu excludea conturile banate (access=0, 0 < 8 +// e adevarat) - deci un jucator banat putea aparea ca "Top player" in sidebar. +// access > 0 exclude banul in ambele cazuri, pastrand comportamentul INCLUDE_ADMIN. $top_query = mysqli_query( $database->dblink, "SELECT username FROM " . TB_PREFIX . "users - WHERE " . (INCLUDE_ADMIN ? '' : 'access < 8 AND ') . " + WHERE " . (INCLUDE_ADMIN ? 'access > 0 AND ' : 'access > 0 AND access < 8 AND ') . " id > 5 AND tribe IN (1,2,3,6,7,8,9) AND tribe > 0 diff --git a/Templates/Ranking/player_top10.tpl b/Templates/Ranking/player_top10.tpl index 3d9e54fc..cfc491a5 100644 --- a/Templates/Ranking/player_top10.tpl +++ b/Templates/Ranking/player_top10.tpl @@ -41,7 +41,9 @@ $timeLeft = gmdate("H:i:s", $left % 86400); // --- END MEDAL TIMER --- - $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY ap DESC, id DESC Limit 10"); + // BUG REPARAT: access<8/10 exclude Multihunter/Admin dar NU excludea conturile + // banate (access=0, 0 < 8 e adevarat), deci jucatori banati aparea in top 10. + $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access>0 AND access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY ap DESC, id DESC Limit 10"); $result2 = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE id = '".$session->uid."' ORDER BY ap DESC, id DESC Limit 1"); ?> @@ -149,7 +151,8 @@ setInterval(function(){ for($i=1;$i<=0;$i++) { echo "Row ".$i; } - $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY dp DESC, id DESC Limit 10"); + // BUG REPARAT: vezi comentariul de la query-ul Top Attackers de mai sus. + $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access>0 AND access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY dp DESC, id DESC Limit 10"); $result2 = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE id = '".$session->uid."' ORDER BY dp DESC Limit 1"); ?>
@@ -203,7 +206,10 @@ setInterval(function(){ for($i=1;$i<=0;$i++) { echo "Row ".$i; } - $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY clp DESC, id DESC Limit 10"); + // BUG REPARAT (semnalat de Catalin): vezi comentariul de la query-ul Top + // Attackers de mai sus - acesta e query-ul exact din poza cu "ASD" banat + // aparand pe locul 1 la Climbers of the week. + $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access>0 AND access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY clp DESC, id DESC Limit 10"); $result2 = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE id = '".$session->uid."' ORDER BY clp DESC Limit 1"); ?>
@@ -255,7 +261,8 @@ setInterval(function(){ for($i=1;$i<=0;$i++) { echo "Row ".$i; } - $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY RR DESC, id DESC Limit 10"); + // BUG REPARAT: vezi comentariul de la query-ul Top Attackers de mai sus. + $result = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE access>0 AND access<".(INCLUDE_ADMIN?"10":"8")." AND id > 5 AND tribe IN (1,2,3,6,7,8,9) ORDER BY RR DESC, id DESC Limit 10"); $result2 = mysqli_query($database->dblink,"SELECT * FROM ".TB_PREFIX."users WHERE id = '".$session->uid."' ORDER BY RR DESC Limit 1"); ?>
diff --git a/build.php b/build.php index 80562785..64d1c98b 100644 --- a/build.php +++ b/build.php @@ -223,6 +223,25 @@ if ($session->goldclub == 1 && count($session->villages) > 1) { } } +// FIX (PHP log): $create trebuie sa fie mereu definit inainte de +// farmlist.tpl (if($create==1)/elseif==2/elseif==3), altfel "Undefined +// variable $create" x3. Vechiul cod il seta doar in interiorul blocului +// de mai jos, dar cand $_GET['action'] e setat la o valoare care nu +// se potriveste cu niciunul dintre cele 3 cazuri (ex. action=showSlot +// fara eid, sau eid=0) nu exista niciun "else" care sa-l initializeze. +// Default sigur, suprascris mai jos daca vreunul din cazuri se potriveste. +$create = 0; + +/** + * ANOMALIE SEMNALATA (neatinsa - nu face parte din erorile din log): + * "isset($_GET['t']) == 99" nu compara valoarea lui t cu 99, ci + * compara boolean-ul isset() (true/false) cu intreg-ul 99. In PHP, + * 99 se converteste la bool(true) in comparatie, deci conditia e + * adevarata pentru ORICE valoare a lui $_GET['t'] cat timp e setat + * (nu doar t=99), si falsa doar cand t lipseste complet. Probabil + * intentia a fost "$_GET['t'] == 99". Las neschimbat - decizi tu daca + * vrei sa restrangi blocul doar la t=99 real. + */ if ($session->goldclub == 1) { if (isset($_GET['t']) == 99) { if(isset($_GET['action'])){ @@ -368,9 +387,16 @@ if(isset($_GET['id']) || isset($_GET['gid']) || $route == 1 || isset($_POST['rou else { if(isset($_GET['t'])) { if($_GET['t'] == 1) $_SESSION['loadMarket'] = 1; - include("Templates/Build/".$village->resarray['f'.$_GET['id'].'t']."_".$_GET['t'].".tpl"); + // FIX (PHP log): pentru un tab (t) care nu exista pentru cladirea + // curenta (ex. link vechi/stale catre gid=19 cu t=3, care nu are + // niciun ..._3.tpl), include() arunca Warning "Failed to open + // stream" de doua ori (o data la include, o data la eroarea de + // deschidere). Verificam intai ca fisierul tinta chiar exista. + $buildTabFile = "Templates/Build/".$village->resarray['f'.$_GET['id'].'t']."_".$_GET['t'].".tpl"; + if (file_exists($buildTabFile)) include($buildTabFile); } elseif(isset($_GET['s'])) { - include("Templates/Build/".$village->resarray['f'.$_GET['id'].'t']."_".$_GET['s'].".tpl"); + $buildTabFile = "Templates/Build/".$village->resarray['f'.$_GET['id'].'t']."_".$_GET['s'].".tpl"; + if (file_exists($buildTabFile)) include($buildTabFile); } else include("Templates/Build/".$village->resarray['f'.$_GET['id'].'t'].".tpl"); diff --git a/winner.php b/winner.php index 8b395129..f1f665f6 100644 --- a/winner.php +++ b/winner.php @@ -57,6 +57,8 @@ if ($winner) { |-------------------------------------------------------------------------- */ + // BUG REPARAT: access<8/10 nu excludea conturile banate (access=0); access>0 + // adaugat mai jos ca un cont banat sa nu poata fi declarat castigator de server. $q = "SELECT u.id AS userid, u.username, @@ -65,7 +67,7 @@ if ($winner) { (SELECT COUNT(v.wref) FROM " . TB_PREFIX . "vdata v WHERE v.owner = u.id AND v.type != 99) AS totalvillages, (SELECT a.tag FROM " . TB_PREFIX . "alidata a WHERE a.id = u.alliance) AS allitag FROM " . TB_PREFIX . "users u - WHERE u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.tribe IN (1,2,3,6,7,8,9) + WHERE u.access > 0 AND u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.tribe IN (1,2,3,6,7,8,9) ORDER BY totalpop DESC, totalvillages DESC, u.username ASC"; $result = (mysqli_query($database->dblink,$q)); @@ -86,6 +88,7 @@ if ($winner) { |-------------------------------------------------------------------------- */ + // BUG REPARAT: vezi comentariul de la Top Population de mai sus. $q = "SELECT u.id AS userid, u.username, @@ -93,7 +96,7 @@ if ($winner) { (SELECT COUNT(v.wref) FROM " . TB_PREFIX . "vdata v WHERE v.owner = u.id AND v.type != 99) AS totalvillages, (SELECT SUM(v.pop) FROM " . TB_PREFIX . "vdata v WHERE v.owner = u.id) AS pop FROM " . TB_PREFIX . "users u - WHERE u.apall >= 0 AND u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.tribe IN (1,2,3,6,7,8,9) + WHERE u.apall >= 0 AND u.access > 0 AND u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.tribe IN (1,2,3,6,7,8,9) ORDER BY u.apall DESC, pop DESC, u.username ASC"; $result = mysqli_query($database->dblink,$q); @@ -113,6 +116,7 @@ if ($winner) { |-------------------------------------------------------------------------- */ + // BUG REPARAT: vezi comentariul de la Top Population de mai sus. $q = "SELECT u.id AS userid, u.username, @@ -120,7 +124,7 @@ if ($winner) { (SELECT COUNT(v.wref) FROM " . TB_PREFIX . "vdata v WHERE v.owner = u.id AND v.type != 99) AS totalvillages, (SELECT SUM(v.pop) FROM " . TB_PREFIX . "vdata v WHERE v.owner = u.id) AS pop FROM " . TB_PREFIX . "users u - WHERE u.dpall >= 0 AND u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.tribe IN (1,2,3,6,7,8,9) + WHERE u.dpall >= 0 AND u.access > 0 AND u.access < " . (INCLUDE_ADMIN ? "10" : "8") . " AND u.tribe IN (1,2,3,6,7,8,9) ORDER BY u.dpall DESC, pop DESC, u.username ASC"; $result = mysqli_query($database->dblink,$q);