Ir para conteúdo

Dimaxor

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Dimaxor deu reputação a caotic em Report Sytem Beta   
    Ola pessoal do tk.
    Eu fiz este script para outra fórum mais achei interessante disponibilizar para vocês também.

    Quando o player encontrar um bug ou uma irregularidade no seu servidor ele poderá usar o comando /report (e a descrição do bug) e as informações sera guardada no log de alertas e se um administrador estiver online a mensagem do bug e mostrada a ele mais se não estiver quando um administrador entra no servidor ele recebera a mensagem de novos alertas.

    No log de alertas ficara salvo exatamente assim:




    Vamos instalar o sistema:
    Primeiro crie um arquivo de texto(.txt) chamado report na sua pasta de seu ot onde fica o seu executavel.
    Lembre-se que deve ser um arquivo txt e que deve estar na pasta raiz do seu ot.

    Depois de criar o arquivo vá em talkactions e crie um arquivo LUA chamado de report.
    E coloque o seguinte script:



    function onSay(cid, words, param) if exhaustion.check(cid, 2123) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Precisa esperar para reportar novamente") return false end if #param <= 10 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu report precisa ter pelo menos 10 caracters") return false end local file = io.open("./report.txt", "a") file:write("\n "..getPlayerName(cid).." "..os.date("%A").." as "..tostring(os.date("%X")):sub(1, 5).." reportou dizendo ("..param..")") file:close() setGlobalStorageValue(28212, getGlobalStorageValue(28212)+1) exhaustion.set(cid, 2123, 36000) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu report foi enviada com sucesso logo sera atendindo obrigado pela colaboração") for _, id in ipairs(getPlayersOnline()) do if getPlayerGroupId(cid) > 5 then doShowTextDialog(cid, 1952, ""..getPlayerName(cid).." acabou de reportar dizendo ("..param..") este report esta salvo no log") exhaustion.set(cid, 2123, 36000) return true end return true end end Agora vá em talkactions.xml e coloque a seguinte tag: <talkaction words="/report" event="script" value="report.lua"/> Agora vá em creaturescripts e crie um arquivo LUA chamado de alerta. E coloque isto dentro: function onLogin(cid) if getPlayerGroupId(cid) > 5 then if getGlobalStorageValue(28212) == 0 then doShowTextDialog(cid, 1952, "1 player reportaram para ver o report abra o log de reports") setGlobalStorageValue(28212, -1) return true end if getGlobalStorageValue(28212) ~= -1 then doShowTextDialog(cid, 1952, ""..getGlobalStorageValue(28212).." player reportaram para ver o report abra o log de reports") setGlobalStorageValue(28212, -1) return true end return true end return true end Coloque a tag em creaturescripts.xml <event type="login" name="report" event="script" value="alerta.lua"/> Depois registre o evento em login.lua Primeiro va em creaturescripts/scripts e abra o arquivo chamado login.lua antes do ultimo "return" coloque isto: registerCreatureEvent(cid, "report")


    O.o
    Seu sistema de report foi instalado






    Estiver alguma duvida,problemas ou qualquer coisa e queria entrar em contanto comigo basta me enviar um email para:
    caotic@#####.com
  2. Gostei
    Dimaxor deu reputação a Ryzor em POO em Lua   
    POO – Programação Orientada a Objeto
    (em Lua)

    Sei que tem muita gente querendo aprender ou com dúvida sobre POO, para quem programa em lua para otservers casualmente vai ser estranho e talvez até desnecessário, mas pra quem quer se tornar um futuro programador ou até mesmo acumular mais conhecimento, é mais do que necessário !


    Porque Aprender ?

    Certo, você aprende o que é POO, sabe aplicar sem dificuldades em lua, mas e ai... onde usar ? Bem, isso depende muito do que você quer, em lua, ao contrário de algumas linguagens, não é necessário saber POO para se programar, mas nada impede de você usá-lo e tornar seu código mais bonito, organizado e de fácil manutenção (Que são algumas das características da POO), resumindo, aprende quem quiser.

    Nota Importante: A POO em lua não é realmente POO - mas, como assim ? - Lua não é naturalmente Orientada a Objetos, porque se caso fosse você já saberia. Em Lua é feita uma "simulação" usando meta tabelas - Mas, OMG, como assim ? meta tabelas ? - calma, calma, isso eu já explico vamos por partes.



    Classe

    Definição: Classe é onde fica armazenado atributos, métodos, é onde tudo acontece na Orientação a Objetos.
    Pense em classe como se fosse uma receita, algo que armazena todas as informações como se fosse uma ficha técnica, trazendo mais para a realidade, pense em classe como nós, seres humanos ou um computador, uma televisão, uma cama, um instrumento musical, cada um tem suas informações próprias e ações próprias.



    Exemplo:

    Código:

    Classe TV Informações/Atributos: Polegadas: 29 Marca: Philips Canal: 31 Ligada: Sim Volume: 35% Ações/Métodos: Ligar Desligar Mudar de Canal Diminuir Volume Aumentar Volume Entendeu ? Isso seria uma ficha técnica de alguma televisão qualquer, e quais ações essa determinada televisão possui, onde informações é a mesma coisa que atributos na POO e métodos é a mesma coisa que ações. Agora vamos trabalhar nessa classe... Vamos começar a escrevê-la usando Lua: Código: TV = {} function TV:new() return setmetatable({}, { __index = self }) end Nota: Explicarei com mais detalhes sobre a função setmetatable() e seus usos em outro tutorial(eu acho), por enquanto use-a dessa maneira Agora é o momento que você olha isso e pergunta - Mas, porque essa tabela ai no começo ? porque usar dois-pontos ? porque new ? Como dito anteriormente, Lua é uma simulação de POO, ou seja, você não vai programar exatamente dessa maneira caso fosse programar em Java, C++, Ruby ou qualquer outra linguagem OO. Mas explicando o porque de cada um: Código: TV = {} Basicamente, essa tabela é onde irá ficar armazenada as informações da classe. Código: function TV:new() return setmetatable({}, { __index = self }) end Entenda TV:new como sendo Classe:método, onde TV é a nossa classe e new é o nosso método e nosso construtor, esse método é o primeiro a ser chamado, é ele que vai construir nossa classe (por isso que se chama construtor).
    Atributo Atributo são as características, as informações de um determinado objeto (não pense em objeto como um computador ou uma mesa, mas sim como qualquer coisa, até seres vivos). Exemplo: Como dito anteriormente, nossa classe possui esses atributos: Código: Polegadas: 29 Marca: Philips Canal: 31 Ligada: Sim Volume: 35% Agora vamos tentar passá-las a lua e adicionar na classe: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end Certo, definimos os atributos e quais que queremos que possam ser modificados de começo, agora mais uma explicação aprofundada parte-a-parte: Código: function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end Onde está colorido possui o mesmo valor, ou seja, se você definir posteriormente marca como LG, ficará: Código: marca = "LG" Para adicionar mais atributos, é só adicionar mais um parâmetro na função (se necessário) e adicionar mais um item na tabela, sendo que o "nome" pode ser qualquer coisa, não precisa necessariamente ser o mesmo nome do atributo, por exemplo, poderia ser assim ao invés do exemplo acima: Código: function TV:new(marca, polegadas) return setmetatable({lig = true, poleg = polegadas, vol = 5, cal = 31,mc = marca}, { __index = self }) end Única coisa que mudaria, seria que ao invés de ser "marca" seria "mc". Lembrando que todos os atributos poderão ser chamados depois. Métodos Métodos são as ações (como dito anteriormente) que podem ser feitas pelo objeto e também são os métodos que automatizam algumas coisas na classe. Exemplo: Como dito anteriormente, a classe possui esses métodos: Código: Ligar Desligar Mudar de Canal Diminuir Volume Aumentar Volume Vamos adicioná-las na classe sem colocar instrução dentro por enquanto: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end function TV:Ligar() -- Ligar a TV end function TV:Desligar() -- Desligar a TV end function TV:setCanal() -- Mudar de Canal end function TV:setVolume() -- Definir Volume end Porque eu coloquei apenas “setVolume()” ao invés de 2 métodos, um para aumentar e outro para abaixar ? Deixando dessa maneira você pode fazer as duas coisas em um método só ! Agora como cada um é um método da classe, é só adicionar a instrução de cada um: Método TV:setCanal() por exemplo: Código: function TV:setCanal(novocanal) -- Mudar de Canal self.canal = novocanal end TV:setCanal é uma função como qualquer outra, ele tem que simplesmente trocar o canal da televisão. Mas ai você pergunta – e esse "self" ai ? Da onde ele vem ? O que ele é ? - Simples, self se refere a nossa classe (self traduzido, seria algo como "eu", "próprio"), o self seria uma forma de se referir a classe, acessar os atributos e usá-los. Lembre-se, como o self se refere a própria classe, você só pode utilizá-lo em métodos de classe ! Simplificando, usando palavras e cores, o que a função vai fazer é acessar o atributo canal da classe e definir seu valor para o mesmo valor de novocanal E Você pode usar o self tanto para acessar atributos quanto para criar novos a partir de métodos, Simples não ? Depois de definir a instrução de todos os métodos, a classe ficou dessa maneira: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end function TV:Ligar() -- Ligar a TV self.ligada = true end function TV:Desligar() -- Desligar a TV self.ligada = false end function TV:setCanal(novocanal) -- Mudar de Canal self.canal = novocanal end function TV:setVolume(novovolume) -- Definir Volume self.volume = novovolume end Agora vamos testá-la ! Essa parte fica a seu critério de como fazer o teste, a classe pode estar tanto no mesmo arquivo quanto em outro (ai é necessário chamar usando a função dofile()) O teste é simples, vai ser criado uma nova TV e definida a uma variavel, em seguida será exibido as informações da TV depois modificadas e exibidas novamente: Código: TV = {} function TV:new(marca, polegadas) return setmetatable({ligada = true, polegadas = polegadas, volume = 5, canal = 31, marca = marca}, { __index = self }) end function TV:Ligar() -- Ligar a TV self.ligada = true end function TV:Desligar() -- Desligar a TV self.ligada = false end function TV:setCanal(novocanal) -- Mudar de Canal self.canal = novocanal end function TV:setVolume(novovolume) -- Definir Volume self.volume = novovolume end ---- minhatv = TV:new("LG", 29) -- Aqui eu defino que minha marca é LG e polegadas é 29 print("Minha Televisão é da marca " .. minhatv.marca .. ", possui " .. minhatv.polegadas .. " polegadas, está no canal " .. minhatv.canal .. " e volume " .. minhatv.volume .. "%") minhatv:setCanal(73) -- Mudo o canal para 73 minhatv:setVolume(40) -- Mudo o volume para 40 print("Agora minha TV está no canal " .. minhatv.canal .. " e o volume está em " .. minhatv.volume .. "%") minhatv:setVolume(10) -- Mudo o volume para 10 print("Agora minha TV está no canal " .. minhatv.canal .. " e o volume está em " .. minhatv.volume .. "%") minhatv:Desligar() -- Desligo a tv (mesma coisa que minhatv.ligada = false) if (not minhatv.ligada) then -- Se não estiver ligada print("A TV foi desligada") end


    Muito simples, não ?


    Qualquer dúvida ou sugestão sobre o tutorial é só dizer
    Espero ter sido o mais claro possível

    Creditos
    Lwkass

Informação Importante

Confirmação de Termo