Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
function flt_can_attack($planet_src, $planet_dst, $fleet = array(), $mission, $options = false)
{
    global $config, $sn_data, $user, $time_now;
    if ($user['vacation']) {
        return ATTACK_OWN_VACATION;
    }
    if (empty($fleet) || !is_array($fleet)) {
        return ATTACK_NO_FLEET;
    }
    foreach ($fleet as $ship_id => $ship_count) {
        if ($ship_count > $planet_src[$sn_data[$ship_id]['name']]) {
            return ATTACK_NO_SHIPS;
        }
    }
    $speed = $options['speed'];
    if ($speed && ($speed != intval($speed) || $speed < 1 || $speed > 10)) {
        return ATTACK_WRONG_SPEED;
    }
    $speed_factor = get_fleet_speed();
    $distance = GetTargetDistance($planet_src['galaxy'], $planet_dst['galaxy'], $planet_src['system'], $planet_dst['system'], $planet_src['planet'], $planet_dst['planet']);
    $fleet_speed = min(GetFleetMaxSpeed($fleet, 0, $user));
    $fleet_speed_percent = $options['fleet_speed_percent'] ? $options['fleet_speed_percent'] : 10;
    $duration = GetMissionDuration($fleet_speed_percent, $fleet_speed, $distance, $speed_factor);
    $consumption = GetFleetConsumption($fleet, $speed_factor, $duration, $distance, $fleet_speed, $user, $fleet_speed_percent);
    if ($planet_src[$sn_data[RES_DEUTERIUM]['name']] < $fleet[RES_DEUTERIUM] + $consumption) {
        return ATTACK_NO_FUEL;
    }
    $fleet_start_time = $time_now + $duration;
    $fleet_group = $options['fleet_group'];
    if ($fleet_group) {
        if ($mission != MT_AKS) {
            return ATTACK_WRONG_MISSION;
        }
        $acs = doquery("SELECT * FROM {{aks}} WHERE id = '{$fleet_group}' LIMIT 1;", '', true);
        if (!$acs['id']) {
            return ATTACK_NO_ACS;
        }
        if ($planet_dst['galaxy'] != $acs['galaxy'] || $planet_dst['system'] != $acs['system'] || $planet_dst['planet'] != $acs['planet'] || $planet_dst['planet_type'] != $acs['planet_type']) {
            return ATTACK_ACS_WRONG_TARGET;
        }
        if ($fleet_start_time > $acs['ankunft']) {
            return ATTACK_ACS_TOO_LATE;
        }
    }
    $flying_fleets = $options['flying_fleets'];
    if (!$flying_fleets) {
        $flying_fleets = doquery("SELECT COUNT(fleet_id) AS `flying_fleets` FROM {{fleets}} WHERE `fleet_owner` = '{$user['id']}';", '', true);
        $flying_fleets = $flying_fleets['flying_fleets'];
    }
    if (GetMaxFleets($user) <= $flying_fleets && $mission != MT_MISSILE) {
        return ATTACK_NO_SLOTS;
    }
    // Checking for no planet
    if (!$planet_dst['id_owner']) {
        if ($mission == MT_COLONIZE && !$fleet[SHIP_COLONIZER]) {
            return ATTACK_NO_COLONIZER;
        }
        if ($mission == MT_EXPLORE || $mission == MT_COLONIZE) {
            return ATTACK_ALLOWED;
        }
        return ATTACK_NO_TARGET;
    }
    if ($mission == MT_RECYCLE) {
        if ($planet_dst['debris_metal'] + $planet_dst['debris_crystal'] <= 0) {
            return ATTACK_NO_DEBRIS;
        }
        if ($fleet[SHIP_RECYCLER] <= 0) {
            return ATTACK_NO_RECYCLERS;
        }
        return ATTACK_ALLOWED;
    }
    // Got planet. Checking if it is ours
    if ($planet_dst['id_owner'] == $user['id']) {
        if ($mission == MT_TRANSPORT || $mission == MT_RELOCATE) {
            return ATTACK_ALLOWED;
        }
        return ATTACK_OWN;
    }
    // No, planet not ours. Cutting mission that can't be send to not-ours planet
    if ($mission == MT_RELOCATE || $mission == MT_COLONIZE || $mission == MT_EXPLORE) {
        return ATTACK_WRONG_MISSION;
    }
    $enemy = doquery("SELECT * FROM {{users}} WHERE `id` = '{$planet_dst['id_owner']}' LIMIT 1;", '', true);
    // We cannot attack or send resource to users in VACATION mode
    if ($enemy['vacation'] && $target_mission != MT_RECYCLE) {
        return ATTACK_VACATION;
    }
    // Multi IP protection. Here we need a procedure to check proxies
    if (sys_is_multiaccount($user, $enemy)) {
        return ATTACK_SAME_IP;
    }
    $user_points = doquery("SELECT total_points FROM {{statpoints}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '{$user['id']}';", '', true);
    $user_points = $user_points['total_points'];
    $enemy_points = doquery("SELECT total_points FROM {{statpoints}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '{$enemy['id']}';", '', true);
    $enemy_points = $enemy_points['total_points'];
    // Is it transport? If yes - checking for buffing to prevent mega-alliance destroyer
    if ($mission == MT_TRANSPORT) {
        if ($user_points >= $enemy_points || $config->allow_buffing) {
            return ATTACK_ALLOWED;
        } else {
            return ATTACK_BUFFING;
        }
    }
    // Only aggresive missions passed to this point. HOLD counts as passive but aggresive
    // Is it admin with planet protection?
    if ($planet_dst['id_level'] > $user['authlevel']) {
        return ATTACK_ADMIN;
    }
    // Okay. Now skipping protection checks for inactive longer then 1 week
    if (!$enemy['onlinetime'] || $enemy['onlinetime'] >= $time_now - 60 * 60 * 24 * 7) {
        if ($enemy_points <= $config->game_noob_points && $user_points > $config->game_noob_points || $config->game_noob_factor && $user_points > $enemy_points * $config->game_noob_factor) {
            if ($mission != MT_HOLD) {
                return ATTACK_NOOB;
            }
            if ($mission == MT_HOLD && !($user['ally_id'] && $user['ally_id'] == $enemy['ally_id'] && $config->ally_help_weak)) {
                return ATTACK_NOOB;
            }
        }
    }
    // Is it HOLD mission? If yes - there should be ally deposit
    if ($mission == MT_HOLD) {
        if ($planet_dst[$sn_data[34]['name']]) {
            return ATTACK_ALLOWED;
        }
        return ATTACK_NO_ALLY_DEPOSIT;
    }
    if ($mission == MT_SPY) {
        if ($fleet[SHIP_SPY] >= 1) {
            return ATTACK_ALLOWED;
        }
        return ATTACK_NO_SPIES;
    }
    // Is it MISSILE mission?
    if ($mission == MT_MISSILE) {
        if ($planet_src[$sn_data[44]['name']] < $sn_data[503]['require'][44]) {
            return ATTACK_NO_SILO;
        }
        if (!$fleet[503]) {
            return ATTACK_NO_MISSILE;
        }
        $distance = abs($planet_dst['system'] - $planet_src['system']);
        $mip_range = get_missile_range();
        if ($distance > $mip_range || $planet_dst['galaxy'] != $planet_src['galaxy']) {
            return ATTACK_MISSILE_TOO_FAR;
        }
    }
    if ($mission == MT_DESTROY && $planet_dst['planet_type'] != PT_MOON) {
        return ATTACK_WRONG_MISSION;
    }
    if ($mission == MT_ATTACK || $mission == MT_AKS || $mission == MT_DESTROY) {
        return flt_bashing_check($user, $enemy, $planet_dst, $mission, $duration, $fleet_group);
    }
    return ATTACK_ALLOWED;
}
Exemplo n.º 3
0
            die('Hack attempt 302');
        }
        sn_db_transaction_commit();
    }
}
lng_include('overview');
lng_include('fleet');
if (!$planetrow) {
    message($lang['fl_noplanetrow'], $lang['fl_error']);
}
$template = gettemplate('flying_fleets', true);
$i = 0;
$fleet_query = doquery("SELECT * FROM {{fleets}} WHERE fleet_owner={$user['id']};");
while ($fleet_row = db_fetch($fleet_query)) {
    $i++;
    $fleet_data = tpl_parse_fleet_db($fleet_row, $i, $user);
    $template->assign_block_vars('fleets', $fleet_data['fleet']);
    foreach ($fleet_data['ships'] as $ship_data) {
        $template->assign_block_vars('fleets.ships', $ship_data);
    }
}
$MaxExpeditions = get_player_max_expeditons($user);
if ($MaxExpeditions) {
    $FlyingExpeditions = doquery("SELECT COUNT(fleet_owner) AS `expedi` FROM {{fleets}} WHERE `fleet_owner` = {$user['id']} AND `fleet_mission` = '" . MT_EXPLORE . "';", '', true);
    $FlyingExpeditions = $FlyingExpeditions['expedi'];
} else {
    $FlyingExpeditions = 0;
}
$fleet_flying_amount = doquery("SELECT COUNT(fleet_id) AS `flying_fleets` FROM {{fleets}} WHERE `fleet_owner`='{$user['id']}';", '', true);
$template->assign_vars(array('TIME_NOW' => SN_TIME_NOW, 'FLEETS_FLYING' => $fleet_flying_amount['flying_fleets'], 'FLEETS_MAX' => GetMaxFleets($user), 'EXPEDITIONS_FLYING' => $FlyingExpeditions, 'EXPEDITIONS_MAX' => $MaxExpeditions));
display($template, $lang['fl_title']);
Exemplo n.º 4
0
function sn_flt_can_attack($planet_src, $planet_dst, $fleet = array(), $mission, $options = false, &$result)
{
    //TODO: try..catch
    global $config, $user;
    if ($user['vacation']) {
        return $result = ATTACK_OWN_VACATION;
    }
    if (empty($fleet) || !is_array($fleet)) {
        return $result = ATTACK_NO_FLEET;
    }
    $sn_groups_mission = sn_get_groups('missions');
    if (!isset($sn_groups_mission[$mission])) {
        return $result = ATTACK_MISSION_ABSENT;
    }
    $sn_data_mission = $sn_groups_mission[$mission];
    //TODO: Проверка на отстуствие ресурсов в нетранспортных миссиях (Транспорт, Передислокация, Колонизация)
    //TODO: Проверка на наличие ресурсов при Транспорте
    // TODO: Проверка на отрицательные ресурсы при транспорте
    // TODO: Проверка на перегрузку при транспорте
    // TODO: В ракетных миссиях могут лететь только ракеты
    // TODO: В неракетных миссиях ракеты должны отсутствовать
    $ships = 0;
    $recyclers = 0;
    $spies = 0;
    $resources = 0;
    $ship_ids = sn_get_groups('fleet');
    $resource_ids = sn_get_groups('resources_loot');
    foreach ($fleet as $ship_id => $ship_count) {
        $is_ship = in_array($ship_id, $ship_ids);
        $is_resource = in_array($ship_id, $resource_ids);
        if (!$is_ship && !$is_resource) {
            // TODO Спецобработчик для Капитана и модулей
            //      return ATTACK_WRONG_UNIT;
        }
        if ($ship_count < 0) {
            return $result = $is_ship ? ATTACK_SHIP_COUNT_WRONG : ATTACK_RESOURCE_COUNT_WRONG;
        }
        if ($ship_count > mrc_get_level($user, $planet_src, $ship_id)) {
            // TODO ATTACK_NO_MISSILE
            return $result = $is_ship ? ATTACK_NO_SHIPS : ATTACK_NO_RESOURCES;
        }
        if ($is_ship) {
            $single_ship_data = get_ship_data($ship_id, $user);
            if ($single_ship_data[P_SPEED] <= 0) {
                return $result = ATTACK_ZERO_SPEED;
            }
            $ships += $ship_count;
            $recyclers += in_array($ship_id, sn_get_groups('flt_recyclers')) ? $ship_count : 0;
            $spies += $ship_id == SHIP_SPY ? $ship_count : 0;
        } elseif ($is_resource) {
            $resources += $ship_count;
        }
    }
    /*
      if($ships <= 0)
      {
        return ATTACK_NO_FLEET;
      }
    */
    if (isset($options['resources']) && $options['resources'] > 0 && !(isset($sn_data_mission['transport']) && $sn_data_mission['transport'])) {
        return $result = ATTACK_RESOURCE_FORBIDDEN;
    }
    /*
      elseif($mission == MT_TRANSPORT)
      {
        return ATTACK_TRANSPORT_EMPTY;
      }
    */
    $speed = $options['fleet_speed_percent'];
    if ($speed && ($speed != intval($speed) || $speed < 1 || $speed > 10)) {
        return $result = ATTACK_WRONG_SPEED;
    }
    $travel_data = flt_travel_data($user, $planet_src, $planet_dst, $fleet, $options['fleet_speed_percent']);
    if (mrc_get_level($user, $planet_src, RES_DEUTERIUM) < $fleet[RES_DEUTERIUM] + $travel_data['consumption']) {
        return $result = ATTACK_NO_FUEL;
    }
    if ($travel_data['consumption'] > $travel_data['capacity']) {
        return $result = ATTACK_TOO_FAR;
    }
    if ($travel_data['hold'] < $resources) {
        return $result = ATTACK_OVERLOADED;
    }
    $fleet_start_time = SN_TIME_NOW + $travel_data['duration'];
    $fleet_group = $options['fleet_group'];
    if ($fleet_group) {
        if ($mission != MT_AKS) {
            return $result = ATTACK_WRONG_MISSION;
        }
        $acs = doquery("SELECT * FROM {{aks}} WHERE id = '{$fleet_group}' LIMIT 1;", '', true);
        if (!$acs['id']) {
            return $result = ATTACK_NO_ACS;
        }
        if ($planet_dst['galaxy'] != $acs['galaxy'] || $planet_dst['system'] != $acs['system'] || $planet_dst['planet'] != $acs['planet'] || $planet_dst['planet_type'] != $acs['planet_type']) {
            return $result = ATTACK_ACS_WRONG_TARGET;
        }
        if ($fleet_start_time > $acs['ankunft']) {
            return $result = ATTACK_ACS_TOO_LATE;
        }
    }
    $flying_fleets = $options['flying_fleets'];
    if (!$flying_fleets) {
        $flying_fleets = doquery("SELECT COUNT(fleet_id) AS `flying_fleets` FROM {{fleets}} WHERE `fleet_owner` = '{$user['id']}';", '', true);
        $flying_fleets = $flying_fleets['flying_fleets'];
    }
    if (GetMaxFleets($user) <= $flying_fleets && $mission != MT_MISSILE) {
        return $result = ATTACK_NO_SLOTS;
    }
    // В одиночку шпионские зонды могут летать только в миссии Шпионаж, Передислокация и Транспорт
    if ($ships && $spies && $spies == $ships && !($mission == MT_SPY || $mission == MT_RELOCATE || $mission == MT_TRANSPORT)) {
        return $result = ATTACK_SPIES_LONLY;
    }
    // Checking for no planet
    if (!$planet_dst['id_owner']) {
        if ($mission == MT_COLONIZE && !$fleet[SHIP_COLONIZER]) {
            return $result = ATTACK_NO_COLONIZER;
        }
        if ($mission == MT_EXPLORE || $mission == MT_COLONIZE) {
            return $result = ATTACK_ALLOWED;
        }
        return $result = ATTACK_NO_TARGET;
    }
    if ($mission == MT_RECYCLE) {
        if ($planet_dst['debris_metal'] + $planet_dst['debris_crystal'] <= 0) {
            return $result = ATTACK_NO_DEBRIS;
        }
        if ($recyclers <= 0) {
            return $result = ATTACK_NO_RECYCLERS;
        }
        return $result = ATTACK_ALLOWED;
    }
    // Got planet. Checking if it is ours
    if ($planet_dst['id_owner'] == $user['id']) {
        if ($mission == MT_TRANSPORT || $mission == MT_RELOCATE) {
            return $result = ATTACK_ALLOWED;
        }
        return $planet_src['id'] == $planet_dst['id'] ? ATTACK_SAME : ATTACK_OWN;
    }
    // No, planet not ours. Cutting mission that can't be send to not-ours planet
    if ($mission == MT_RELOCATE || $mission == MT_COLONIZE || $mission == MT_EXPLORE) {
        return $result = ATTACK_WRONG_MISSION;
    }
    $enemy = db_user_by_id($planet_dst['id_owner']);
    // We cannot attack or send resource to users in VACATION mode
    if ($enemy['vacation'] && $mission != MT_RECYCLE) {
        return $result = ATTACK_VACATION;
    }
    // Multi IP protection
    // TODO: Here we need a procedure to check proxies
    if (sys_is_multiaccount($user, $enemy)) {
        return $result = ATTACK_SAME_IP;
    }
    $user_points = $user['total_points'];
    $enemy_points = $enemy['total_points'];
    // Is it transport? If yes - checking for buffing to prevent mega-alliance destroyer
    if ($mission == MT_TRANSPORT) {
        if ($user_points >= $enemy_points || $config->allow_buffing) {
            return $result = ATTACK_ALLOWED;
        } else {
            return $result = ATTACK_BUFFING;
        }
    }
    // Only aggresive missions passed to this point. HOLD counts as passive but aggresive
    // Is it admin with planet protection?
    if ($planet_dst['id_level'] > $user['authlevel']) {
        return $result = ATTACK_ADMIN;
    }
    // Okay. Now skipping protection checks for inactive longer then 1 week
    if (!$enemy['onlinetime'] || $enemy['onlinetime'] >= SN_TIME_NOW - 60 * 60 * 24 * 7) {
        if ($enemy_points <= $config->game_noob_points && $user_points > $config->game_noob_points || $config->game_noob_factor && $user_points > $enemy_points * $config->game_noob_factor) {
            if ($mission != MT_HOLD) {
                return $result = ATTACK_NOOB;
            }
            if ($mission == MT_HOLD && !($user['ally_id'] && $user['ally_id'] == $enemy['ally_id'] && $config->ally_help_weak)) {
                return $result = ATTACK_NOOB;
            }
        }
    }
    // Is it HOLD mission? If yes - there should be ally deposit
    if ($mission == MT_HOLD) {
        if (mrc_get_level($user, $planet_dst, STRUC_ALLY_DEPOSIT)) {
            return $result = ATTACK_ALLOWED;
        }
        return $result = ATTACK_NO_ALLY_DEPOSIT;
    }
    if ($mission == MT_SPY) {
        return $result = $spies >= 1 ? ATTACK_ALLOWED : ATTACK_NO_SPIES;
    }
    // Is it MISSILE mission?
    if ($mission == MT_MISSILE) {
        $sn_data_mip = get_unit_param(UNIT_DEF_MISSILE_INTERPLANET);
        if (mrc_get_level($user, $planet_src, STRUC_SILO) < $sn_data_mip[P_REQUIRE][STRUC_SILO]) {
            return $result = ATTACK_NO_SILO;
        }
        if (!$fleet[UNIT_DEF_MISSILE_INTERPLANET]) {
            return $result = ATTACK_NO_MISSILE;
        }
        $distance = abs($planet_dst['system'] - $planet_src['system']);
        $mip_range = flt_get_missile_range($user);
        if ($distance > $mip_range || $planet_dst['galaxy'] != $planet_src['galaxy']) {
            return $result = ATTACK_MISSILE_TOO_FAR;
        }
        if (isset($options['target_structure']) && $options['target_structure'] && !in_array($options['target_structure'], sn_get_groups('defense_active'))) {
            return $result = ATTACK_WRONG_STRUCTURE;
        }
    }
    if ($mission == MT_DESTROY && $planet_dst['planet_type'] != PT_MOON) {
        return $result = ATTACK_WRONG_MISSION;
    }
    if ($mission == MT_ATTACK || $mission == MT_AKS || $mission == MT_DESTROY) {
        return $result = flt_bashing_check($user, $enemy, $planet_dst, $mission, $travel_data['duration'], $fleet_group);
    }
    return $result = ATTACK_ALLOWED;
}
Exemplo n.º 5
0
function ShowTopNavigationBar($user, $planetrow)
{
    if (!is_array($user)) {
        return '';
    }
    global $time_now, $lang, $config, $sn_data;
    $GET_mode = sys_get_param_str('mode');
    $template = gettemplate('topnav', true);
    $planetrow = $planetrow ? $planetrow : $user['current_planet'];
    $planetrow = sys_o_get_updated($user, $planetrow, $time_now, true);
    $planetrow = $planetrow['planet'];
    $ThisUsersPlanets = SortUserPlanets($user);
    while ($CurPlanet = mysql_fetch_assoc($ThisUsersPlanets)) {
        if (!$CurPlanet['destruyed']) {
            $template->assign_block_vars('topnav_planets', array('ID' => $CurPlanet['id'], 'NAME' => $CurPlanet['name'], 'COORDS' => uni_render_coordinates($CurPlanet), 'SELECTED' => $CurPlanet['id'] == $user['current_planet'] ? ' selected' : ''));
        }
    }
    $day_of_week = $lang['weekdays'][date('w')];
    $day = date('d');
    $month = $lang['months'][date('m')];
    $year = date('Y');
    $hour = date('H');
    $min = date('i');
    $sec = date('s');
    // Количество флотов и экспедиций, а так же события флотов
    $fleet_flying_list = flt_get_fleets_flying($user);
    tpl_topnav_event_build($template, $fleet_flying_list[0]);
    tpl_topnav_event_build($template, $fleet_flying_list[MT_EXPLORE], 'expedition');
    // Подсчет кол-ва онлайн и кто онлайн
    $time = $time_now - 15 * 60;
    $online_count = doquery("SELECT COUNT(*) AS users_online FROM {{users}} WHERE `onlinetime`>'{$time}';", '', true);
    $template->assign_vars(array('TIME_NOW' => $time_now, 'DATE_TEXT' => "{$day_of_week}, {$day} {$month} {$year} {$lang['top_of_year']},", 'TIME_TEXT' => "{$hour}:{$min}:{$sec}", 'USERS_ONLINE' => $online_count['users_online'], 'USERS_TOTAL' => $config->users_amount, 'TOPNAV_CURRENT_PLANET' => $user['current_planet'], 'TOPNAV_MODE' => $GET_mode, 'TOPNAV_METAL' => round($planetrow["metal"], 2), 'TOPNAV_METAL_MAX' => round($planetrow["metal_max"]), 'TOPNAV_METAL_PERHOUR' => round($planetrow["metal_perhour"], 5), 'TOPNAV_METAL_TEXT' => pretty_number($planetrow["metal"], 2), 'TOPNAV_METAL_MAX_TEXT' => pretty_number($planetrow["metal_max"], 2, -$planetrow["metal"]), 'TOPNAV_CRYSTAL' => round($planetrow["crystal"], 2), 'TOPNAV_CRYSTAL_MAX' => round($planetrow["crystal_max"]), 'TOPNAV_CRYSTAL_PERHOUR' => round($planetrow["crystal_perhour"], 5), 'TOPNAV_CRYSTAL_TEXT' => pretty_number($planetrow["crystal"], 2), 'TOPNAV_CRYSTAL_MAX_TEXT' => pretty_number($planetrow["crystal_max"], 2, -$planetrow["crystal"]), 'TOPNAV_DEUTERIUM' => round($planetrow["deuterium"], 2), 'TOPNAV_DEUTERIUM_MAX' => round($planetrow["deuterium_max"]), 'TOPNAV_DEUTERIUM_PERHOUR' => round($planetrow["deuterium_perhour"], 5), 'TOPNAV_DEUTERIUM_TEXT' => pretty_number($planetrow["deuterium"], 2), 'TOPNAV_DEUTERIUM_MAX_TEXT' => pretty_number($planetrow["deuterium_max"], 2, -$planetrow["deuterium"]), 'TOPNAV_DARK_MATTER' => pretty_number($user[$sn_data[RES_DARK_MATTER]['name']]), 'ENERGY_BALANCE' => pretty_number($planetrow['energy_max'] - $planetrow['energy_used'], true, 0), 'ENERGY_MAX' => pretty_number($planetrow['energy_max']), 'TOPNAV_MESSAGES_ADMIN' => $user['msg_admin'], 'TOPNAV_MESSAGES_PLAYER' => $user['mnl_joueur'], 'TOPNAV_MESSAGES_ALLIANCE' => $user['mnl_alliance'], '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' => GetMaxExpeditions($user), 'TOPNAV_QUEST_COMPLETE' => get_quest_amount_complete($user['id'])));
    return $template;
}
Exemplo n.º 6
0
$target_mission = sys_get_param_int('target_mission');
if ($target_mission == MT_COLONIZE || $target_mission == MT_EXPLORE) {
    $planet_type = PT_PLANET;
} elseif ($target_mission == MT_RECYCLE) {
    $planet_type = PT_DEBRIS;
} elseif ($target_mission == MT_DESTROY) {
    $planet_type = PT_MOON;
} else {
    $planet_type = sys_get_param_int('planet_type');
    if (!$planet_type) {
        $planet_type = sys_get_param_int('planettype', $planetrow['planet_type']);
    }
}
$options = array();
$options['fleets_max'] = GetMaxFleets($user);
$MaxFleets = GetMaxFleets($user);
$FlyingFleets = doquery("SELECT COUNT(fleet_id) as Number FROM {{fleets}} WHERE `fleet_owner`='{$user['id']}'", '', true);
$FlyingFleets = $FlyingFleets['Number'];
if ($MaxFleets <= $FlyingFleets && $fleet_page && $fleet_page != 4) {
    message($lang['fl_noslotfree'], $lang['fl_error'], "fleet." . PHP_EX, 5);
}
$MaxExpeditions = get_player_max_expeditons($user);
if ($MaxExpeditions) {
    $FlyingExpeditions = doquery("SELECT COUNT(fleet_owner) AS `expedi` FROM {{fleets}} WHERE `fleet_owner` = {$user['id']} AND `fleet_mission` = '" . MT_EXPLORE . "';", '', true);
    $FlyingExpeditions = $FlyingExpeditions['expedi'];
} else {
    $FlyingExpeditions = 0;
}
switch ($fleet_page) {
    case 3:
    case 2:
Exemplo n.º 7
0
lng_include('universe');
lng_include('stat');
$mode = sys_get_param_str('mode');
$uni_galaxy = sys_get_param_int('galaxy', $planetrow['galaxy']);
$uni_system = sys_get_param_int('system', $planetrow['system']);
$planet = sys_get_param_int('planet', $planetrow['planet']);
if ($mode == 'name') {
    require_once 'includes/includes/uni_rename.php';
}
require_once 'includes/includes/flt_functions.php';
$CurrentPlanetID = sys_get_param_id('current');
$POST_galaxyLeft = sys_get_param_str('galaxyLeft');
$POST_galaxyRight = sys_get_param_str('galaxyRight');
$POST_systemLeft = sys_get_param_str('systemLeft');
$POST_systemRight = sys_get_param_str('systemRight');
$fleetmax = GetMaxFleets($user);
$CurrentPlID = $planetrow['id'];
$CurrentMIP = mrc_get_level($user, $planetrow, UNIT_DEF_MISSILE_INTERPLANET, false, true);
$HavePhalanx = mrc_get_level($user, $planetrow, STRUC_MOON_PHALANX);
$CurrentSystem = $planetrow['system'];
$CurrentGalaxy = $planetrow['galaxy'];
$maxfleet = doquery("SELECT COUNT(*) AS flying_fleet_count FROM {{fleets}} WHERE `fleet_owner` = '{$user['id']}';", '', true);
$maxfleet_count = $maxfleet['flying_fleet_count'];
if ($mode == 1) {
    if ($POST_galaxyLeft) {
        $uni_galaxy--;
    } elseif ($POST_galaxyRight) {
        $uni_galaxy++;
    }
    if ($POST_systemLeft) {
        $uni_system--;