function flt_get_fleets_to_planet($planet, $fleet_db_list = 0)
{
    global $user, $sn_data;
    $sn_groups =& $sn_data['groups'];
    if (!$planet && !$fleet_db_list) {
        return $planet;
    }
    if ($fleet_db_list === 0) {
        $fleet_db_list = flt_get_fleets_to_planet_db($planet);
    }
    foreach ($fleet_db_list as $fleet) {
        if ($fleet['fleet_owner'] == $user['id']) {
            $fleet_ownage = 'own';
        } else {
            switch ($fleet['fleet_mission']) {
                case MT_ATTACK:
                case MT_AKS:
                case MT_DESTROY:
                case MT_MISSILE:
                    $fleet_ownage = 'enemy';
                    break;
                default:
                    $fleet_ownage = 'neutral';
                    break;
            }
        }
        $fleet_list[$fleet_ownage]['fleets'][$fleet['fleet_id']] = $fleet;
        if ($fleet['fleet_mess'] == 1 || $fleet['fleet_mess'] == 0 && $fleet['fleet_mission'] == MT_RELOCATE || $fleet['fleet_target_owner'] != $user['id']) {
            $fleet_sn = flt_expand($fleet);
            foreach ($fleet_sn as $ship_id => $ship_amount) {
                if (in_array($ship_id, $sn_groups['fleet'])) {
                    $fleet_list[$fleet_ownage]['total'][$ship_id] += $ship_amount;
                }
            }
        }
        $fleet_list[$fleet_ownage]['count']++;
        $fleet_list[$fleet_ownage]['amount'] += $fleet['fleet_amount'];
        $fleet_list[$fleet_ownage]['total'][RES_METAL] += $fleet['fleet_resource_metal'];
        $fleet_list[$fleet_ownage]['total'][RES_CRYSTAL] += $fleet['fleet_resource_crystal'];
        $fleet_list[$fleet_ownage]['total'][RES_DEUTERIUM] += $fleet['fleet_resource_deuterium'];
    }
    return $fleet_list;
}
Example #2
0
function SYS_statCalculate()
{
    global $config, $time_now, $sta_update_step, $sn_data;
    $sn_groups_resources_loot =& $sn_data['groups']['resources_loot'];
    $StatDate = $time_now;
    $sta_update_step = -1;
    sta_set_time_limit('starting update');
    doquery('START TRANSACTION;');
    sta_set_time_limit('archiving old statistic');
    // Statistic rotation
    doquery("DELETE FROM {{statpoints}} WHERE `stat_code` = 2;");
    doquery("UPDATE {{statpoints}} SET `stat_code` = `stat_code` + 1;");
    sta_set_time_limit('calculating flying fleets stats');
    // Calculation of Fleet-In-Flight
    $UsrFleets = doquery("SELECT fleet_owner, fleet_array, fleet_resource_metal, fleet_resource_crystal, fleet_resource_deuterium FROM {{fleets}};");
    $i = 0;
    $row_num = mysql_num_rows($UsrFleets);
    while ($fleet_row = mysql_fetch_assoc($UsrFleets)) {
        if ($i % 100 == 0) {
            sta_set_time_limit("calculating flying fleets stats (fleet {$i}/{$row_num})", false);
        }
        $i++;
        $split = trim(str_replace(';', ' ', $fleet_row['fleet_array']));
        $split = explode(' ', $split);
        $FleetCounts = 0;
        $FleetPoints = 0;
        foreach ($split as $ship) {
            list($typ, $amount) = explode(',', $ship);
            $Units = $sn_data[$typ]['metal'] + $sn_data[$typ]['crystal'] + $sn_data[$typ]['deuterium'];
            $FleetPoints += $Units * $amount;
            $FleetCounts += $amount;
        }
        $ResourceCount = 0;
        $ResourcePoint = 0;
        foreach ($sn_groups_resources_loot as $resource_name) {
            $resource_amount = $fleet_row["fleet_resource_{$sn_data[$resource_name]['name']}"];
            if ($resource_amount > 0) {
                $ResourceCount += $resource_amount;
                $ResourcePoint += $resource_amount;
            }
        }
        $user_id = $fleet_row['fleet_owner'];
        $counts[$user_id]['fleet'] += $FleetCounts;
        $points[$user_id]['fleet'] += $FleetPoints / 1000;
        $counts[$user_id]['resources'] += $ResourceCount;
        $points[$user_id]['resources'] += $ResourcePoint / 1000;
    }
    sta_set_time_limit('calculating planets stats');
    // This is only admin-used as I know so far. Did I really need it as admin?!
    $UsrPlanets = doquery("SELECT * FROM {{planets}};");
    $i = 0;
    $row_num = mysql_num_rows($UsrPlanets);
    while ($planet_row = mysql_fetch_assoc($UsrPlanets)) {
        if ($i % 100 == 0) {
            sta_set_time_limit("calculating planets stats (planet {$i}/{$row_num})", false);
        }
        $i++;
        $BuildCounts = 0;
        $BuildPoints = 0;
        foreach ($sn_data['groups']['build'] as $n => $Building) {
            $unit_db_name = $sn_data[$Building]['name'];
            if ($planet_row[$unit_db_name] > 0) {
                $f = $sn_data[$Building]['factor'];
                $BuildPoints += ($sn_data[$Building]['metal'] + $sn_data[$Building]['crystal'] + $sn_data[$Building]['deuterium']) * (pow($f, $planet_row[$unit_db_name]) - $f) / ($f - 1);
                $BuildCounts += $planet_row[$unit_db_name] - 1;
            }
        }
        $DefenseCounts = 0;
        $DefensePoints = 0;
        foreach ($sn_data['groups']['defense'] as $n => $Defense) {
            $unit_db_name = $sn_data[$Defense]['name'];
            if ($planet_row[$unit_db_name] > 0) {
                $Units = $sn_data[$Defense]['metal'] + $sn_data[$Defense]['crystal'] + $sn_data[$Defense]['deuterium'];
                $DefensePoints += $Units * $planet_row[$unit_db_name];
                $DefenseCounts += $planet_row[$unit_db_name];
            }
        }
        $FleetCounts = 0;
        $FleetPoints = 0;
        foreach ($sn_data['groups']['fleet'] as $n => $Fleet) {
            $unit_db_name = $sn_data[$Fleet]['name'];
            if ($planet_row[$unit_db_name] > 0) {
                $Units = $sn_data[$Fleet]['metal'] + $sn_data[$Fleet]['crystal'] + $sn_data[$Fleet]['deuterium'];
                $FleetPoints += $Units * $planet_row[$unit_db_name];
                $FleetCounts += $planet_row[$unit_db_name];
            }
        }
        $ResourceCount = 0;
        $ResourcePoint = 0;
        foreach ($sn_groups_resources_loot as $resource_name) {
            $resource_amount = $planet_row[$sn_data[$resource_name]['name']];
            if ($resource_amount > 0) {
                $ResourceCount += $resource_amount;
                $ResourcePoint += $resource_amount;
            }
        }
        if ($planet_row['b_hangar_id']) {
            $ship_list = flt_expand(array('fleet_array' => $planet_row['b_hangar_id']));
            foreach ($ship_list as $ship_id => $ship_amount) {
                $data = $sn_data[$ship_id];
                $ResourcePoint += ($data['metal'] + $data['crystal'] + $data['deuterium']) * $ship_amount;
                $ResourceCount += ($data['metal'] + $data['crystal'] + $data['deuterium']) * $ship_amount;
            }
        }
        $userID = $planet_row['id_owner'];
        $counts[$userID]['build'] += $BuildCounts;
        $counts[$userID]['defs'] += $DefenseCounts;
        $counts[$userID]['fleet'] += $FleetCounts;
        $counts[$userID]['resources'] += $ResourceCount;
        $points[$userID]['build'] += $BuildPoints / 1000;
        $points[$userID]['defs'] += $DefensePoints / 1000;
        $points[$userID]['fleet'] += $FleetPoints / 1000;
        $points[$userID]['resources'] += $ResourcePoint / 1000;
        $PlanetPoints = ($RetValue['BuildPoint'] + $RetValue['DefensePoint'] + $RetValue['FleetPoint'] + $RetValue['ResourcePoint']) / 1000;
        doquery("UPDATE {{planets}} SET `points` = '{$PlanetPoints}' WHERE `id` = '{$planet_row['id']}';");
    }
    sta_set_time_limit('posting new user stats to DB');
    $GameUsers = doquery("SELECT * FROM {{users}};");
    while ($user_row = mysql_fetch_assoc($GameUsers)) {
        $TechCounts = 0;
        $TechPoints = 0;
        foreach ($sn_data['groups']['tech'] as $n => $Techno) {
            $unit_db_name = $sn_data[$Techno]['name'];
            if ($user_row[$unit_db_name] > 0) {
                $f = $sn_data[$Techno]['factor'];
                $Units = $sn_data[$Techno]['metal'] + $sn_data[$Techno]['crystal'] + $sn_data[$Techno]['deuterium'];
                $TechCounts += $user_row[$unit_db_name] - 1;
                $TechPoints += ($sn_data[$Techno]['metal'] + $sn_data[$Techno]['crystal'] + $sn_data[$Techno]['deuterium']) * (pow($f, $user_row[$unit_db_name]) - $f) / ($f - 1);
            }
        }
        $userID = $user_row['id'];
        $counts[$userID]['tech'] = $TechCounts;
        $points[$userID]['tech'] = $TechPoints / 1000;
        $GPoints = array_sum($points[$userID]);
        $GCount = array_sum($counts[$userID]);
        $QryInsertStats = "INSERT INTO {{statpoints}} SET ";
        $QryInsertStats .= "`id_owner` = '" . $userID . "', ";
        $QryInsertStats .= "`id_ally` = '" . $user_row['ally_id'] . "', ";
        $QryInsertStats .= "`stat_type` = '1', ";
        // 1 pour joueur , 2 pour alliance
        $QryInsertStats .= "`stat_code` = '1', ";
        // de 1 a 2 mis a jour de maniere automatique
        $QryInsertStats .= "`tech_points` = '" . $points[$userID]['tech'] . "', ";
        $QryInsertStats .= "`tech_count` = '" . $counts[$userID]['tech'] . "', ";
        $QryInsertStats .= "`build_points` = '" . $points[$userID]['build'] . "', ";
        $QryInsertStats .= "`build_count` = '" . $counts[$userID]['build'] . "', ";
        $QryInsertStats .= "`defs_points` = '" . $points[$userID]['defs'] . "', ";
        $QryInsertStats .= "`defs_count` = '" . $counts[$userID]['defs'] . "', ";
        $QryInsertStats .= "`fleet_points` = '" . $points[$userID]['fleet'] . "', ";
        $QryInsertStats .= "`fleet_count` = '" . $counts[$userID]['fleet'] . "', ";
        $QryInsertStats .= "`res_points` = '" . $points[$userID]['resources'] . "', ";
        $QryInsertStats .= "`res_count` = '" . $counts[$userID]['resources'] . "', ";
        $QryInsertStats .= "`total_points` = '" . $GPoints . "', ";
        $QryInsertStats .= "`total_count` = '" . $GCount . "', ";
        $QryInsertStats .= "`stat_date` = '" . $StatDate . "';";
        doquery($QryInsertStats);
    }
    sta_set_time_limit('setting previous user stats from archive');
    doquery("\r\n    UPDATE {{statpoints}} as new\r\n      LEFT JOIN {{statpoints}} as old ON old.id_owner = new.id_owner AND old.stat_code = 2 AND old.stat_type = 1\r\n    SET\r\n      new.tech_old_rank = old.tech_rank,\r\n      new.build_old_rank = old.build_rank,\r\n      new.defs_old_rank  = old.defs_rank ,\r\n      new.fleet_old_rank = old.fleet_rank,\r\n      new.res_old_rank = old.res_rank,\r\n      new.total_old_rank = old.total_rank\r\n    WHERE\r\n      new.stat_type = 1 AND new.stat_code = 1;\r\n  ");
    // Some variables we need to update ranks
    $qryResetRowNum = 'SET @rownum=0;';
    $qryFormat = 'UPDATE {{statpoints}} SET `%1$s_rank` = (SELECT @rownum:=@rownum+1) WHERE `stat_type` = %2$d AND `stat_code` = 1 ORDER BY `%1$s_points` DESC, `id_owner` ASC;';
    $rankNames = array('tech', 'build', 'defs', 'fleet', 'res', 'total');
    sta_set_time_limit("updating ranks for players");
    // Updating player's ranks
    foreach ($rankNames as $rankName) {
        sta_set_time_limit("updating player rank '{$rankName}'", false);
        doquery($qryResetRowNum);
        doquery(sprintf($qryFormat, $rankName, 1));
    }
    sta_set_time_limit('posting new Alliance stats to DB');
    // Updating Allie's stats
    $QryInsertStats = "\r\n    INSERT INTO {{statpoints}}\r\n      (`tech_points`, `tech_count`, `build_points`, `build_count`, `defs_points`, `defs_count`,\r\n        `fleet_points`, `fleet_count`, `res_points`, `res_count`, `total_points`, `total_count`,\r\n        `stat_date`, `id_owner`, `id_ally`, `stat_type`, `stat_code`,\r\n        `tech_old_rank`, `build_old_rank`, `defs_old_rank`, `fleet_old_rank`, `res_old_rank`, `total_old_rank`\r\n      )\r\n      SELECT\r\n        SUM(u.`tech_points`), SUM(u.`tech_count`), SUM(u.`build_points`), SUM(u.`build_count`), SUM(u.`defs_points`),\r\n        SUM(u.`defs_count`), SUM(u.`fleet_points`), SUM(u.`fleet_count`), SUM(u.`res_points`), SUM(u.`res_count`),\r\n        SUM(u.`total_points`), SUM(u.`total_count`),\r\n        {$StatDate}, u.`id_ally`, 0, 2, 1,\r\n        a.tech_rank, a.build_rank, a.defs_rank, a.fleet_rank, a.res_rank, a.total_rank\r\n      FROM {{statpoints}} as u\r\n        LEFT JOIN {{statpoints}} as a ON a.id_owner = u.id_ally AND a.stat_code = 2 AND a.stat_type = 2\r\n      WHERE u.`stat_type` = 1 AND u.stat_code = 1 AND u.id_ally<>0\r\n      GROUP BY u.`id_ally`";
    doquery($QryInsertStats);
    sta_set_time_limit("updating ranks for Alliances");
    // --- Updating Allie's ranks
    foreach ($rankNames as $rankName) {
        sta_set_time_limit("updating Alliances rank '{$rankName}'", false);
        doquery($qryResetRowNum);
        doquery(sprintf($qryFormat, $rankName, 2));
    }
    sta_set_time_limit('purging outdated statistics from archive');
    // Deleting old stat_code
    // doquery ("DELETE FROM {{statpoints}} WHERE stat_code = 2;");
    // Counting real user count and updating values
    $userCount = doquery("SELECT COUNT(*) AS users_online FROM {{users}}", '', true);
    $config->db_saveItem('users_amount', $userCount['users_online']);
    doquery('COMMIT');
}
Example #3
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_to_send = 0;
    $recyclers_need = 0;
    if ($GalaxyRowPlanet["debris_metal"] || $GalaxyRowPlanet["debris_crystal"]) {
        if ($fleet_list[$Planet][PT_DEBRIS]) {
            foreach ($fleet_list[$Planet][PT_DEBRIS] as $fleet_row) {
                if ($fleet_row['fleet_owner'] == $user['id']) {
                    $fleet_data = flt_expand($fleet_row);
                    $recyclers_incoming += $fleet_data[SHIP_RECYCLER];
                }
            }
        }
        $recyclers_need = ceil(($GalaxyRowPlanet['debris_metal'] + $GalaxyRowPlanet['debris_crystal']) / $sn_data[SHIP_RECYCLER]['capacity']);
        $recyclers_to_send = min($CurrentRC, max(0, $recyclers_need - $recyclers_incoming));
    }
    $template->assign_block_vars('galaxyrow', array('PLANET_ID' => $GalaxyRowPlanet['id'], 'PLANET_NUM' => $Planet, 'PLANET_NAME' => $GalaxyRowPlanet['name'], 'PLANET_NAME_JS' => js_safe_string($GalaxyRowPlanet['name']), 'PLANET_DESTROYED' => $GalaxyRowPlanet["destruyed"], 'PLANET_TYPE' => $GalaxyRowPlanet["planet_type"], 'PLANET_ACTIVITY' => floor(($time_now - $GalaxyRowPlanet['last_update']) / 60), 'PLANET_IMAGE' => $GalaxyRowPlanet['image'], 'PLANET_FLEET_ID' => $planet_fleet_id, 'MOON_NAME_JS' => js_safe_string($GalaxyRowMoon['name']), 'MOON_DIAMETER' => number_format($GalaxyRowMoon['diameter'], 0, '', '.'), 'MOON_TEMP' => number_format($GalaxyRowMoon['temp_min'], 0, '', '.'), 'MOON_FLEET_ID' => $moon_fleet_id, 'DEBRIS_METAL' => $GalaxyRowPlanet['debris_metal'], 'DEBRIS_CRYSTAL' => $GalaxyRowPlanet['debris_crystal'], 'DEBRIS_RC_INC' => $recyclers_incoming, 'DEBRIS_RC_SEND' => $recyclers_to_send, 'DEBRIS_RC_NEED' => $recyclers_need, 'USER_ID' => $GalaxyRowUser['id'], 'USER_NAME' => $GalaxyRowUser['username'], 'USER_NAME_JS' => js_safe_string($GalaxyRowUser['username']), 'USER_RANK' => $GalaxyRowUser['rank'], 'USER_BANNED' => $GalaxyRowUser['bana'], 'USER_VACATION' => $GalaxyRowUser['vacation'], 'USER_ACTIVITY' => floor(($time_now - $GalaxyRowUser['onlinetime']) / (60 * 60 * 24)), 'USER_PROTECTED' => $RowUserPoints <= $config->game_noob_points, 'USER_NOOB' => $RowUserPoints * $config->game_noob_factor < $CurrentPoints && $config->game_noob_factor, 'USER_STRONG' => $CurrentPoints * $config->game_noob_factor < $RowUserPoints && $config->game_noob_factor, 'USER_AUTH' => $GalaxyRowUser['authlevel'], 'USER_ADMIN' => $lang['user_level_shortcut'][$GalaxyRowUser['authlevel']], 'ALLY_ID' => $allyquery['id'], 'ALLY_TAG' => $allyquery['ally_tag']));
}
tpl_assign_fleet($template, $fleets);
foreach ($cached['users'] as $PlanetUser) {
    if ($PlanetUser) {
        $template->assign_block_vars('users', array('ID' => $PlanetUser['id'], 'NAME' => $PlanetUser['username'], 'NAME_JS' => js_safe_string($PlanetUser['username']), 'RANK' => $PlanetUser['rank']));
    }
}