quinta-feira, 9 de fevereiro de 2012

/report BUG


/report
Autor: Guitar Freak
Co-Autor: Colanus
Ideia: Shawak

Utilização:  Muita gente tem problemas com bugs no mapa e até scripts, quests que não funcionam direito e outras coisas que passam despercebidos. E o pior de tudo é que o bug não reportado fica ali e prejudica ou incomoda os outros players. Com esse script, você pode verificar bugs e até mesmo o que os players estão achando do servidor, dá para fazer diferentes variações desse script.

Explicação:  Esse é uma talkaction que reportará bugs, já enviando o local, nome do player que utilizou o reporte e horário em que foi reportado. Os reportes ficarão em data > logs  em um arquivo chamado Reports.txt

Servidor Testado: 0.4
Não tenho certeza, mas parece que funciona a partir do 0.3+, incluindo 0.3.5

1º) Entre na pasta data > lib e abra o arquivo function.lua e coloque o código a seguir no final.

Código:
function setExhaust(cid, storage)
setPlayerStorageValue(cid, storage, os.time())
end

function isExhausted(cid, storage, exhaust)
local exhaustTime = getPlayerStorageValue(cid, storage)
if exhaustTime == -1 then
return FALSE
end
local isExhausted = os.time() - exhaustTime < exhaust
return isExhausted and TRUE or FALSE
2º) Entre na pasta data > talkactions e abra o arquivo talkactions.xml e coloque o código a seguir abaixo de <talkactions>

Código PHP:
<talkaction log="no" words="/report" event="script" value="textreports.lua"/>  
Obs.: Ele está adaptado para a versão 0.4, verifique a coerência de acordo com os outros talkactions e o adapte o código para servir melhor


3º) Ainda dentro da pasta talkactions, acesse a pasta scripts e copie um arquivo lua qualquer e renomeie para textreports colocando o código abaixo.

Código:
-- Créditos --
-- Referencias: Shawak & Colandus.
-- Modificações: Guitar Freak.

local level = 8 -- Level mínimo para reportar.
local minimum = 3 -- Número mínimo de caracteres por reporte.
local maximum = 85 -- Número máximo de caracteres por reporte.

local useExhaust = true -- True se você quiser usar exhaustion.
local storageValue = 8000 -- Número para registrar a exaustão. Pode-se usar outro qualquer valor.
local exhaustTime = 15 -- Tempo entre cada reporte (15 = 15 segundos).

function onSay(cid, words, param, channel)

local getVoc = getPlayerVocationName(cid)
local position = getCreaturePosition(cid)

if getPlayerLevel(cid) < level then
doPlayerSendTextMessage(cid,20,"Report Manager:")
doPlayerSendTextMessage(cid,18,"You need to be at least level "..level.." to send a report.")

elseif (useExhaust and isExhausted(cid, storageValue, exhaustTime) == TRUE) then
doPlayerSendTextMessage(cid,20,"Report Manager:")
doPlayerSendTextMessage(cid,18,"Sorry, you need to wait "..exhaustTime.." seconds before sending another report.")

elseif param:len() < minimum then
doPlayerSendTextMessage(cid,20,"Report Manager:")
doPlayerSendTextMessage(cid,18,"Sorry, you need to enter atleast " .. minimum .. " characters to send in a report.")

elseif param:len() > maximum then
doPlayerSendTextMessage(cid,20,"Report Manager:")
doPlayerSendTextMessage(cid,18,"Sorry, you can only write max. " .. maximum .. " characters per report.")

else
Log = io.open(getDataDir().."logs/Reports.txt", "a+")
Log:write("Sent: "..os.date("%A %I:%M:%S %p.").."\n")
Log:write("From position: X = "..position.x.." | Y = "..position.y.." | Z = "..position.z.."\n")
Log:write(""..getPlayerName(cid).." ["..getPlayerLevel(cid).."] ("..getVoc.."): "..param.."\n\n")
Log:close()
doPlayerSendTextMessage(cid,20,"Report Manager:")
doPlayerSendTextMessage(cid,27,"You have successfully sent your report. Thanks for your support.")
setExhaust(cid, storageValue)
end
return TRUE
end
Agora é muito simples, basta dizer /report mensagem e a mensagem será reportada. 

Obs.: Se você quiser adicionar as aspas do /report ", coloque o code
Código:
filter="quotation"
após "words" no xml. A mensagem será reportada dessa maneira /report " mensagem.


A mensagem ficará nesse estilo
Sent: Saturday 03:27:10 PM.
From position: X = 158 | Y = 51 | Z = 7
Player1 [30] (Knight): Hi there is a map bug in temple, please fix..

Agora, com um pequeno globalevent como esse, com o nome report.lua dentro de scripts:

Código:
function onThink(interval, lastExecution)
MENSAGEM = {
"Agora contamos com o sistema de reportar, onde o nome do que reporta, local e horário são automaticamente informados. Apenas fale /report e digite sua mensagem como por ex.: /report um erro no mapa aqui. "
}
doBroadcastMessage(MENSAGEM, 22)
return TRUE
end
E adicionando isso no xml:

Código PHP:
<globalevent name="report" interval="950000" script="report.lua"/>  
E os seus players serão alertados sobre o novo script.

Nenhum comentário:

Postar um comentário