Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 03/24/18 em todas áreas

  1. Olá, esse tutorial é uma parte do tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... Ele tem o objetivo de ensinar como tornar o seu website mais seguro obtendo um certificado SSL gratuito, habilitando HTTPS criptografados em servidores web. Você usará o Certbot para obter um certificado SSL gratuito para o Nginx no Ubuntu 22.04 e configurar seu certificado para ser renovado automaticamente. PASSO 1 - INSTALANDO O CERTBOT: Vamos usar o Let’s Encrypt para obter um certificado SSL, portanto vamos instalar o software Certbot e seu plug-in do Nginx para realizar essa tarefa. Use o comando a seguir no terminal linux: sudo apt install certbot python3-certbot-nginx PASSO 2 - CONFIGURANDO O NGINX: O Certbot pode configurar automaticamente o SSL para o Nginx, porem ele precisa encontrar o bloco de server correto na sua configuração. Ele faz isso procurando uma diretiva server_name que corresponda ao domínio para o qual você está solicitando um certificado. Se você está começando com uma nova instalação do Nginx, você pode atualizar o arquivo de configuração padrão. Abra-o com o seu editor de texto favorito em /etc/nginx/sites-available/default e encontre a linha server_name existente e substitua o sublinhado _ pelo seu nome de domínio, como no exemplo: "server_name exemplo.com", você pode também colocar mais de um domínio ou subdomínios: "server_name exemplo.com www.exemplo.com". Salve o arquivo e saia do seu editor. Recarregue o Nginx para carregar a nova configuração usando o comando a seguir no terminal linux: sudo systemctl reload nginx O Certbot agora consegue encontrar o bloco de server correto e atualizá-lo automaticamente. PASSO 3 - OBTENÇÃO DE UM CERTIFICADO SSL: ATENÇÃO: Antes de começar esse passo, você precisa apontar o DNS do domínio/subdomínio para o IP da máquina onde está ocorrendo a instalação do certificado. O Certbot fornece uma variedade de maneiras de obter certificados SSL, através de vários plug-ins. O plug-in Nginx irá cuidar de reconfigurar o Nginx e recarregar a configuração sempre que necessário. Use o comando a seguir no terminal linux: sudo certbot --nginx -d exemplo.com Onde está exemplo no comando acima mude para o seu domínio. Se quiser pode adicionar mais domínios e/ou subdomínios: sudo certbot --nginx -d exemplo.com -d www.exemplo.com Se esta for sua primeira vez executando o Certbot , você será solicitado a digitar um endereço de e-mail e concordar com os termos de serviço. Depois disso, o Certbot se comunicará com o servidor Let's Encrypt e executará um desafio para verificar se você controla o domínio para o qual está solicitando um certificado. Se isso for bem-sucedido, o Certbot perguntará como você gostaria de definir suas configurações de HTTPS. Saída Por favor, escolha se deseja ou não redirecionar o tráfego HTTP para HTTPS, removendo o acesso HTTP. -------------------------------------------------- ----------------------------- 1: Nenhum redirecionamento - Não faça mais alterações na configuração do servidor da web. 2: Redirecionar - Redirecionar todas as solicitações para o acesso HTTPS seguro. Escolha isto para novos sites ou se tiver certeza de que seu site funciona em HTTPS. Você pode desfazer isso mudar editando a configuração do seu servidor web. -------------------------------------------------- ----------------------------- Selecione o número apropriado [1-2] e depois [enter] (pressione 'c' para cancelar): Selecione sua escolha e pressione ENTER . A configuração será atualizada e o Nginx será recarregado para pegar as novas configurações. O Certbot irá finalizar com uma mensagem informando que o processo foi bem sucedido e onde seus certificados estão armazenados: Saída ANOTAÇÕES IMPORTANTES: Parabéns! Seu certificado e cadeia foram salvos em /etc/letsencrypt/live/example.com/fullchain.pem. Seu certificado expiram em 2017-10-23. Para obter uma versão nova ou ajustada deste certificado no futuro, simplesmente execute certbot novamente com o opção "certonly". Renovar de forma não interativa * todos * os seus certificados, execute "certbot renew" - As credenciais da sua conta foram salvas no seu Certbot diretório de configuração em / etc / letsencrypt. Você deveria fazer um backup seguro desta pasta agora. Este diretório de configuração também contém certificados e chaves privadas obtidos pela Certbot assim fazer backups regulares desta pasta é ideal. - Se você gosta do Certbot, considere apoiar nosso trabalho: Doando para ISRG / Let's Encrypt: https://letsencrypt.org/donate Doando para a EFF: https://eff.org/donate-le Seus certificados são baixados, instalados e carregados automaticamente. Tente recarregar seu site usando https:// e observe o indicador de segurança do seu navegador. Ele deve indicar que o site está protegido corretamente, geralmente com um ícone de cadeado verde. Vamos terminar testando o processo de renovação. PASSO 4 - RENOVAÇÃO AUTOMÁTICA DO CERTIFICADO SSL: Os certificados da Let’s Encrypt possuem validade de apenas 90 dias. Isso visa incentivar os usuários a automatizar o processo de renovação de certificados. O pacote Certbot que instalamos cuida disso, adicionando um temporizador systemd que será executado duas vezes por dia e renovará automaticamente qualquer certificado que esteja dentro de 30 dias da expiração. Você pode consultar o status do temporizador com o systemctl usando o seguinte comando no terminal linux: sudo systemctl status certbot.timer Ele deve retornar a mensagem: Resultado: ● certbot.timer - execute o certbot duas vezes por dia Carregado: carregado (/lib/systemd/system/certbot.timer; ativado; predefinição de fornecedor: ativado) Ativo: ativo (em espera) desde Seg 2020-05-04 20:04:36 UTC; 2 semanas 1 dias atrás Disparador: Qui 2020-05-21 05:22:32 UTC; 9h restantes Gatilhos: ● certbot.service Para testar o processo de renovação, você pode realizar uma simulação com o Certbot usando o seguinte comando no terminal linux: sudo certbot renew --dry-run Se não aparecerem erros, tudo funcionou. Quando necessário, o Certbot renovará seus certificados e recarregará o Nginx para aplicar as alterações. Se o processo de renovação automatizada alguma vez falhar, a Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, informando quando o certificado vai expirar. PASSO 5 - PERMITINDO O TRÁFEGO HTTPS PELO FIREWALL: Para permitir adicionalmente o tráfego HTTPS, podemos permitir o perfil Completo Nginx e, em seguida, excluir a tolerância do perfil HTTP Nginx redundante, use os seguintes comandos no terminal linux: sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP' Para verificar as regras ativas no firewall UFW use o seguinte comando no terminal linux: sudo ufw status A mensagem de retorno deve ter algo parecido com isso: Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6) Agora estamos prontos para executar o Certbot e buscar nossos certificados. A princípio é isso! Siga as atualizações no tópico principal: "Tutorial completo de infraestrutura para montar um servidor TFS 1.x no Ubuntu 22.04" ... Fontes: - https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04
  2. Reporte qualquer bug encontrado. - Mudanças: * opcode adicionado * Monstros andando em cima de corpos * War system arrumado * Anti-divulgação melhorado * Cast system arrumado * Crash bugs arrumados * Adicionado exhaust ao comprar/vender items * Account manager com opção para cidades * /ghost stacking arrumado * !disband arrumado * Erros no linux arrumado * Aleta som arrumado * Bug nos rings arrumado * Adicionado suporte para Visual Studio * Remover battle ao entrar em PZ * Não pode jogar lixo em casas * Salt removido - Downloads: * Distro (x32): https://github.com/Fir3element/binaries/raw/master/x32-windows.zip * Distro (x64): https://github.com/Fir3element/binaries/raw/master/x64-windows.zip * Requisitos: Microsoft Visual C++ Redistributable Package * Source + datapack: https://github.com/Fir3element/3777/archive/refs/heads/main.zip - Scans: * Distro (x32): https://virustotal.com/pt/file/6683a91273b848a39ac21288da9d3abde341436744d6846e35a477c8e7c8f5f7/analysis/1480675335/ * Distro (x64): https://virustotal.com/pt/file/21028857bb1124f19e0353e7f5775c8f66afc4f87f29df9cf4ab8ca1a046b816/analysis/1480675394/ * Source + datapack: https://virustotal.com/pt/file/3761b48ee19f3f540d4c4a48c35c73c89a85615876307073494b1dcfed464d36/analysis/1480675473/
  3. EXCLUSIVO BASE PARECIDA (OtpokemonXY)

    Lordoritos reagiu a eliaszinho por uma resposta no tópico

    1 ponto
    resolvi postar aqui um servidor editado igual a o OtPokemon ° Sistemas Moves System: 100% Caught System: 100% Go-Back System:100% Portrait System: 100% Heal.lua 100% Ginasios 90% • ArySoon Araujo Arrumou Os Attakes Dos Pokemons pareçidos com o OtPokémon • Adicionado Boost System • Adicionado Shiny Stone System • Adicionado Vip Por escritura System • Adicionado Quest Burned • Adicionado Quest Pesadelos • Adicionado Quest Mysterios • Adicionado Balada System em Cerulean Video do Youtube Downloads do servidor Download Server+Cliente+Jhotohttp://www.mediafire.com/file/7i8hs31me5ttzmr/Base+XY.rarMapa Jhoto: http://www.mediafire.com/file/9tbgtjefyz7a1tz/world.rar Youtube ================================================ SCAN: https://www.virustotal.com/pt/file/27f637c10ff7dca4b69b8d7846882c65989705d0f64ceb072a3643731d86a4ab/analysis/1478032783/ Se Mostrar virus e por causa das DLL
  4. Sala com Boss

    Vodkart reagiu a Leohige por uma resposta no tópico

    1 ponto
    Esse script é até bem simples, você adquire uma storage e ganha a permissão de entrar em uma sala especial através de um tile/portal para matar um Boss. Apenas uma pessoa por vez poderá entrar na sala. O jogador tem X minutos para matar o boss. A sala é aberta novamente em X minutos. Demonstrações Bom se você se você gostaria de implementar este script, você vai precisar criar uma área do seu gosto, posicionar um tile/teleport que desejar para o jogador poder entrar no local e outro para ele poder sair. O de tile/teleport de entrada precisará ter a actionid igual a 65535, e o de saida 65534. Após ter feito isso crie e modifique os arquivos abaixo. data/movements/scripts/boss.lua (configure as primeiras linhas a seu gosto) data/movements/movements.xml (se for usar 1 tile/teleport diferente para entrada e saída coloque duas linhas com os 2 ids) **Não se esqueça de configurar a areascan e areacenter, coloque a altura e largura minima e máxima da área onde o Boss estará, caso você não faça isso o Boss não será removido quando o local for fechado, e nem o player será expulso. **Recomendo que coloque no logout por toda a sala do Boss, evitando assim que engraçadinhos tentem atrapalhar os outros jogadores.
  5. parece ser na função do account manager não vai dar problemas maiores não
  6. Bug Magic Level aumentando drasticamente

    wesley97 reagiu a KotZletY por uma resposta no tópico

    1 ponto
    @wesley97 estava vendo aqui e existe uma multiplicação na função, porém não está ativa no seu script. Tente achar uma conbinação para seu rateMagic, tente diminuir. Me mostre seu config.lua atualmente, qual a porcentagem que você está colocando ?
  7. Tu precisas ver no teu createaccount.php qual função ele está executando em cada campo para descobrir o que o AJAX está recebendo como resposta do php. No gesior que eu tenho aqui, por exemplo, a função Javascript para a account name é checkAccount() e ela se comunica com o arquivo ajax_check_account.php, dentro da própria pasta de páginas do site.
  8. Erro Creature script Gonka

    maiconmnt reagiu a Rusherzin por uma resposta no tópico

    1 ponto
    Tu tens duas opções, ou cria um NPC com o nome [Server Information], ou tu remove a seguinte linha: doCreatureSay(getCreatureByName("[Server Information]"), "[DOUBLE POINTS]: Receba pontos em dobro para qualquer valores! Promoção por tempo LIMITADO!.", TALKTYPE_PRIVATE, false, cid)
  9. 1 ponto
    Pode tentar usar uma dessas sources, é só usar as tuas coisas para ver se funcionam com alguma delas. Link 1 Link 2
  10. 1 ponto
    Não entendi exatamente o que aconteceu. Qual versão de TFS está usando? O que exatamente tu fez no site que bugou o servidor? Tu compilou um TFS novo e começou a bugar?
  11. Open source, você terá acesso total ao servidor, como por exemplo caso queira traduzir algo in-game que não seja um evento, será na source, alguns sistemas necessitam de algumas funções na source como por exemplo o cast system. Não terá o acesso total que citei acima. Open source, necessita um pequeno conhecimento em c++
  12. Duvidas em Geral!

    wesley97 reagiu a gabriel28 por uma resposta no tópico

    1 ponto
    Se seu servidor derivado for de pokemon, pegar uma source limpa pra tentar refazer, vai ser um trabalho enorme. Pelos fóruns tem tutoriais ensinando a dar downgrad ou upgrade nas source, só ir seguindo os passos do tutorial que você pegar pra seguir. E sim, da pra acrescentar sistemas novos depois que passar ela pra suportar a versão 8.6.
  13. Retirando Bug Do Rme 8.60

    yamislayer reagiu a Wakon por uma resposta no tópico

    1 ponto
    @Dornellas, não lembro se baixei esse cliente no site do RME mas ele funciona perfeitamente aqui, testa ai: https://www.mediafire.com/?lvz8c12b8e0y09k
  14. [Básico] Aprendendo Script

    Shirushi1 reagiu a VictorFT por uma resposta no tópico

    1 ponto
    ---Tutorial by Leo --- Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei. Nessa primeira parte, vamos ver os seguintes pontos: 1. [LÓGICA DE PROGRAMAÇÃO] 1.1 O que é um algoritmo? 1.2 Um exemplo de algoritmo. 1.3 Exercício: Faça seu próprio algoritmo. 1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação. 1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros. 1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é: Acordar Se não tiver água quente então Colocar água na panela Colocar a panela no fogão Ligar o fogão Esperar água ferver Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando... Mas se já tiver água quente então Botar água na xícara Botar duas colheres de açúcar Botar uma colher de café em pó Mexer Tomar Dizer: Delíiiciaa =P Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café. Como ficou o algoritmo: 1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar). 2. [sCRIPTEANDO] 2.1 Arquivos de Base 2.2 Controladores Lógicos - Condicionais - Operadores de relação - Operadores-controladores 2.3 Variáveis 2.4 Storage Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico. 2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são: -- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts. -- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca. -- Notepad++: Um editor de texto que também pode ser útil. 2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir. --- Condicionais Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito. Exemplo: Caso não chova, irei jogar bola. Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo. Na programação, os principais condicionais são: if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end. else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa. elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if. Construindo um algoritmo só para exemplificar: Pegando o exemplo acima, vamos usar o elseif. ---- Operadores de relação Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente: igual: = menor igual: <= maior igual: >= verificação: == Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores. Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100 --- Operadores controladores Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo. Exemplo: se o player tem level 100 e o nome dele é Leoking então execute script fim Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas. Exemplo: se o player tem level 100 ou o nome dele é Leo então execute script fim Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado. 2.3 Variáveis: Servem basicamente para guardarem valores. Exemplo: O script retornará: king -- king é exatamente o valor da variável var. 2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc. Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor) Exemplo: setPlayerStorageValue(cid, 1234, 1) Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor) Exemplo: getPlayerStorageValue(cid, 1234) Essas funções você pode ver naquele arquivo de base: lista de funções em lua Agora a última parte desse mini tutorial: 3. [ACTIONS] 3.1 Sintaxe das actions 3.2 Exemplo de actions 3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação: function onUse(cid, item, fromPosition, itemEx, toPosition) Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end. Exemplo: Explicação da sintaxe: onUse = ao Usar (assim que o player use um item) cid = creature id -- quem vai usar o item item = item que será usado ou item "principal" fromPosition = da Posição itemEx = item "secundário" toPosition = para a Posição 3.2 Vamos colocar em prática tudo que lemos até agora. Nossa action fará: [/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center] Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços. Créditos: 100% Leo PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo