Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с запросом в АСП
Форумы Боевого Народа > Игры > Форумы игр серии Battlefield > Форум администраторов
bobby86
Вобщем такая проблема. На сервере играет очень много людей с офф аккаунтами, и естественно создаётся в БД bf2stats огромное колличество пустых записей. Приходится постоянно вручную чистить.

Хочу упростить себе задачу и удалять левые аккаунты постранично. Для этого в АСП нужно найти главный SQL запрос и изменить там сортировку с Имени на Rank.
Я искал искал и не нашел! Помогите плизз!

Адрес сервера
dofamin
Если я правильно понял, то надо удалять аккаунты из бд на которых 0 очков? Если так, то я удалю их через пхпмуадмин, там сортировка по очкам.
bobby86
Ты что со всех таблиц базы удаляешь вручную игроков. А ты знаешь что записи по игрокам надо удалять из всех таблиц?
serg005
просто реклама сервера
bobby86
Цитата(serg005 @ Суббота, 7 Августа 2010, 20:02:42) *
просто реклама сервера



Нет. Просто показал что сервер работает. Я даже не дал ссылку на клиента которая на рутрекере!
Я серьёзно прошу помощи без всяких реклам!
antonn
скрипт выложи. А то я как бы не нашел где там order по имени, везде по scores
Tema567
Действительно, а зачем вообще пользоваться всякими костылями, когда можно и нужно лечить корень проблемы, например поправить пару скриптов чтобы людям без валидного pid вообще не писалась стата, ибо давно известно что оффлайн акк и ранг вещи практически несовместимые.
antonn
в любом случаем нужен скрипт, у меня только старые версии
dofamin
Цитата(bobby86 @ Суббота, 7 Августа 2010, 12:13:05) *
Ты что со всех таблиц базы удаляешь вручную игроков. А ты знаешь что записи по игрокам надо удалять из всех таблиц?

Сорри, как-то упустил этот момент rolleyes.gif

Цитата(Tema567 @ Воскресенье, 8 Августа 2010, 09:52:18) *
Действительно, а зачем вообще пользоваться всякими костылями, когда можно и нужно лечить корень проблемы, например поправить пару скриптов чтобы людям без валидного pid вообще не писалась стата, ибо давно известно что оффлайн акк и ранг вещи практически несовместимые.

Был бы очень благодарен за такой скрипт smile.gif
bobby86
Цитата(antonn @ Воскресенье, 8 Августа 2010, 09:53:13) *
скрипт выложи. А то я как бы не нашел где там order по имени, везде по scores



И я не нашел. Но сортировка идёт по нику!
bobby86
Ну помогите плизз!
Tema567
bf2statistics.php
Код
    /********************************
    * Process 'Player Data'
    ********************************/
    $totalplayers = $data['pc'];
    $min_pid = 30000000;
    for ($x = 0; $x < $totalplayers; $x++)
    {
        // Check for player id and skip him
        if ($data["pID_$x"] < $min_pid)
        {
            continue;
        }


Без костылей, без глюков, без ботов и оффлайн-игроков

P.S. По мотивам этой темы
Tema567
А насчёт костылей (автоматического удаления) - пришлите пример вашей базы, напишу простенький утиль забавы ради <_<
bobby86
Понимаете в чём дело... Много людей играют с левым питоном, и у них идёт статистика на моём сервере даже с оффициальными онлайн аккаунтами! Верхний вариант будит просто некоторые нужные записи блокировать. Большая часть будит всё равно пустые заноситься в базу!
Tema567
Какие это ещё некоторые нужные? боты? или вы хотели чтобы оффлайн аккаунты писались? для них статистика изначально не реализована..
Верхняя запись блокирует: ботов (29000000-29999999) и оффлайн аккаунты (NULL), а при желании (если использовать проверку на запись в массиве) и выборочное блокирование по pid
Пустые записи даже не создадутся потому как у них pID = NULL, а дальше у вас похоже не настроен override offline/local IPs, из-за этого и есть пустые записи (дальше идет проверка и если ip == '127.0.0.1' то запись не пишется в базу)
P.S. прежде чем строить предположения - проверьте скрипт
bobby86
Подскажи что в оверрайде писать?

3 локалки и инетовский айпишник на сервере. Все эти ипшники туда?

Цитата
/********************************
* Process 'Player Data'
********************************/
$totalplayers = $data['pc'];
$min_pid = 30000000;
for ($x = 0; $x < $totalplayers; $x++)
{
// Check for player id and skip him
if ($data["pID_$x"] < $min_pid)
{
continue;
}
// Check player exisits in SNAPSHOT and that they meet the minimum required play time
if ($data["pID_$x"] && ($data["ctime_$x"] >= $cfg->get('stats_min_player_game_time'))) {
// Set global variables
$globals['mapscore'] += $data["rs_$x"];
$globals['mapkills'] += $data["kills_$x"];
$globals['mapdeaths'] += $data["deaths_$x"];

// Calculate wins/losses
$wins = $losses = 0;
if ($data["c_$x"])
........


Вот я код подкорректировал. Так должно выглядеть? или вместо "continue" писать все нижние строчки?
Tema567
Цитата(bobby86 @ Понедельник, 16 Августа 2010, 21:44:48) *
Подскажи что в оверрайде писать?

3 локалки и инетовский айпишник на сервере. Все эти ипшники туда?

Цитата

/********************************
* Process 'Player Data'
********************************/
$totalplayers = $data['pc'];
$min_pid = 30000000;
for ($x = 0; $x < $totalplayers; $x++)
{
// Check for player id and skip him
if ($data["pID_$x"] < $min_pid)
{
continue;
}
// Check player exisits in SNAPSHOT and that they meet the minimum required play time
if ($data["pID_$x"] && ($data["ctime_$x"] >= $cfg->get('stats_min_player_game_time'))) {
// Set global variables
$globals['mapscore'] += $data["rs_$x"];
$globals['mapkills'] += $data["kills_$x"];
$globals['mapdeaths'] += $data["deaths_$x"];

// Calculate wins/losses
$wins = $losses = 0;
if ($data["c_$x"])
........


Вот я код подкорректировал. Так должно выглядеть? или вместо "continue" писать все нижние строчки?

Всё так и должно быть,
в оверрайдах пропиши IP всех кого хочешь сделать локальными игроками (127.0.0.1)
bobby86
Нужные пиды на сервере:
6149320 - скорее всего онлайн аккаунт с офф сервера ЕА
4259241
40000111 - ПИДЫ эмулятора сервера ЕА
133999727 - тоже какой-то пид с которого шпилят и щитается стата.

Примеры пидов которым не идёт стата:

60104510
270300026
106397894
281385738


Тема напиши плизз что означает твой коррект скрипта.

Если пид меньше 30000000 то выходить или продолжать занесение?
Tema567
Цитата(bobby86 @ Вторник, 17 Августа 2010, 02:47:56) *
Нужные пиды на сервере:
6149320 - скорее всего онлайн аккаунт с офф сервера ЕА
4259241
40000111 - ПИДЫ эмулятора сервера ЕА
133999727 - тоже какой-то пид с которого шпилят и щитается стата.

Примеры пидов которым не идёт стата:

60104510
270300026
106397894
281385738


Тема напиши плизз что означает твой коррект скрипта.

Если пид меньше 30000000 то выходить или продолжать занесение?

если пид меньше 30000000 то выходить из обработки текущего игрока и продолжать итерации занесения всего массива
таким образом и можешь построить свои условия
http://wm-help.net/books-online/book/15200/15200-56.html

Я в php не очень, но должно выглядеть примерно так:
Код
$arr_pid = range(0,1000000);
$arr_pid += range(29000000,29999999);

if in_array($data["pID_$x"], $arr_pid)
{
continue;
}
bobby86
Проблему решил сортировкой. Я её нашел smile.gif

ASP\Includes\admin.content.php


Код
function buildPlayerList($task, $where) {
    global $cfg;
    
    $connection = @mysql_connect($cfg->get('db_host'), $cfg->get('db_user'), $cfg->get('db_pass'));
    @mysql_select_db($cfg->get('db_name'), $connection);
    
    // Check if AI Ignored
    $ai_ip = ($cfg->get('admin_ignore_ai'))?'127.0.0.1':'';
    
    // Pagination Code
    $limit = $cfg->get('admin_page_size');        // Sets how many results shown per page
    $query_count    = "SELECT count(*) AS cnt FROM player WHERE ip <> '{$ai_ip}'";
    $result_count    = mysql_query($query_count);
    if (mysql_num_rows($result_count)){
        $rowcount = mysql_fetch_array($result_count);
        $totalrows = $rowcount['cnt'];
    }
    if(!isset($_GET['page']) || (!is_numeric($_GET['page']))){
        $page = 1;
    } else {
        $page = $_GET['page'];
    }
    $limitvalue = $page * $limit - ($limit);    // Ex: (2 * 25) - 25 = 25 <- data starts at 25
    
    // Get Data
    $query = "SELECT * FROM player WHERE ip <> '{$ai_ip}' {$where} ORDER BY [COLOR=red]rank[/COLOR] LIMIT $limitvalue, $limit;";
    $result = mysql_query($query) or die("Error: " . mysql_error());
AI.
отредактировал файлы как описано выше. толку никакого. только стартует сервер, боты уже в статистике...
Jack-Metallurg
Этот вопрос уже терся. Ботов можно убрать из статы. Но тогда за убитых ботов игроку не будут начисляться очки. Т.е. , в ситуации, когда онлайн игрок один будет рубиться с ботами, в конце игры получит баранку. А потому ведение статы в соор-режиме потеряет всякий смысл.
А вот как сделать , чтобы в стату прописывалось ограниченное количество ботов - вот это вопрос, который до сих пор никто не смог решить. AI. Почитай тему Боты в статистике
AI.
Jack-Metallurg , спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.