function eco_bld_tech($que_type, &$user, &$planet) { global $config, $lang; lng_include('buildings'); lng_include('infos'); if (!mrc_get_level($user, $planet, STRUC_LABORATORY)) { message($lang['no_laboratory'], $lang['tech'][UNIT_TECHNOLOGIES]); } if (eco_unit_busy($user, $planet, UNIT_TECHNOLOGIES)) { message($lang['eco_bld_msg_err_laboratory_upgrading'], $lang['tech'][UNIT_TECHNOLOGIES]); } switch ($action = sys_get_param_escaped('action')) { case 'build': $operation_result = que_build($user, $planet); break; case 'trim': que_delete(QUE_RESEARCH, $user, $planet, false); break; case 'clear': que_delete(QUE_RESEARCH, $user, $planet, true); break; //case 'build':$operation_result = eco_bld_tech_research($user, $planet);break; } $template = gettemplate('buildings_research', true); if (!empty($operation_result)) { $template->assign_block_vars('result', $operation_result); } $fleet_list = flt_get_fleets_to_planet($planet); $ques = que_get($user['id'], QUE_RESEARCH); $que =& $ques['ques'][QUE_RESEARCH][$user['id']][0]; que_tpl_parse($template, QUE_RESEARCH, $user, null, $que); $in_que =& $ques['in_que'][QUE_RESEARCH][$user['id']][0]; foreach (sn_get_groups('tech') as $unit_id) { if (eco_can_build_unit($user, $planet, $unit_id) != BUILD_ALLOWED) { continue; } $level_base = mrc_get_level($user, '', $unit_id, false, true); $level_effective = mrc_get_level($user, '', $unit_id); $level_in_que = $in_que[$unit_id]; $level_bonus = max(0, $level_effective - $level_base); $level_base_and_que = $level_base + $level_in_que; $build_data = eco_get_build_data($user, $planet, $unit_id, $level_base_and_que); $temp[RES_METAL] = floor($planet['metal'] - $build_data[BUILD_CREATE][RES_METAL]); $temp[RES_CRYSTAL] = floor($planet['crystal'] - $build_data[BUILD_CREATE][RES_CRYSTAL]); $temp[RES_DEUTERIUM] = floor($planet['deuterium'] - $build_data[BUILD_CREATE][RES_DEUTERIUM]); $template->assign_block_vars('production', array('ID' => $unit_id, 'NAME' => $lang['tech'][$unit_id], 'DESCRIPTION' => $lang['info'][$unit_id]['description_short'], 'LEVEL_OLD' => $level_base, 'LEVEL_BONUS' => $level_bonus, 'LEVEL_NEXT' => $level_base + $level_in_que + 1, 'LEVEL_QUED' => $level_in_que, 'LEVEL' => $level_base_and_que, 'BUILD_CAN' => $build_data['CAN'][BUILD_CREATE], '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']), '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_FLEET' => pretty_number($temp[RES_METAL] + $fleet_list['own']['total'][RES_METAL], true, true), 'CRYSTAL_FLEET' => pretty_number($temp[RES_CRYSTAL] + $fleet_list['own']['total'][RES_CRYSTAL], true, true), 'DEUTERIUM_FLEET' => pretty_number($temp[RES_DEUTERIUM] + $fleet_list['own']['total'][RES_DEUTERIUM], true, true), 'BUILD_CAN2' => $build_data['CAN'][BUILD_CREATE])); } // if(count($que['ques'][$que_id][$user['id']][$planet_id]) >= que_get_max_que_length($user, $planet, $que_id, $que_data)) $template->assign_vars(array('QUE_ID' => QUE_RESEARCH, 'FLEET_OWN_COUNT' => $fleet_list['own']['count'], 'ARTIFACT_ID' => ART_HEURISTIC_CHIP, 'ARTIFACT_LEVEL' => mrc_get_level($user, array(), ART_HEURISTIC_CHIP), 'ARTIFACT_NAME' => $lang['tech'][ART_HEURISTIC_CHIP], 'REQUEST_URI' => $_SERVER['REQUEST_URI'], 'PAGE_HEADER' => $page_header = $lang['tech'][UNIT_TECHNOLOGIES] . ($user['user_as_ally'] ? " {$lang['sys_of_ally']} {$user['username']}" : ''), 'CONFIG_RESEARCH_QUE' => $config->server_que_length_research)); display(parsetemplate($template), $page_header); }
function tpl_parse_planet($planet, $que) { global $lang, $config, $time_now; $fleet_list = flt_get_fleets_to_planet($planet); $hangar = explode(';', $planet['b_hangar_id']); foreach ($hangar as $hangar_row) { if ($hangar_row) { $hangar_row = explode(',', $hangar_row); $hangar_que['que'][] = array('id' => $hangar_row[0], 'count' => $hangar_row[1]); $hangar_que[$hangar_row[0]] += $hangar_row[1]; } } $hangar_build_tip = $hangar_que['que'][0]['id'] ? $lang[tech][$hangar_que['que'][0]['id']] : ''; $result = array('ID' => $planet['id'], 'NAME' => $planet['name'], 'IMAGE' => $planet['image'], 'GALAXY' => $planet['galaxy'], 'SYSTEM' => $planet['system'], 'PLANET' => $planet['planet'], 'TYPE' => $planet['planet_type'], 'COORDINATES' => uni_render_coordinates($planet), 'METAL_PERCENT' => $planet['metal_mine_porcent'] * 10, 'CRYSTAL_PERCENT' => $planet['crystal_mine_porcent'] * 10, 'DEUTERIUM_PERCENT' => $planet['deuterium_sintetizer_porcent'] * 10, 'TECH' => $planet['b_tech'] ? $lang['tech'][$planet['b_tech_id']] . ' ' . pretty_time($planet['b_tech'] - $time_now) : 0, 'HANGAR' => $hangar_build_tip, 'hangar_que' => $hangar_que, 'FIELDS_CUR' => $planet['field_current'], 'FIELDS_MAX' => eco_planet_fields_max($planet), 'FILL' => min(100, floor($planet['field_current'] / eco_planet_fields_max($planet) * 100)), 'FLEET_OWN' => $fleet_list['own']['count'], 'FLEET_ENEMY' => $fleet_list['enemy']['count'], 'FLEET_NEUTRAL' => $fleet_list['neutral']['count'], 'fleet_list' => $fleet_list); if (!empty($que)) { $que_item = $que['que'][QUE_STRUCTURES][0]; if ($que_item) { $result['BUILDING_ID'] = $que_item['ID']; $result['BUILDING_TIP'] = $que_item['NAME']; $result['BUILDING'] = int_buildCounter($planet, 'building', $planet['id'], $que); } } return $result; }
$fleet_list = $template_planet['fleet_list']; if ($fleet_list['own']['count']) { $planet_fleet_id = "p{$UserPlanet['id']}"; $fleets_to_planet[$UserPlanet['id']] = tpl_parse_fleet_sn($fleet_list['own']['total'], $planet_fleet_id); // $fleet_id++;tpl_parse_fleet_sn } if ($UserPlanet['planet_type'] == PT_MOON) { continue; } $moon = db_planet_by_parent($UserPlanet['id']); if ($moon) { $moon_fill = min(100, floor($moon['field_current'] / eco_planet_fields_max($moon) * 100)); } else { $moon_fill = 0; } $moon_fleets = flt_get_fleets_to_planet($moon); $template->assign_block_vars('planet', array_merge($template_planet, array('PLANET_FLEET_ID' => $planet_fleet_id, 'MOON_ID' => $moon['id'], 'MOON_NAME' => $moon['name'], 'MOON_IMG' => $moon['image'], 'MOON_FILL' => min(100, $moon_fill), 'MOON_ENEMY' => $moon_fleets['enemy']['count'], 'MOON_PLANET' => $moon['parent_planet']))); $planet_count++; } sn_db_transaction_commit(); tpl_assign_fleet($template, $fleets_to_planet); tpl_assign_fleet($template, $fleets); $lune = $planetrow['planet_type'] == PT_PLANET ? db_planet_by_parent($planetrow['id']) : db_planet_by_id($planetrow['parent_planet']); if ($lune) { $template->assign_vars(array('MOON_ID' => $lune['id'], 'MOON_IMG' => $lune['image'], 'MOON_NAME' => $lune['name'])); } $planet_fill = floor($planetrow['field_current'] / eco_planet_fields_max($planetrow) * 100); $planet_fill = $planet_fill > 100 ? 100 : $planet_fill; $planet_recyclers_orbiting = 0; foreach (sn_get_groups('flt_recyclers') as $recycler_id) { $planet_recyclers_orbiting += mrc_get_level($user, $planetrow, $recycler_id);
function sn_tpl_render_topnav(&$user, $planetrow) { if (!is_array($user)) { return ''; } global $lang, $config; $GET_mode = sys_get_param_str('mode'); $template = gettemplate('topnav', true); /* $planetrow = $planetrow ? $planetrow : $user['current_planet']; sn_db_transaction_start(); $planetrow = sys_o_get_updated($user, $planetrow, SN_TIME_NOW); sn_db_transaction_commit(); $planetrow = $planetrow['planet']; */ $ThisUsersPlanets = db_planet_list_sorted($user); // while ($CurPlanet = db_fetch($ThisUsersPlanets)) foreach ($ThisUsersPlanets as $CurPlanet) { if (!$CurPlanet['destruyed']) { $fleet_listx = flt_get_fleets_to_planet($CurPlanet); $template->assign_block_vars('topnav_planets', array('ID' => $CurPlanet['id'], 'NAME' => $CurPlanet['name'], 'PLIMAGE' => $CurPlanet['image'], 'FLEET_ENEMY' => $fleet_listx['enemy']['count'], 'COORDS' => uni_render_coordinates($CurPlanet), 'SELECTED' => $CurPlanet['id'] == $user['current_planet'] ? ' selected' : '')); } } $fleet_flying_list = tpl_get_fleets_flying($user); tpl_topnav_event_build($template, $fleet_flying_list[0]); tpl_topnav_event_build($template, $fleet_flying_list[MT_EXPLORE], 'expedition'); que_tpl_parse($template, QUE_RESEARCH, $user); $str_date_format = "%3\$02d %2\$0s %1\$04d {$lang['top_of_year']} %4\$02d:%5\$02d:%6\$02d"; $time_now_parsed = getdate(SN_TIME_NOW); $time_local_parsed = getdate(defined('SN_CLIENT_TIME_LOCAL') ? SN_CLIENT_TIME_LOCAL : SN_TIME_NOW); if ($config->game_news_overview) { nws_render($template, "WHERE UNIX_TIMESTAMP(`tsTimeStamp`) >= {$user['news_lastread']}", $config->game_news_overview); } $notes_query = doquery("SELECT * FROM {{notes}} WHERE `owner` = {$user['id']} AND `sticky` = 1 ORDER BY priority DESC, time DESC"); while ($note_row = db_fetch($notes_query)) { note_assign($template, $note_row); } $premium_lvl = mrc_get_level($user, false, UNIT_PREMIUM, true, true); $template->assign_vars(array('QUE_ID' => QUE_RESEARCH, 'QUE_HTML' => 'topnav', 'RESEARCH_ONGOING' => (bool) $user['que'], 'TIME_TEXT' => sprintf($str_date_format, $time_now_parsed['year'], $lang['months'][$time_now_parsed['mon']], $time_now_parsed['mday'], $time_now_parsed['hours'], $time_now_parsed['minutes'], $time_now_parsed['seconds']), 'TIME_TEXT_LOCAL' => sprintf($str_date_format, $time_local_parsed['year'], $lang['months'][$time_local_parsed['mon']], $time_local_parsed['mday'], $time_local_parsed['hours'], $time_local_parsed['minutes'], $time_local_parsed['seconds']), 'GAME_BLITZ_REGISTER' => $config->game_blitz_register, 'GAME_BLITZ_REGISTER_TEXT' => $lang['sys_blitz_registration_mode_list'][$config->game_blitz_register], 'BLITZ_REGISTER_OPEN' => $config->game_blitz_register == BLITZ_REGISTER_OPEN, 'BLITZ_REGISTER_CLOSED' => $config->game_blitz_register == BLITZ_REGISTER_CLOSED, 'BLITZ_REGISTER_SHOW_LOGIN' => $config->game_blitz_register == BLITZ_REGISTER_SHOW_LOGIN, 'BLITZ_REGISTER_DISCLOSURE_NAMES' => $config->game_blitz_register == BLITZ_REGISTER_DISCLOSURE_NAMES, 'GAME_BLITZ' => $config->game_mode == GAME_BLITZ, 'USERS_ONLINE' => $config->var_online_user_count, 'USERS_TOTAL' => $config->users_amount, 'USER_RANK' => $user['total_rank'], 'USER_NICK' => $user['username'], 'USER_AVATAR' => $user['avatar'], 'USER_AVATARID' => $user['id'], 'USER_PREMIUM' => $premium_lvl, 'USER_RACE' => $user['player_race'], 'TOPNAV_CURRENT_PLANET' => $user['current_planet'], 'TOPNAV_MODE' => $GET_mode, 'TOPNAV_DARK_MATTER' => mrc_get_level($user, '', RES_DARK_MATTER), 'TOPNAV_DARK_MATTER_TEXT' => pretty_number(mrc_get_level($user, '', RES_DARK_MATTER)), 'TOPNAV_METAMATTER' => mrc_get_level($user, '', RES_METAMATTER), 'TOPNAV_METAMATTER_TEXT' => pretty_number(mrc_get_level($user, '', RES_METAMATTER)), 'TOPNAV_PAYMENT' => sn_module_get_active_count('payment') && !defined('SN_GOOGLE'), 'TOPNAV_MESSAGES_ADMIN' => $user['msg_admin'], 'TOPNAV_MESSAGES_PLAYER' => $user['mnl_joueur'], 'TOPNAV_MESSAGES_ALLIANCE' => $user['mnl_alliance'], 'TOPNAV_MESSAGES_ATTACK' => $user['mnl_attaque'], 'TOPNAV_MESSAGES_ALL' => $user['new_message'], 'TOPNAV_FLEETS_FLYING' => count($fleet_flying_list[0]), 'TOPNAV_FLEETS_TOTAL' => GetMaxFleets($user), 'TOPNAV_EXPEDITIONS_FLYING' => count($fleet_flying_list[MT_EXPLORE]), 'TOPNAV_EXPEDITIONS_TOTAL' => get_player_max_expeditons($user), 'TOPNAV_QUEST_COMPLETE' => get_quest_amount_complete($user['id']), 'GAME_NEWS_OVERVIEW' => $config->game_news_overview)); if (defined('SN_RENDER_NAVBAR_PLANET') && SN_RENDER_NAVBAR_PLANET === true || $user['option_list'][OPT_INTERFACE]['opt_int_navbar_resource_force'] && SN_RENDER_NAVBAR_PLANET !== false) { tpl_set_resource_info($template, $planetrow); $template->assign_vars(array('SN_RENDER_NAVBAR_PLANET' => true, 'SN_NAVBAR_HIDE_FLEETS' => true)); } return $template; }
/** * eco_build.php * * @version 1.5 - Using PTE (not everywhere) by Gorlum for http://supernova.ws * @version 1.4 - Complying with PCG by Gorlum for http://supernova.ws * @version 1.3 - Security checked for SQL-injection by Gorlum for http://supernova.ws // 1.0 Mise en module initiale (creation) // 1.1 FIX interception cheat +1 // 1.2 FIX interception cheat destruction a -1 * @version 1.1 * @copyright 2008 by Chlorel for XNova */ function eco_build($que_type, $user, &$planet, $que) { global $sn_data, $lang, $config, $time_now; // start transaction here $template = gettemplate('buildings_builds', true); // Caching values that used more then one time into local variables $config_resource_multiplier = $config->resource_multiplier; $planet_type_structs = $sn_data['groups']['build_allow'][$planet['planet_type']]; // Getting parameters $action = sys_get_param_escaped('action'); $unit_id = sys_get_param_int('unit_id'); $unit_level = sys_get_param_int('unit_level'); $GET_listid = $_GET['listid']; $que_type = $que_type == SUBQUE_FLEET || $que_type == SUBQUE_DEFENSE ? QUE_HANGAR : $que_type; CheckPlanetUsedFields($planet); if ($action) { switch ($action) { case 'create': // Add unit to que for build $que = eco_que_add($user, $planet, $que, QUE_STRUCTURES, $unit_id); break; case 'destroy': // Add unit to que for remove $que = eco_que_add($user, $planet, $que, QUE_STRUCTURES, $unit_id, 1, BUILD_DESTROY); break; case 'trim': // Cancel unit from que $que = eco_que_clear($user, $planet, $que, QUE_STRUCTURES, true); break; case 'clear': // Clear que $que = eco_que_clear($user, $planet, $que, QUE_STRUCTURES); break; } header("Location: {$_SERVER['PHP_SELF']}?mode={$que_type}"); } /* // Code for fully working new que system $hangar_busy = count($que['que'][QUE_HANGAR]); $lab_busy = count($que['que'][QUE_RESEARCH]) && !$config->BuildLabWhileRun; */ $que_length = count($que['que'][$que_type]); $can_que_element = $que_length < MAX_BUILDING_QUEUE_SIZE; $fleet_list = flt_get_fleets_to_planet($planet); $caps = ECO_getPlanetCaps($user, &$planet); $planet_fields_max = eco_planet_fields_max($planet); $planet_fields_current = $planet['field_current']; $planet_fields_que = -$que['amounts'][$que_type]; $planet_fields_free = max(0, $planet_fields_max - $planet_fields_current + $planet_fields_que); $planet_fields_queable = $planet_fields_free > 0; $planet_temp_max = $planet['temp_max']; $GLOBALS['user_tech_energy'] = $user['energy_tech']; foreach ($planet_type_structs as $Element) { if (eco_can_build_unit($user, $planet, $Element)) { $element_name = $lang['tech'][$Element]; $element_sn_data =& $sn_data[$Element]; $element_level = $planet[$sn_data[$Element]['name']] + $que['in_que'][$Element]; // show energy on BuildingPage //================================ if ($element_sn_data['production']) { $element_production_energy = $element_sn_data['production'][RES_ENERGY]; $energy_current = floor($element_production_energy($element_level, 10, $planet_temp_max)); $energy_next = floor($element_production_energy($element_level + 1, 10, $planet_temp_max)); if ($Element == STRUC_MINE_SOLAR || $Element == STRUC_MINE_FUSION) { $energy_current = floor(mrc_modify_value($user, $planet, array(MRC_POWERMAN), $energy_current)); $energy_next = floor(mrc_modify_value($user, $planet, array(MRC_POWERMAN), $energy_next)); } $energy_balance = floor($energy_next - $energy_current); } else { $energy_balance = 0; } //================================ $build_data = eco_get_build_data($user, $planet, $Element, $element_level); $temp[RES_METAL] = floor($planet['metal'] + $fleet_list['own']['total'][RES_METAL] - $build_data[BUILD_CREATE][RES_METAL]); $temp[RES_CRYSTAL] = floor($planet['crystal'] + $fleet_list['own']['total'][RES_CRYSTAL] - $build_data[BUILD_CREATE][RES_CRYSTAL]); $temp[RES_DEUTERIUM] = floor($planet['deuterium'] + $fleet_list['own']['total'][RES_DEUTERIUM] - $build_data[BUILD_CREATE][RES_DEUTERIUM]); $template->assign_block_vars('production', array('ID' => $Element, 'NAME' => $element_name, 'DESCRIPTION' => $lang['info'][$Element]['description_short'], 'LEVEL' => $element_level, 'LEVEL_OLD' => $planet[$sn_data[$Element]['name']], 'LEVEL_CHANGE' => $que['in_que'][$Element], 'BUILD_CAN' => $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], '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, 'UNIT_BUSY' => eco_unit_busy($user, $planet, $que, $Element))); } } if (is_array($que['que'][$que_type])) { foreach ($que['que'][$que_type] as $que_element) { $template->assign_block_vars('que', $que_element); } } $template->assign_vars(array('TIME_NOW' => $time_now, 'QUE_ID' => $que_type, 'METAL' => $planet['metal'], 'CRYSTAL' => $planet['crystal'], 'DEUTERIUM' => $planet['deuterium'], 'METAL_INCOMING' => $fleet_list['own']['total'][RES_METAL], 'CRYSTAL_INCOMING' => $fleet_list['own']['total'][RES_CRYSTAL], 'DEUTERIUM_INCOMING' => $fleet_list['own']['total'][RES_DEUTERIUM], 'FIELDS_CURRENT' => $planet_fields_current, 'FIELDS_MAX' => $planet_fields_max, 'FIELDS_FREE' => $planet_fields_free, 'FIELDS_QUE' => $planet_fields_que == 0 ? '' : $planet_fields_que > 0 ? "+{$planet_fields_que}" : $planet_fields_que, 'QUE_HAS_PLACE' => $can_que_element, 'QUE_HAS_FIELDS' => $planet_fields_queable, 'FLEET_OWN' => $fleet_list['own']['count'], 'PAGE_HINT' => $lang['eco_bld_page_hint'])); display(parsetemplate($template), $lang['Builds']); }
function tpl_parse_planet($planet) { global $lang; $fleet_list = flt_get_fleets_to_planet($planet); $que = que_get($planet['id_owner'], $planet['id'], false); $structure_que = tpl_parse_planet_que($que, $planet, QUE_STRUCTURES); // TODO Заменить на que_tpl_parse_element($que_element); $structure_que_first = is_array($structure_que['que']) ? reset($structure_que['que']) : array(); $hangar_que = tpl_parse_planet_que($que, $planet, SUBQUE_FLEET); // TODO Заменить на que_tpl_parse_element($que_element); $hangar_que_first = is_array($hangar_que['que']) ? reset($hangar_que['que']) : array(); $defense_que = tpl_parse_planet_que($que, $planet, SUBQUE_DEFENSE); // TODO Заменить на que_tpl_parse_element($que_element); $defense_que_first = is_array($defense_que['que']) ? reset($defense_que['que']) : array(); $result = array('ID' => $planet['id'], 'NAME' => $planet['name'], 'IMAGE' => $planet['image'], 'GALAXY' => $planet['galaxy'], 'SYSTEM' => $planet['system'], 'PLANET' => $planet['planet'], 'TYPE' => $planet['planet_type'], 'COORDINATES' => uni_render_coordinates($planet), 'METAL_PERCENT' => $planet['metal_mine_porcent'] * 10, 'CRYSTAL_PERCENT' => $planet['crystal_mine_porcent'] * 10, 'DEUTERIUM_PERCENT' => $planet['deuterium_sintetizer_porcent'] * 10, 'STRUCTURE' => isset($structure_que_first['id']) ? $lang['tech'][$structure_que_first['id']] : '', 'HANGAR' => isset($hangar_que_first['id']) ? $lang['tech'][$hangar_que_first['id']] : '', 'hangar_que' => $hangar_que, 'DEFENSE' => isset($defense_que_first['id']) ? $lang['tech'][$defense_que_first['id']] : '', 'defense_que' => $defense_que, 'FIELDS_CUR' => $planet['field_current'], 'FIELDS_MAX' => eco_planet_fields_max($planet), 'FILL' => min(100, floor($planet['field_current'] / eco_planet_fields_max($planet) * 100)), 'FLEET_OWN' => $fleet_list['own']['count'], 'FLEET_ENEMY' => $fleet_list['enemy']['count'], 'FLEET_NEUTRAL' => $fleet_list['neutral']['count'], 'fleet_list' => $fleet_list, 'PLANET_GOVERNOR_ID' => $planet['PLANET_GOVERNOR_ID'], 'PLANET_GOVERNOR_NAME' => $lang['tech'][$planet['PLANET_GOVERNOR_ID']], 'PLANET_GOVERNOR_LEVEL' => $planet['PLANET_GOVERNOR_LEVEL'], 'PLANET_GOVERNOR_LEVEL_MAX' => get_unit_param($planet['PLANET_GOVERNOR_ID'], P_MAX_STACK)); if (!empty($que['ques'][QUE_STRUCTURES][$planet['id_owner']][$planet['id']])) { $result['building_que'] = array(); $building_que =& $que['ques'][QUE_STRUCTURES][$planet['id_owner']][$planet['id']]; foreach ($building_que as $que_element) { $result['building_que'][] = que_tpl_parse_element($que_element); } } return $result; }
function sn_eco_build($que_type, &$auser, &$planet) { global $lang, $config; if ($ally_id = sys_get_param_id('ally_id')) { define('SN_IN_ALLY', true); $ranks = ally_get_ranks($auser['ally']); if ($ranks[$auser['ally_rank_id']]['admin'] || $auser['ally']['ally_owner'] == $auser['id']) { $user =& $auser['ally']['player']; $planet = array('metal' => $user['metal'], 'crystal' => $user['crystal'], 'deuterium' => $user['deuterium']); } } if (!$user) { $user =& $auser; } switch ($action = sys_get_param_escaped('action')) { case 'create': // Add unit to que for build // Add unit to que for build case 'destroy': // Add unit to que for remove $operation_result = que_build($user, $planet, $action == 'destroy' ? BUILD_DESTROY : BUILD_CREATE); break; case 'trim': que_delete($que_type, $user, $planet, false); break; case 'clear': que_delete($que_type, $user, $planet, true); break; } $group_missile = sn_get_groups('missile'); $silo_capacity_free = 0; if ($que_type == QUE_STRUCTURES) { $build_unit_list = sn_get_groups('build_allow'); $build_unit_list = $build_unit_list[$planet['planet_type']]; $artifact_id = ART_NANO_BUILDER; $page_header = $lang['tech'][UNIT_STRUCTURES]; } elseif ($que_type == QUE_RESEARCH) { if (!mrc_get_level($user, $planet, STRUC_LABORATORY)) { message($lang['no_laboratory'], $lang['tech'][UNIT_TECHNOLOGIES]); } if (eco_unit_busy($user, $planet, UNIT_TECHNOLOGIES)) { message($lang['eco_bld_msg_err_laboratory_upgrading'], $lang['tech'][UNIT_TECHNOLOGIES]); } $build_unit_list = sn_get_groups('tech'); $artifact_id = ART_HEURISTIC_CHIP; $page_header = $lang['tech'][UNIT_TECHNOLOGIES] . ($user['user_as_ally'] ? " {$lang['sys_of_ally']} {$user['username']}" : ''); } elseif ($que_type == QUE_MERCENARY) { // if(!mrc_get_level($user, $planet, STRUC_LABORATORY)) { // message($lang['no_laboratory'], $lang['tech'][UNIT_TECHNOLOGIES]); // } // if(eco_unit_busy($user, $planet, UNIT_TECHNOLOGIES)) { // message($lang['eco_bld_msg_err_laboratory_upgrading'], $lang['tech'][UNIT_TECHNOLOGIES]); // } $build_unit_list = sn_get_groups('mercenaries'); $artifact_id = 0; $page_header = $lang['tech'][UNIT_MERCENARIES] . ($user['user_as_ally'] ? " {$lang['sys_of_ally']} {$user['username']}" : ''); } else { if (mrc_get_level($user, $planet, STRUC_FACTORY_HANGAR) == 0) { message($lang['need_hangar'], $lang['tech'][STRUC_FACTORY_HANGAR]); } $build_unit_list = sn_get_groups($page_mode = $que_type == SUBQUE_FLEET ? 'fleet' : 'defense'); $page_header = $lang[$page_mode]; $artifact_id = 0; $silo_capacity_free = mrc_get_level($user, $planet, STRUC_SILO) * get_unit_param(STRUC_SILO, P_CAPACITY); 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); } // Caching values that used more then one time into local variables // $config_resource_multiplier = $config->resource_multiplier; $config_resource_multiplier = game_resource_multiplier(); /* // Code for fully working new que system $hangar_busy = count($que['que'][QUE_HANGAR]); $lab_busy = count($que['que'][QUE_RESEARCH]) && !$config->BuildLabWhileRun; */ $template = gettemplate('buildings_builds', true); if (!empty($operation_result)) { $template->assign_block_vars('result', $operation_result); } $planet_id = $que_type == QUE_RESEARCH || $que_type == QUE_MERCENARY ? 0 : $planet['id']; $ques = que_get($user['id'], $planet_id, $que_type); $in_que =& $ques['in_que'][$que_type][$user['id']][$planet_id]; $que =& $ques['ques'][$que_type][$user['id']][$planet_id]; que_tpl_parse($template, $que_type, $user, $planet, $que); $que_length = count($que); $can_que_element = $que_length < que_get_max_que_length($user, $planet, $que_type); $fleet_list = flt_get_fleets_to_planet($planet); $planet_fields_max = eco_planet_fields_max($planet); $planet_fields_current = $planet['field_current']; $planet_fields_que = is_array($in_que) ? -array_sum($in_que) : 0; $planet_fields_free = max(0, $planet_fields_max - $planet_fields_current + $planet_fields_que); $planet_fields_queable = $que_type != QUE_STRUCTURES || $planet_fields_free > 0; //$planet_temp_max = $planet['temp_max']; $sn_modifiers_resource = sn_get_groups('modifiers'); $sn_modifiers_resource = $sn_modifiers_resource[MODIFIER_RESOURCE_PRODUCTION]; $sn_groups_density = sn_get_groups('planet_density'); $density_info = $sn_groups_density[$planet['density_index']][UNIT_RESOURCES]; $user_dark_matter = mrc_get_level($user, null, RES_DARK_MATTER); foreach ($build_unit_list as $unit_id) { $level_base = mrc_get_level($user, $planet, $unit_id, false, true); $level_effective = mrc_get_level($user, $planet, $unit_id); $level_in_que = $in_que[$unit_id]; $level_bonus = max(0, $level_effective - $level_base); $level_base_and_que = $level_base + $level_in_que; $unit_info = get_unit_param($unit_id); // pdump($unit_info, '$unit_info'); $unit_stackable = isset($unit_info[P_STACKABLE]) && $unit_info[P_STACKABLE]; $build_data = eco_get_build_data($user, $planet, $unit_id, $level_base_and_que); // pdump($build_data, '$build_data'); $temp[RES_METAL] = floor($planet['metal'] + $fleet_list['own']['total'][RES_METAL] - $build_data[BUILD_CREATE][RES_METAL]); $temp[RES_CRYSTAL] = floor($planet['crystal'] + $fleet_list['own']['total'][RES_CRYSTAL] - $build_data[BUILD_CREATE][RES_CRYSTAL]); $temp[RES_DEUTERIUM] = floor($planet['deuterium'] + $fleet_list['own']['total'][RES_DEUTERIUM] - $build_data[BUILD_CREATE][RES_DEUTERIUM]); $temp[RES_DARK_MATTER] = floor($user_dark_matter - $build_data[BUILD_CREATE][RES_DARK_MATTER]); $build_data['RESULT'][BUILD_CREATE] = $build_data['RESULT'][BUILD_CREATE] == BUILD_ALLOWED && !$can_que_element ? BUILD_QUE_FULL : $build_data['RESULT'][BUILD_CREATE]; // 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] - $level_in_que - $level_effective) : $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]) { $build_data['RESULT'][BUILD_CREATE] = BUILD_NO_RESOURCES; } elseif ($unit_is_missile && $silo_capacity_free < $unit_info[P_UNIT_SIZE]) { $build_data['RESULT'][BUILD_CREATE] = BUILD_SILO_FULL; } elseif ($unit_info[P_MAX_STACK]) { $build_data['RESULT'][BUILD_CREATE] = BUILD_MAX_REACHED; } } $build_result_text = $lang['sys_build_result'][$build_data['RESULT'][BUILD_CREATE]]; $build_result_text = !is_array($build_result_text) ? $build_result_text : (isset($build_result_text[$unit_id]) ? $build_result_text[$unit_id] : $build_result_text[0]); $template->assign_block_vars('production', array('ID' => $unit_id, 'NAME' => $lang['tech'][$unit_id], 'DESCRIPTION' => $lang['info'][$unit_id]['description_short'], 'LEVEL_OLD' => $level_base, 'LEVEL_BONUS' => $level_bonus, 'LEVEL_NEXT' => $level_base + $level_in_que + 1, 'LEVEL_QUED' => $level_in_que, 'LEVEL' => $level_base_and_que, 'CAN_BUILD' => $can_build, 'BUILD_CAN' => $build_data['CAN'][BUILD_CREATE], 'TIME' => pretty_time($build_data[RES_TIME][BUILD_CREATE]), 'TIME_SECONDS' => $build_data[RES_TIME][BUILD_CREATE], 'METAL' => $build_data[BUILD_CREATE][RES_METAL], 'METAL_TEXT' => pretty_number($build_data[BUILD_CREATE][RES_METAL], true, $planet['metal']), 'CRYSTAL' => $build_data[BUILD_CREATE][RES_CRYSTAL], 'CRYSTAL_TEXT' => pretty_number($build_data[BUILD_CREATE][RES_CRYSTAL], true, $planet['crystal']), 'DEUTERIUM' => $build_data[BUILD_CREATE][RES_DEUTERIUM], 'DEUTERIUM_TEXT' => pretty_number($build_data[BUILD_CREATE][RES_DEUTERIUM], true, $planet['deuterium']), 'ENERGY' => $build_data[BUILD_CREATE][RES_ENERGY], 'DARK_MATTER' => $build_data[BUILD_CREATE][RES_DARK_MATTER], 'DARK_MATTER_ONLY' => $build_data[P_OPTIONS][P_ONLY_DARK_MATTER], 'BUILD_RESULT' => $build_data['RESULT'][BUILD_CREATE], 'BUILD_RESULT_TEXT' => $build_result_text, 'DESTROY_RESULT' => $build_data['RESULT'][BUILD_DESTROY], '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), 'DARK_MATTER_REST' => pretty_number($temp[RES_DARK_MATTER], true, true), 'METAL_REST_NUM' => $temp[RES_METAL], 'CRYSTAL_REST_NUM' => $temp[RES_CRYSTAL], 'DEUTERIUM_REST_NUM' => $temp[RES_DEUTERIUM], 'DARK_MATTER_REST_NUM' => $temp[RES_DARK_MATTER], 'UNIT_BUSY' => eco_unit_busy($user, $planet, $que, $unit_id), 'MAP_IS_RESOURCE' => !empty($unit_info['production']))); if ($unit_stackable) { $level_production_base = array('ACTUAL_SHIELD' => pretty_number(mrc_modify_value($user, false, array(MRC_ADMIRAL, TECH_SHIELD), $unit_info['shield'])), 'ACTUAL_ARMOR' => pretty_number(mrc_modify_value($user, false, array(MRC_ADMIRAL, TECH_ARMOR), $unit_info['armor'])), 'ACTUAL_WEAPON' => pretty_number(mrc_modify_value($user, false, array(MRC_ADMIRAL, TECH_WEAPON), $unit_info['attack']))); if ($unit_info[P_UNIT_TYPE] == UNIT_SHIPS) { $ship_data = get_ship_data($unit_id, $user); $level_production_base += array('ACTUAL_SPEED' => pretty_number($ship_data['speed']), 'ACTUAL_CONSUMPTION' => pretty_number($ship_data['consumption']), 'ACTUAL_CAPACITY' => pretty_number($ship_data['capacity'])); } if ($unit_info['production']) { foreach ($unit_info['production'] as $resource_id => $resource_calc) { if ($resource_income = floor(mrc_modify_value($user, $planet, $sn_modifiers_resource, $resource_calc(1, 10, $user, $planet) * $config_resource_multiplier * (isset($density_info[$resource_id]) ? $density_info[$resource_id] : 1)))) { $level_production_base['R' . $resource_id] = $resource_income; } } } $template->assign_block_vars('production.resource', $level_production_base); } elseif ($unit_info['production']) { $level_production_base = array(); $element_level_start = $level_effective + $in_que[$unit_id]; foreach ($unit_info['production'] as $resource_id => $resource_calc) { if ($resource_income = floor(mrc_modify_value($user, $planet, $sn_modifiers_resource, $resource_calc($element_level_start, 10, $user, $planet) * $config_resource_multiplier * (isset($density_info[$resource_id]) ? $density_info[$resource_id] : 1)))) { $level_production_base[$resource_id] = $resource_income; } } $level_start = $level_base_and_que > 1 ? $level_effective + $level_in_que - 1 : 1; for ($i = 0; $i < 6; $i++) { $level_production = array('LEVEL' => $level_start + $i); foreach ($unit_info['production'] as $resource_id => $resource_calc) { if ($resource_income = floor(mrc_modify_value($user, $planet, $sn_modifiers_resource, $resource_calc($level_start + $i, 10, $user, $planet) * $config_resource_multiplier * (isset($density_info[$resource_id]) ? $density_info[$resource_id] : 1)))) { $level_production['R' . $resource_id] = $resource_income; $level_production['D' . $resource_id] = $resource_income - $level_production_base[$resource_id]; } } $template->assign_block_vars('production.resource', $level_production); } } elseif ($unit_id == TECH_ASTROTECH) { $element_level_start = $level_effective + $in_que[$unit_id]; /* foreach($unit_info['production'] as $resource_id => $resource_calc) { if($resource_income = floor(mrc_modify_value($user, $planet, $sn_modifiers_resource, $resource_calc($element_level_start, 10, $user, $planet) * $config_resource_multiplier * (isset($density_info[$resource_id]) ? $density_info[$resource_id] : 1)))) { $level_production_base[$resource_id] = $resource_income; } } */ $level_production_base = array(UNIT_PLAYER_EXPEDITIONS_MAX => get_player_max_expeditons($user, $element_level_start), UNIT_PLAYER_COLONIES_MAX => get_player_max_colonies($user, $element_level_start)); $level_start = $level_base_and_que > 1 ? $level_effective + $level_in_que - 1 : 1; for ($i = 0; $i < 6; $i++) { $level_production = array('LEVEL' => $level_start + $i); $level_production['R' . UNIT_PLAYER_EXPEDITIONS_MAX] = get_player_max_expeditons($user, $level_start + $i); $level_production['D' . UNIT_PLAYER_EXPEDITIONS_MAX] = $level_production['R' . UNIT_PLAYER_EXPEDITIONS_MAX] - $level_production_base[UNIT_PLAYER_EXPEDITIONS_MAX]; $level_production['R' . UNIT_PLAYER_COLONIES_MAX] = get_player_max_colonies($user, $level_start + $i); $level_production['D' . UNIT_PLAYER_COLONIES_MAX] = $level_production['R' . UNIT_PLAYER_COLONIES_MAX] - $level_production_base[UNIT_PLAYER_COLONIES_MAX]; /* foreach($unit_info['production'] as $resource_id => $resource_calc) { if($resource_income = floor(mrc_modify_value($user, $planet, $sn_modifiers_resource, $resource_calc($level_start + $i, 10, $user, $planet) * $config_resource_multiplier * (isset($density_info[$resource_id]) ? $density_info[$resource_id] : 1)))) { $level_production['R'.$resource_id] = $resource_income; $level_production['D'.$resource_id] = $resource_income - $level_production_base[$resource_id]; } } $template->assign_block_vars('production.resource', $level_production); */ $template->assign_block_vars('production.resource', $level_production); $level_production_base = array(UNIT_PLAYER_EXPEDITIONS_MAX => $level_production['R' . UNIT_PLAYER_EXPEDITIONS_MAX], UNIT_PLAYER_COLONIES_MAX => $level_production['R' . UNIT_PLAYER_COLONIES_MAX]); } } //pdump(unit_requirements_render($user, $planet, $unit_id)); foreach (unit_requirements_render($user, $planet, $unit_id) as $requirement) { $template->assign_block_vars('production.require', $requirement); } } $sector_cost = eco_get_build_data($user, $planet, UNIT_SECTOR, mrc_get_level($user, $planet, UNIT_SECTOR), true); $sector_cost = $sector_cost[BUILD_CREATE][RES_DARK_MATTER]; $template->assign_vars(array('ALLY_ID' => $user['user_as_ally'], 'QUE_ID' => $que_type, 'SHOW_SECTORS' => $que_type == QUE_STRUCTURES, 'FLEET_OWN_COUNT' => $fleet_list['own']['count'], 'ARTIFACT_ID' => $artifact_id, 'ARTIFACT_LEVEL' => mrc_get_level($user, array(), $artifact_id), 'ARTIFACT_NAME' => $lang['tech'][$artifact_id], 'REQUEST_URI' => urlencode($_SERVER['REQUEST_URI']), 'PAGE_HEADER' => $page_header, 'TIME_NOW' => SN_TIME_NOW, 'PLN_ID' => $planet['id'], 'METAL' => $planet['metal'], 'CRYSTAL' => $planet['crystal'], 'DEUTERIUM' => $planet['deuterium'], 'DARK_MATTER' => $user_dark_matter, 'METAL_INCOMING' => $fleet_list['own']['total'][RES_METAL], 'CRYSTAL_INCOMING' => $fleet_list['own']['total'][RES_CRYSTAL], 'DEUTERIUM_INCOMING' => $fleet_list['own']['total'][RES_DEUTERIUM], 'FIELDS_CURRENT' => $planet_fields_current, 'FIELDS_MAX' => $planet_fields_max, 'FIELDS_FREE' => $planet_fields_free, 'FIELDS_QUE' => $planet_fields_que == 0 ? '' : $planet_fields_que > 0 ? "+{$planet_fields_que}" : $planet_fields_que, 'QUE_HAS_PLACE' => $can_que_element, 'QUE_HAS_FIELDS' => $planet_fields_queable, 'PAGE_HINT' => $lang['eco_bld_page_hint'], 'PLANET_TYPE' => $planet['planet_type'], 'SECTOR_CAN_BUY' => $sector_cost <= mrc_get_level($user, null, RES_DARK_MATTER), 'SECTOR_COST' => $sector_cost, 'SECTOR_COST_TEXT' => pretty_number($sector_cost), 'STACKABLE' => $unit_stackable, 'TEMPORARY' => intval($config->empire_mercenary_temporary && $que_type == QUE_MERCENARY), 'STRING_CREATE' => $que_type == QUE_MERCENARY ? $lang['bld_hire'] : ($que_type == QUE_RESEARCH ? $lang['bld_research'] : $lang['bld_create']), 'STRING_BUILD_TIME' => $que_type == QUE_RESEARCH ? $lang['ResearchTime'] : $lang['ConstructionTime'], 'U_opt_int_struc_vertical' => $user['option_list'][OPT_INTERFACE]['opt_int_struc_vertical'])); display(parsetemplate($template)); // , $lang['Builds'] }
$allyquery = doquery("SELECT * FROM `{{alliance}}` WHERE `id` = '{$uni_galaxyRowUser['ally_id']}';", '', true); $cached['allies'][$uni_galaxyRowUser['ally_id']] = $allyquery; } } $fleets_to_planet = flt_get_fleets_to_planet(false, $fleet_list[$Planet][PT_PLANET]); if ($fleets_to_planet['own']['count']) { $planet_fleet_id = $fleet_id; $fleets[] = tpl_parse_fleet_sn($fleets_to_planet['own']['total'], $fleet_id); $fleet_id++; } $uni_galaxyRowMoon = $planet_list[$Planet][PT_MOON]; if ($uni_galaxyRowMoon['destruyed']) { CheckAbandonPlanetState($uni_galaxyRowMoon); } else { $moon_fleet_id = 0; $fleets_to_planet = flt_get_fleets_to_planet(false, $fleet_list[$Planet][PT_MOON]); if ($fleets_to_planet['own']['count']) { $moon_fleet_id = $fleet_id; $fleets[] = tpl_parse_fleet_sn($fleets_to_planet['own']['total'], $fleet_id); $fleet_id++; } } } } // $recyclers_incoming = 0; $recyclers_incoming_capacity = 0; $uni_galaxyRowPlanet['debris'] = $uni_galaxyRowPlanet['debris_metal'] + $uni_galaxyRowPlanet['debris_crystal']; if ($uni_galaxyRowPlanet['debris']) { if ($fleet_list[$Planet][PT_DEBRIS]) { foreach ($fleet_list[$Planet][PT_DEBRIS] as $fleet_row) { if ($fleet_row['fleet_owner'] == $user['id']) {
function ResearchBuildingPage(&$user, &$planet, $que) { global $config, $sn_data, $lang, $time_now; if (!$planet[$sn_data[31]['name']]) { message($lang['no_laboratory'], $lang['tech'][TECH_TECHNOLOGY]); } $build_planet = !$user['b_tech_planet'] || $user['b_tech_planet'] == $planet['id'] ? $planet : doquery("SELECT * FROM {{planets}} WHERE `id` = {$user['b_tech_planet']} LIMIT 1;", '', true); $message = ''; switch (sys_get_param_str('action')) { case 'clear': case 'trim': $tech_id = $build_planet['b_tech_id']; if ($tech_id) { $build_data = eco_get_build_data($user, $build_planet, $tech_id, $user[$sn_data[$tech_id]['name']]); doquery("UPDATE {{planets}} SET `b_tech_id` = '0', `b_tech` = '0', \r\n `metal` = `metal` + {$build_data[BUILD_CREATE][RES_METAL]}, `crystal` = `crystal` + '{$build_data[BUILD_CREATE][RES_CRYSTAL]}', `deuterium` = `deuterium` + '{$build_data[BUILD_CREATE][RES_DEUTERIUM]}' \r\n WHERE `id` = '{$build_planet['id']}' LIMIT 1;"); doquery("UPDATE {{users}} SET `b_tech_planet` = '0' WHERE `id` = '{$user['id']}' LIMIT 1;"); header("Location: {$_SERVER['PHP_SELF']}?mode=" . QUE_RESEARCH); die; } break; case 'build': $tech_id = sys_get_param_int('tech'); if ($build_planet['b_tech_id']) { $message = $lang['build_research_in_progress']; } elseif (!eco_lab_is_building($que) && in_array($tech_id, $sn_data['groups']['tech']) && eco_can_build_unit($user, $planet, $tech_id) && IsElementBuyable($user, $planet, $tech_id)) { $build_data = eco_get_build_data($user, $planet, $tech_id, $user[$sn_data[$tech_id]['name']]); $build_time_end = $build_data[BUILD_CREATE][RES_TIME] + $time_now; doquery("UPDATE {{planets}} SET `b_tech_id` = '{$tech_id}', `b_tech` = '{$build_time_end}', \r\n `metal` = `metal` - {$build_data[BUILD_CREATE][RES_METAL]}, `crystal` = `crystal` - '{$build_data[BUILD_CREATE][RES_CRYSTAL]}', `deuterium` = `deuterium` - '{$build_data[BUILD_CREATE][RES_DEUTERIUM]}' \r\n WHERE `id` = '{$planet['id']}' LIMIT 1;"); doquery("UPDATE {{users}} SET `b_tech_planet` = '{$planet['id']}' WHERE `id` = '{$user['id']}' LIMIT 1;"); header("Location: {$_SERVER['PHP_SELF']}?mode=" . QUE_RESEARCH); die; } break; } $message = $message ? $message : (eco_lab_is_building($que) ? $lang['labo_on_update'] : ''); $template = gettemplate('buildings_research', true); $fleet_list = flt_get_fleets_to_planet($planet); foreach ($sn_data['groups']['tech'] as $Tech) { if (!eco_can_build_unit($user, $planet, $Tech)) { continue; } $building_level = $user[$sn_data[$Tech]['name']]; $build_data = eco_get_build_data($user, $planet, $Tech, $building_level); $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' => $Tech, 'NAME' => $lang['tech'][$Tech], 'LEVEL' => $building_level, 'LEVEL_NEXT' => $building_level + 1, 'DESCRIPTION' => $lang['info'][$Tech]['description_short'], 'BUILD_CAN' => $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], 'ENERGY' => $build_data[BUILD_CREATE][RES_ENERGY], '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']), 'ENERGY_PRINT' => pretty_number($build_data[BUILD_CREATE][RES_ENERGY], true, $planet['energy_max']), '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_FLEET' => pretty_number($temp[RES_METAL] + $fleet_list['own']['total'][RES_METAL], true, true), 'CRYSTAL_FLEET' => pretty_number($temp[RES_CRYSTAL] + $fleet_list['own']['total'][RES_CRYSTAL], true, true), 'DEUTERIUM_FLEET' => pretty_number($temp[RES_DEUTERIUM] + $fleet_list['own']['total'][RES_DEUTERIUM], true, true), 'BUILD_CAN2' => IsElementBuyable($user, $planet, $Tech) && !eco_lab_is_building($que))); } $que_length = 0; if ($build_planet['b_tech_id']) { $unit_id = $build_planet['b_tech_id']; $unit_data = eco_get_build_data($user, $build_planet, $unit_id, $user[$sn_data[$unit_id]['name']]); $template->assign_block_vars('que', array('ID' => $unit_id, 'QUE' => QUE_RESEARCH, 'NAME' => $lang['tech'][$unit_id], 'TIME' => $build_planet['b_tech'] - $time_now, 'TIME_FULL' => $unit_data[BUILD_CREATE][RES_TIME], 'AMOUNT' => 1, 'LEVEL' => $user[$sn_data[$unit_id]['name']] + 1)); $que_length++; } $template->assign_vars(array('PAGE_HEADER' => $lang['tech'][TECH_TECHNOLOGY], 'MESSAGE' => $message, 'FLEET_OWN_COUNT' => $fleet_list['own']['count'], 'QUE_ID' => QUE_RESEARCH, 'RESEARCH_ONGOING' => $build_planet['b_tech_id'], 'RESEARCH_TECH' => $build_planet['b_tech_id'], 'RESEARCH_TIME' => $build_planet['b_tech'] - $time_now, 'RESEARCH_HOME_ID' => $build_planet['id'], 'RESEARCH_HOME_NAME' => $build_planet['id'] != $planet['id'] ? $build_planet['name'] : '')); display(parsetemplate($template), $lang['tech'][TECH_TECHNOLOGY]); }