function create_planet($user_id, $id_type, $id_value, $selected_type = 'r', $race = 0) { global $db, $game, $PLANETS_DATA; // Planet raw materials production according to its type $planet_templates = array('bbb' => array(-0.25, -0.25, -0.25), 'bnb' => array(-0.25, 0, -0.25), 'nbb' => array(0, -0.25, -0.25), 'bbn' => array(-0.25, -0.25, 0), 'nnb' => array(0, 0, -0.25), 'nbn' => array(0, -0.25, 0), 'bnn' => array(-0.25, 0, 0), 'nnn' => array(0, 0, 0), 'gnn' => array(0.25, 0, 0), 'ngn' => array(0, 0.25, 0), 'nng' => array(0, 0, 0.25), 'ggn' => array(0.25, 0.25, 0), 'ngg' => array(0, 0.25, 0.25), 'gng' => array(0.25, 0, 0.25), 'ggg' => array(0.25, 0.25, 0.25)); // Planet type probability according to its orbit $planet_type_probabilities = array(0 => array('a' => 30, 'b' => 35, 'c' => 10, 'd' => 10, 's' => 5, 't' => 4, 'x' => 4, 'y' => 2), 1 => array('a' => 30, 'b' => 35, 'c' => 10, 'd' => 10, 's' => 5, 't' => 4, 'x' => 4, 'y' => 2), 2 => array('a' => 2, 'c' => 8, 'd' => 8, 'e' => 15, 'f' => 13, 'g' => 8, 'h' => 13, 'k' => 10, 'l' => 4, 'm' => 2, 'n' => 14, 'o' => 2, 'p' => 1), 3 => array('a' => 1, 'c' => 8, 'd' => 8, 'e' => 12, 'f' => 13, 'g' => 13, 'h' => 8, 'k' => 8, 'l' => 8, 'm' => 4, 'n' => 10, 'o' => 4, 'p' => 3), 4 => array('a' => 1, 'c' => 8, 'd' => 8, 'e' => 12, 'f' => 18, 'g' => 19, 'h' => 10, 'k' => 6, 'l' => 4, 'm' => 3, 'n' => 4, 'o' => 3, 'p' => 4), 5 => array('a' => 3, 'c' => 8, 'd' => 8, 'e' => 12, 'f' => 18, 'g' => 18, 'h' => 8, 'k' => 6, 'l' => 8, 'm' => 2, 'n' => 1, 'o' => 2, 'p' => 6), 6 => array('a' => 6, 'c' => 10, 'd' => 10, 'i' => 22, 'j' => 23, 's' => 14, 't' => 14), 7 => array('a' => 6, 'c' => 22, 'd' => 23, 'i' => 14, 'j' => 14, 's' => 10, 't' => 10)); $system_id = $sector_id = 0; switch ($id_type) { case 'quadrant': $quadrant_id = $id_value; // Verify that a suitable system already exists // In one of 5 cases it creates in any case a new system if (mt_rand(1, 5) != 3) { $sector_id_min = ($quadrant_id - 1) * $game->sectors_per_quadrant + 1; // (id - 1) * 81 $sector_id_max = $quadrant_id * $game->sectors_per_quadrant; // id * 81 $sql = 'SELECT system_id, sector_id, system_n_planets FROM starsystems WHERE sector_id >= ' . $sector_id_min . ' AND sector_id <= ' . $sector_id_max . ' AND system_closed = 0 AND system_n_planets < system_max_planets'; if (($q_systems = $db->query($sql)) === false) { message(DATABASE_ERROR, 'world::create_planet(): Could not query systems data'); } $available_systems = array(); $n_available = 0; while ($system = $db->fetchrow($q_systems)) { $available_systems[] = array($system['sector_id'], $system['system_id']); //if( ++$n_available > 30) break; } // Check if there are available systems! if (!empty($available_systems)) { $chosen_system = $available_systems[array_rand($available_systems)]; $sector_id = $chosen_system[0]; $system_id = $chosen_system[1]; } } // If a new system must be created ($system_id = 0), then it's orbitals are all free // (in the Alpha-2 it has nevertheless searched * roll *) ) // Otherwise, a free search $free_distances = $game->planet_distances; if (!$system_id) { $_temp = create_system('quadrant', $quadrant_id, 0); $system_id = $_temp[0]; $sector_id = $_temp[1]; } else { $sql = 'SELECT planet_distance_id FROM planets WHERE system_id = ' . $system_id; if (($planet_did = $db->queryrowset($sql)) === false) { message(DATABASE_ERROR, 'world::create_planet(): Could not query planets did data'); } for ($i = 0; $i < count($planet_did); ++$i) { unset($free_distances[$planet_did[$i]['planet_distance_id']]); } if (empty($free_distances)) { message(GENERAL, 'Planet could not be created', 'world::create_planet(): $free_distances[] = empty'); } } break; case 'sector': $sector_id = $id_value; // Verify that a suitable system already exists // In one of 3 cases it creates in any case a new system if (mt_rand(1, 3) != 2) { $sql = 'SELECT system_id, sector_id, system_n_planets, system_max_planets FROM starsystems WHERE sector_id >= ' . $sector_id . ' AND system_closed = 0'; if (($q_systems = $db->query($sql)) === false) { message(DATABASE_ERROR, 'world::create_planet(): Could not query systems data'); } while ($system = $db->fetchrow($q_systems)) { if ($system['system_n_planets'] > $system['system_max_planets']) { stgc_log('world', 'System ' . $system['system_id'] . ' has ' . $system['system_n_planets']); } elseif ($system['system_n_planets'] < $system['system_max_planets']) { $system_id = $system['system_id']; $sector_id = $system['sector_id']; break; } } } // If a new system must be created ($system_id = 0), then it's orbitals are all free // (in the Alpha-2 it has nevertheless searched * roll *) ) // Otherwise, a free search $free_distances = $game->planet_distances; if (!$system_id) { $_temp = create_system('sector', $sector_id, 0); $system_id = $_temp[0]; //$sector_id = $_temp[1]; } else { $sql = 'SELECT planet_distance_id FROM planets WHERE system_id = ' . $system_id; if (($planet_did = $db->queryrowset($sql)) === false) { message(DATABASE_ERROR, 'world::create_planet(): Could not query planets did data'); } for ($i = 0; $i < count($planet_did); ++$i) { unset($free_distances[$planet_did[$i]['planet_distance_id']]); } if (empty($free_distances)) { message(GENERAL, 'Planet could not be created', 'world::create_planet(): $free_distances[] = empty'); } } break; case 'system': $free_distances = $game->planet_distances; $system_id = $id_value; // NOTE: The system chosen must exist /* $sql = 'SELECT sector_id, planet_distance_id FROM planets WHERE system_id = '.$system_id; */ /* 16/06/08 - AC: First of all, obtain sector ID, starsystem may be empty! */ $sql = 'SELECT sector_id FROM starsystems WHERE system_id = ' . $system_id; if (($system = $db->queryrow($sql)) === false) { message(DATABASE_ERROR, 'world::create_planet(): Could not query sector did data'); } $sector_id = $system['sector_id']; /* 16/06/08 - AC: then check for already occupied planet slot */ $sql = 'SELECT planet_distance_id FROM planets WHERE system_id = ' . $system_id; if (($planet_did = $db->queryrowset($sql)) === false) { message(DATABASE_ERROR, 'world::create_planet(): Could not query planet did data'); } for ($i = 0; $i < count($planet_did); ++$i) { unset($free_distances[$planet_did[$i]['planet_distance_id']]); } break; } $planet_distance_id = array_rand($free_distances); $planet_distance_px = mt_rand($game->planet_distances[$planet_distance_id][0], $game->planet_distances[$planet_distance_id][1]); // Create! if (!$user_id) { $type_array = array(); foreach ($planet_type_probabilities[$planet_distance_id] as $type => $probability) { for ($i = 0; $i < $probability; ++$i) { $type_array[] = $type; } } $planet_type = $type_array[array_rand($type_array)]; $type_probabilities = array('bbb' => 1, 'bbn' => 3, 'bnb' => 3, 'nbb' => 3, 'bnn' => 5, 'nbn' => 5, 'nnb' => 5, 'nnn' => 50, 'gnn' => 5, 'ngn' => 5, 'nng' => 5, 'ggn' => 3, 'ngg' => 3, 'gng' => 3, 'ggg' => 1); $template_array = array(); foreach ($type_probabilities as $type => $probability) { for ($i = 0; $i < $probability; ++$i) { $template_array[] = $type; } } $planet_template = $template_array[array_rand($template_array)]; // Random variance of the constants basis of the planet $rateo_1 = round($PLANETS_DATA[$planet_type][0] + $planet_templates[$planet_template][0], 2); if ($rateo_1 < 0.1) { $rateo_1 = 0.1; } $rateo_2 = round($PLANETS_DATA[$planet_type][1] + $planet_templates[$planet_template][1], 2); if ($rateo_2 < 0.1) { $rateo_2 = 0.1; } $rateo_3 = round($PLANETS_DATA[$planet_type][2] + $planet_templates[$planet_template][2], 2); if ($rateo_3 < 0.1) { $rateo_3 = 0.1; } $rateo_4 = $PLANETS_DATA[$planet_type][3]; $sql = 'INSERT INTO planets (planet_name, system_id, sector_id, planet_type, planet_owner, planet_owned_date, planet_distance_id, planet_distance_px, planet_covered_distance, planet_tick_cdistance, planet_max_cdistance, resource_1, resource_2, resource_3, resource_4, planet_points, rateo_1, rateo_2, rateo_3, rateo_4) VALUES ("' . UNINHABITATED_PLANET . '", ' . $system_id . ', ' . $sector_id . ', "' . $planet_type . '", 0, ' . $game->TIME . ', ' . $planet_distance_id . ', ' . $planet_distance_px . ', 0, ' . mt_rand(10, 30) . ', ' . 2 * M_PI * $planet_distance_px . ', 0, 0, 0, 0, 0, ' . $rateo_1 . ', ' . $rateo_2 . ', ' . $rateo_3 . ', ' . $rateo_4 . ')'; } else { // If player selected a specific planet type if ($selected_type != 'r') { $planet_type = $selected_type; } else { $planet_type = mt_rand(1, 2) == 1 ? 'm' : 'o'; } $rateo_1 = $PLANETS_DATA[$planet_type][0]; $rateo_2 = $PLANETS_DATA[$planet_type][1]; $rateo_3 = $PLANETS_DATA[$planet_type][2]; $rateo_4 = $PLANETS_DATA[$planet_type][3]; // Ok, let's boost new players a bit if (USER_START_BOOST) { global $MAX_BUILDING_LVL, $MAX_RESEARCH_LVL, $RACE_DATA, $MAX_POINTS; $sql = 'INSERT INTO planets (planet_name, system_id, sector_id, planet_type, planet_owner, planet_owned_date, planet_distance_id, planet_distance_px, planet_covered_distance, planet_tick_cdistance, planet_max_cdistance, building_1, building_2, building_3, building_4, building_5, building_6, building_7, building_8, building_9, building_10, building_11, building_12, research_1, research_2, research_4, research_5, resource_1, resource_2, resource_3, resource_4, planet_points, planet_available_points, recompute_static, max_resources, max_worker, max_units, workermine_1,workermine_2,workermine_3, unit_1,unit_2,unit_3,unit_4,unit_5,unit_6, rateo_1,rateo_2,rateo_3,rateo_4) VALUES ("' . UNINHABITATED_COLONY . '", ' . $system_id . ', ' . $sector_id . ', "' . $planet_type . '", ' . $user_id . ', ' . $game->TIME . ', ' . $planet_distance_id . ', ' . $planet_distance_px . ', 0, ' . mt_rand(10, 30) . ', ' . 2 * M_PI * $planet_distance_px . ', ' . $MAX_BUILDING_LVL[1][0] . ', ' . $MAX_BUILDING_LVL[1][1] . ', ' . $MAX_BUILDING_LVL[1][2] . ', ' . $MAX_BUILDING_LVL[1][3] . ', ' . $MAX_BUILDING_LVL[1][4] . ', ' . $MAX_BUILDING_LVL[1][5] . ', ' . $MAX_BUILDING_LVL[1][6] . ', ' . $MAX_BUILDING_LVL[1][7] . ', ' . $MAX_BUILDING_LVL[1][8] . ', ' . $MAX_BUILDING_LVL[1][9] . ', ' . $MAX_BUILDING_LVL[1][10] . ', ' . $MAX_BUILDING_LVL[1][11] . ', 5, 4, 6, ' . $MAX_RESEARCH_LVL[1][4] . ', ' . 150000 * $RACE_DATA[$race][9] . ', ' . 150000 * $RACE_DATA[$race][10] . ', ' . 150000 * $RACE_DATA[$race][11] . ', ' . 10000 * $RACE_DATA[$race][12] . ', 10, ' . $MAX_POINTS[1] . ', 1, ' . $PLANETS_DATA[$planet_type][6] . ', ' . $PLANETS_DATA[$planet_type][7] . ', ' . $PLANETS_DATA[$planet_type][7] . ', 1600,1600,1600, 4000,2000,500,100,150,100, ' . $rateo_1 . ',' . $rateo_2 . ',' . $rateo_3 . ',' . $rateo_4 . ')'; } else { global $MAX_POINTS; $sql = 'INSERT INTO planets (planet_name, system_id, sector_id, planet_type, planet_owner, planet_owned_date, planet_distance_id, planet_distance_px, planet_covered_distance, planet_tick_cdistance, planet_max_cdistance, resource_1, resource_2, resource_3, resource_4, planet_points, planet_available_points, recompute_static, max_resources, max_worker, max_units, workermine_1, workermine_2, workermine_3, rateo_1, rateo_2, rateo_3, rateo_4) VALUES ("' . UNINHABITATED_COLONY . '", ' . $system_id . ', ' . $sector_id . ', "' . $planet_type . '", ' . $user_id . ', ' . $game->TIME . ', ' . $planet_distance_id . ', ' . $planet_distance_px . ', 0, ' . mt_rand(10, 30) . ', ' . 2 * M_PI * $planet_distance_px . ', 200, 200, 100, 100, 10, ' . $MAX_POINTS[1] . ', 1, ' . $PLANETS_DATA[$planet_type][6] . ', ' . $PLANETS_DATA[$planet_type][7] . ', ' . $PLANETS_DATA[$planet_type][7] . ', 100, 100, 100, ' . $rateo_1 . ', ' . $rateo_2 . ', ' . $rateo_3 . ', ' . $rateo_4 . ')'; } } if (!$db->query($sql)) { message(DATABASE_ERROR, 'world::create_planet(): Could not insert new planet data'); } $planet_id = $db->insert_id(); $sql = 'UPDATE starsystems SET system_n_planets = system_n_planets + 1 WHERE system_id = ' . $system_id; if (!$db->query($sql)) { message(DATABASE_ERROR, 'world::create_planet(): Could not update starsystem data'); } return $planet_id; }
check_auth(STGC_DEVELOPER); include_once 'include/libs/world.php'; if (!empty($_GET['sector_id'])) { if (empty($_GET['x'])) { die('Usage: id_type=[quadrant,sector]&id_value=[integer]&n=[integer] OR sector_id=[integer]&x=[integer]&y=[integer]'); } if (empty($_GET['y'])) { die('Usage: id_type=[quadrant,sector]&id_value=[integer]&n=[integer] OR sector_id=[integer]&x=[integer]&y=[integer]'); } $results = array(create_system('slot', $_GET['sector_id'] . ':' . $_GET['x'] . ':' . $_GET['y'])); } else { if (empty($_GET['id_type'])) { die('Usage: id_type=[quadrant,sector]&id_value=[integer]&n=[integer] OR sector_id=[integer]&x=[integer]&y=[integer]'); } if (!in_array($_GET['id_type'], array('quadrant', 'sector'))) { die('Usage: id_type=[quadrant,sector]&id_value=[integer]&n=[integer] OR sector_id=[integer]&x=[integer]&y=[integer]'); } if (empty($_GET['id_value'])) { die('Usage: id_type=[quadrant,sector]&id_value=[integer]&n=[integer] OR sector_id=[integer]&x=[integer]&y=[integer]'); } if (empty($_GET['n'])) { die('Usage: id_type=[quadrant,sector]&id_value=[integer]&n=[integer] OR sector_id=[integer]&x=[integer]&y=[integer]'); } $results = array(); for ($i = 0; $i < $_GET['n']; ++$i) { $results[] = create_system($_GET['id_type'], $_GET['id_value']); } } for ($i = 0; $i < count($results); ++$i) { $game->out('Created new system with ID <b>' . $results[$i][0] . '</b> in sector <b>' . $results[$i][1] . '</b><br>'); }
message(DATABASE_ERROR, 'Could not update planets data!'); } // ############################################################################# // Add History Record in planet details; log_code = 25 $sql = 'INSERT INTO planet_details (planet_id, user_id, alliance_id, source_uid, source_aid, timestamp, log_code) VALUES (' . $planet['planet_id'] . ', ' . $user_id . ', ' . $user['user_alliance'] . ', ' . $user_id . ', ' . $user['user_alliance'] . ', ' . time() . ', 25)'; if (!$db->query($sql)) { message(DATABASE_ERROR, 'Could not insert new planet details data!'); } $n_planets++; $planets_to_go--; } // Then create the others while ($planets_to_go > 0) { // Create the system $_temp = create_system('sector', $capital_system['sector_id'], 0); $_system_id = $_temp[0]; $game->out('Created system: ' . $_system_id . '<br>'); // Retrieve available slots $sql = 'SELECT system_max_planets FROM starsystems WHERE system_id = ' . $_system_id; if (($new_system = $db->queryrow($sql)) === false) { message(DATABASE_ERROR, 'Could not query solar system data'); } $game->out('Available slots: ' . $new_system['system_max_planets'] . '<br>'); // Fill all the slots available for ($p = 0; $p < $new_system['system_max_planets']; $p++) { $planet_id = create_planet(0, 'system', $_system_id); $game->out('Created planet: ' . $planet_id . '<br>'); // Update required security forces $sql = 'UPDATE planets SET planet_owner = ' . $user_id . ',
function create_system($id_type, $id_value) { include_once 'include/libs/world.php'; return create_system($id_type, $id_value); }