Exemple #1
0
function flt_t_send_fleet($user, &$from, $to, $fleet, $mission, $options = array())
{
    //ini_set('error_reporting', E_ALL);
    //doquery('SET autocommit = 0;');
    //doquery('LOCK TABLES {{users}} READ, {{planets}} WRITE, {{fleet}} WRITE, {{aks}} WRITE, {{statpoints}} READ;');
    doquery('START TRANSACTION;');
    $from = sys_o_get_updated($user, $from['id'], $GLOBALS['time_now']);
    $from = $from['planet'];
    $speed_factor = get_fleet_speed();
    $distance = GetTargetDistance($from['galaxy'], $to['galaxy'], $from['system'], $to['system'], $from['planet'], $to['planet']);
    $fleet_speed = min(GetFleetMaxSpeed($fleet, 0, $user));
    $duration = GetMissionDuration(10, $fleet_speed, $distance, $speed_factor);
    $consumption = GetFleetConsumption($fleet, $speed_factor, $duration, $distance, $fleet_speed, $user);
    //!!
    $fleet_group = 0;
    //!!
    $options = array();
    $can_attack = flt_can_attack($from, $to, $fleet, $mission, $options);
    if ($can_attack != ATTACK_ALLOWED) {
        doquery('ROLLBACK');
        return $can_attack;
    }
    global $time_now, $sn_data;
    $fleet_start_time = $time_now + $duration;
    if ($mission == MT_EXPLORE or $mission == MT_HOLD) {
        $stay_duration = $options['stay_time'] * 3600;
        $stay_time = $fleet_start_time + $stay_duration;
    } else {
        $stay_duration = 0;
        $stay_time = 0;
    }
    $fleet_end_time = $fleet_start_time + $duration + $stay_duration;
    $fleet_ship_count = 0;
    $fleet_string = '';
    $planet_sub_query = '';
    foreach ($fleet as $unit_id => $amount) {
        if (!$amount || !$unit_id) {
            continue;
        }
        if (in_array($unit_id, $sn_data['groups']['fleet'])) {
            $fleet_ship_count += $amount;
            $fleet_string .= "{$unit_id},{$amount};";
        }
        $planet_sub_query .= "`{$sn_data[$unit_id]['name']}` = `{$sn_data[$unit_id]['name']}` - {$amount},";
    }
    $to['id_owner'] = intval($to['id_owner']);
    $QryInsertFleet = "INSERT INTO {{fleets}} SET ";
    $QryInsertFleet .= "`fleet_owner` = '{$user['id']}', ";
    $QryInsertFleet .= "`fleet_mission` = '{$mission}', ";
    $QryInsertFleet .= "`fleet_amount` = '{$fleet_ship_count}', ";
    $QryInsertFleet .= "`fleet_array` = '{$fleet_string}', ";
    $QryInsertFleet .= "`fleet_start_time` = '{$fleet_start_time}', ";
    $QryInsertFleet .= "`fleet_start_galaxy` = '{$from['galaxy']}', ";
    $QryInsertFleet .= "`fleet_start_system` = '{$from['system']}', ";
    $QryInsertFleet .= "`fleet_start_planet` = '{$from['planet']}', ";
    $QryInsertFleet .= "`fleet_start_type` = '{$from['planet_type']}', ";
    $QryInsertFleet .= "`fleet_end_time` = '{$fleet_end_time}', ";
    $QryInsertFleet .= "`fleet_end_stay` = '{$stay_time}', ";
    $QryInsertFleet .= "`fleet_end_galaxy` = '{$to['galaxy']}', ";
    $QryInsertFleet .= "`fleet_end_system` = '{$to['system']}', ";
    $QryInsertFleet .= "`fleet_end_planet` = '{$to['planet']}', ";
    $QryInsertFleet .= "`fleet_end_type` = '{$to['planet_type']}', ";
    $QryInsertFleet .= "`fleet_resource_metal` = '{$fleet[RES_METAL]}', ";
    $QryInsertFleet .= "`fleet_resource_crystal` = '{$fleet[RES_CRYSTAL]}', ";
    $QryInsertFleet .= "`fleet_resource_deuterium` = '{$fleet[RES_DEUTERIUM]}', ";
    $QryInsertFleet .= "`fleet_target_owner` = '{$to['id_owner']}', ";
    $QryInsertFleet .= "`fleet_group` = '{$fleet_group}', ";
    $QryInsertFleet .= "`start_time` = '{$time_now}';";
    doquery($QryInsertFleet);
    $QryUpdatePlanet = "UPDATE {{planets}} SET {$planet_sub_query} `deuterium` = `deuterium` - '{$consumption}' WHERE `id` = '{$from['id']}' LIMIT 1;";
    doquery($QryUpdatePlanet);
    if (BE_DEBUG) {
        debug($QryInsertFleet);
        debug($QryUpdatePlanet);
    }
    doquery("COMMIT;");
    // doquery('SET autocommit = 1;');
    $from = doquery("SELECT * FROM {{planets}} WHERE `id` = '{$from['id']}' LIMIT 1;", '', true);
    return ATTACK_ALLOWED;
    //ini_set('error_reporting', E_ALL ^ E_NOTICE);
}
Exemple #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;
}
Exemple #3
0
<?php

$allow_anonymous = true;
include 'common.' . substr(strrchr(__FILE__, '.'), 1);
lng_include('admin');
$template = gettemplate('server_info', true);
$template->assign_vars(array('game_speed' => get_game_speed(), 'fleet_speed' => get_fleet_speed(), 'game_build_and_research' => $config->BuildLabWhileRun, 'USER_VACATION_DISABLE' => $config->user_vacation_disable, 'ALLOW_BUFFING' => $config->allow_buffing, 'ALLY_HELP_WEAK' => $config->ally_help_weak, 'DB_VERSION' => DB_VERSION, 'SN_VERSION' => SN_VERSION, 'FLEET_BASHING_ATTACKS' => $config->fleet_bashing_attacks, 'fleet_bashing_interval' => sys_time_human($config->fleet_bashing_interval), 'fleet_bashing_scope' => sys_time_human($config->fleet_bashing_scope), 'fleet_bashing_war_delay' => sys_time_human($config->fleet_bashing_war_delay)));
display(parsetemplate($template));
Exemple #4
0
    $distance = abs($target_system - $planetrow['system']);
    $mipRange = $user['impulse_motor_tech'] * 5 - 1;
    $arrival = $time_now + round((30 + 60 * $distance) / get_fleet_speed());
    doquery("INSERT INTO `{{iraks}}` SET\r\n     `zielid` = '{$TargetRow['id_owner']}', `galaxy` = '{$target_galaxy}', `system` = '{$target_system}', `planet` = '{$target_planet}',\r\n     `owner` = '{$user['id']}', `galaxy_angreifer` = '{$planetrow['galaxy']}', `system_angreifer` = '{$planetrow['system']}', `planet_angreifer` = '{$planetrow['planet']}',\r\n     `zeit` = '{$arrival}', `anzahl` = '{$mips_sent}', `primaer` = '{$target_structure}';");
    $FleetSubQRY = "`{$sn_data[503]['name']}` = `{$sn_data[503]['name']}` - '{$mips_sent}', ";
    $Ship = 503;
    //doquery("UPDATE `{{planets}}` SET  WHERE `id` = '{$user['current_planet']}' LIMIT 1;");
} else {
    $Distance = GetTargetDistance($planetrow['galaxy'], $target_galaxy, $planetrow['system'], $target_system, $planetrow['planet'], $target_planet);
    $speedall = GetFleetMaxSpeed($fleet_array, 0, $user);
    $SpeedAllMin = min($speedall);
    $Duration = GetMissionDuration(10, $SpeedAllMin, $Distance, get_fleet_speed());
    $fleet_start_time = $Duration + time();
    $fleet_end_time = $Duration * 2 + time();
    $consumption = 0;
    $SpeedFactor = get_fleet_speed();
    foreach ($fleet_array as $Ship => $Count) {
        $ShipSpeed = $sn_data[$Ship]["speed"];
        $spd = 35000 / ($Duration * $SpeedFactor - 10) * sqrt($Distance * 10 / $ShipSpeed);
        $basicConsumption = $sn_data[$Ship]["consumption"] * $Count;
        $consumption += $basicConsumption * $Distance / 35000 * ($spd / 10 + 1) * ($spd / 10 + 1);
    }
    $consumption = round($consumption) + 1;
    if ($UserDeuterium < $consumption) {
        $ResultMessage = "13|{$lang['gs_c13']}|{$CurrentFlyingFleets}|{$UserSpyProbes}|{$UserRecycles}|{$UserMissiles}";
        die($ResultMessage);
    }
    $QryInsertFleet = "INSERT INTO {{fleets}} SET ";
    $QryInsertFleet .= "`fleet_owner` = '{$user['id']}', ";
    $QryInsertFleet .= "`fleet_mission` = '{$target_mission}', ";
    $QryInsertFleet .= "`fleet_amount` = '{$fleet_ship_count}', ";