cs007 13 Postado Dezembro 21, 2012 Share Postado Dezembro 21, 2012 Bom galera, no meu server tem um scripts que apaga players que ficam mais de 20 dias sem logar, porém se ele tiver House a House dele fica com o nome dele gostaria de saber se existe scripts para resolver isso. Abraço Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/ Compartilhar em outros sites More sharing options...
Caronte 446 Postado Dezembro 21, 2012 Share Postado Dezembro 21, 2012 Manda o Script que exclui player inativo Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1419479 Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Dezembro 21, 2012 Share Postado Dezembro 21, 2012 tem esse script aki do vodkart.. http://www.xtibia.com/forum/topic/189418-house-clean/ dai eh soh 'juntar' os 2 scripts.. no caso deixando o script do vodkart 1* Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1419499 Compartilhar em outros sites More sharing options...
cs007 13 Postado Dezembro 22, 2012 Autor Share Postado Dezembro 22, 2012 Já tentei esse lek... Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1419620 Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Dezembro 22, 2012 Share Postado Dezembro 22, 2012 esse script funciona 'lek'... soh tem q mesclar com o teu de excluir o player.. poste ele ae q posso tentar ajudar.. ;/ Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1419626 Compartilhar em outros sites More sharing options...
cs007 13 Postado Dezembro 22, 2012 Autor Share Postado Dezembro 22, 2012 ------------------------------------------------------------------------------* ----- [[> Automated Database Cleanup 1.1 Structure //By Cybermaster <]] ------| -------------- [[> System 2.0 Revamped by Teh Maverick <3 <]] ----------------| ------------- [[> Removal of empty accounts by darkaos <]] ---------------| --------------- [[> Function getDBPlayersCount() by Elf <]] ------------------| ------------------------------------------------------------------------------| ------------------------------------------------------------------------------| --- ~!READ THIS!~ ------------------------------------------------------------| --- Be sure to back up your database and test this on your server first, -----| --- I(Teh Maverick) cannot guarantee it will work the same for every core. ---| --- It is very easy to test, with the log file and values that are printed ---| -----------------------------------Enjoy!-------------------------------------| ------------------------------------------------------------------------------* function countRowsWhereInTable(table, field, condition) local result = db.getResult("SELECT COUNT(" .. field .. ") as count FROM " .. table .. " WHERE " .. field .. " = '" .. condition .. "';") local tmp = result:getDataInt("count") result:free() return tmp end function getDBPlayersCount() local result = db.getResult("SELECT COUNT(id) as count FROM `players`;") local tmp = result:getDataInt("count") result:free() return tmp end function getDBAccountsCount() local result = db.getResult("SELECT COUNT(id) as count FROM `accounts`;") local tmp = result:getDataInt("count") result:free() return tmp end function onStartup() local DB_BEFORE = {players = getDBPlayersCount(), accounts = getDBAccountsCount()} local result,result1, ii, numPlayersToDelete, numAccountsDeleted, tmp = 0, 0, 0, 0, 0 local pid, aid = {}, {} local dropCount = {players={},accounts={}} local config = { deleteAccountWithNoPlayers = true, cleanChildTables = true, printResult = true, saveResultToFile = true, logFileName = 'db_cleanup.txt' } --In each table, players with below specified level, and days of inactivity will be deleted from db on server startup local cleanup = { [1] = {level = 11, time = 10 * 24 * 60 * 60}, [2] = {level = 50, time = 10 * 24 * 60 * 60}, [3] = {level = 100, time = 10 * 24 * 60 * 60}, [4] = {level = 140, time = 10 * 24 * 60 * 60}, [5] = {level = 290, time = 21 * 24 * 60 * 60} } local childAttributeTables = { players = { [1] = {table = "`player_viplist`", idField = "`player_id`"}, [2] = {table = "`player_storage`", idField = "`player_id`"}, [3] = {table = "`player_spells`", idField = "`player_id`"}, [4] = {table = "`player_skills`", idField = "`player_id`"}, [5] = {table = "`player_namelocks`", idField = "`player_id`"}, [6] = {table = "`player_items`", idField = "`player_id`"}, [7] = {table = "`player_depotitems`", idField = "`player_id`"}, [8] = {table = "`houses`", idField = "`owner`"}, [9] = {table = "`house_auctions`", idField = "`player_id`"}, [10] = {table = "`players`", idField = "`id`"} -- Keep this as the last item in the array --Note: `houses` and `bans` are in the DB triggers for TFS so don't worry about them. --Also I did not want to put killers, or deaths on here because that is historic data, --do so at your own risk. }, accounts = { [1] = {table = "`accounts`", idField = "`id`"}, [2] = {table = "`account_viplist`", idField = "`account_id`"} } } --Clean up all the players and player data for i = 1, #cleanup do result = db.getResult("SELECT `id`,`name`,`account_id` FROM `players` WHERE `level` < ".. cleanup[i].level .." AND `name` NOT IN('Account Manager', 'Sorcerer Sample', 'Druid Sample', 'Paladin Sample', 'Knight Sample', 'Rook Sample') AND `group_id` < 2 AND `lastlogin` < UNIX_TIMESTAMP() - ".. cleanup[i].time .." AND `lastlogin` > 0;") if(result:getID() ~= -1) then ii = 1 repeat pid[ii] = result:getDataInt("id") -- list the players id into an array aid[ii] = result:getDataInt("account_id") -- list the account id of each player being removed into an array ii = ii + 1 until not(result:next()) result:free() end numPlayersToDelete = ii - 1 --Drop players and their child table attribute data such as skills, items, etc. for j = 1, numPlayersToDelete do if(config.cleanChildTables) then for k = 1, #childAttributeTables.players do if childAttributeTables.players[k].table == "houses" then house = getHouseByPlayerGUID(pid[j]) if house ~= 0 or house ~= nil then doCleanHouse(house) doUpdateHouseAuctions() end else dropCount.players[k] = ((dropCount.players[k] or 0) + countRowsWhereInTable(childAttributeTables.players[k].table, childAttributeTables.players[k].idField, pid[j])) db.executeQuery("DELETE FROM " .. childAttributeTables.players[k].table .. " WHERE " .. childAttributeTables.players[k].idField .. " = '" .. pid[j] .. "';") end end else db.executeQuery("DELETE FROM `players` WHERE `id` = '" .. pid[j] .. "';") end end end --Drop all the accounts that have 0 players linked to them (at the moment its only checking from the list of players removed) if config.deleteAccountWithNoPlayers then --This part was scripted by Darkhaos, modified/fixed by Teh Maverick --[[ for acc = 1, #aid do result1 = db.getResult("SELECT `id` FROM `accounts` WHERE `id` = '" .. aid[acc] .. "';") if result1:getID() ~= -1 then -- check to make sure the account exists result1:free() for i = 1, #childAttributeTables.accounts do --Make sure there are no other players on the account result1 = db.getResult("SELECT COUNT(id) as count FROM `players` WHERE `account_id` = '" .. aid[acc] .. "';") tmp = result1:getDataInt("count") if(tmp <= 0) then --Remove accounts dropCount.accounts[i] = ((dropCount.accounts[i] or 0) + countRowsWhereInTable(childAttributeTables.accounts[i].table, childAttributeTables.accounts[i].idField, aid[acc])) db.executeQuery("DELETE FROM " .. childAttributeTables.accounts[i].table .. " WHERE " .. childAttributeTables.accounts[i].idField .. " = '" .. aid[acc] .. "';") end end end end end --]] --Print and Save results (configurable) local DB_NOW = {players = DB_BEFORE.players - getDBPlayersCount(), accounts = DB_BEFORE.accounts - getDBAccountsCount()} if DB_NOW.players > 0 or DB_NOW.accounts > 0 then local text = ">> [DBCLEANUP] " .. DB_NOW.players .. " inactive players" .. (config.deleteAccountWithNoPlayers and " and " .. DB_NOW.accounts .. " empty accounts" or "") .. " have been deleted from the database." --Write to console if config.printResult then print("") print(text) if config.cleanChildTables then --Write player info for i = 1,#dropCount.players do print("[!] --> Dropped: " .. dropCount.players[i] .. " from " .. childAttributeTables.players[i].table .. " table") end --Write account info if config.deleteAccountWithNoPlayers then for i = 1,#dropCount.accounts do print("[!] --> Dropped: " .. dropCount.accounts[i] .. " from " .. childAttributeTables.accounts[i].table .. " table") end end print("") end end --Write to file if config.saveResultToFile then local file = io.open("data/logs/"..config.logFileName, "a") file:write("[" .. os.date("%d %B %Y %X ", os.time()) .. "] " .. text .. "\n") if config.cleanChildTables then --Write player info for i = 1, #dropCount.players do file:write("[!] --> Dropped: " .. dropCount.players[i] .. " from " .. childAttributeTables.players[i].table .. " table\n") end --Write account info if config.deleteAccountWithNoPlayers then for i = 1, #dropCount.accounts do file:write("[!] --> Dropped: " .. dropCount.accounts[i] .. " from " .. childAttributeTables.accounts[i].table .. " table\n") end end file:write("\n") end file:close() end end return true end Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1419647 Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Dezembro 22, 2012 Share Postado Dezembro 22, 2012 eita script enorme kkk e estranhu.. ja tem uma parada ali sobre apagar as houses.. ;x if childAttributeTables.players[k].table == "houses" then house = getHouseByPlayerGUID(pid[j]) if house ~= 0 or house ~= nil then doCleanHouse(house) doUpdateHouseAuctions() end talvez tentar trocar isso.. e deixar assim.. if childAttributeTables.players[k].table == "houses" then house = getHouseByPlayerGUID(pid[j]) if house ~= 0 or house ~= nil then setHouseOwner(house, NO_OWNER_PHRASE, true) end Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1419648 Compartilhar em outros sites More sharing options...
cs007 13 Postado Dezembro 22, 2012 Autor Share Postado Dezembro 22, 2012 kkkkkkkkk' ele é bem grandinho mesmo. Ele tem essa parada mas nunca apaga as casas vou testar assim como você falou Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1419663 Compartilhar em outros sites More sharing options...
cs007 13 Postado Janeiro 3, 2013 Autor Share Postado Janeiro 3, 2013 (editado) testei aqui lek mas mesmo assim as casas não foram deletadas =/ Editado Janeiro 3, 2013 por cs007 Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1429187 Compartilhar em outros sites More sharing options...
cs007 13 Postado Janeiro 3, 2013 Autor Share Postado Janeiro 3, 2013 Não sei informar, se não me engano peguei ele aqui na xtibia. Link para o comentário https://xtibia.com/forum/topic/202132-apagar-house-de-player-deletados/#findComment-1429409 Compartilhar em outros sites More sharing options...
Posts Recomendados