delDemolition($village->wid); header("Location: build.php?gid=15&ty=$ty&cancel=0&demolish=0"); exit; } $memberCount = $session->alliance? $database->countAllianceMembers($session->alliance) : 0; $VillageLevels = $database->getResourceLevel($village->wid); // start demolition if (!empty($_REQUEST['demolish']) && $_REQUEST['c'] == $session->mchecker) { $type = (int)($_REQUEST['type']?? 0); $instant = isset($_POST['instant']) && $_POST['instant'] == '1'; if ($type >= 19 && $type <= 40 || $type == 99) { $field = 'f'.$type; $buildType = $VillageLevels[$field.'t']; $currentLvl = $VillageLevels[$field]; // blocaj ambasada - la fel ca originalul if($buildType == 18 && $session->alliance && $database->isAllianceOwner($session->uid) == $session->alliance && $memberCount > 1){ header("Location: build.php?gid=15&ty=$type&nodemolish=18"); exit; } if($instant){ // DEMOLARE COMPLETA CU GOLD if($session->gold < 10){ header("Location: build.php?gid=15&ty=$type¬enoughgold=1"); exit; } if($currentLvl > 0){ // sterge orice demolare in curs $database->delDemolition($village->wid); // FIX 2: populatia nu era scazuta deloc la demolarea instant, deci // satul ramanea cu locuitorii unei cladiri care nu mai exista. // Cladirea dispare de la nivelul curent pana la 0, deci trebuie // scazuta populatia TUTUROR nivelurilor, nu doar a ultimului // (demolarea clasica scade cate un nivel pe rand - vezi // Automation::demolitionComplete). $demolishPop = 0; $demolishData = $GLOBALS['bid'.$buildType] ?? null; if (is_array($demolishData)) { for ($demolishLvl = 1; $demolishLvl <= $currentLvl; $demolishLvl++) { if (isset($demolishData[$demolishLvl]['pop'])) { $demolishPop += (int) $demolishData[$demolishLvl]['pop']; } } } // setare nivel 0 direct in DB $database->query("UPDATE ".TB_PREFIX."fdata SET `$field` = 0, `{$field}t` = 0 WHERE `vref` = ".$village->wid); // Capacitatea de depozitare nu era ajustata deloc pe calea cu aur: // demolarea instant a unui Depozit sau Hambar lasa satul cu // capacitatea cladirii disparute. Recalculam din ce a ramas. if (in_array((int) $buildType, [10, 11, 38, 39], true)) { $database->recalculateStorage($village->wid); } if ($demolishPop > 0) { // modul 1 = scade (vezi Database::modifyPop) $database->modifyPop($village->wid, $demolishPop, 1); } // Punctele de cultura se recalculeaza din cladirile ramase: fara // asta satul ar produce in continuare cultura pentru cladirea // demolata. recountCP citeste starea proaspata din baza de date. if (class_exists('Building')) { Building::recountCP($database, $village->wid); } // FIX 1: modul 0 al lui modifyGold SCADE deja (gold = gold - $amt), // deci valoarea trebuie sa fie POZITIVA. Cu -10 iesea // "gold - (-10)", adica jucatorul PRIMEA 10 aur in loc sa plateasca. $database->modifyGold($session->uid, 10, 0); $session->gold -= 10; // soldul din sesiune se poate reciti la urmatoarea cerere din // cache-ul de utilizator; il invalidam ca sa nu reapara vechea valoare unset($_SESSION['cache_user_' . (isset($_SESSION['username']) ? $_SESSION['username'] : '')]); $session->changeChecker(); header("Location: build.php?gid=15&ty=$type&demolished=1"); exit; } }else{ // DEMOLARE CLASICA $ok = $database->addDemolition($village->wid, $type); if ($ok === true) { $session->changeChecker(); header("Location: build.php?gid=15&ty=$type&cancel=0&demolish=0"); } else { header("Location: build.php?gid=15&ty=$type&nodemolish=$ok"); } exit; } } } if ($village->resarray['f'.$id] < DEMOLISH_LEVEL_REQ) return; $Demolition = $database->getDemolition($village->wid); $inProgress =!empty($Demolition)? $Demolition[0] : null; ?>

cancel procResType($VillageLevels['f'.$inProgress['buildnumber'].'t'])?>: getTimeFormat($inProgress['timetofinish'] - time())?> gold >= 2):?> <?= TZ_FINISH?>