Advertisement
Eshkation-

Tarefa semanal II

Mar 4th, 2018
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.42 KB | None | 0 0
  1. --[[
  2. Tarefa II - Sistema de privilégios para comandos
  3. 26/02/2018 - 02/03/2018
  4. Dificuldade:
  5.     ★★★☆☆ (+15 / -10 pontos de glória)
  6. Descrição:
  7.     Uma das formas de permitir que certos jogadores utilizem alguns comandos é criar um sistema de privilégios, onde cada jogador - de acordo com seu cargo -, pode utilizar um grupo de comandos do programa. Nesta tarefa semanal você deverá criar um sistema que jogadores sejam classificados em 2 cargos: administrador e avaliador.
  8.  
  9.     Jogadores com o cargo administrador possuem os seguintes poderes:
  10.     Dar o cargo "avaliador" para um jogador utilizando o comando "!role Jogador";
  11.     Remover o cargo "avaliador" de um jogador utilizando o comando "!derole Jogador";
  12.     Poder carregar um mapa utilizando o comando "!np @codigo do mapa".
  13.  
  14.     Já os jogadores que possuirem o cargo "avaliador" só podem utilizar o comando "!np @codigo do mapa".
  15.  
  16.     Boa escrita!
  17. ]]
  18.  
  19. -- Primeiramente, vamos definir uma tabela que armazene os nomes de jogadores e seus respectivos cargos
  20. local priv = {
  21.     -- Estamos definindo aqui um jogador como administrador, assim ele pode utilizar os comandos descritos na tarefa
  22.     Eshkation = 'admin'
  23. }
  24.  
  25. -- Agora vamos utilizar uma função do transformice que é ativada quando o jogador digita algo no chat que comece com um ponto de exclamação (!).
  26. function eventChatCommand(jogador, comando)
  27.     -- Antes disso, vamos checar seu o jogador possui privilegios para digitar os comandos.
  28.     -- O jogador possui qualquer privilegio, seja admin ou avaliador
  29.     if priv[jogador] then
  30.         -- O jogador possui o privilegio de administrador
  31.         if priv[jogador] == 'admin' then
  32.             -- Utilizamos string.sub para remover uma parte da string, a fim de checar se a mesma começa com o comando digitado. O número primeiro número indica o começo da string, e o último em qual caractere ele deve parar (Nesse caso, o quinto).
  33.             if string.sub(comando, 0, 5) == 'role ' then
  34.                 -- Caso o comando digitado comece com 'role ', o código abaixo é ativado, adicionar um espaço no final evita que !roleta, por exemplo, ative o comando.
  35.  
  36.                 -- Agora vamos pegar o segundo argumento do comando digitado, nesse caso o nome de jogador, nesse caso, a string deve começar do caractere 6, depois do espaço do "role " e não possui um limite.
  37.                 local alvo = string.sub(comando, 6)
  38.  
  39.                 -- Poderiamos utilizar funções para saber se o jogador alvo realmente existe na sala mas não é realmente necessário neste código, só vamos adicionar o nick na tabela que criamos.
  40.                 priv[alvo] = 'avaliador'
  41.                 print(alvo..' recebeu os privilegios de avaliador')
  42.  
  43.             elseif string.sub(comando, 0, 7) == 'derole ' then
  44.                 -- Vamos usar a mesma lógica do comando acima
  45.                 local alvo = string.sub(comando, 8)
  46.  
  47.                 -- Ao atribuir o valor nil para um item de uma tabela, o item passa a ser nulo, desaparecendo.
  48.                 priv[alvo] = nil
  49.                 print(alvo..' perdeu os privilegios de avaliador')
  50.             end
  51.         end
  52.  
  53.         -- Como qualquer jogador com privilegio pode rodar um mapa utilizando o comando np, vamos mover o código do comando pra cá
  54.         if string.sub(comando, 0, 3) == 'np ' then
  55.             local mapa = string.sub(comando, 4)
  56.             tfm.exec.newGame(mapa)
  57.         end
  58.     end
  59. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement