Ola galerinha xtibiana.
Eu resolvi fazer uma versão superior do report system usando db.
Segue o link da versão demo:
http://www.xtibia.com/forum/topic/198470-report-sytem-beta/
Esta versão utiliza banco de dados assim fica mais fácil de manipular e o administrador poderá ver os reports "In-Game" além de que eles serão excluídos apos serem lidos.
A lista e ordenada pelo level do player "evitando as vezes você ler primeiros possíveis floods".
Vamos a instalação.
Vá em lib e crie um arquivo lua chamado de report e coloque isto:
function getReportByGuid(guid) local shop = db.getResult("SELECT * FROM `report` WHERE `id` = ".. guid ..";") return shop:getDataString("report") end function doPlayerAddReport(cid, report) db.executeQuery("INSERT INTO `report` (`id`, `report`, `level`) VALUES (" .. getPlayerGUID(cid) .. ", '" .. report .. "', " .. getPlayerLevel(cid) .. ");") return true end function showReports(cid) local rep = db.getResult("SELECT * FROM `report` WHERE `id` ORDER BY `level`") str = "Reports Ativos:\n\n" if rep:getID() == -1 then doShowTextDialog(cid, 1387, "Não ha reports disponiveis!") return true end while true do local list = rep:getDataString("report") local players = rep:getDataInt("id") local name = getPlayerNameByGUID(players) str = str .. list .. " -("..players..")- Name ("..name..")]\n\n" db.executeQuery("DELETE FROM `report` WHERE `id` = ".. players.." and `report` = '".. list .."';") if not rep:next() then doShowTextDialog(cid, 1397, str) break end end end
Agora vá em talkactions e crie um arquivo LUA chamado de report e coloque este codigo:
function onSay(cid, words, param, channel) local time = 4 ---- Exhaustion cada numeral equivale a 1 hora. if param == "" or not param or param == " " then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "E necessario escrever o report") and false end if exhaustion.get(cid, 23246) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você atingiu o limite de reports espere o limite sair") and false end if #param <= 4 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O seu report deve conter mais de 4 caracteres") and false end exhaustion.set(cid, 23246, time*36000*1000) doPlayerAddReport(cid, param) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Parabéns seu report foi enviado para nosso banco de dados logo ele sera visto\nA equipe agradece") return true end
Agora continue em talkactions e crie um arquivo lua chamado de logreport e coloque isto:
function onSay(cid, words, param, channel) showReports(cid) return true end
Agora vá em talkactions.xml e coloque esta tags:
<talkaction log="yes" words="/logreport" access="5" event="script" value="logreport.lua"/> <talkaction words="/report" event="script" value="report.lua"/>
Prontinho sistema instalado.
/report(nome do report) --- Reporta uma mensagem
/logreport --- Exibe a lista de report para os adminstradores
Dicas:
1 - Deixe a exhastion com muito tempo para evitar flood. 2 - Vá em login.lua e coloque isto showReports(cid) no mesmo lugar de registrar evento 3 - Veja sempre o seu reports 4 - Se perceber que um player esta "flodando" demais seus reports comece a dar punições