function planet_permissions_set() { global $smarty, $sql, $planet_id; $players = array(); if (!empty($_REQUEST['permission_id'])) { $db_query = "SELECT DISTINCT `player_id` FROM `permissions` WHERE `type` = '" . PERMISSION_PLANET . "' AND `permission_id` IN ('" . implode("', '", array_keys($_REQUEST['permission_id'])) . "') AND `id` = '" . $planet_id . "'"; $db_result = mysql_query($db_query); while ($db_row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $players[$db_row['player_id']]; } $db_query = "DELETE FROM `permissions` WHERE `type` = '" . PERMISSION_PLANET . "' AND `permission_id` IN ('" . implode("', '", array_keys($_REQUEST['permission_id'])) . "') AND `id` = '" . $planet_id . "'"; $db_result = mysql_query($db_query); } else { $_REQUEST['permission_id'] = array(); } if (!empty($_REQUEST['player_id'])) { $insert_permission = array('round_id' => $_SESSION['round_id'], 'owner_id' => $_SESSION['player_id'], 'id' => $planet_id, 'type' => PERMISSION_PLANET); $permission_array = array('build', 'research', 'commission', 'military'); foreach ($permission_array as $value) { if (!empty($_REQUEST['permissions'][$value])) { $insert_permission[$value] = 1; } } foreach ($_REQUEST['player_id'] as $player_id) { if (!isset($_REQUEST['permission_id'][$player_id])) { $db_query = "DELETE FROM `permissions` WHERE `type` = '" . PERMISSION_PLANET . "' AND `player_id` = '" . abs((int) $player_id) . "' AND `id` = '" . $planet_id . "'"; $db_result = mysql_query($db_query); } $insert_permission['player_id'] = abs((int) $player_id); $sql->execute('permissions', $insert_permission); permissions_update_planets($player_id); if (isset($players[$player_id])) { unset($players[$player_id]); } } if (!empty($players)) { foreach ($players as $player_id => $empty) { permissions_update_planets($player_id); } } $status[] = 'Permissions Set'; $smarty->assign('status', $status); } planet_permissions(); }
function planet() { // If requesting a specific / relative planet if (isset($_REQUEST['planet_id'])) { $planet_id = $_REQUEST['planet_id']; // Let's duplicate our effort for sake of simplicity. We can always refactor later. if (in_array($planet_id, array('previous', 'next'))) { $planetList = 'own'; $action = $planet_id; $player =& $this->data->player($_SESSION['player_id']); $planets = $player['planets']; $planet_current = $player['planet_current']; $planet_id = $this->get_adjacent_planet($planets, $planet_current, $action); $this->set_current_planet($player, $planet_id, $planetList); } else { if (in_array($planet_id, array('previous_permissions', 'next_permissions'))) { $planetList = 'permission'; if ($planet_id == 'previous_permissions') { $action = 'previous'; } else { $action = 'next'; } permissions_update_planets($_SESSION['player_id']); $player =& $this->data->player($_SESSION['player_id']); $planets = $player['planets_permissions']; $planet_current = $player['planet_permission_current']; if (empty($planets)) { $this->smarty->append('status', 'You do not have permission to access any other planets'); $this->smarty->display('error.tpl'); exit; } $planet_id = $this->get_adjacent_planet($planets, $planet_current, $action); $this->set_current_planet($player, $planet_id, $planetList); } else { $planet_id = abs((int) $planet_id); } } $_SESSION['planet_id'] = $planet_id; } else { $player =& $this->data->player($_SESSION['player_id']); $planet_id = $player['planet_current']; } $this->data->updater->update(0, $planet_id); $permissions = permissions_check(PERMISSION_PLANET, $planet_id); $round = $this->data->round(); $planet = $this->data->planet($planet_id); if (!empty($planet['player_id'])) { $player = $this->data->player($planet['player_id']); $planet['player_name'] = strshort($player['name'], 15); if ($player['npc'] == 1) { $planet['npc_player'] = true; } } if (!empty($planet['kingdom_id'])) { $kingdom = $this->data->kingdom($planet['kingdom_id']); $planet['kingdom_name'] = strshort($kingdom['name'], 15); } $planet['permissions'] = $permissions; if ($planet['player_id'] == $_SESSION['player_id']) { $_SESSION['planet_id'] = $planet['planet_id']; } $planet['score'] = format_number($planet['score']); $planet['score_peak'] = format_number($planet['score_peak']); if ($permissions['grant']) { if (!empty($planet['minerals'])) { $planet['minerals'] = array_sum($planet['minerals']); } else { $planet['minerals'] = 0; } $resource_deficiency = 0; foreach (array('food', 'workers', 'energy', 'minerals') as $resource) { if ($resource_deficiency != 0) { $planet[$resource . 'deficiency'] = $planet[$resource . 'rate']; } $planet[$resource . 'rate'] += $resource_deficiency; if ($planet[$resource . 'rate'] < 0 && $planet[$resource] < abs($planet[$resource . 'rate'])) { $resource_deficiency = $planet[$resource . 'rate'] + $planet[$resource]; } $planet[$resource] = format_number($planet[$resource], true); $planet[$resource . 'rate'] = format_number($planet[$resource . 'rate'], true, true); } if ($permissions['build']) { $types[] = 1; } if ($permissions['research']) { $types[] = 2; $types[] = 3; } if ($permissions['commission']) { $types[] = 4; } unset($planet['researching'], $planet['building'], $planet['army'], $planet['navy']); // Get tasks currently running on the planet $db_query = "SELECT DISTINCT `task_id`, `attribute`, `number`, `type` FROM `tasks` WHERE `round_id` = '" . $_SESSION['round_id'] . "' AND `planet_id` = '" . $planet_id . "' AND `type` IN ('" . implode("', '", $types) . "') ORDER BY `completion` DESC"; $db_result_tasks = mysql_query($db_query); while ($tasks = mysql_fetch_array($db_result_tasks, MYSQL_ASSOC)) { $this->sql->select(array('tasks', 'completion')); $this->sql->where(array(array('tasks', 'round_id', $_SESSION['round_id']), array('tasks', 'task_id', $tasks['task_id']))); $this->sql->limit(1); switch ($tasks['type']) { case 1: $this->sql->select(array('buildings', 'name')); $this->sql->where(array('buildings', 'building_id', array('tasks', 'building_id'))); $db_result = $this->sql->execute(); $db_row = mysql_fetch_array($db_result, MYSQL_ASSOC); $planet['building']['name'] = strshort($db_row['name'], 15); $planet['building']['time'] = format_time(timeparser($db_row['completion'] - microfloat())); break; case 2: $this->sql->select(array('concepts', 'name')); $this->sql->where(array('concepts', 'concept_id', array('tasks', 'concept_id'))); $db_result = $this->sql->execute(); $db_row = mysql_fetch_array($db_result, MYSQL_ASSOC); $planet['researching']['name'] = strshort($db_row['name'], 15); $planet['researching']['time'] = format_time(timeparser($db_row['completion'] - microfloat())); break; case 3: $designs = array('army', 'navy', 'weapon'); $this->sql->select(array($designs[$tasks['number']] . 'designs', 'name')); $this->sql->where(array($designs[$tasks['number']] . 'designs', $designs[$tasks['number']] . 'design_id', array('tasks', 'design_id'))); $db_result = $this->sql->execute(); $db_row = mysql_fetch_array($db_result, MYSQL_ASSOC); $planet['researching']['name'] = strshort($db_row['name'], 15); $planet['researching']['time'] = format_time(timeparser($db_row['completion'] - microfloat())); break; case 4: $this->sql->select(array($tasks['attribute'] . 'blueprints', 'name')); $this->sql->where(array($tasks['attribute'] . 'blueprints', $tasks['attribute'] . 'blueprint_id', array('tasks', 'unit_id'))); $db_result = $this->sql->execute(); $db_row = mysql_fetch_array($db_result, MYSQL_ASSOC); $planet[$tasks['attribute']]['name'] = strshort($db_row['name'], 15); $planet[$tasks['attribute']]['time'] = format_time(timeparser($db_row['completion'] - microfloat())); break; } } $planet['nextupdate'] = format_time($round['resourcetick'] - (microfloat() - $planet['lastupdated'])); } $this->smarty->assign('planet', $planet); $this->smarty->display('info_planet.tpl'); }