Você pode implementar essa funcionalidade com o auxílio de armazenamento de valores de jogadores em Lua, usando a função os.time() para registrar o momento em que o comando foi usado e verificar se o período de "exaustão" passou. Aqui está um exemplo de como você pode fazer isso:
function onSay(cid, words, param)
if param == "!mudarpvp" then
local timeLastChanged = getPlayerStorageValue(cid, 99999) or 0 -- Verifica quando foi a última mudança
local currentTime = os.time() -- Obtém o tempo atual em segundos
if currentTime - timeLastChanged < 86400 then -- Verifica se não passou 1 dia desde a última mudança
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ainda está em modo no-PvP. Aguarde mais um tempo para mudar novamente.")
return true
end
if getPlayerStorageValue(cid, 100000) == 1 then -- Verifica se o jogador está atualmente em modo no-PvP
doPlayerSetStorageValue(cid, 100000, 0) -- Modo PvP ativado
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você agora está em modo PvP. Outros jogadores podem atacá-lo.")
else
doPlayerSetStorageValue(cid, 100000, 1) -- Modo no-PvP ativado
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você agora está em modo no-PvP. Você está livre de ataques de outros jogadores.")
end
setPlayerStorageValue(cid, 99999, currentTime) -- Registra o momento da última mudança
end
return true
end
Neste exemplo:
O jogador digita "!mudarpvp".
O sistema verifica quanto tempo passou desde a última mudança de estado usando a diferença entre o tempo atual (os.time()) e o tempo registrado na última mudança.
Se não passou 1 dia desde a última mudança, o jogador recebe uma mensagem indicando que ele deve esperar mais um tempo.
Se passou 1 dia, o sistema muda o estado do jogador de PvP para no-PvP ou vice-versa, dependendo do estado atual.
O sistema registra o tempo da última mudança para garantir que o jogador não possa mudar novamente até que tenha passado um dia desde a última mudança.