data_seek($row); $datarow = $res->fetch_array(); return $datarow[$field]; } } /* --------------------------------------------------------------------------- * Autoloader path - caută maxim 5 nivele în sus * --------------------------------------------------------------------------- */ $autoprefix = ''; for ($i = 0; $i < 5; $i++) { $autoprefix = str_repeat('../', $i); if (file_exists($autoprefix. 'autoloader.php')) { break; } } /* --------------------------------------------------------------------------- * Include-uri condiționate * --------------------------------------------------------------------------- */ if (isset($gameinstall) && $gameinstall == 1) { include_once($autoprefix. "GameEngine/config.php"); include_once($autoprefix. "GameEngine/Data/buidata.php"); } else { include_once($autoprefix. "GameEngine/Data/unitdata.php"); include_once($autoprefix. "GameEngine/Technology.php"); include_once($autoprefix. "GameEngine/Data/buidata.php"); } include_once($autoprefix. "GameEngine/Database.php"); /* --------------------------------------------------------------------------- * Clasa principală admin DB * --------------------------------------------------------------------------- */ class adm_DB { var $connection; function __construct() { global $database; $database = new MYSQLi_DB(SQL_SERVER, SQL_USER, SQL_PASS, SQL_DB, (defined('SQL_PORT')? SQL_PORT : 3306)); $this->connection = $database->return_link(); } /* ---------------- Login admin ---------------- */ function Login($username, $password) { global $database; list($username, $password) = $database->escape_input($username, $password); $q = "SELECT id, password, is_bcrypt FROM ". TB_PREFIX. "users WHERE username = '$username' AND access >= ". MULTIHUNTER; $result = mysqli_query($this->connection, $q); // compatibilitate cu DB fără coloana is_bcrypt if (mysqli_error($database->dblink)!= '') { $q = "SELECT id, password, 0 as is_bcrypt FROM ". TB_PREFIX. "users WHERE username = '$username' AND access >= ". MULTIHUNTER; $result = mysqli_query($this->connection, $q); $bcrypt_update_done = false; } else { $bcrypt_update_done = true; } $dbarray = mysqli_fetch_array($result); // verificare parolă - bcrypt sau md5 legacy $bcrypted = true; $pwOk = password_verify($password, $dbarray['password']); if (!$pwOk &&!$dbarray['is_bcrypt']) { $pwOk = ($dbarray['password'] == md5($password)); $bcrypted = false; } $username = htmlspecialchars($username); if ($pwOk) { // upgrade la bcrypt dacă e necesar if (!$dbarray['is_bcrypt'] &&!$bcrypted) { mysqli_query($this->connection, "UPDATE ". TB_PREFIX. "users SET password = '". password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]). "'". ($bcrypt_update_done? ", is_bcrypt = 1" : ""). " WHERE id = ". (int)$dbarray['id']); } mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,'X','$username logged in (IP: ". $_SERVER['REMOTE_ADDR']. ")',". time(). ")"); return true; } else { mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,'X','IP: ". $_SERVER['REMOTE_ADDR']. " tried to log in with username $username but access was denied!',". time(). ")"); return false; } } /* ---------------- Recalculare populație ---------------- */ function recountPopUser($uid) { global $database; $villages = $database->getProfileVillages($uid); for ($i = 0; $i <= count($villages) - 1; $i++) { $vid = $villages[$i]['wref']; $this->recountPop($vid); $this->recountCP($vid); } } function recountPop($vid) { global $database; $fdata = $database->getResourceLevel($vid); $popTot = 0; for ($i = 1; $i <= 40; $i++) { $lvl = $fdata["f". $i]; $building = $fdata["f". $i. "t"]; if ($building > 0 && $lvl > 0) { $popTot += $this->buildingPOP($building, $lvl); } } $q = "UPDATE ". TB_PREFIX. "vdata SET pop = $popTot WHERE wref = ". (int)$vid; mysqli_query($this->connection, $q); } function recountCP($vid) { global $database; $fdata = $database->getResourceLevel($vid); $popTot = 0; for ($i = 1; $i <= 40; $i++) { $lvl = $fdata["f". $i]; $building = $fdata["f". $i. "t"]; if ($building > 0 && $lvl > 0) { $popTot += $this->buildingCP($building, $lvl); } } $q = "UPDATE ". TB_PREFIX. "vdata SET cp = $popTot WHERE wref = ". (int)$vid; mysqli_query($this->connection, $q); } function buildingPOP($f, $lvl) { $name = "bid". $f; global $$name; $popT = 0; $dataarray = $$name; for ($i = 1; $i <= $lvl; $i++) { $popT += $dataarray[$i]['pop']?? 0; } return $popT; } function buildingCP($f, $lvl) { $name = "bid". $f; global $$name; $popT = 0; $dataarray = $$name; for ($i = 1; $i <= $lvl; $i++) { $popT += $dataarray[$i]['cp']?? 0; } return $popT; } /* ---------------- Utilitare sate ---------------- */ function getWref($x, $y) { $q = "SELECT id FROM ". TB_PREFIX. "wdata WHERE x = ". (int)$x. " AND y = ". (int)$y; $result = mysqli_query($this->connection, $q); $r = mysqli_fetch_array($result); return $r['id']; } function AddVillage($post) { global $database; $wid = $this->getWref($post['x'], $post['y']); $uid = (int)$post['uid']; $status = $database->getVillageState($wid); $status = 0; if ($status == 0) { mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,". (int)$_SESSION['id']. ",'Added new village $wid to user $uid',". time(). ")"); $database->setFieldTaken($wid); $username = $database->getUserArray($uid, 1); $username = $username['username']; $database->addVillage($wid, $uid, $username, '0'); $database->addResourceFields($wid, $database->getVillageType($wid, false)); $database->addUnits($wid); $database->addTech($wid); $database->addABTech($wid); } } /* ---------------- Pedepsire jucător ---------------- */ function Punish($post) { global $database; $villages = $database->getProfileVillages($post['uid']); $user = $database->getUserArray($post['uid'], 1); $logPunishment = ''; for ($i = 0; $i < count($villages); $i++) { $vid = (int)$villages[$i]['wref']; // 1. pedeapsă procent populație if (!empty($post['punish'])) { $punish = (int)$post['punish']; $logPunishment = "-". $punish ."% population"; $popOld = (int)$villages[$i]['pop']; $proc = 100 - $punish; $pop = floor(($popOld / 100) * $proc); if ($pop < 2) { $pop = 2; } $this->PunishBuilding($vid, $proc, $pop); } // 2. ștergere trupe - CORECTAT if (!empty($post['del_troop'])) { $logPunishment = "troops removal"; $tribe = (int)$user['tribe']; // 1=Romani (1-10), 2=Teutoni (11-20), 3=Gali (21-30), 4=Natura (31-40), 5=Natari (41-50) $unitStart = ($tribe >= 1 && $tribe <= 5) ? (($tribe - 1) * 10 + 1) : 1; $this->DelUnits($vid, $unitStart); } // 3. golire depozite if (!empty($post['clean_ware'])) { $logPunishment = "emptying warehouses"; $time = time(); $q = "UPDATE ". TB_PREFIX ."vdata SET `wood`='0', `clay`='0', `iron`='0', `crop`='0', `lastupdate`='$time' WHERE wref=$vid"; mysqli_query($this->connection, $q); } } mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX ."admin_log VALUES (0,". (int)$_SESSION['id'] .",'Punished user: ". (int)$post['uid'] ." with ". $logPunishment ."',". time() .")"); } function PunishBuilding($vid, $proc, $pop) { global $database; $vid = (int)$vid; mysqli_query($this->connection, "UPDATE ". TB_PREFIX ."vdata SET pop=". (int)$pop ." WHERE wref=$vid"); $fdata = $database->getResourceLevel($vid); for ($i = 1; $i <= 40; $i++) { if ($fdata['f'.$i] > 1) { $zm = ($fdata['f'.$i] / 100) * $proc; $zm = ($zm < 1) ? 1 : floor($zm); mysqli_query($this->connection, "UPDATE ". TB_PREFIX ."fdata SET `f$i`='$zm' WHERE `vref`=$vid"); } } } // CORECTAT: șterge doar cele 10 unități ale tribului, FĂRĂ erou function DelUnits($vid, $unitStart) { $vid = (int)$vid; $unitStart = (int)$unitStart; $sets = []; for ($i = $unitStart; $i <= $unitStart + 9; $i++) { $sets[] = "`u$i`='0'"; } // intenționat NU includem `hero` - eroul trebuie să rămână în sat $q = "UPDATE ". TB_PREFIX ."units SET ". implode(', ', $sets) ." WHERE `vref`=$vid"; mysqli_query($this->connection, $q); } // păstrată pentru compatibilitate (nu mai e folosită în buclă) function DelUnits2($vid, $unit) { $q = "UPDATE ". TB_PREFIX ."units SET `u". (int)$unit ."`='0' WHERE `vref`=". (int)$vid; mysqli_query($this->connection, $q); } /* ---------------- Ștergere jucător ---------------- */ function DelPlayer($uid, $pass) { global $database; $ID = (int)$_SESSION['id']; if ($this->CheckPass($pass, $ID)) { $villages = $database->getProfileVillages($uid); for ($i = 0; $i <= count($villages) - 1; $i++) { $this->DelVillage($villages[$i]['wref'], 1); } $q = "DELETE FROM ". TB_PREFIX. "hero WHERE uid = ". (int)$uid; mysqli_query($this->connection, $q); $name = $database->getUserField($uid, "username", 0); mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,$ID,'Deleted user $name',". time(). ")"); $q = "DELETE FROM ". TB_PREFIX. "users WHERE `id` = ". (int)$uid; mysqli_query($this->connection, $q); } else { return false; } return true; } function getUserActive() { $time = time() - (60 * 5); $q = "SELECT * FROM ". TB_PREFIX. "users WHERE timestamp > $time AND username!= 'support' ORDER BY access DESC, username ASC"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function CheckPass($password, $uid) { $q = "SELECT id,password, is_bcrypt FROM ". TB_PREFIX. "users WHERE id = ". (int)$uid. " AND access = ". ADMIN; $result = mysqli_query($this->connection, $q); if (mysqli_error($this->connection)!= '') { $q = "SELECT password, 0 as is_bcrypt FROM ". TB_PREFIX. "users WHERE id = ". (int)$uid. " AND access = ". ADMIN; $result = mysqli_query($this->connection, $q); $bcrypt_update_done = false; } else { $bcrypt_update_done = true; } $dbarray = mysqli_fetch_array($result); if (!$dbarray) { mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,'X','IP: ". $_SERVER['REMOTE_ADDR']. " tried to log in with uid $uid but access was denied!',". time(). ")"); return false; } $bcrypted = true; $pwOk = password_verify($password, $dbarray['password']); if (!$pwOk &&!$dbarray['is_bcrypt']) { $pwOk = ($dbarray['password'] == md5($password)); $bcrypted = false; } if ($pwOk) { if ($bcrypt_update_done &&!$dbarray['is_bcrypt']) { mysqli_query($this->connection, "UPDATE ". TB_PREFIX. "users SET password = '". password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]). "', is_bcrypt = 1 WHERE id = ". (int)$dbarray['id']); } return true; } else { return false; } } /* ---------------- Ștergere sat ---------------- */ function DelVillage($wref, $mode = 0) { global $database; $wref = (int)$wref; if ($mode == 0) { $q = "SELECT Count(*) as Total FROM ". TB_PREFIX. "vdata WHERE `wref` = $wref AND capital = 0"; } else { $q = "SELECT Count(*) as Total FROM ". TB_PREFIX. "vdata WHERE `wref` = $wref"; } $result = mysqli_fetch_array(mysqli_query($this->connection, $q), MYSQLI_ASSOC); if ($result['Total'] > 0) { mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,". (int)$_SESSION['id']. ",'Deleted village $wref',". time(). ")"); $database->clearExpansionSlot($wref); $tables = ['abdata', 'bdata', 'market', 'odata', 'research', 'tdata', 'fdata', 'training', 'units', 'farmlist']; foreach ($tables as $t) { $field = ($t == 'bdata')? 'wid' : (($t == 'farmlist' || $t == 'market' || $t == 'research' || $t == 'tdata' || $t == 'fdata' || $t == 'training' || $t == 'abdata')? 'vref' : 'wref'); if ($t == 'odata') $field = 'wref'; mysqli_query($this->connection, "DELETE FROM ". TB_PREFIX. "$t WHERE $field = $wref"); } mysqli_query($this->connection, "DELETE FROM ". TB_PREFIX. "raidlist WHERE towref = $wref"); mysqli_query($this->connection, "DELETE FROM ". TB_PREFIX. "movement WHERE `from` = $wref AND proc=0"); mysqli_query($this->connection, "UPDATE ". TB_PREFIX. "wdata SET occupied = 0 WHERE id = $wref"); // curăță sloturi expansiune $q = "UPDATE ". TB_PREFIX. "vdata SET exp1 = IF(exp1 = $wref, 0, exp1), exp2 = IF(exp2 = $wref, 0, exp2), exp3 = IF(exp3 = $wref, 0, exp3) WHERE exp1 = $wref OR exp2 = $wref OR exp3 = $wref"; mysqli_query($this->connection, $q); $getmovement = $database->getMovement(3, $wref, 1); foreach ($getmovement as $movedata) { $time = microtime(true); $time2 = $time - $movedata['starttime']; $database->setMovementProc($movedata['moveid']); $database->addMovement(4, $movedata['to'], $movedata['from'], $movedata['ref'], $time, $time + $time2); } $this->returnTroops($wref); mysqli_query($this->connection, "DELETE FROM ". TB_PREFIX. "vdata WHERE `wref` = $wref"); if (mysqli_affected_rows($this->connection) > 0) { mysqli_query($this->connection, "UPDATE ". TB_PREFIX. "wdata SET occupied = 0 WHERE id = $wref"); $getprisoners = $database->getPrisoners($wref); foreach ($getprisoners as $pris) { $troops = 0; for ($i = 1; $i < 12; $i++) { $troops += $pris['t'. $i]; } $database->modifyUnit($pris['wref'], array("99o"), array($troops), array(0)); $database->deletePrisoners($pris['id']); } $getprisoners = $database->getPrisoners3($wref); foreach ($getprisoners as $pris) { $troops = 0; for ($i = 1; $i < 12; $i++) { $troops += $pris['t'. $i]; } $database->modifyUnit($pris['wref'], array("99o"), array($troops), array(0)); $database->deletePrisoners($pris['id']); } } } } /* ---------------- Ban / Unban ---------------- */ function DelBan($uid, $id) { global $database; $name = addslashes($database->getUserField($uid, "username", 0)); $uid = (int)$uid; mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,". (int)$_SESSION['id']. ",'Unbanned user $name',". time(). ")"); mysqli_query($this->connection, "UPDATE ". TB_PREFIX. "users SET `access` = '". USER. "' WHERE `id` = $uid;"); mysqli_query($this->connection, "UPDATE ". TB_PREFIX. "banlist SET `active` = '0' WHERE `id` = ". (int)$id. ";"); } function AddBan($uid, $end, $reason) { global $database; $name = addslashes($database->getUserField($uid, "username", 0)); list($end, $reason) = $database->escape_input($end, $reason); $uid = (int)$uid; mysqli_query($this->connection, "INSERT INTO ". TB_PREFIX. "admin_log VALUES (0,". (int)$_SESSION['id']. ",'Banned user $name',". time(). ")"); mysqli_query($this->connection, "UPDATE ". TB_PREFIX. "users SET `access` = '0' WHERE `id` = $uid"); $time = time(); $admin = (int)$_SESSION['id']; $name = addslashes($database->getUserField($uid, 'username', 0)); $q = "INSERT INTO ". TB_PREFIX. "banlist (`uid`, `name`, `reason`, `time`, `end`, `admin`, `active`) VALUES ($uid, '$name', '$reason', '$time', '$end', '$admin', '1');"; mysqli_query($this->connection, $q); } /* ---------------- Căutări ---------------- */ function search_player($player) { global $database; $player = $database->escape($player); $q = "SELECT id,username FROM ". TB_PREFIX. "users WHERE `username` LIKE '%$player%' AND username!= 'support'"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function search_email($email) { global $database; $email = $database->escape($email); $q = "SELECT id,email FROM ". TB_PREFIX. "users WHERE `email` LIKE '%$email%' AND username!= 'support'"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function search_village($village) { global $database; $village = $database->escape($village); $q = "SELECT * FROM ". TB_PREFIX. "vdata WHERE `name` LIKE '%$village%' OR `wref` LIKE '%$village%'"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function search_alliance($alliance) { global $database; $alliance = $database->escape($alliance); $q = "SELECT * FROM ". TB_PREFIX. "alidata WHERE `name` LIKE '%$alliance%' OR `tag` LIKE '%$alliance%' OR `id` LIKE '%$alliance%'"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function search_ip($ip) { global $database; $ip = $database->escape($ip); $q = "SELECT * FROM ". TB_PREFIX. "login_log WHERE `ip` LIKE '%$ip%'"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function search_banned() { $q = "SELECT * FROM ". TB_PREFIX. "banlist WHERE active = '1'"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function Del_banned() { $q = "SELECT * FROM ". TB_PREFIX. "banlist"; $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } /* ---------------- Helpers MySQLi ---------------- */ function mysqli_fetch_all($result) { $all = array(); if ($result) { while ($row = mysqli_fetch_assoc($result)) { $all[] = $row; } return $all; } } function query_return($q) { $result = mysqli_query($this->connection, $q); return $this->mysqli_fetch_all($result); } function query($query) { // corectat ordinea parametrilor return mysqli_query($this->connection, $query); } /* ---------------- Funcții joc ---------------- */ public function getTypeLevel($tid, $vid) { global $village, $database; $keyholder = array(); if ($vid == 0) { $resourcearray = $village->resarray; } else { $resourcearray = $database->getResourceLevel($vid); } foreach (array_keys($resourcearray, $tid) as $key) { if (strpos($key, 't')) { $key = preg_replace("/[^0-9]/", '', $key); array_push($keyholder, $key); } } $element = count($keyholder); if ($element >= 2) { if ($tid <= 4) { $temparray = array(); for ($i = 0; $i <= $element - 1; $i++) { array_push($temparray, $resourcearray['f'. $keyholder[$i]]); } foreach ($temparray as $key => $val) { if ($val == max($temparray)) $target = $key; } } else { $target = 0; for ($i = 1; $i <= $element - 1; $i++) { if ($resourcearray['f'. $keyholder[$i]] > $resourcearray['f'. $keyholder[$target]]) { $target = $i; } } } } else if ($element == 1) { $target = 0; } else { return 0; } if ($keyholder[$target]!= "") { return $resourcearray['f'. $keyholder[$target]]; } else { return 0; } } public function procDistanceTime($coor, $thiscoor, $ref, $vid) { global $bid28, $bid14; $xdistance = ABS($thiscoor['x'] - $coor['x']); if ($xdistance > WORLD_MAX) { $xdistance = (2 * WORLD_MAX + 1) - $xdistance; } $ydistance = ABS($thiscoor['y'] - $coor['y']); if ($ydistance > WORLD_MAX) { $ydistance = (2 * WORLD_MAX + 1) - $ydistance; } $distance = SQRT(POW($xdistance, 2) + POW($ydistance, 2)); $speed = $ref; if ($this->getTypeLevel(14, $vid)!= 0 && $distance >= TS_THRESHOLD) { $speed = $speed * ($bid14[$this->getTypeLevel(14, $vid)]['attri'] / 100); } if ($speed!= 0) { return round(($distance / $speed) * 3600 / INCREASE_SPEED); } else { return round($distance * 3600 / INCREASE_SPEED); } } public function returnTroops($wref) { global $database; $getenforce = $database->getEnforceVillage($wref, 0); foreach ($getenforce as $enforce) { $to = $database->getVillage($enforce['from']); $start = ($database->getUserField($to['owner'], 'tribe', 0) - 1) * 10 + 1; $end = ($database->getUserField($to['owner'], 'tribe', 0) * 10); $from = $database->getVillage($enforce['from']); $fromcoor = $database->getCoor($enforce['from']); $tocoor = $database->getCoor($enforce['vref']); $fromCor = array('x' => $tocoor['x'], 'y' => $tocoor['y']); $toCor = array('x' => $fromcoor['x'], 'y' => $fromcoor['y']); $speeds = array(); for ($i = $start; $i <= $end; $i++) { if (intval($enforce['u'. $i]) > 0) { $unitarray = $GLOBALS["u". $i]; $speeds[] = $unitarray['speed']; } else { $enforce['u'. $i] = '0'; } } if (intval($enforce['hero']) > 0) { $q = "SELECT * FROM ". TB_PREFIX. "hero WHERE uid = ". (int)$from['owner']. " AND dead = 0"; $result = mysqli_query($database->dblink, $q); $hero_f = mysqli_fetch_array($result); $hero_unit = $hero_f['unit']; $speeds[] = $GLOBALS['u'. $hero_unit]['speed']; } else { $enforce['hero'] = '0'; } $troopsTime = $this->procDistanceTime($fromCor, $toCor, min($speeds), $enforce['from']); $time = $database->getArtifactsValueInfluence($from['owner'], $enforce['from'], 2, $troopsTime); $reference = $database->addAttack($enforce['from'], $enforce['u'. $start], $enforce['u'. ($start + 1)], $enforce['u'. ($start + 2)], $enforce['u'. ($start + 3)], $enforce['u'. ($start + 4)], $enforce['u'. ($start + 5)], $enforce['u'. ($start + 6)], $enforce['u'. ($start + 7)], $enforce['u'. ($start + 8)], $enforce['u'. ($start + 9)], $enforce['hero'], 2, 0, 0, 0, 0); $database->addMovement(4, $wref, $enforce['from'], $reference, time(), ($time + time())); $database->deleteReinf($enforce['id']); } } public function calculateProduction($wid, $uid, $b1, $b2, $b3, $b4, $fdata, $ocounter, $pop) { global $technology, $database; $isNatar = $database->getVillageField($wid, "natar"); $upkeep = $technology->getUpkeep($this->getAllUnits($wid), 0, $wid); $production = []; $production['wood'] = $this->getWoodProd($fdata, $ocounter, $b1); $production['clay'] = $this->getClayProd($fdata, $ocounter, $b2); $production['iron'] = $this->getIronProd($fdata, $ocounter, $b3); $production['crop'] = $this->getCropProd($fdata, $ocounter, $b4) - (!$isNatar? $pop : round($pop / 2)) - $upkeep; return $production; } private function getWoodProd($fdata, $ocounter, $b1) { global $bid1, $bid5; $basewood = $sawmill = 0; $woodholder = array(); for ($i = 1; $i <= 38; $i++) { if ($fdata['f'. $i. 't'] == 1) { array_push($woodholder, 'f'. $i); } if ($fdata['f'. $i. 't'] == 5) { $sawmill = $fdata['f'. $i]; } } for ($i = 0; $i <= count($woodholder) - 1; $i++) { $basewood += $bid1[$fdata[$woodholder[$i]]]['prod']; } $wood = $basewood + $basewood * 0.25 * $ocounter[0]; if ($sawmill >= 1) { $wood += $basewood / 100 * $bid5[$sawmill]['attri']; } if ($b1 > time()) { $wood *= 1.25; } $wood *= SPEED; return round($wood); } private function getClayProd($fdata, $ocounter, $b2) { global $bid2, $bid6; $baseclay = $brick = 0; $clayholder = array(); for ($i = 1; $i <= 38; $i++) { if ($fdata['f'. $i. 't'] == 2) { array_push($clayholder, 'f'. $i); } if ($fdata['f'. $i. 't'] == 6) { $brick = $fdata['f'. $i]; } } for ($i = 0; $i <= count($clayholder) - 1; $i++) { $baseclay += $bid2[$fdata[$clayholder[$i]]]['prod']; } $clay = $baseclay + $baseclay * 0.25 * $ocounter[1]; if ($brick >= 1) { $clay += $baseclay / 100 * $bid6[$brick]['attri']; } if ($b2 > time()) { $clay *= 1.25; } $clay *= SPEED; return round($clay); } private function getIronProd($fdata, $ocounter, $b3) { global $bid3, $bid7; $baseiron = $foundry = 0; $ironholder = array(); for ($i = 1; $i <= 38; $i++) { if ($fdata['f'. $i. 't'] == 3) { array_push($ironholder, 'f'. $i); } if ($fdata['f'. $i. 't'] == 7) { $foundry = $fdata['f'. $i]; } } for ($i = 0; $i <= count($ironholder) - 1; $i++) { $baseiron += $bid3[$fdata[$ironholder[$i]]]['prod']; } $iron = $baseiron + $baseiron * 0.25 * $ocounter[2]; if ($foundry >= 1) { $iron += $baseiron / 100 * $bid7[$foundry]['attri']; } if ($b3 > time()) { $iron *= 1.25; } $iron *= SPEED; return round($iron); } private function getCropProd($fdata, $ocounter, $b4) { global $bid4, $bid8, $bid9; $basecrop = $grainmill = $bakery = 0; $cropholder = array(); for ($i = 1; $i <= 38; $i++) { if ($fdata['f'. $i. 't'] == 4) { array_push($cropholder, 'f'. $i); } if ($fdata['f'. $i. 't'] == 8) { $grainmill = $fdata['f'. $i]; } if ($fdata['f'. $i. 't'] == 9) { $bakery = $fdata['f'. $i]; } } for ($i = 0; $i <= count($cropholder) - 1; $i++) { $basecrop += $bid4[$fdata[$cropholder[$i]]]['prod']; } $crop = $basecrop + $basecrop * 0.25 * $ocounter[3]; $jcrop = 0; if ($grainmill >= 1) $jcrop = (isset($bid8[$grainmill]['attri'])? $bid8[$grainmill]['attri'] : 0); if ($bakery >= 1) $jcrop += (isset($bid9[$bakery]['attri'])? $bid9[$bakery]['attri'] : 0); $crop += $basecrop / 100 * $jcrop; if ($b4 > time()) { $crop *= 1.25; } $crop *= SPEED; return round($crop); } function getAllUnits($base, $InVillageOnly = False, $mode = 0) { global $database; $ownunit = $database->getUnit($base); $ownunit['u99'] -= $ownunit['u99']; $ownunit['u99o'] -= $ownunit['u99o']; $enforcementarray = $database->getEnforceVillage($base, 0); if (count($enforcementarray) > 0) { foreach ($enforcementarray as $enforce) { for ($i = 1; $i <= 50; $i++) { $ownunit['u'. $i] += $enforce['u'. $i]; } $ownunit['hero'] += $enforce['hero']; } } if ($mode == 0) { $enforceoasis = $database->getOasisEnforce($base, 0); if (count($enforceoasis) > 0) { foreach ($enforceoasis as $enforce) { for ($i = 1; $i <= 50; $i++) { $ownunit['u'. $i] += $enforce['u'. $i]; } $ownunit['hero'] += $enforce['hero']; } } $enforceoasis1 = $database->getOasisEnforce($base, 1); if (count($enforceoasis1) > 0) { foreach ($enforceoasis1 as $enforce) { for ($i = 1; $i <= 50; $i++) { $ownunit['u'. $i] += $enforce['u'. $i]; } $ownunit['hero'] += $enforce['hero']; } } $prisoners = $database->getPrisoners($base, 1); if (!empty($prisoners)) { foreach ($prisoners as $prisoner) { $owner = $database->getVillageField($base, "owner"); $ownertribe = $database->getUserField($owner, "tribe", 0); $start = ($ownertribe - 1) * 10 + 1; $end = ($ownertribe * 10); for ($i = $start; $i <= $end; $i++) { $j = $i - $start + 1; $ownunit['u'. $i] += $prisoner['t'. $j]; } $ownunit['hero'] += $prisoner['t11']; } } } if (!$InVillageOnly) { $movement = $database->getVillageMovement($base); if (!empty($movement)) { for ($i = 1; $i <= 50; $i++) { if (isset($movement['u'. $i])) { $ownunit['u'. $i] += $movement['u'. $i]; } } $ownunit['hero'] += $movement['hero']; } } return $ownunit; } }; $admin = new adm_DB; include("function.php"); ?>