Eu fiz com NPC, caso queira com item só falar que faço também.
Vai em Data/NPC e crie Resetador.xml (crie como codificação ANSI porque usei acentuação, mas caso use inglês, pode deixar no UTF-8 mesmo) e adicione o código dentro:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Resetador" script="Resetador.lua" walkinterval="0" floorchange="0" access="5" level="1" maglevel="1">
<health now="150" max="150"/>
<look type="1421" head="114" body="119" legs="114" feet="114" corpse="2212"/>
<parameters>
<parameter key="message_greet" value="Olá |PLAYERNAME|, o que você procura aqui? Diga {help} ou {ajuda} para mais informações."/>
</parameters>
</npc>
Agora em Data/NPC/Scripts crie o arquivo Resetador.lua (crie como codificação ANSI porque usei acentuação, mas caso use inglês, pode deixar no UTF-8 mesmo) e adicione o código dentro:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
-- VARIÁVEIS --
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
msg = string.lower(msg)
local level = 100
local storages = {100008, 100009, 100010}
----------------------------------- [ DIALOGO COM NPC] ---------------------------------
if msgcontains(msg, 'help') or msgcontains(msg, 'ajuda') then
selfSay("Se você for nível "..level.. " ou mais eu posso resetar todas as quests que você já fez. Gostaria de reseta-lás?", cid)
talkState[talkUser] = 1
return true
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[talkUser] == 1 then
if getPlayerLevel(cid) >= level then
for i = 1, #storages do
if getPlayerStorageValue(cid, storages[i]) > 0 then
doSendMagicEffect(getPlayerPosition(cid), 28)
doPlayerSendTextMessage(cid, 27, "Todas as quests foram resetadas com sucesso. Agora você pode fazê-las novamente.")
setPlayerStorageValue(cid, storages[i], 0)
return true
else
selfSay("Todas as quests já foram resetadas.", cid)
return true
end
end
talkState[talkUser] = 0
end
return true
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'não')) and talkState[talkUser] == 1 then
selfSay("Ok então.", cid)
talkState[talkUser] = 0
return true
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Eu fiz bem básico mesmo para ver se é assim que quer. Deixei a frase como storage porque não sei se irá adicionar o código em server online e os players não vão saber o que é storage, então deixei como quest a mensagem. Deixei apenas uma verificação para falar com npc se o player possuir nível 100 ou mais. Caso queira o NPC com mais validações só falar.
As storages que quiser resetar, adicione na tabela storages, deixei 3 de exemplo lá.
Testei aqui e está funcionando, mas qualquer problema me fala.