function eco_build_hangar($que_type, $user, &$planet, $que) { global $sn_data, $lang, $dpath, $debug, $time_now; $GET_action = sys_get_param_str('action'); $GET_mode = sys_get_param_str('mode'); $POST_fmenge = $_POST['fmenge']; if (isset($GET_action)) { switch ($GET_action) { case 'trim': $ElementQueue = explode(';', $planet['b_hangar_id']); while (!empty($ElementQueue) && $ElementLine == '') { $ElementIndex = count($ElementQueue) - 1; $ElementLine = $ElementQueue[$ElementIndex]; unset($ElementQueue[$ElementIndex]); } if ($ElementLine) { $Element = explode(',', $ElementLine); $ResourcesToUpd[metal] += floor($sn_data[$Element[0]]['metal'] * $Element[1]); $ResourcesToUpd[crystal] += floor($sn_data[$Element[0]]['crystal'] * $Element[1]); $ResourcesToUpd[deuterium] += floor($sn_data[$Element[0]]['deuterium'] * $Element[1]); doquery("UPDATE `{{planets}}` SET\r\n `metal` = metal + '{$ResourcesToUpd['metal']}', `crystal` = crystal + '{$ResourcesToUpd['crystal']}', `deuterium` = deuterium + '{$ResourcesToUpd['deuterium']}'," . (empty($ElementQueue) ? '`b_hangar` = 0,' : '') . "`b_hangar_id` = '" . implode(';', $ElementQueue) . "' WHERE `id` = '{$planet['id']}' LIMIT 1;"); } // PREVENT SUBMITS? header("location: {$_SERVER['PHP_SELF']}?mode={$GET_mode}"); exit; break; case 'clear': $ElementQueue = explode(';', $planet['b_hangar_id']); foreach ($ElementQueue as $ElementLine => $Element) { if ($Element != '') { $Element = explode(',', $Element); $ResourcesToUpd[metal] += floor($sn_data[$Element[0]]['metal'] * $Element[1]); $ResourcesToUpd[crystal] += floor($sn_data[$Element[0]]['crystal'] * $Element[1]); $ResourcesToUpd[deuterium] += floor($sn_data[$Element[0]]['deuterium'] * $Element[1]); } } doquery("UPDATE `{{planets}}` SET\r\n `metal` = metal + '{$ResourcesToUpd['metal']}', `crystal` = crystal + '{$ResourcesToUpd['crystal']}', `deuterium` = deuterium + '{$ResourcesToUpd['deuterium']}',\r\n `b_hangar` = '', `b_hangar_id` = '' WHERE `id` = '{$planet['id']}' LIMIT 1;"); // PREVENT SUBMITS? header("location: {$_SERVER['PHP_SELF']}?mode={$GET_mode}"); exit; break; } } $page_error = ''; $page_mode = $que_type == SUBQUE_FLEET ? 'fleet' : 'defense'; $sn_data_group = $sn_data['groups'][$page_mode]; if (isset($POST_fmenge) && !eco_hangar_is_building($que)) { doquery('START TRANSACTION;'); $planet = doquery("SELECT * FROM {{planets}} WHERE `id` = '{$planet['id']}' LIMIT 1 FOR UPDATE;", '', true); $units_cost = array(); $hangar = $planet['b_hangar_id']; $built = GetRestrictedConstructionNum($planet); $SiloSpace = max(0, $planet[$sn_data[44]['name']] * 10 - $built[502] - $built[503] * 2); foreach ($POST_fmenge as $Element => $Count) { $Element = intval($Element); $Count = min(max(0, intval($Count)), MAX_FLEET_OR_DEFS_PER_ROW); if (!($Count && $Element && in_array($Element, $sn_data_group) && eco_can_build_unit($user, $planet, $Element))) { continue; } // On verifie combien on sait faire de cet element au max $MaxElements = GetMaxConstructibleElements($Element, $planet); switch ($Element) { case 502: $Count = min($SiloSpace, $Count, $MaxElements); $SiloSpace -= $Count; break; case 503: $Count = min(floor($SiloSpace / 2), $Count, $MaxElements); $SiloSpace -= $Count * 2; break; case 407: case 408: case 409: $Count = $built[$Element] >= 1 ? 0 : 1; break; default: $Count = min($Count, $MaxElements); break; } $unit_resources = GetElementRessources($Element, $Count); foreach ($unit_resources as $res_name => $res_amount) { $units_cost[$res_name] += $res_amount; } $hangar .= "{$Element},{$Count};"; } if ($hangar != $planet['b_hangar_id']) { $new_planet_data = $planet; $can_build_def = true; $query_string = ''; foreach ($units_cost as $res_name => $res_amount) { if ($res_amount <= 0) { continue; } if ($planet[$res_name] < $res_amount) { $can_build_def = false; $page_error = $lang['eco_bld_resources_not_enough']; break; } $new_planet_data[$res_name] -= $res_amount; $query_string .= "`{$res_name}` = `{$res_name}` - {$res_amount},"; } if ($can_build_def && $query_string) { $planet = $new_planet_data; $planet['b_hangar_id'] = $hangar; $query_string .= "`b_hangar_id` = '{$hangar}'"; doquery("UPDATE {{planets}} SET {$query_string} WHERE `id` = '{$planet['id']}' LIMIT 1;"); } } doquery('COMMIT'); } // ------------------------------------------------------------------------------------------------------- // S'il n'y a pas de Chantier ... if ($planet[$sn_data[21]['name']] == 0) { // Veuillez avoir l'obligeance de construire le Chantier Spacial !! message($lang['need_hangar'], $lang['tech'][21]); } $built = GetRestrictedConstructionNum($planet); $SiloSpace = max(0, $planet[$sn_data[44]['name']] * 10 - $built[502] - $built[503] * 2); $template = gettemplate("buildings_hangar", true); // ------------------------------------------------------------------------------------------------------- // Construction de la page du Chantier (car si j'arrive ici ... c'est que j'ai tout ce qu'il faut pour ... $TabIndex = 0; foreach ($sn_data_group as $Element) { $unit_message = ''; if (eco_can_build_unit($user, $planet, $Element)) { // On regarde si on peut en acheter au moins 1 $CanBuildOne = IsElementBuyable($user, $planet, $Element, false); // Disponibilité actuelle $ElementCount = $planet[$sn_data[$Element]['name']]; // On affiche le temps de construction (c'est toujours tellement plus joli) $baubar = GetMaxConstructibleElements($Element, $planet); switch ($Element) { case 502: $baubar = min($SiloSpace, $baubar); $restrict = 1; break; case 503: $baubar = min(floor($SiloSpace / 2), $baubar); $restrict = 1; break; case 407: case 408: case 409: $baubar = $built[$Element] >= 1 ? 0 : min(1, $baubar); $restrict = 2; break; default: $restrict = 0; break; } // Case nombre d'elements a construire if ($CanBuildOne) { if (!eco_hangar_is_building($que)) { if ($restrict == 2 and $baubar == 0) { $unit_message .= $lang['only_one']; } elseif ($restrict == 1 and !$baubar) { $unit_message .= $lang['b_no_silo_space']; } else { $TabIndex++; } } else { $unit_message = $lang['fleet_on_update']; } } $build_data = eco_get_build_data($user, $planet, $Element, 0); $temp[RES_METAL] = floor($planet['metal'] - $build_data[BUILD_CREATE][RES_METAL]); // + $fleet_list['own']['total'][RES_METAL] $temp[RES_CRYSTAL] = floor($planet['crystal'] - $build_data[BUILD_CREATE][RES_CRYSTAL]); // + $fleet_list['own']['total'][RES_CRYSTAL] $temp[RES_DEUTERIUM] = floor($planet['deuterium'] - $build_data[BUILD_CREATE][RES_DEUTERIUM]); // + $fleet_list['own']['total'][RES_DEUTERIUM] $template->assign_block_vars('production', array('ID' => $Element, 'NAME' => $lang['tech'][$Element], 'DESCRIPTION' => $lang['info'][$Element]['description_short'], 'LEVEL' => $ElementCount, 'LEVEL_OLD' => $CurentPlanet[$sn_data[$Element]['name']], 'LEVEL_CHANGE' => $que['in_que'][$Element], 'BUILD_CAN' => min($baubar, $build_data['CAN'][BUILD_CREATE]), 'TIME' => pretty_time($build_data[BUILD_CREATE][RES_TIME]), 'METAL' => $build_data[BUILD_CREATE][RES_METAL], 'CRYSTAL' => $build_data[BUILD_CREATE][RES_CRYSTAL], 'DEUTERIUM' => $build_data[BUILD_CREATE][RES_DEUTERIUM], 'METAL_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_METAL], true, $planet['metal']), 'CRYSTAL_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_CRYSTAL], true, $planet['crystal']), 'DEUTERIUM_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_DEUTERIUM], true, $planet['deuterium']), 'DESTROY_CAN' => $build_data['CAN'][BUILD_DESTROY], 'DESTROY_TIME' => pretty_time($build_data[BUILD_DESTROY][RES_TIME]), 'DESTROY_METAL' => $build_data[BUILD_DESTROY][RES_METAL], 'DESTROY_CRYSTAL' => $build_data[BUILD_DESTROY][RES_CRYSTAL], 'DESTROY_DEUTERIUM' => $build_data[BUILD_DESTROY][RES_DEUTERIUM], 'METAL_REST' => pretty_number($temp[RES_METAL], true, true), 'CRYSTAL_REST' => pretty_number($temp[RES_CRYSTAL], true, true), 'DEUTERIUM_REST' => pretty_number($temp[RES_DEUTERIUM], true, true), 'METAL_REST_NUM' => $temp[RES_METAL], 'CRYSTAL_REST_NUM' => $temp[RES_CRYSTAL], 'DEUTERIUM_REST_NUM' => $temp[RES_DEUTERIUM], 'METAL_BALANCE' => $caps['metal_perhour'][$Element], 'CRYSTAL_BALANCE' => $caps['crystal_perhour'][$Element], 'DEUTERIUM_BALANCE' => $caps['deuterium_perhour'][$Element], 'ENERGY_BALANCE' => $energy_balance, 'ARMOR' => pretty_number($sn_data[$Element]['armor']), 'SHIELD' => pretty_number($sn_data[$Element]['shield']), 'WEAPON' => pretty_number($sn_data[$Element]['attack']), 'TABINDEX' => $TabIndex, 'MESSAGE' => $unit_message)); } } $template->assign_vars(array('noresearch' => $NoFleetMessage, 'error_msg' => $page_error, 'MODE' => $que_type, 'QUE_ID' => $que_type, 'TIME_NOW' => $time_now)); tpl_assign_hangar($que_type, $planet, $template); display(parsetemplate($template), $lang[$page_mode]); }
function eco_bld_hangar($que_type, $user, &$planet) { global $lang; if (mrc_get_level($user, $planet, STRUC_FACTORY_HANGAR) == 0) { message($lang['need_hangar'], $lang['tech'][STRUC_FACTORY_HANGAR]); } $page_mode = $que_type == SUBQUE_FLEET ? 'fleet' : 'defense'; switch (sys_get_param_str('action')) { case 'clear': que_delete($que_type, $user, $planet, true); break; case 'trim': que_delete($que_type, $user, $planet, false); break; //case 'build':$operation_result = que_build($user, $planet);break; //case 'build':$operation_result = eco_bld_tech_research($user, $planet);break; } $template = gettemplate("buildings_hangar", true); if (sys_unit_arr2str(sys_get_param('fmenge'))) { $operation_result = que_build($user, $planet); } if (!empty($operation_result)) { $template->assign_block_vars('result', $operation_result); } $page_error = ''; $sn_data_group = sn_get_groups($page_mode); $ques = que_get($user['id'], $planet['id'], $que_type); $que =& $ques['ques'][$que_type][$user['id']][$planet['id']]; $in_que =& $ques['in_que'][$que_type][$user['id']][$planet['id']]; $silo_capacity_free = mrc_get_level($user, $planet, STRUC_SILO) * get_unit_param(STRUC_SILO, P_CAPACITY); $group_missile = sn_get_groups('missile'); foreach ($group_missile as $unit_id) { $silo_capacity_free -= (mrc_get_level($user, $planet, $unit_id, false, true) + (isset($in_que[$unit_id]) && $in_que[$unit_id] ? $in_que[$unit_id] : 0)) * get_unit_param($unit_id, P_UNIT_SIZE); } $silo_capacity_free = max(0, $silo_capacity_free); $TabIndex = 0; foreach ($sn_data_group as $unit_id) { $unit_info = get_unit_param($unit_id); $build_data = eco_get_build_data($user, $planet, $unit_id); if ($build_data['RESULT'][BUILD_CREATE] == BUILD_REQUIRE_NOT_MEET) { continue; } $unit_message = ''; $ElementCount = mrc_get_level($user, $planet, $unit_id); // Restricting $can_build by resources on planet and (where applicable) with max count per unit $can_build = $unit_info[P_MAX_STACK] ? max(0, $unit_info[P_MAX_STACK] - $in_que[$unit_id] - $ElementCount) : $build_data['CAN'][BUILD_CREATE]; // Restricting $can_build by free silo capacity $can_build = ($unit_is_missile = in_array($unit_id, $group_missile)) ? min($can_build, floor($silo_capacity_free / $unit_info[P_UNIT_SIZE])) : $can_build; if (!$can_build) { if (!$build_data['CAN'][BUILD_CREATE]) { $unit_message = $lang['sys_build_result'][BUILD_NO_RESOURCES]; } elseif ($unit_is_missile && $silo_capacity_free < $unit_info[P_UNIT_SIZE]) { $unit_message = $lang['b_no_silo_space']; } elseif ($unit_info[P_MAX_STACK]) { $unit_message = $lang['only_one']; } } else { $TabIndex++; } $temp[RES_METAL] = floor($planet['metal'] - $build_data[BUILD_CREATE][RES_METAL]); // + $fleet_list['own']['total'][RES_METAL] $temp[RES_CRYSTAL] = floor($planet['crystal'] - $build_data[BUILD_CREATE][RES_CRYSTAL]); // + $fleet_list['own']['total'][RES_CRYSTAL] $temp[RES_DEUTERIUM] = floor($planet['deuterium'] - $build_data[BUILD_CREATE][RES_DEUTERIUM]); // + $fleet_list['own']['total'][RES_DEUTERIUM] $template->assign_block_vars('production', array('ID' => $unit_id, 'NAME' => $lang['tech'][$unit_id], 'DESCRIPTION' => $lang['info'][$unit_id]['description_short'], 'LEVEL' => $ElementCount, 'LEVEL_OLD' => mrc_get_level($user, $planet, $unit_id), 'LEVEL_CHANGE' => $que['in_que'][$unit_id], 'BUILD_CAN' => $can_build, 'TIME' => pretty_time($build_data[RES_TIME][BUILD_CREATE]), 'METAL' => $build_data[BUILD_CREATE][RES_METAL], 'CRYSTAL' => $build_data[BUILD_CREATE][RES_CRYSTAL], 'DEUTERIUM' => $build_data[BUILD_CREATE][RES_DEUTERIUM], 'METAL_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_METAL], true, $planet['metal']), 'CRYSTAL_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_CRYSTAL], true, $planet['crystal']), 'DEUTERIUM_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_DEUTERIUM], true, $planet['deuterium']), 'DESTROY_CAN' => $build_data['CAN'][BUILD_DESTROY], 'DESTROY_TIME' => pretty_time($build_data[RES_TIME][BUILD_DESTROY]), 'DESTROY_METAL' => $build_data[BUILD_DESTROY][RES_METAL], 'DESTROY_CRYSTAL' => $build_data[BUILD_DESTROY][RES_CRYSTAL], 'DESTROY_DEUTERIUM' => $build_data[BUILD_DESTROY][RES_DEUTERIUM], 'METAL_REST' => pretty_number($temp[RES_METAL], true, true), 'CRYSTAL_REST' => pretty_number($temp[RES_CRYSTAL], true, true), 'DEUTERIUM_REST' => pretty_number($temp[RES_DEUTERIUM], true, true), 'METAL_REST_NUM' => $temp[RES_METAL], 'CRYSTAL_REST_NUM' => $temp[RES_CRYSTAL], 'DEUTERIUM_REST_NUM' => $temp[RES_DEUTERIUM], 'ARMOR' => pretty_number($unit_info[P_ARMOR]), 'SHIELD' => pretty_number($unit_info[P_SHIELD]), 'WEAPON' => pretty_number($unit_info[P_ATTACK]), 'TABINDEX' => $TabIndex, 'MESSAGE' => $unit_message)); } //$hangar_busy $template->assign_vars(array('noresearch' => $NoFleetMessage, 'error_msg' => $page_error, 'MODE' => $que_type, 'QUE_ID' => $que_type, 'TIME_NOW' => SN_TIME_NOW, 'HANGAR_BUSY' => eco_hangar_is_building($que), 'QUE_HAS_PLACE' => empty($que) || count($que) < que_get_max_que_length($user, $planet, $que_type))); // tpl_assign_hangar($que_type, $planet, $template); // $ques = que_get($que_type, $user['id'], $planet['id']); que_tpl_parse($template, $que_type, $user, $planet); display(parsetemplate($template), $lang[$page_mode]); }