-
Total de itens
904 -
Registro em
-
Última visita
-
Dias Ganhos
13
Tudo que Killua postou
-
Boa idéia, mas isso é bem fácil de fazer. Vou deixar nas suas mãos pra ir exercitando
-
pedido Spell que retira o Buff do TARGET por X Tempo
pergunta respondeu ao lucasromero0110 de Killua em Scripts
Tópico movido para a seção de dúvidas e pedidos resolvidos. -
Realmente isso tá parecendo mais um pedido... Amigo, se vc é iniciante e quer aprender a fazer scripts, sugiro que comece com algo mais simples. Esse script será um pouco complexo, mas vou deixar umas dicas de como fazê-lo, mesmo achando que vai ser difícil para você entender, já que é um iniciante. Você poderia criar uma tabela contendo todos os intervalos de tempo (de 1 a 60 segundos) para que os monstros nasçam e outra com os nomes dos monstros, exemplo: local monstros = {"Demon", "Rat", "Hydra", "Dragon"} local tempos = {1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, etc} -- até 60000 Onde 1000 equivale a 1 segundo. Daí vc iria criar vários addEvent (com intervalo de 60 segundos) dentro de um loop que usaria a tabela, mais ou menos assim: for i = 1, (#tempos) do addEvent(doCreateMonster, tempos[i], monstros[math.random(1, #monstros)], pos) addEvent(function() addEvent(doCreateMonster, tempos[i], monstros[math.random(1, #monstros)], pos) end, 60000) addEvent(function() addEvent(doCreateMonster, tempos[i], monstros[math.random(1, #monstros)], pos) end, 120000) Mas dessa maneira não seria checado o tempo que o player permaneceu lá, já que o addEvent estaria ocorrendo de qualquer forma. Portanto, a idéia que eu tive foi fazer da seguinte forma: Cada addEvent checaria se existem players na área e adicionaria uma storage pra todos os players da área, por exemplo, o primeiro addEvent (com intervalo de 60 segundos) setaria o storage XXXX com valor 1 para todos os players da área, o segundo (com intervalo de 120 segundos) setaria o mesmo storage, mas com valor 2 para todos os players da área e assim por diante. Depois, usando uma function onPrepareDeath (creaturescripts) vc checaria primeiro se o jogador estava na área determinada no momento da morte, depois o valor de sua storage e daria os prêmios dependendo da storage. É claro que essa onPrepareDeath deverá também setar o storage XXXX do player para 0, para que da próxima vez que o jogador participar do evento, não ocorram problemas. Essas são as idéia que eu tive para fazer o código que vc disse... Ele não é fácil de fazer e eu recomendaria que vc começasse com códigos mais simples, mas não custa nada tentar Espero que tenha conseguido entender, abraços.
-
@jaidenes esse tópico não se adequa a essa área, mas vou deixa-lo aqui já que está resolvido. Apenas baixe o arquivo que o kazaana postou. Tópico movido para a seção de dúvidas e pedidos resolvidos.
-
member=kazaana] por favor, confira se seu pedido foi atendido. Se sim, reporte o tópico para eu mover.
-
por favor, confira se seu pedido foi atendido. Se sim, reporte o tópico para eu movê-lo.
-
Amigo, por favor confira se o tópico foi resolvido. O usuário RigBy editou o post dele depois dessa sua resposta.
-
Tópico movido para a seção de dúvidas e pedidos resolvidos.
-
Por isso é melhor usar com onKill, igual eu fiz. A tag para meu script no creaturescripts.xml é <event type="kil" name="OutfitExp" event="script" value="ARQUIVO.lua"/> E a linha no login.lua é registerCreatureEvent(cid, "OutfitExp")
-
Tópico movido para a seção de dúvidas e pedidos resolvidos.
-
Tópico movido para a seção de dúvidas e pedidos resolvidos.
-
Tópico movido para a seção de dúvidas e pedidos resolvidos.
-
Desculpe estar demorando, estou bem corrido hoje. Amanhã garanto que vou responder suas dúvidas, abraços. Muito obrigado Garou, sua ajuda vai ser sempre bem-vinda no projeto Resposta: @Madarada seu primeiro erro foi usar talkState[talkuser] ao invés de talkState[talkUser]. A linguagem LUA diferencia letras minúsculas de maiúsculas, por isso é preciso prestar atenção. Segundo: Este else: else talkState[talkUser] = 0 selfSay('Pao quentinho entregue',cid) end Está dizendo ao script oq fazer se as condições dessa linha não forem atendidas: if (msgcontains(msg, 'bread')) or (msgcontains(msg, 'pao')) then Ou seja, se o player usar alguma palavra que não seja "pao" ou "bread", ele não receberá nenhum item e receberá uma mensagem dizendo "Pao quentinho entregue". Esta mensagem deveria estar junto com o doPlayerAddItem(cid, 3600, 1) e no else deveria estar algo assim: "Nao entendi.". Mas isso são só detalhes que não influenciam no funcionamento do código, só deixam ruim o entendimento in-game. Terceiro: Essa parte de baixo talkState[talkUser] = 0 selfSay('O pao vai esfriar') return true end É executada toda vez que alguem fala hi para o NPC, pois ela não está sob condição nenhuma. Por isso ele usa 2 mensagens ao mesmo tempo. Outra dica é colocar um talkState[talkUser] = 0 junto com o doPlayerAddItem(cid, 3600, 1) para obrigar o player a falar "pao", "yes" novamente casso queira outro pão. O script corrigido ficaria assim: Leia ele e compare com seu código para entender seus erros. Sua segunda dúvida: Não precisa por greet message, pois já existe uma padrão (Welcome, playername! I have been expecting you.). Sempre que vc deixar de colocar uma greet message, essa mensagem vai ser enviada ao dizer Hi para o NPC. O erro deve ter acontecido devido aos erros nesse segundo script, que são bem parecidos com o do primeiro. Se vc entender a explicação do primeiro, vai conseguir fazer o segundo. Além disso estão faltando dois ends e um return true no final, oque já é suficiente para aparecerem erros. Abraços, espero que consiga entender.
-
Beleza obrigado por participar do projeto Qualquer coisa pode postar mais
-
Bom, primeiramente temos que ler e entender o script. Oq ele faz? Quando o player usa as palavras "ninja" ou "promotion" e depois "yes" com esse NPC, o script checa o level e a vocação do player. Se o player tiver vocação diferente de 2 e level maior ou igual 8, sua vocação passará a ser 2. Para adicionar mais opções, você deverá dar ao player a possibilidade de usar outras palavras (Exemplo: "ninja", "chunin", "jounin") e fazer o script atuar baseado nessas palavras. Para fazer isso de forma mais curta e bonita, nós usariamos um loop. Mas vamos fazer o jeito mais simples mesmo, que é assim: Para facilitar, crie uma tabela para encurtar o script, exemplo: local tabela = {"chunin", "jounin", "hokage", "senin", "sanin"} Depois, você irá fazer várias checagens com if e elseif, exemplo: if msgcontains(msg, "chunin") then doPlayerSetVocation(cid, x) elseif msgcontains(msg, "jounin") then doPlayerSetVocatio(cid, y) E ir continuando.Vou deixar aqui o início do código para você Para fazer um NPC do 0, digamos que existe um molde: O início do seu script deve conter isso no início: 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 E isso no final: npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Existem também outros moldes, mas pode usar sempre esse. Depois basta construir um script normalmente usando if msgcontains(msg, "blablabla") para checar oq o player fala e talkState para ajudar na organização (ordem em que as palavras devem ser ditas pelo player). Como usar o talkState? Basicamente, você pode pensar que ele é uma variável global à qual pode-se atribuir qualquer valor. Vou usar seu NPC como exemplo de uso do talkUser: if (msgcontains(msg, 'promotion')) then talkState[talkUser] = 1 selfSay('Wich vocation do you choose? chunin, jounin, hokage, sanin or senin?', cid) end Essa parte faz o seguinte: Se o jogador disser "promotion" ao NPC, talkState[talkUser] ganhará valor 1. if msgcontains(msg, 'chunin') and talkState[talkUser] == 1 then Essa parte vai checar duas coisas: Se a palavra dita foi "chunin" e se o valor de talkState[talkUser] é 1. Se o valor não for 1, não adiantará nada dizer a palavra certa e vice-versa. É basicamente isso, vc pode ir dando os valores para talkState[talkUser] conforme vc quer que seja a ordem das falas. Espero que tenha dado para entender, ainda não sou muito bom explicando =S
-
Estou com essa dúvida tbm =P
- 23 respostas
-
- sistema refinamento
- sistema minerio
- (e 3 mais)
-
Pois é cara eu tava fazendo com loops, mas ele tava bugando nos bando de addEvent, sumonando 3 vezes cada bixo e mandando várias vezes as mensagens. Daí resolvi fazer enorme mesmo... Muito obrigado
-
Eu fiz esse código a pedido do usuário @igorlabanca e tive ajuda do @zipter98 pra fazer. Não vou explicar oq ele faz, vou somente postar o vídeo que o igor fez mostrando como funciona. O código faz exatamente oq está no vídeo. @EDIT algumas pessoas vieram até mim para dizer que estava dando para usar mesmo sem dinheiro. Esse problema já foi resolvido. Crie Killua Cassino.lua em data/actions/scripts e coloque: Se você usa a versão do 0.3 ou 0.4 do TFS, use assim: Se você usa o TFS 1.0, use assim: E coloque essa tag no actions.xml <action actionid="2142" script="Killua Cassino.lua"/> Daí basta colocar actionID 2141 na alavanca e pronto =) Espero que gostem.
-
Está aqui o Cassino funcionando perfeitamente =) O script ficou gigante pq tem muitos efeitos Tive a ilustre ajuda de meu amigo @zipter98 na execução do código local bixos = {"Dog", "Deer", "Pig", "Rat"} local positions = {{x = 133, y = 43, z = 7}, {x = 135, y = 43, z = 7}, {x = 137, y = 43, z = 7}} local price = 5000 local prize = 50000 function onUse(cid, item, fromPosition, itemEx, toPosition) local first = math.random(1, #bixos) local second = math.random(1, #bixos) local third = math.random(1, #bixos) local tab = {} if getGlobalStorageValue(82192) > os.time() then doPlayerSendCancel(cid, "Aguarde um pouco para apostar.") return true end if getPlayerMoney(cid) < price then doPlayerSendCancel(cid, "Voce precisa de " .. price .. " para jogar.") end setGlobalStorageValue(82192, os.time() + 6) for i = 1, (#positions) do doSendMagicEffect(positions[i], 22) end doPlayerRemoveMoney(cid, price) doCreateMonster(bixos[first], positions[1]) doSendMagicEffect(positions[1], 26) addEvent(doSendMagicEffect, 100, positions[1], 31) table.insert(tab, first) setGlobalStorageValue(bixos[first], getGlobalStorageValue(bixos[first])+1) addEvent(function() doCreateMonster(bixos[second], positions[2]) doSendMagicEffect(positions[2], 26) addEvent(doSendMagicEffect, 100, positions[2], 31) table.insert(tab, second) end, 1000) addEvent(function() doCreateMonster(bixos[third], positions[3]) doSendMagicEffect(positions[3], 26) addEvent(doSendMagicEffect, 100, positions[3], 31) setGlobalStorageValue(bixos[third], getGlobalStorageValue(bixos[third])+1) table.insert(tab, third) end, 2000) addEvent(function() doRemoveCreature(getTopCreature(positions[1]).uid) doRemoveCreature(getTopCreature(positions[2]).uid) doRemoveCreature(getTopCreature(positions[3]).uid) doSendMagicEffect(positions[1], 54) doSendMagicEffect(positions[2], 54) doSendMagicEffect(positions[3], 54) if tab[1] == tab[2] and tab[1] == tab[3] then doPlayerAddMoney(cid, prize) doSendAnimatedText(getThingPos(cid), "Voce", 93) addEvent(doSendAnimatedText, 800, getThingPos(cid), "Ganhou", 93) addEvent(doSendAnimatedText, 1600, getThingPos(cid), "" .. prize .."gps!", 93) doSendMagicEffect(getThingPos(cid), 30) doSendMagicEffect(positions[1], 30) doSendMagicEffect(positions[2], 30) doSendMagicEffect(positions[3], 30) addEvent(doSendMagicEffect, 800, getThingPos(cid), 29) addEvent(doSendMagicEffect, 800, positions[1], 29) addEvent(doSendMagicEffect, 800, positions[2], 29) addEvent(doSendMagicEffect, 800, positions[3], 29) addEvent(doSendMagicEffect, 1600, getThingPos(cid), 28) addEvent(doSendMagicEffect, 1600, positions[1], 28) addEvent(doSendMagicEffect, 1600, positions[2], 28) addEvent(doSendMagicEffect, 1600, positions[3], 28) else doSendAnimatedText(getThingPos(cid), "Voce", 93) addEvent(doSendAnimatedText, 800, getThingPos(cid), "Perdeu", 93) addEvent(doSendAnimatedText, 1600, getThingPos(cid), "=(", 93) end end, 3500) return true end
- 23 respostas
-
- sistema refinamento
- sistema minerio
- (e 3 mais)
-
Se eu entendi direito sua pergunta, é só setar a quantidade atual + 1, assim: doPlayerSetStorageValue(cid, XXXX, getPlayerStorageValue(cid, XXXX) + 1)
-
Oi amigo, vamos lá: Primeiramente vc deixou de usar uma função "mãe", que no caso acho que a que mais se adequa é function onAdvance(cid, skill, oldLevel, newLevel). A parte de trocar o storage por skill, é só mudar o getPlayerStorageValue(cid, 12348) para getPlayerSkillLevel(cid, skillId). Mas para fazer um script como esse, eu particularmente prefiro usar um loop para facilitar, se vc quiser, eu mostro como ficaria com o loop. A parte do else vc fez errado. Vou te explicar o princípio do if/else usando um exemplo em LUA e um traduzido em português. É o seguinte, quando vc usa um if, vc está impondo uma condição (se for assim, então faça isso) e o else serve para você dizer oq acontecerá no caso de sua condição não ser cumprida. Por exemplo: if getPlayerItemCount(cid, 3630) >= 1 then doPlayerRemoveItem(cid, 3630, 1) doPlayerAddItem(cid, itemid, count) doPlayerSendTextMessage(cid, 22, "Voce recebeu um item.") else doPlayerSendCancel(cid, "Voce não possui o item necessário.") end Traduzindo esse código para o português, ficaria assim: se getPlayerItemCount(cid, 3630) >= 1 então doPlayerRemoveItem(cid, 3630, 1) doPlayerAddItem(cid, itemid, count) doPlayerSendTextMessage(cid, 22, "Voce recebeu um item.") se não doPlayerSendCancel(cid, "Voce não possui o item necessário.") end Ou seja, se o player não tiver pelo menos um item de id 3630, ele receberá a mensagem "Você não possui o item necessário.". O seu erro foi deixar o if doPlayerRemoveItem(cid, 3630, 1) then no final, o local correto seria acima de local tab = getitem[getPlayerStorageValue(cid, 12348)]. Espero ter ajudado, continue perguntando
-
Introdução Neste tópico, eu e os outros responsáveis da área de scripting (@zipter98 e Omega) vamos auxiliar aqueles que querem aprender a scriptear, seja dando dicas, ajudando com códigos e até mesmo dando explicações. A intenção deste projeto é incentivar todos aqueles que têm vontade de aprender a scriptear. Como vai funcionar? Diferentemente da Fábrica do Garou, nós não iremos fazer os códigos para vocês. Nós vamos ajudá-los a fazer vocês mesmos. Para ser auxiliado, basta postar aqui o código que está fazendo e dizer onde está sua dificuldade. Se você tem uma idéia de código/sistema para fazer e não sabe nem como começar, você pode postar aqui sua idéia que iremos ajudá-lo a começar e a desenvolver seu código/sistema. Resumindo Aqui nós iremos te ajudar a fazer seu código/sistema, vamos te dar dicas e explicações sobre como fazer e até indicar tutoriais para vocês lerem. Espero realmente que tenham interessados, ficarei feliz em ajudar todos.
-
Eu conversei com o igor e não vou mais fazer o de refinamento... Vou fazer um de cassino que ele pediu:
- 23 respostas
-
- sistema refinamento
- sistema minerio
- (e 3 mais)
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.