Otavio Posted December 11, 2020 Share Posted December 11, 2020 Bem, eu estava iniciando um script que se conceitua em ao player dar /ptr iniciar PTR e fazer algumas funções, até aí ok! Porém eu queria que fosse obrigatório ele finalizar, com outro comando, pra poder iniciar novamente, vamo supor, criar uma obrigatoriedade de ao iniciar ele ter que finalizar, pra dar novamente o comando de iniciar. Problema: Fazer uma função aonde não pode iniciar outra PTR sem ter finalizado outra. Conceito do Script: Euq ueria fazer como se fosse um "Log", para eu saber o tempo que as corporações fazem Patrulhamento em meu servidor. Se alguém puder me explicar como posso fazer isso com outro script... Desde já agradeço! Link to comment
Other Languages Moderators Lord Henry Posted December 11, 2020 Other Languages Moderators Share Posted December 11, 2020 (edited) Pra criar um log, você precisa fazer com que o servidor escreva mensagens em um arquivo de texto. Vou dar um exemplo genérico de um log que marca o instante e o nick quando alguém usar o comando /ptr. (Script server-side.) addCommandHandler ("ptr", function (thePlayer, cmd, state) if (state == "iniciar" or state == "finalizar") then -- Verifica se o comando é seguido por um parâmetro válido. local name = getPlayerName (thePlayer) -- Obtém o nick de quem executou o comando. local horario = showTime() -- Obtém o horário atual do servidor por meio de uma função útil. if (fileExists ("logPTR.txt")) then -- Se já existe um arquivo de texto com este nome neste resource, então: newFile = fileOpen ("logPTR.txt") -- Abre o arquivo para poder editá-lo. fileSetPos (newFile, fileGetSize (newFile)) -- Coloca o cursor de escrita no fim do arquivo, caso contrário ele vai começar a escrever no começo dele, antes do que já estiver escrito no arquivo. if (state == "iniciar") then -- Se o parâmetro que o jogador usou após o comando foi "iniciar" então: outputChatBox ("Patrulha iniciada.", thePlayer) -- Apenas pra saber q o comando funcionou, normalmente teria as verificações antes de permissões e se já está em patrulha. fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") -- Escreve isso no documento. O \n pula para a linha seguinte após a mensagem. elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) -- Para todo fileOpen ou fileCreate, é necessário um fileClose pois enquanto arquivos estiverem abertos, eles podem ser corrompidos e os dados serão perdidos. else -- Se o arquivo ainda não existe, então: newFile = fileCreate ("logPTR.txt") -- Cria o arquivo de texto dentro deste resource e abre ele. (se já existisse um arquivo com esse nome, substituiria por um novo em branco) if (newFile) then -- Se conseguiu criar o arquivo, então: (as vezes pode dar erro de permissão no servidor, então use isso para evitar erros.) fileSetPos (newFile, fileGetSize (newFile)) if (state == "iniciar") then outputChatBox ("Patrulha iniciada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) else -- Se não conseguiu criar o arquivo, então: debug ("ERRO: Impossivel criar arquivo 'logPTR.txt' no servidor.") end end else -- Se não usou nenhum parâmetro após o comando ou então usou um parâmetro incorreto, então: outputChatBox ("Sintaxe: /ptr <iniciar / finalizar>", thePlayer, 255, 255, 0) end end) function showtime () -- Função que apenas retorna o horário atual. local time = getRealTime() local hours = time.hour local minutes = time.minute local seconds = time.second -- Make sure to add a 0 to the front of single digits. if (hours < 10) then hours = "0"..hours end if (minutes < 10) then minutes = "0"..minutes end if (seconds < 10) then seconds = "0"..seconds end return hours..":"..minutes..":"..seconds end Sobre a parte de tornar obrigatório a finalização da patrulha antes de começar outra, você tem 2 modos: Sete um elementData no jogador após ele iniciar uma patrulha. Sempre que ele tentar iniciar uma nova patrulha, verifique se ele já tem essa elementData. Se tiver, bloqueia e pede pra finalizar a patrulha atual. Ao finalizar uma patrulha, remove o elementData do jogador (setando o valor dela como false). Utilize tabelas. Quando alguém inicia uma patrulha, adiciona a conta dele na tabela e quando ele finaliza, remove ele da tabela. É mais leve do que elementData mas vc precisa adicionar verificadores de logout/quit/disconnect do servidor. Caso contrário o jogador pode sair do servidor e sua patrulha ainda vai estar ativa na tabela do resource. Além disso, todas as patrulhas são perdidas ao reiniciar o resource. Edited December 14, 2020 by Lord Henry 1 Link to comment
Otavio Posted December 14, 2020 Author Share Posted December 14, 2020 On 11/12/2020 at 16:35, Lord Henry said: Pra criar um log, você precisa fazer com que o servidor escreva mensagens em um arquivo de texto. Vou dar um exemplo genérico de um log que marca o instante e o nick quando alguém usar o comando /ptr. (Script server-side.) addCommandHandler ("ptr", function (thePlayer, cmd, state) if (state == "iniciar" or state == "finalizar") then -- Verifica se o comando é seguido por um parâmetro válido. local name = getPlayerName (thePlayer) -- Obtém o nick de quem executou o comando. local horario = showTime() -- Obtém o horário atual do servidor por meio de uma função útil. if (fileExists ("logPTR.txt")) then -- Se já existe um arquivo de texto com este nome neste resource, então: newFile = fileOpen ("logPTR.txt") -- Abre o arquivo para poder editá-lo. fileSetPos (newFile, fileGetSize (newFile)) -- Coloca o cursor de escrita no fim do arquivo, caso contrário ele vai começar a escrever no começo dele, antes do que já estiver escrito no arquivo. if (state == "iniciar") then -- Se o parâmetro que o jogador usou após o comando foi "iniciar" então: outputChatBox ("Patrulha iniciada.", thePlayer) -- Apenas pra saber q o comando funcionou, normalmente teria as verificações antes de permissões e se já está em patrulha. fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") -- Escreve isso no documento. O \n pula para a linha seguinte após a mensagem. elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) -- Para todo fileOpen ou fileCreate, é necessário um fileClose pois enquanto arquivos estiverem abertos, eles podem ser corrompidos e os dados serão perdidos. else -- Se o arquivo ainda não existe, então: newFile = fileCreate ("logPTR.txt") -- Cria o arquivo de texto dentro deste resource e abre ele. (se já existisse um arquivo com esse nome, substituiria por um novo em branco) if (newFile) then -- Se conseguiu criar o arquivo, então: (as vezes pode dar erro de permissão no servidor, então use isso para evitar erros.) fileSetPos (newFile, fileGetSize (newFile)) if (state == "iniciar") then outputChatBox ("Patrulha iniciada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) else -- Se não conseguiu criar o arquivo, então: debug ("ERRO: Impossivel criar arquivo 'logPTR.txt' no servidor.") end end else -- Se não usou nenhum parâmetro após o comando ou então usou um parâmetro incorreto, então: outputChatBox ("Sintaxe: /ptr <iniciar / finalizar>", thePlayer, 255, 255, 0) end end) function showtime () -- Função que apenas retorna o horário atual. local time = getRealTime() local hours = time.hour local minutes = time.minute local seconds = time.second -- Make sure to add a 0 to the front of single digits. if (hours < 10) then hours = "0"..hours end if (minutes < 10) then minutes = "0"..minutes end if (seconds < 10) then seconds = "0"..seconds end return hours..":"..minutes..":"..seconds end Sobre a parte de tornar obrigatório a finalização da patrulha antes de começar outra, você tem 2 modos: Sete um elementData no jogador após ele iniciar uma patrulha. Sempre que ele tentar iniciar uma nova patrulha, verifique se ele já tem essa elementData. Se tiver, bloqueia e pede pra finalizar a patrulha atual. Ao finalizar uma patrulha, remove o elementData do jogador (setando o valor dela como false). Utilize tabelas. Quando alguém inicia uma patrulha, adiciona a conta dele na tabela e quando ele finaliza, remove ele da tabela. É mais leve do que elementData mas vc precisa adicionar verificadores de logout/quit/disconnect do servidor. Caso contrário o jogador pode sair do servidor e sua patrulha ainda estar ativa na tabela do resource. Além disso, todas as patrulhas são perdidas ao reiniciar o resource. Muito Obrigado, Lord Henry, Antes disso não sabia fazer log's, a partir de hoje eu já sei! Você fez uma boa parte do script para mim, não precisava kkk, mas ajudou dms! Tmj mano On 11/12/2020 at 16:35, Lord Henry said: Pra criar um log, você precisa fazer com que o servidor escreva mensagens em um arquivo de texto. Vou dar um exemplo genérico de um log que marca o instante e o nick quando alguém usar o comando /ptr. (Script server-side.) addCommandHandler ("ptr", function (thePlayer, cmd, state) if (state == "iniciar" or state == "finalizar") then -- Verifica se o comando é seguido por um parâmetro válido. local name = getPlayerName (thePlayer) -- Obtém o nick de quem executou o comando. local horario = showTime() -- Obtém o horário atual do servidor por meio de uma função útil. if (fileExists ("logPTR.txt")) then -- Se já existe um arquivo de texto com este nome neste resource, então: newFile = fileOpen ("logPTR.txt") -- Abre o arquivo para poder editá-lo. fileSetPos (newFile, fileGetSize (newFile)) -- Coloca o cursor de escrita no fim do arquivo, caso contrário ele vai começar a escrever no começo dele, antes do que já estiver escrito no arquivo. if (state == "iniciar") then -- Se o parâmetro que o jogador usou após o comando foi "iniciar" então: outputChatBox ("Patrulha iniciada.", thePlayer) -- Apenas pra saber q o comando funcionou, normalmente teria as verificações antes de permissões e se já está em patrulha. fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") -- Escreve isso no documento. O \n pula para a linha seguinte após a mensagem. elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) -- Para todo fileOpen ou fileCreate, é necessário um fileClose pois enquanto arquivos estiverem abertos, eles podem ser corrompidos e os dados serão perdidos. else -- Se o arquivo ainda não existe, então: newFile = fileCreate ("logPTR.txt") -- Cria o arquivo de texto dentro deste resource e abre ele. (se já existisse um arquivo com esse nome, substituiria por um novo em branco) if (newFile) then -- Se conseguiu criar o arquivo, então: (as vezes pode dar erro de permissão no servidor, então use isso para evitar erros.) fileSetPos (newFile, fileGetSize (newFile)) if (state == "iniciar") then outputChatBox ("Patrulha iniciada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) else -- Se não conseguiu criar o arquivo, então: debug ("ERRO: Impossivel criar arquivo 'logPTR.txt' no servidor.") end end else -- Se não usou nenhum parâmetro após o comando ou então usou um parâmetro incorreto, então: outputChatBox ("Sintaxe: /ptr <iniciar / finalizar>", thePlayer, 255, 255, 0) end end) function showtime () -- Função que apenas retorna o horário atual. local time = getRealTime() local hours = time.hour local minutes = time.minute local seconds = time.second -- Make sure to add a 0 to the front of single digits. if (hours < 10) then hours = "0"..hours end if (minutes < 10) then minutes = "0"..minutes end if (seconds < 10) then seconds = "0"..seconds end return hours..":"..minutes..":"..seconds end Sobre a parte de tornar obrigatório a finalização da patrulha antes de começar outra, você tem 2 modos: Sete um elementData no jogador após ele iniciar uma patrulha. Sempre que ele tentar iniciar uma nova patrulha, verifique se ele já tem essa elementData. Se tiver, bloqueia e pede pra finalizar a patrulha atual. Ao finalizar uma patrulha, remove o elementData do jogador (setando o valor dela como false). Utilize tabelas. Quando alguém inicia uma patrulha, adiciona a conta dele na tabela e quando ele finaliza, remove ele da tabela. É mais leve do que elementData mas vc precisa adicionar verificadores de logout/quit/disconnect do servidor. Caso contrário o jogador pode sair do servidor e sua patrulha ainda estar ativa na tabela do resource. Além disso, todas as patrulhas são perdidas ao reiniciar o resource. Cara poderia me dar outra ajuda? Não entendo muito de orientador, quando que eu uso cmd, state? Poderia me explicar? On 11/12/2020 at 16:35, Lord Henry said: Pra criar um log, você precisa fazer com que o servidor escreva mensagens em um arquivo de texto. Vou dar um exemplo genérico de um log que marca o instante e o nick quando alguém usar o comando /ptr. (Script server-side.) addCommandHandler ("ptr", function (thePlayer, cmd, state) if (state == "iniciar" or state == "finalizar") then -- Verifica se o comando é seguido por um parâmetro válido. local name = getPlayerName (thePlayer) -- Obtém o nick de quem executou o comando. local horario = showTime() -- Obtém o horário atual do servidor por meio de uma função útil. if (fileExists ("logPTR.txt")) then -- Se já existe um arquivo de texto com este nome neste resource, então: newFile = fileOpen ("logPTR.txt") -- Abre o arquivo para poder editá-lo. fileSetPos (newFile, fileGetSize (newFile)) -- Coloca o cursor de escrita no fim do arquivo, caso contrário ele vai começar a escrever no começo dele, antes do que já estiver escrito no arquivo. if (state == "iniciar") then -- Se o parâmetro que o jogador usou após o comando foi "iniciar" então: outputChatBox ("Patrulha iniciada.", thePlayer) -- Apenas pra saber q o comando funcionou, normalmente teria as verificações antes de permissões e se já está em patrulha. fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") -- Escreve isso no documento. O \n pula para a linha seguinte após a mensagem. elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) -- Para todo fileOpen ou fileCreate, é necessário um fileClose pois enquanto arquivos estiverem abertos, eles podem ser corrompidos e os dados serão perdidos. else -- Se o arquivo ainda não existe, então: newFile = fileCreate ("logPTR.txt") -- Cria o arquivo de texto dentro deste resource e abre ele. (se já existisse um arquivo com esse nome, substituiria por um novo em branco) if (newFile) then -- Se conseguiu criar o arquivo, então: (as vezes pode dar erro de permissão no servidor, então use isso para evitar erros.) fileSetPos (newFile, fileGetSize (newFile)) if (state == "iniciar") then outputChatBox ("Patrulha iniciada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Iniciou sua patrulha.\n") elseif (state == "finalizar") then outputChatBox ("Patrulha finalizada.", thePlayer) fileWrite (newFile, "["..horario.."] "name.." Finalizou sua patrulha.\n") end fileClose (newFile) else -- Se não conseguiu criar o arquivo, então: debug ("ERRO: Impossivel criar arquivo 'logPTR.txt' no servidor.") end end else -- Se não usou nenhum parâmetro após o comando ou então usou um parâmetro incorreto, então: outputChatBox ("Sintaxe: /ptr <iniciar / finalizar>", thePlayer, 255, 255, 0) end end) function showtime () -- Função que apenas retorna o horário atual. local time = getRealTime() local hours = time.hour local minutes = time.minute local seconds = time.second -- Make sure to add a 0 to the front of single digits. if (hours < 10) then hours = "0"..hours end if (minutes < 10) then minutes = "0"..minutes end if (seconds < 10) then seconds = "0"..seconds end return hours..":"..minutes..":"..seconds end Sobre a parte de tornar obrigatório a finalização da patrulha antes de começar outra, você tem 2 modos: Sete um elementData no jogador após ele iniciar uma patrulha. Sempre que ele tentar iniciar uma nova patrulha, verifique se ele já tem essa elementData. Se tiver, bloqueia e pede pra finalizar a patrulha atual. Ao finalizar uma patrulha, remove o elementData do jogador (setando o valor dela como false). Utilize tabelas. Quando alguém inicia uma patrulha, adiciona a conta dele na tabela e quando ele finaliza, remove ele da tabela. É mais leve do que elementData mas vc precisa adicionar verificadores de logout/quit/disconnect do servidor. Caso contrário o jogador pode sair do servidor e sua patrulha ainda estar ativa na tabela do resource. Além disso, todas as patrulhas são perdidas ao reiniciar o resource. Como posso fazer pra criar tabelas? Sempre fiz por elementData, e não sabia que pesava mais Link to comment
Other Languages Moderators Lord Henry Posted December 14, 2020 Other Languages Moderators Share Posted December 14, 2020 2 hours ago, Otavio said: Cara poderia me dar outra ajuda? Não entendo muito de orientador, quando que eu uso cmd, state? Poderia me explicar? Cmd é o comando que vc usou para executar essa função. Não é utilizado neste caso pois só existe 1 comando ativando essa função. Ele só é usado para casos onde vc tem outros comandos ativando a mesma função, mas quer que a função diferencie cada um deles. State é a palavra que vc usou depois do comando. Se vc usar /ptr eae, então state será igual a "eae". Você pode indicar quantos parâmetros quiser após o comando, cada um ficará em um parâmetro separado pelo espaço. function qualquerCoisa (thePlayer, cmd, parametro1, parametro2, parametro3) -- Depois de cmd, os demais parâmetros são as palavras que serão usadas após o comando. -- CODE end addCommandHandler ("teste", qualquerCoisa) -- Se vc usar /teste eae olá oi, então: -- cmd = "teste" -- parametro1 = "eae" -- parametro2 = "olá" -- parametro3 = "oi" 1 Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now