Ir para conteúdo

gabriel28

Visconde
  • Total de itens

    429
  • Registro em

  • Última visita

  • Dias Ganhos

    6

Histórico de Reputação

  1. Thanks
    gabriel28 recebeu reputação de Poccnn em Utilidade pública   
    Desculpem pelo título chamativo e/ou pela área está incorreta, mas enfim, lhes trago a solução definitiva pros problemas de bug relacionados a conteiners, como ficar comprando bp's infinitamente até crashar o server, stackar várias bps dentro de bps, jogar dentro da casa e usar o comando !leavehouse (ou algo do tipo) o que causa lag (talvez crash?) por conta da database ter que processar tantos itens saindo da house pro dp ou qualquer outra merda desse tipo.

    Vá em  ...\data\npc\lib\npcsystem procure por: -- Handles onBuy events. If you wish to handle this yourself, use the CALLBACK_ONBUY callback.

    Substitua toda a função por:
     

    Explicando: 
    Se o player tentar comprar mais de X itens de id Y, o npc não irá vender. Quando o player comprar uma quantidade menor que X, ganhará um cooldown de Z segundos até poder comprar novamente. Tudo isso configurável na tabela.
    Pra te prejudicar com esse tipo de bug agora, só se o "player" tiver com uma puta vontade de te foder.
    Testado e totalmente funcional em TFS 0.4 rev 3884, mas qualquer coisa é só adaptar pra outras versões que tenho certeza que funciona.

    EDIT: Não sei se já tem script similar por ai, mas esse ai é de minha autoria.
  2. Thanks
    gabriel28 recebeu reputação de Emooooo em [Resolvido] AJUDA NESSE RING   
    function onEquip(cid, item, slot) doTransformItem(item.uid, 7697, 1) doPlayerSendTextMessage(cid, 22, 'Sua rate de skill foi aumentada em 50%!') doPlayerSetSkillRate(cid, 0, getConfigValue("rateExperience")*1.5) -- 0 = fist fight, olhe em constant.lua pra ver o numero das outras skills e ir adicionando return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 7708, 1) doPlayerSendTextMessage(cid, 22, 'Sua rate extra de skill foi cancelada.') doPlayerSetSkillRate(cid, 0, getConfigValue("rateExperience")) return true end  
  3. Upvote
    gabriel28 deu reputação a Yan Liima em [Sistema] Trade Points   
    #Introdução
    Reparei que muitas pessoas estão atrás desse sistema que o DBOBR & NTOBR usa, e atualmente o VitorSubhi postou um, porém é necessário modificar as sources. Apesar de achar o dele bem melhor, estarei deixando este meu sistema(não é necessário mexer nas sources).
     
    #Funcionamente
    O jogador vai até um NPC e compra um papel, após ter comprado ele pode estar dando trade nesse papel e negociando com algum jogador, em troca de qualquer item. Ao finalizar a negociação, os points são transferidos/removidos(caso houver points na conta). Também é possivel comprar o papel por comando, estarei disponibilizando ambos para vocês.
     
    #Alguns prints:
     
    Estarei deixando o script para vocês em inglês, modifique como quiser ;D
    Então vamos lá...
     
    #Instalação
    Em data/lib crie um arquivo chamado tradepoints.lua cole isto dentro:
     
    Em data/creaturescript/tradepoints.lua:
     
    TAG:
    <event type="tradeaccept" name="Trade_Points" event="script" value="tradepoints.lua"/> <event type="traderequest" name="Trade_Points_Request" event="script" value="tradepoints.lua"/> login.lua:
    registerCreatureEvent(cid, "Trade_Points") registerCreatureEvent(cid, "Trade_Points_Request") NPC XML:
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Frodo" script="data/npc/scripts/trade_points.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="275" head="114" body="113" legs="113" feet="113" corpse="2212"/> <parameters> <parameter key="module_shop" value="1" /> <parameter key="message_greet" value="Hello |PLAYERNAME|. I sell some utensils and Premium Points Transfer for you to transfer points to other players, remember to buy use '10' to 10 points." /> </parameters> </npc> Data/npc/scripts/trade_points.lua:
     
    Caso queira que a compra do papel seja feita por talkactions, aqui está:
     
    TAG:
    <talkaction words="!sellpoints;/sellpoints" event="script" value="trade_points.lua"/>  
    Prontinho xD
    Agradecimentos ao Junior(lordzetros) por ajudar na função scanContainer e ao @VitorSubhi
  4. Upvote
    gabriel28 deu reputação a Nightz em [Linux] Configurando o (D)DoS Deflate para trabalhar com o CSF   
    Olá cidadãos XTibianos!

    Neste tutorial vou ensinar a adaptar o DDoS Deflate, que é uma excelente ferramenta para combater ataques, para ser utilizado junto ao famoso ConfigServer Security & Firewall (CSF).

    Para este tutorial vou partir do ponto que o CSF já está instalado e configurado.

    Para instalar o (D)DoS Deflate, basta rodar o seguinte comando:
    wget http://www.inetbase.com/scripts/ddos/install.sh chmod 0700 install.sh ./install.sh Feito isso, vamos para a configuração do (D)DoS Deflate para trabalhar com o CSF.
    1. Antes de começarmos a modificação, faremos um backup do arquivo que vamos alterar:
    cp "/usr/local/ddos/ddos.sh" "/usr/local/ddos/ddos.bkp.sh" 2. Utilize o nano para editar o arquivo ddos.sh:
    nano /usr/local/ddos/ddos.sh 3. Vá até a linha 138 (aproximadamente) e procure por essa linha:
    $IPT -I INPUT -s $CURR_LINE_IP -j DROP 4. Apague o conteúdo dessa linha e substitua por:
    csf -d $CURR_LINE_IP 5. Por fim, copie o arquivo ddos.sh para a pasta /usr/local/sbin.
    cp -s /usr/local/ddos/ddos.sh /usr/local/sbin/ddos Pronto! Seu DDoS Deflate está configurado para trabalhar com o CSF!

    Façam bom proveito

    (Esse tutorial foi completamente escrito por mim. Qualquer cópia deve ser previamente autorizada e conter os devidos créditos.)
  5. Upvote
    gabriel28 deu reputação a Nightz em [Linux] Protegendo seu SSH   
    Bom dia cidadãos do XTibia!
     
    Venho por meio desse pequeno e simples tutorial ensinar a aumentar a proteção do seu servidor contra invasões via SSH.

    Como sabemos, o SSH é o meio padrão de nos conectarmos ao servidor Linux remotamente, e caso alguém consiga acessar o seu servidor via SSH, tem total e pleno controle sobre o mesmo. Deste modo é importante deixá-lo o mais seguro possível!

    + Nesse tutorial não vou ensinar como utilizar SSH Keys, que é o meio mais seguro de se conectar ao SSH. Motivo: É bem mais complicado do que parece, logo, precisa de um conhecimento maior. Caso alguém queira, me avise que farei um tutorial separado. Mas fique tranquilo! Esse tutorial vai proteger seu SSH com eficiência!

    Vamos lá?

    Pré-requesitos:
    #01: Nesse tutorial vamos utilizar o nano para editar os arquivos. Normalmente o nano vem instalado nos servidores linux, porém, caso seu servidor não tenha o mesmo instalado, instale-o com o comando abaixo ou utilize o vim.

    -> Ubuntu/Debian
    apt-get install nano -> CentOS
    yum install nano 1. Altere a porta do seu SSH:

    1.1. Utilize o nano para editar o arquivo de configuração do SSH.
    nano /etc/ssh/sshd_config 1.2. Altere a linha abaixo (aproximadamente linha 14):

    Procure por:
    #Port 22 Retire o # da variável e altere a porta para uma porta que não esteja sendo utilizada pelo seu servidor:
    Port 2020 Atenção! Não se esqueça de desbloquear a nova porta do SSH no seu firewall!
    Atenção! Não utilize portas como 80 e 7171 para o SSH, pois não funcionará uma vez que essas já estarão sendo utilizadas.
    + Não se esqueça de prestar atenção nas observações acima, pois caso esqueça de alguma delas você poderá ficar sem acesso ao seu SSH e precisará contatar seu suporte.

    1.3. Saia do nano utilizando CTRL + X. Para salvar digite Y (para caso o sistema operacional esteja em inglês) ou S (para sistema operacional em porgutuês) e aperte ENTER.

    1.4. Reinicie o SSH com o comando:
    service sshd restart Pronto!

    2. Bloqueie o login pelo usuário root
     
    + Mas calma.. se eu bloquear o login pelo usuário root, como vou logar no SSH? Simples! Você vai criar um outro usuário sem permissão para nada, e usar ele pra logar no SSH, e depois você simplesmente alterna de conta. Assim, para invadir seu SSH o invasor precisará não só de 1 senha, mas sim de 2 senhas e 1 usuário!
     
    2.1. Primeiro vamos adicionar um usuário com o comando:
    useradd usuario 2.2. Agora vamos definir a senha do usuário criado:
    passwd usuario + Ao usar esse comando você precisará digitar uma senha, apertar ENTER, digitá-la novamente e apertar ENTER de novo.
    + Esse novo usuário poderá executar certos comandos, mas terá permissões limitadas.

    2.3. Abra uma nova conexão SSH e teste se você consegue logar com esse novo usuário criado. Caso consiga, avance no tutorial.

    2.4. Agora, vamos novamente editar o arquivo de configuração do SSH.
    nano /etc/ssh/sshd_config Procure por (aproximadamente linha 43):
    #PermitRootLogin yes Substitua por:
    PermitRootLogin no 2.5. Reinicie o SSH com o comando:
    service sshd restart 2.6. Agora, quando for logar, faça da seguinte maneira:

    2.6.1. Logue com o usuário que você criou.
    2.6.2. Após logar com esse usuário, altere para o root com o comando:
    su - 2.6.3. Logado como root com sucesso!


    Pronto!


    3. Utilize senhas complicadas:

    Essa dica parece simples, mas é extremamente eficaz! Um dos métodos mais comuns de invasão é o que tenta várias senhas por segundo (não vou falar o nome por motivos éticos, quero ajudar a proteger, não a atacar). Se sua senha for fácil e seu Firewall e/ou iptables estiver mal configurado, esse método vai funcionar.

    3.1. Utilize o comando abaixo para alterar a senha do root.
    passwd 3.2. Evite senhas com nome, número de telefone e afins, como joao999 ou 33334444. Use senhas como: 4}rYT_2}hzTsRR? (essa senha foi gerada agora de maneira aleatória, por favor, não copiem essa senha, gerem outra - vai que alguém resolve fazer isso né.. ).

    Por enquanto é isso! Façam bom proveito!

    (Esse tutorial foi completamente escrito por mim. Qualquer cópia deve ser previamente autorizada e conter os devidos créditos.)
     
  6. Upvote
    gabriel28 deu reputação a Nightz em Aumente sua proteção contra ataques com o SYN Proxy   
    Bom dia XTibianos!
     
    Abaixo temos umas regrinhas do iptables conhecidas como SYN Proxy que ajudam e muito a combater ataques do tipo SYN Flood (ataque de negação de serviço).

    Segundo dados estatísticos essas simples regras reduzem o impacto desses ataques em até 20x!

    Essas regras são recomendadas por grandes empresas, incluindo a RedHat, responsável por vários projetos como o CentOS. Antes de vir postar testei os comandos no Ubuntu e no Debian e funcionaram 100%.



    As regras do iptables abaixo são para servidores que não possuem o CSF ou APF instalados. Basta rodar 4 linhas de comando no seu SSH.
    iptables -t raw -I PREROUTING -p tcp -m tcp --syn -j CT --notrack iptables -I INPUT -p tcp -m tcp -m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 iptables -A INPUT -m state --state INVALID -j DROP /sbin/sysctl -w net/netfilter/nf_conntrack_tcp_loose=0 E pronto! O SYN Proxy já está funcionando!

    Observação: Caso seu servidor seja VPS consulte seu provedor antes de rodar a última linha do comando.

    Façam bom proveito!
    (Esse tutorial foi completamente escrito por mim. Qualquer cópia deve ser previamente autorizada e conter os devidos créditos.)
  7. Upvote
    gabriel28 deu reputação a Crypter em [0.3.6-0.4] Explosive mine   
    Sistema simples que ao pisar em "X" item com a action id ele explode //
     
     
    Em data/lib
     
    Crie um arquivo chamado Mine.lua
     
    function setItemAid(uid, value)return doItemSetAttribute(uid, 'aid', value)endfunction removeBomba(pos, id)local item = getTileItemById(pos, id)    if item.uid > 0 then        doRemoveItem(item.uid)    endreturn trueend  
    Em data/movements/scripts
     
    Crie um arquivo chamado Mine.lua
    local config = {effect1 = 4, -- efeito ao pisareffect2 = 5, -- efeito ao explodirmsg = "Você foi acertado pela bomba.", -- msg que manda pra quem for acertadomindmg = 100, -- dmg minimo que tira (nao é necessariamente o dano que vai sair do cara pois precisa desconsiderar as defesas dele antes)maxdmg = 300, -- dmg maximo que tira (nao é o dano que vai sair do cara)self = true -- true/false pra ativar/desativar dano no cara que colocou a bomba caso ele mesmo passe na bomba.}local arr = {{0, 1, 0},{1, 3, 1}, -- area que vai acertar ao explodir a bomba{0, 1, 0},}local area = createCombatArea(arr)function onStepIn(cid, item, position)    local player = getPlayerByNameWildcard(getItemAttribute(item.uid, 'ref'))    doSendMagicEffect(position, config.effect1)    if isCreature(player) then        doAreaCombatHealth(player, COMBAT_FIREDAMAGE, position, area, -config.mindmg, -config.maxdmg, config.effect2)    end    if ((cid == player and config.self) or (not isPlayer(cid)) or (not isCreature(player))) then        doCreatureAddHealth(cid, -1 * math.random(config.mindmg, config.maxdmg))        doSendMagicEffect(position, config.effect2)    end    if isPlayer(cid) then        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msg)    end    doRemoveItem(item.uid)return trueend  
    Em movements.xml
    <movevent type="StepIn" actionid="13245" event="script" value="Mine.lua"/>  
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Caso voce queira rodar esse movements em uma spell
     
    data/spells/scripts:
     
    Crie um arquivo chamado mine.lua
     
    local config = {itemid = 2180, -- Id do item que ira explodir duration = 10, -- duração para ser removidaactionid = 13245, --Nao mechaeffect = 1, -- efeitomsg = "Planted explosive mine!" -- mensagemcooldown = 120, --- tempo entre um uso e outro em segundo}function onCastSpell(cid, var) if os.time() - getPlayerStorageValue(cid, 55695) >= config.cooldown then setPlayerStorageValue(cid, 55695, os.time())    local position = getCreaturePosition(cid)    local item = doCreateItem(config.itemid, 1, position)    setItemAid(item, config.actionid)    doItemSetAttribute(item, 'ref', getCreatureName(cid))    doCreatureSay(cid, config.msg, 20)    doSendMagicEffect(position, config.effect)    addEvent(removeBomba, config.duration * 1000, position, config.itemid)  elsedoPlayerSendCancel(cid, "Aguarde "..(config.cooldown - (os.time() - getPlayerStorageValue(cid, 55695))).." segundos para plantar outra bomba!") endreturn trueend Em Spells.xml
     
    <instant name="Explosive Mine" words="Explosive Mine" lvl="1" mana="1" prem="0" aggressive="1" exhaustion="1000" needlearn="0" event="script" value="mine.lua">   <vocation id="1"/></instant>  
     
              Se Voce Gostou da script da um REP+ e me Segui .!
  8. Upvote
    gabriel28 recebeu reputação de xugrude456 em [Resolvido] script que tira battle   
    function onThink(cid, interval) if isPlayer(cid) then if(getTilePzInfo(getCreaturePosition(cid))) then doRemoveCondition(cid, CONDITION_INFIGHT) end end end É em creaturescript.
  9. Thanks
    gabriel28 recebeu reputação de mister17 em [Resolvido] HELP PLEASE Script não esta lendo o sqm do player ANIHI POKETIBIA   
    Tá complicado aqui, sempre que tento por uma tag de código, da lag.
     
     
  10. Thanks
    gabriel28 recebeu reputação de mister17 em [Resolvido] HELP PLEASE Script não esta lendo o sqm do player ANIHI POKETIBIA   
    O fórum tava travando e não consegui mandar antes. Fora que não tô conseguindo mandar a tag direito da forma que mandei, porque o fórum identifica [.i] pra por itálico na frase, mas enfim, mude a linha 95 por essa:
     
    doTeleportThing(player[i].uid, new_player_pos[i], FALSE)  
  11. Upvote
    gabriel28 deu reputação a xugrude456 em poblema na soucer ou outro lugar talvez   
    vlw men vc e meu heroi s2 teda rep
  12. Upvote
    gabriel28 recebeu reputação de xugrude456 em poblema na soucer ou outro lugar talvez   
    Qual a versão do teu TFS?
  13. Upvote
    gabriel28 recebeu reputação de xugrude456 em poblema na soucer ou outro lugar talvez   
    Por isso esse script não está funcionando, você está tentando usar um script feito para versões 1.x. Vou ver se acho um script pra essa versão, se conseguir, editarei esse comentário.
    EDIT: Já achei, tava fácil numa pasta aberta aqui. hahaha
     
     
  14. Upvote
    gabriel28 recebeu reputação de xugrude456 em poblema na soucer ou outro lugar talvez   
    Vê meu comentário anterior, eu tava com a pasta aberta e tinha ele.
  15. Upvote
    gabriel28 deu reputação a VitorSubhi em Funções Lua In-Game [TFS 0.4] (Versão 0.5)   
    1.0 - Funcionamento:
    Explicação:Este talkaction, apenas faz a execução de um comando em lua, direto do game.
    Exemplos:





    2.0 - Como Utilizar:
    Executando apenas uma função: /lua Função('variavél', 'variável', 'variável')
    Executando várias funções simultâneas: /lua Função('variável', variável'), Função('variável', variável', variável'), ...

    3.0 - Instalação:
    Talkactions.xml Data/Talkactions/scripts/lua.lua OBS.: Na versão atual, ainda não se é possível utilizar uma função dentro de outra, e nem funções de retorno (getters)

    Créditos: Desenvolvido inteiramente por mim (Vítor Subhi).
  16. Upvote
    gabriel28 recebeu reputação de Yan Liima em TFS 0.4 rev 3884 em Linux   
    @Yan Liima
    Obrigado pelas respostas.
    Sou bem relutante em usar o terminal do Linux, prefiro muito mais mexer com desktop, mas vou dar meu braço a torcer e fazer uns testes pra tentar me familiarizar.
     
  17. Upvote
    gabriel28 deu reputação a Yan Liima em TFS 0.4 rev 3884 em Linux   
    A TFS 0.4 rev3884 consegue compilar sem problemas! É muito boa na minha opinião, muitos bugs concertado nessa versão e com algumas funções extras. É mais estavél que a 3777 , e sim, o modo de compilar é o mesmo. A unica diferença é que não tem o Cast System, o cast do Summ atualmente está disponivel apenas na 3777. Eu utilizo a TFS 0.4 rev3996 modificada por mim, a base foi a 3884 pura. Consegui adaptar o Cast do Summ nela e ficou perfeito! Tenho a tão famosa OTX Exclusive Edition 0.5.2, e mesmo assim prefiro essa minha TFS kkkk
  18. Upvote
    gabriel28 deu reputação a Yan Liima em TFS 0.4 rev 3884 em Linux   
    Claro que sim! Você está tendo algum problema?
  19. Upvote
    gabriel28 recebeu reputação de mister17 em [Resolvido] Erro script Anihi para poketibia   
    Pra caso queira saber o problema, você esqueceu de por vírgula no final de duas linhas, o que ocasionou o erro.
  20. Upvote
    gabriel28 recebeu reputação de mister17 em [Resolvido] Erro script Anihi para poketibia   
    @mister17
    Troca o 'local monster_pos' do script por esse:
     
    local monster_pos = { [1] = {pos = {800, 1028, 10}, monster = "Mega Charizard Y"}, [2] = {pos = {804, 1027, 10}, monster = "Mega Charizard X"}, [3] = {pos = {808, 1027, 10}, monster = "Mega Charizard Y"}, [4] = {pos = {812, 1028, 10}, monster = "Mega Charizard X"}, [5] = {pos = {800, 1036, 10}, monster = "Mega Charizard Y"}, [6] = {pos = {804, 1037, 10}, monster = "Mega Charizard X"}, [7] = {pos = {808, 1037, 10}, monster = "Mega Charizard Y"}, [8] = {pos = {812, 1036, 10}, monster = "Mega Charizard X"}, [9] = {pos = {830, 1016, 10}, monster = "Mega Charizard Y"}, [10] = {pos = {831, 1019, 10}, monster = "Mega Charizard X"}, [11] = {pos = {829, 1022, 10}, monster = "Mega Charizard Y"}, [12] = {pos = {828, 1025, 10}, monster = "Mega Charizard X"}, [13] = {pos = {826, 1028, 10}, monster = "Mega Charizard Y"}, [14] = {pos = {824, 1029, 10}, monster = "Mega Charizard X"}, [15] = {pos = {841, 1019, 10}, monster = "Mega Charizard Y"}, [16] = {pos = {840, 1022, 10}, monster = "Mega Charizard X"}, [17] = {pos = {840, 1027, 10}, monster = "Mega Charizard Y"}, [18] = {pos = {839, 1029, 10}, monster = "Mega Charizard X"}, [19] = {pos = {837, 1033, 10}, monster = "Mega Charizard Y"}, [20] = {pos = {832, 1034, 10}, monster = "Mega Charizard X"}, [21] = {pos = {831, 1037, 10}, monster = "Mega Charizard Y"}, [22] = {pos = {829, 1039, 10}, monster = "Mega Charizard X"}, [23] = {pos = {827, 1038, 10}, monster = "Mega Charizard Y"}, [24] = {pos = {827, 1038, 10}, monster = "Mega Charizard X"} }  
  21. Upvote
    gabriel28 recebeu reputação de jondrops em npc que cobra algo e dps da algo em troca   
    @xugrude456
     
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid --------------------------- Configuração Inicial ------------------------------------ local strg = 9785 -- Valor da Storage local item = xxxx -- id do item local quant = yyy --quantidade local vocs = {zzz, www} -- id das vocaçao que irao poder receber a permissao --------------------------- Configuração das Falas ----------------------------------- if (msgcontains(msg, 'storage')) then if getPlayerStorageValue(cid, strg) < 1 then selfSay('Deseja receber a permissao? Para isso, deve me trazer X quantia do item Y', cid) talkState[talkUser] = 1 else selfSay('Voce ja recebeu a permissao.', cid) talkState[talkUser] = 0 end --------------------------- Falas de Entrada ----------------------------------- elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim') and talkState[talkUser] == 1) then if getPlayerStorageValue(cid, strg) < 1 then if isInArray(vocs, getPlayerVocation(cid)) then if doPlayerRemoveItem(cid, item, quant) then setPlayerStorageValue(cid, strg, 1) selfSay('Permissao concedida com sucesso.', cid) talkState[talkUser] = 0 else selfSay('Voce nao tem o item.', cid) talkState[talkUser] = 0 end else selfSay('Sua vocaçao nao pode receber a permissao.', cid) return false end else selfSay('Permissao ja concedida anteriormente.', cid) return false end --------------------------- Falas de Rejeição ----------------------------------- elseif(msgcontains(msg, 'no') or msgcontains(msg, 'nao') and isInArray({1}, talkState[talkUser])) then talkState[talkUser] = 0 selfSay('Tudo bem entao.', cid) --------------------------- FIM do SCRIPT --------------------------------------- end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
  22. Upvote
    gabriel28 recebeu reputação de xugrude456 em npc que cobra algo e dps da algo em troca   
    @xugrude456
     
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid --------------------------- Configuração Inicial ------------------------------------ local strg = 9785 -- Valor da Storage local item = xxxx -- id do item local quant = yyy --quantidade local vocs = {zzz, www} -- id das vocaçao que irao poder receber a permissao --------------------------- Configuração das Falas ----------------------------------- if (msgcontains(msg, 'storage')) then if getPlayerStorageValue(cid, strg) < 1 then selfSay('Deseja receber a permissao? Para isso, deve me trazer X quantia do item Y', cid) talkState[talkUser] = 1 else selfSay('Voce ja recebeu a permissao.', cid) talkState[talkUser] = 0 end --------------------------- Falas de Entrada ----------------------------------- elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim') and talkState[talkUser] == 1) then if getPlayerStorageValue(cid, strg) < 1 then if isInArray(vocs, getPlayerVocation(cid)) then if doPlayerRemoveItem(cid, item, quant) then setPlayerStorageValue(cid, strg, 1) selfSay('Permissao concedida com sucesso.', cid) talkState[talkUser] = 0 else selfSay('Voce nao tem o item.', cid) talkState[talkUser] = 0 end else selfSay('Sua vocaçao nao pode receber a permissao.', cid) return false end else selfSay('Permissao ja concedida anteriormente.', cid) return false end --------------------------- Falas de Rejeição ----------------------------------- elseif(msgcontains(msg, 'no') or msgcontains(msg, 'nao') and isInArray({1}, talkState[talkUser])) then talkState[talkUser] = 0 selfSay('Tudo bem entao.', cid) --------------------------- FIM do SCRIPT --------------------------------------- end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
  23. Upvote
    gabriel28 recebeu reputação de xugrude456 em npc que cobra algo e dps da algo em troca   
    @xugrude456
    Quando tiver pedidos assim, já posta o script junto pra agilizar. Essa minha resposta de agora já poderia conter a solução.
  24. Upvote
    gabriel28 recebeu reputação de xugrude456 em npc que cobra algo e dps da algo em troca   
    @xugrude456
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid --------------------------- Configuração Inicial ------------------------------------ local strg = 9785 -- Valor da Storage local item = xxxx -- id do item local quant = yyy --quantidade --------------------------- Configuração das Falas ----------------------------------- if (msgcontains(msg, 'storage')) then if getPlayerStorageValue(cid, strg) < 1 then selfSay('Deseja receber a permissao? Para isso, deve me trazer X quantia do item Y', cid) talkState[talkUser] = 1 else selfSay('Voce ja recebeu a permissao.', cid) talkState[talkUser] = 0 end --------------------------- Falas de Entrada ----------------------------------- elseif(msgcontains(msg, 'yes') or msgcontains(msg, 'sim') and talkState[talkUser] == 1) then if getPlayerStorageValue(cid, strg) < 1 then if doPlayerRemoveItem(cid, item, quant) then setPlayerStorageValue(cid, strg, 1) selfSay('Permissao concedida com sucesso.', cid) talkState[talkUser] = 0 else selfSay('Voce nao tem o item.', cid) talkState[talkUser] = 0 end else selfSay('Permissao ja concedida anteriormente.', cid) return false end --------------------------- Falas de Rejeição ----------------------------------- elseif(msgcontains(msg, 'no') or msgcontains(msg, 'nao') and isInArray({1}, talkState[talkUser])) then talkState[talkUser] = 0 selfSay('Tudo bem entao.', cid) --------------------------- FIM do SCRIPT --------------------------------------- end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
  25. Thanks
    gabriel28 recebeu reputação de Emooooo em [Resolvido] colocar exaustão nesse item   
    @Emooooo
    Troca:
    local exhaustion_time = 1 * * 60 * 60 Por:
    local exhaustion_time = 1 * 60 * 60
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...