-
Total de itens
429 -
Registro em
-
Última visita
-
Dias Ganhos
6
Histórico de Reputação
-
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.
-
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
-
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
-
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.)
-
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.)
-
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.)
-
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 .!
-
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.
-
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.
-
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)
-
gabriel28 deu reputação a xugrude456 em poblema na soucer ou outro lugar talvez
vlw men vc e meu heroi s2 teda rep
-
gabriel28 recebeu reputação de xugrude456 em poblema na soucer ou outro lugar talvez
Qual a versão do teu TFS?
-
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
-
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.
-
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).
-
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.
-
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
-
gabriel28 deu reputação a Yan Liima em TFS 0.4 rev 3884 em Linux
Claro que sim! Você está tendo algum problema?
-
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.
-
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"} }
-
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())
-
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())
-
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.
-
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())
-
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.