Удаление старых чаров и их шмота и всех данных ?

Теги:
 

Krab

разработчик l2j-сервера
Вот например играл чел на серваке, получили банан, обиделся и умер :)
После него осталось куча мусора. Получается что во всех таблицах БД. С годами то всё это ненужное растёт.
Может ктонить сделал утилиту которая чистит этот мусор ???

Утилита простая можно написать на пхп (но я не писака).
показывается 2 строки:
1. Вводить имя аккаунта
Действие: Удаляет всёх чаров на аккаунте и всё то что с ними связанно в БД
2. Вводить имя чара
Действие: Удаляет чара и всё то что с ним связанно в БД

Может ктонить сделает это ???
Russian Mafia TEAM (RMT) Lineage 2 C4 Server (L2J Fortress) www.la2c4.ru  
+
-
edit
 

Demonus

новичок
да а еще былобы неплохо чтоб была утилита которая чистила бы базу от потеряных вещей (коих я нашел немало - вещь у которой id чара отсутствует в базе --- видно осталось с тех времен когда криво отрабатывала дефрагментация)
 
+
-
edit
 

TD_ALECS

втянувшийся
Не плохо было бы.
Server L2j- 1=> http://lineage.cybernet.by Server L2j- 2=> http://game.iptel.by [img]http://total-disconnect.at.tut.by/logoiptel.jpg[/img]  
+
-
edit
 

Baxxter

новичок
Удаляет аккаунты, чаров и всё, что с ними связано с аккаунтов, на которые не заходили после 17 февраля 2005 года.
code text
  1. SET @d='2005-02-17';
  2. DROP TABLE IF EXISTS tmp_old_chars;
  3. CREATE TEMPORARY TABLE tmp_old_chars TYPE=MEMORY SELECT obj_Id FROM characters WHERE account_name IN (SELECT login FROM accounts WHERE lastactive<UNIX_TIMESTAMP(@d)*1000);
  4. DELETE FROM accounts WHERE lastactive<UNIX_TIMESTAMP(@d)*1000;
  5. UPDATE characters SET clanid=0 WHERE clanid IN (SELECT clan_id FROM clan_data WHERE leader_id IN (SELECT obj_Id FROM tmp_old_chars));
  6. DELETE FROM clan_data WHERE leader_id IN (SELECT obj_Id FROM tmp_old_chars);
  7. DELETE FROM character_friends WHERE char_id IN (SELECT obj_Id FROM tmp_old_chars);
  8. DELETE FROM character_quests WHERE char_id IN (SELECT obj_Id FROM tmp_old_chars);
  9. DELETE FROM character_recipebook WHERE char_id IN (SELECT obj_Id FROM tmp_old_chars);
  10. DELETE FROM character_hennas WHERE char_obj_id IN (SELECT obj_Id FROM tmp_old_chars);
  11. DELETE FROM character_macroses WHERE char_obj_id IN (SELECT obj_Id FROM tmp_old_chars);
  12. DELETE FROM character_shortcuts WHERE char_obj_id IN (SELECT obj_Id FROM tmp_old_chars);
  13. DELETE FROM character_skills WHERE char_obj_id IN (SELECT obj_Id FROM tmp_old_chars);
  14. DELETE FROM pets WHERE item_obj_id IN (SELECT object_id FROM items WHERE owner_id IN (SELECT obj_Id FROM tmp_old_chars));
  15. DELETE FROM items WHERE owner_id IN (SELECT obj_Id FROM tmp_old_chars);
  16. DELETE FROM merchant_lease WHERE player_id IN (SELECT obj_Id FROM tmp_old_chars);
  17. DELETE FROM characters WHERE obj_Id IN (SELECT obj_Id FROM tmp_old_chars);
Может показаться, что я ничего не делаю, но на клеточном уровне я очень занят.  
Это сообщение редактировалось 11.05.2006 в 08:04
+
-
edit
 

Baxxter

новичок
Удаляет "потерявшиеся" вещи.
code text
  1. DELETE FROM items WHERE owner_id NOT IN (SELECT obj_Id FROM characters)
Может показаться, что я ничего не делаю, но на клеточном уровне я очень занят.  
Это сообщение редактировалось 11.05.2006 в 08:04
+
-
edit
 

Baxxter

новичок
Бэкапиться только не забываем ;)
Может показаться, что я ничего не делаю, но на клеточном уровне я очень занят.  
+
-
edit
 

Demonus

новичок
ОООООООООООООООООгромное сенкс :)
 
+
-
edit
 

Dantist

новичок
Baxxter:
Удаляет "потерявшиеся" вещи.
code text
  1. DROP TABLE IF EXISTS tmp_delete_items;
  2. CREATE TEMPORARY TABLE tmp_delete_items TYPE=MEMORY SELECT IFNULL(obj_Id,0) AS obj_Id,owner_id FROM characters RIGHT JOIN (SELECT owner_id FROM items GROUP BY owner_id) AS own ON obj_id=owner_id;
  3. DELETE FROM items WHERE owner_id IN (SELECT owner_id FROM tmp_delete_items WHERE obj_Id=0);
 


в таблице items owner_id это не только чар, а так же и клан, так что смотри еще и в clan_data
 
+
-
edit
 

Baxxter

новичок
Сам-то понял что сказал?
Может показаться, что я ничего не делаю, но на клеточном уровне я очень занят.  
+
-
edit
 

garri_il

втянувшийся
Ребят у когонить этот запрос на 4истку базы заработал ?
 
+
-
edit
 
+
-
edit
 

Дрон

новичок
#/usr/bin/perl






#Подключение подуля работы с Mysql
use Mysql;


my $host=localhost;
my $db=; # Имя рабочей базы сервера L2J.
my $user=; # Имя пользователя на доступ к рабочей базе.
my $pass=; # Пароль на доступ к рабочей базе.


print ("Enter сhar name:"."n");
chomp ( $char_name= <>);

#-------------------------------------------------------------------------

$dbh = Mysql->Connect($host,$db,$user,$pass); #Подключение к Базе
$sth = $dbh->Query("SELECT * FROM `characters` WHERE `char_name` = '$char_name'") or die $Mysql::db_errstr;
@table = $sth->FetchRow; #Возвращает массив значений следующей строки, полученной с сервера.
$account_name = $table[0]; #Присвоение переменной значения первой ячейки массива.
$char_id = $table[1]; #Присвоение переменной второй ячейки массива.

if ($char_id > 0)
{
$sth = $dbh->Query("DELETE FROM `characters` WHERE `obj_Id` = $char_id");
$sth = $dbh->Query("DELETE FROM `character_friends` WHERE `char_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `character_hennas` WHERE `char_obj_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `character_macroses` WHERE `char_obj_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `character_quests` WHERE `char_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `character_recipebook` WHERE `char_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `character_shortcuts` WHERE `char_obj_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `character_skills` WHERE `char_obj_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `clan_data` WHERE `leader_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `items` WHERE `owner_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `merchant_lease` WHERE `player_id` = $char_id");
$sth = $dbh->Query("DELETE FROM `seven_signs` WHERE `char_obj_id` = $char_id");

print ("Char and all Data deleted"."n");
exit;
}
print ("Not found Character"."n");
exit;
 
+
-
edit
 

Dmitrii

новичок
Нуб!
Чстка субклассов и много еще чего не сделано)
 
RU DarkGoblin #02.06.2006 19:14
+
-
edit
 

DarkGoblin

новичок
Нуб!
Чстка субклассов и много еще чего не сделано)
 

ну написал бы свой вариант.....
 
+
-
edit
 

TD_ALECS

втянувшийся
Нуб!
Чстка субклассов и много еще чего не сделано)
 

Нуб говоришь.
А что лутше можешь, или ты просто так выразился.
Вот напиши полную чистку, а орать так все горазды.
Ламак блин.
2Дрон Спасибо за скрипт.
Server L2j- 1=> http://lineage.cybernet.by Server L2j- 2=> http://game.iptel.by [img]http://total-disconnect.at.tut.by/logoiptel.jpg[/img]  
Это сообщение редактировалось 19.06.2006 в 16:37
+
-
edit
 

URANUS

втянувшийся
Вот еще один вариант взятый с l2j.sf форума
В виде батника, довольно удобная )
[center][i]...истина, где-то рядом...  
+
-
edit
 

TD_ALECS

втянувшийся
Скорее не в тему, но она немного более подходящая.
Вот к примеру чар купил 1500 заточек и после этого у него крит эрор из игры.
Напишите кто знает как, строку как удалить у этого чара все эти заточки или определённое количество.
Я просто не силён в Мускуле, может каму тоже понадобится.
Типа пример: Удаление итема у всех игроков.
code text
  1. DELETE FROM `items` WHERE (`item_id` = 6841);


Или удаление всего инвенторя героя:
code text
  1. DELETE FROM `items` WHERE (`owner_id` = 268525288);

А нада у героя удали одну итем, именно у героя, напишите плиз.
Server L2j- 1=> http://lineage.cybernet.by Server L2j- 2=> http://game.iptel.by [img]http://total-disconnect.at.tut.by/logoiptel.jpg[/img]  
+
-
edit
 

URANUS

втянувшийся
DELETE from `items` WHERE item_id in (57) AND `owner_id` in (268472447);
В скобках через запятую можно ставить несколько значений
Удаление итема Х (адены) у игрока Y (Васи)

DELETE from `items` WHERE item_id in (57,1147) AND `owner_id` in (268472447);
В скобках через запятую можно ставить несколько значений
Удаление итема Х,Z (адены,штаны) у игрока Y (Васи)

DELETE from `items` WHERE item_id in (57,1147) AND `owner_id` > 0;
В скобках через запятую можно ставить несколько значений
Удаление итема Х,Z (адены,штаны) у всех игроков (т.е. учетных записей где овнер больше нуля)

DELETE from merchant_Buylists WHERE item_id in (1463,1464,1465,2510,2511,2512,3948,3949,3950) AND shop_id < 5000;
Удалить к примеру определенные итемы из всех магазинов

И т.д. по потребностям
[center][i]...истина, где-то рядом...  
+
-
edit
 

TD_ALECS

втянувшийся
Спасибо большое :)
Server L2j- 1=> http://lineage.cybernet.by Server L2j- 2=> http://game.iptel.by [img]http://total-disconnect.at.tut.by/logoiptel.jpg[/img]  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru