Postado Junho 6, 2015 10 anos Este é um post popular. Olá pessoal! Vi o tutorial sobre addEvent do Killua e decidi colocar em prática.. Então fiz esse sistema de campaínha para treino e decidi compartilhar com vocês que tanto me ajudam com sistemas e dívidas! É um sistema bem simples e fácil de configurar, mesmo assim gostaria de criticas(construtivas) e sugestões uehue Numa noite sombria e fora do normal, Jubileu decide visitar seu amigo Alfredo para conversar sobre recentes acontecimentos estranhos na cidade. Ao chegar na casa de seu amigo ele toca a campaínha e.. Não pode ser, o que é aquilo que se aproxima?! um zumbi?! SOCORRO ALFREEEDOOO! - grita Jubileu,desesperado. AEHUEAHEAUH V2- TOCAR CAMPAÍNHA COM CHANCE DE APARECER MONSTRO/MENSAGEM/GANHAR ITEM 1°- Vá em data/actions e abra o arquivo actions.xml, então o adicione essa linha antes do final do arquivo: <action itemid="1473;1475" script="campainha.lua"/> ps: antes do final do arquivo, o final é </actions> então salve e feche 2°- Vá em data/actions/scripts e crie um novo arquivo com a extensão lua chamado camapinha.lua e cole isso dentro: local time = 1 function onUse(cid, item, frompos, item2, topos) if exhaustion.check(cid, "zombiecall") == false then exhaustion.set(cid, "zombiecall", 10) -- Aquele 1 é o exaust, de quanto em quanto tempo a campaínha pode ser tocada else return doPlayerSendCancel(cid, "Campaínha já foi tocada, espere: " ..exhaustion.get(cid, "zombiecall").."") end doSendMagicEffect(frompos,18) -- 18 é o efeito doSendAnimatedText(frompos,"Tindon",107) -- "Tindon" é a mensagem e 107 a cor addEvent(doSendAnimatedText, time*400, frompos,"Tindon", 107) -- "Tindon" é a mensagem e 107 a cor addEvent(function() r1 = math.random(1,100) if isCreature(cid) then if (item.itemid == 1473 or item.itemid ==1475) and (r1 >= 1 and r1 <= 20) then doPlayerSendTextMessage(cid,22,"A campaínha fez barulho, talvez isso chame atenção.") -- mensagem caso elseif (item.itemid == 1473 or item.itemid ==1475) and (r1 >= 21 and r1 <= 50) then addEvent(doCreateMonster, time*400,"zombie", getCreaturePosition(cid)) -- em "zombie" vc edita o nome do que quer que apareça addEvent(doCreateMonster, time*500,"zombie", getCreaturePosition(cid)) -- em "zombie" vc edita o nome do que quer que apareça doPlayerSendTextMessage(cid,22,"A campaínha fez barulho, talvez isso chame atenção.") -- mensagem caso nada apareça elseif (item.itemid == 1473 or item.itemid ==1475) and (r1 >= 51 and r1 <= 70) then addEvent(doCreateMonster, time*500,"corvo", getCreaturePosition(cid)) -- em "corvo" vc edita o nome do que quer que apareça doPlayerSendTextMessage(cid,22,"A campaínha fez barulho, talvez isso chame atenção.") -- mensagem elseif (item.itemid == 1473 or item.itemid ==1475) and (r1 >= 71 and r1 <= 100) then addEvent(doCreateMonster, time*400,"zombie", getCreaturePosition(cid)) -- em "zombie" vc edita o nome do que quer que apareça addEvent(doCreateMonster, time*500,"zombie", getCreaturePosition(cid)) -- em "zombie" vc edita o nome do que quer que apareça addEvent(doCreateMonster, time*600,"zombie", getCreaturePosition(cid)) -- em "zombie" vc edita o nome do que quer que apareça addEvent(doCreateMonster, time*700,"zombie", getCreaturePosition(cid)) -- em "zombie" vc edita o nome do que quer que apareça addEvent(doCreateMonster, time*800,"zombie", getCreaturePosition(cid)) -- em "zombie" vc edita o nome do que quer que apareça doPlayerSendTextMessage(cid,22,"A campaínha fez barulho, talvez isso chame atenção.") -- mensagem end end end, 1000) return true end pronto, sistema instalado! 3°- Entendendo o script: Para configurar, é o mesmo esquema explicado na V1(está no spoiler no final do tópico), o que muda é que aparece uma mensagem ao player e tem chances de invocar monstros, também ensinarei a como ganhar um item ao pressionar a campaínha. Monstros: caso queira que apareça mais monstros, duplique alguma das linhas de invocação, caso contrário apague uma inteira Mensagem: foi explicado no script, fácil de configurar.. só mudar o texto entre aspas " ... " Ganhar Item: é só adicionar essa linha na chance de ganhar, ex: if (item.itemid == 1473 or item.itemid ==1475) and (r1 >= 1 and r1 <= 20) then doPlayerSendTextMessage(cid,22,"A campaínha fez barulho, talvez isso chame atenção.") -- mensagem caso doPlayerAddItem(cid,10599,45) V1- Tocar campaínha O script funciona assim: Da use na campaínha, então aparece um efeito e o texto "Tindon", depois aparece novamente outro "Tindon". Existe um exaust para evitar abusos/caras chatos - SIIIIIMPLES DE TUDO.. bora lá! 1°- Vá em data/actions e abra o arquivo actions.xml, então adicione essa linha antes do final do arquivo: <action itemid="1473;1475" script="campainha.lua"/> ps: antes do final do actions.xml.. o final do arquivo é o </actions> ps²: 1473 e 1475 são os IDs dos itens que servirão como campaínha, são separados por " ; " - caso acrescente mais coloque itemid="1473;1474;1475" etc Então salve seu Actions.xml e feche-o. 2°- Vá em data/actions/scripts e crie um novo arquivo com extensão lua chamado campainha.lua, cole isso dentro: local time = 1 function onUse(cid, item, frompos, item2, topos) if exhaustion.check(cid, 23000000) == false then exhaustion.set(cid, 23000000, 4) else return doPlayerSendCancel(cid, "Campaínha já foi tocada, espere: " ..exhaustion.get(cid, 23000000).."") end doSendMagicEffect(frompos,18) doSendAnimatedText(frompos,"Tindon",107) addEvent(doSendAnimatedText, time*400, frompos,"Tindon", 107) end Pronto, o sistema de campaínha está instalado! 3°- Entendendo o super mega simples script: if exhaustion.check(cid, 23000000) == false then exhaustion.set(cid, 23000000, 4) else return doPlayerSendCancel(cid, "Campaínha já foi tocada, espere: " ..exhaustion.get(cid, 23000000).."") end Aqui é a função do exaust.. (cid, 23000000) - cid é para o exaust se aplicar ao player que apertou a campaínha, e 23000000 é a storage que salva o exaust exhaustion.set(cid, 23000000, 4) cid e 23000000 identico ao de cima.. 4 é o tempo em segundos de exaust return doPlayerSendCancel(cid, "Campaínha já foi tocada, espere: " ..exhaustion.get(cid, 23000000). - se o player ainda estive com exaust, aparecerá a mensagem"Campaínha já foi tocada, espere: " e os segundos que falta para poder usar novamente Se checar a storage 23000000 que equivale a 4 segundos e ela estiver vazia, o sistema acontece e adiciona o tempo de 4 segundos na storage. Se a storage 23000000 não estiver vazia, aparece aquela mensagem para o player. ps: as três storages são 23000000, se mudar uma, mude as três! local time = 1 o tempo em segundos que irá demorar para aparecer o segundo "Tindon" doSendMagicEffect(frompos,18) frompos é onde irá aparecer o efeito(no caso, encima do item usado) e 18 é o ID do efeito que irá aparecer ao usar. doSendAnimatedText(frompos,"Tindon",107) frompos é onde irá aparecer o texto, "Tindon" é o texto que irá aparecer e 107 é a cor do texto(vai desde 0 que é preto até 215 que é branco) addEvent(doSendAnimatedText, time*1000, frompos,"Tindon", 107) aqui é a parte que o treino entra.. doSendAnimatedText é a função que o addEvent irá chamar time*400 é o tempo que irá demorar para chamar a função( time foi uma variável configurada acima em milisegundos, então multiplica * por 400 para que o tempo configurado na variável 0,4 segundos [para transformar o time em segundos, multiplique por 1000 ao invés de 400]) frompos é onde ocorrerá o evento, como explicado acima(no caso, encima do item usado) "Tindon" é o texto que irá aparecer no addEvent 107 é a cor do texto, dei uma mini explicada acima. É isso pessoal, meu primeiro script postado e é bem simples ueheu Se possível, indiquem-me algo para treinar pois tenho grande interesse na área de scripts! Um grande mega salve ao @Caronte, pq além da ajuda no script, ainda salvou esse meu lindo primeiro tópico uaehaeuh falar o que desse manin que mal conheço e já considero pakas? *aplausos Caronte, Salvando tópicos desde 1997 Editado Junho 7, 2015 10 anos por biel.stocco (veja o histórico de edições)
Postado Junho 6, 2015 10 anos Criativo... esse local campainha = {1473, 1475} não serve pra nada, pois você não usa... Faria sentido colocar isso caso a <TAG/> do XML, fosse uma action e dentro do script, embaixo do callback, estivesse algo como: if not isInArray(campainha, item.itemid) then return true end Assim, os IDs, que tivessem ActionID (aid), porém, não tivessem dentro da tabela, campainha, não iriam ser incluídas no script. Sobre o callback: Essas são as informações, que você dispõe do usuário do script, do item usado e do item alvo... fromPosition = posição do itemEx toPos = posição do item cid = ID da criatura que usou item = item usado itemEx = alvo do item Sobre o storage também, ele não funciona. tente usar assim: if getPlayerStorageValue(cid, 23000) - os.time() <= 0 then setPlayerStorageValue(cid, 23000, os.time() + time) else return doPlayerSendCancel(cid, "Campaínha já foi tocada, espere: " ..getPlayerStorageValue(cid, 23000) - os.time()) and true end Não exagere no espaço também, eu vi como tava antes da edição, e tava cheio de espaços, tente usar 1 só linha, ou só quando for muito necessário para a organização. <action itemid="1473;1475" script="campainha.lua"/> sobre essa <TAG/> ela é de TFS 1.+ e você fez um script 0.4- Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado). Tópicos: [FAQ] BBCODE [LIB] Constant [RME] Administrando bordas. [TALK] Broadcast Editável. [TALK] Sugest. [TALK] Checkpoint. [MOVE] Pântano pegajoso. [ACTION] Piggy Bank. (Cassino). [GLOBAL] Uptime Ad. [C0DE] Consertando 'Invalid Password' [PROGRAM] Quest Maker
Postado Junho 6, 2015 10 anos Autor @Caronte local campainha, falta de atenção minha que esqueci da tag no actions.xml uaehuah e como não sei quase nada de script, pensei que se eu adicionasse um item, teria que colocar na funcion como fiz com o "campainha" corrigido manin, grato! Criei um sistema de redbull aqui que alimenta(igual food, peguei o script de lá) e incrementei para aumentar a velocidade do player em X por Y segundos com addEvent e doChangeSpeed e vou postar para avaliação, da uma olhada quando ele for aprovado pfvr (: Editado Junho 6, 2015 10 anos por biel.stocco (veja o histórico de edições)
Postado Junho 6, 2015 10 anos Ok, avaliarei e darei sugestões, espero que ajude. Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado). Tópicos: [FAQ] BBCODE [LIB] Constant [RME] Administrando bordas. [TALK] Broadcast Editável. [TALK] Sugest. [TALK] Checkpoint. [MOVE] Pântano pegajoso. [ACTION] Piggy Bank. (Cassino). [GLOBAL] Uptime Ad. [C0DE] Consertando 'Invalid Password' [PROGRAM] Quest Maker
Postado Junho 6, 2015 10 anos tem que usar essas functions para storage getCreatureStorage(de quem vai verificar, e numero) -- para verificar doCreatureSetStorage(de quem vai verificar, e numero, alteração) -- para alterar e na storage pode coloca numero ou string e tem um limite de caracteres para poder ser armazenado na database
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.