Полная версия этой страницы:
Помогите с запросом в АСП
Вобщем такая проблема. На сервере играет очень много людей с офф аккаунтами, и естественно создаётся в БД bf2stats огромное колличество пустых записей. Приходится постоянно вручную чистить.
Хочу упростить себе задачу и удалять левые аккаунты постранично. Для этого в АСП нужно найти главный SQL запрос и изменить там сортировку с Имени на Rank.
Я искал искал и не нашел! Помогите плизз!
Адрес сервера
Если я правильно понял, то надо удалять аккаунты из бд на которых 0 очков? Если так, то я удалю их через пхпмуадмин, там сортировка по очкам.
Ты что со всех таблиц базы удаляешь вручную игроков. А ты знаешь что записи по игрокам надо удалять из всех таблиц?
Цитата(serg005 @ Суббота, 7 Августа 2010, 20:02:42)
просто реклама сервера
Нет. Просто показал что сервер работает. Я даже не дал ссылку на клиента которая на рутрекере!
Я серьёзно прошу помощи без всяких реклам!
скрипт выложи. А то я как бы не нашел где там order по имени, везде по scores
Действительно, а зачем вообще пользоваться всякими костылями, когда можно и нужно лечить корень проблемы, например поправить пару скриптов чтобы людям без валидного pid вообще не писалась стата, ибо давно известно что оффлайн акк и ранг вещи практически несовместимые.
в любом случаем нужен скрипт, у меня только старые версии
Цитата(bobby86 @ Суббота, 7 Августа 2010, 12:13:05)
Ты что со всех таблиц базы удаляешь вручную игроков. А ты знаешь что записи по игрокам надо удалять из всех таблиц?
Сорри, как-то упустил этот момент
Цитата(Tema567 @ Воскресенье, 8 Августа 2010, 09:52:18)
Действительно, а зачем вообще пользоваться всякими костылями, когда можно и нужно лечить корень проблемы, например поправить пару скриптов чтобы людям без валидного pid вообще не писалась стата, ибо давно известно что оффлайн акк и ранг вещи практически несовместимые.
Был бы очень благодарен за такой скрипт
Цитата(antonn @ Воскресенье, 8 Августа 2010, 09:53:13)
скрипт выложи. А то я как бы не нашел где там order по имени, везде по scores
И я не нашел. Но сортировка идёт по нику!
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. По мотивам
этой темы
А насчёт костылей (автоматического удаления) - пришлите пример вашей базы, напишу простенький утиль забавы ради <_<
Понимаете в чём дело... Много людей играют с левым питоном, и у них идёт статистика на моём сервере даже с оффициальными онлайн аккаунтами! Верхний вариант будит просто некоторые нужные записи блокировать. Большая часть будит всё равно пустые заноситься в базу!
Какие это ещё некоторые нужные? боты? или вы хотели чтобы оффлайн аккаунты писались? для них статистика изначально не реализована..
Верхняя запись блокирует: ботов (29000000-29999999) и оффлайн аккаунты (NULL), а при желании (если использовать проверку на запись в массиве) и выборочное блокирование по pid
Пустые записи даже не создадутся потому как у них pID = NULL, а дальше у вас похоже не настроен override offline/local IPs, из-за этого и есть пустые записи (дальше идет проверка и если ip == '127.0.0.1' то запись не пишется в базу)
P.S. прежде чем строить предположения - проверьте скрипт
Подскажи что в оверрайде писать?
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" писать все нижние строчки?
Цитата(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)
Нужные пиды на сервере:
6149320 - скорее всего онлайн аккаунт с офф сервера ЕА
4259241
40000111 - ПИДЫ эмулятора сервера ЕА
133999727 - тоже какой-то пид с которого шпилят и щитается стата.
Примеры пидов которым не идёт стата:
60104510
270300026
106397894
281385738
Тема напиши плизз что означает твой коррект скрипта.
Если пид меньше 30000000 то выходить или продолжать занесение?
Цитата(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;
}
Проблему решил сортировкой. Я её нашел
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());
отредактировал файлы как описано выше. толку никакого. только стартует сервер, боты уже в статистике...
Jack-Metallurg
1.9.2010, 23:40
Этот вопрос уже терся. Ботов можно убрать из статы. Но тогда за убитых ботов игроку не будут начисляться очки. Т.е. , в ситуации, когда онлайн игрок один будет рубиться с ботами, в конце игры получит баранку. А потому ведение статы в соор-режиме потеряет всякий смысл.
А вот как сделать , чтобы в стату прописывалось
ограниченное количество ботов - вот это вопрос, который до сих пор никто не смог решить.
AI. Почитай тему
Боты в статистике
Jack-Metallurg , спасибо!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.