Killua 389 Postado Fevereiro 19, 2014 Share Postado Fevereiro 19, 2014 (editado) 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. Editado Março 4, 2014 por Killua Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/ Compartilhar em outros sites More sharing options...
SeKtooR 9 Postado Fevereiro 19, 2014 Share Postado Fevereiro 19, 2014 Bom estou desenvolvendo um Sistema que quando chegar ao Certo nível de skill ganha-se um item. local getitem = { [10] = {item, "Voce ganhou uma espada nivel 2 por seu desempenho."}, --[skill necessaria] = {id do item, mensagem}, [20] = {item, "Legal! Voce ganhou uma espada nivel 3."}, [30] = {item, "Parabens! Voce ganhou uma espada nivel 4."}, [40] = {item, "Woow! Voce ganhou uma espada nivel 5."}, [50] = {item, "Wooooooooooooow!!! Voce ganhou uma espada nivel 6."}, [80] = {item, "Excellent!!! Voce conseguiu a espada suprema nivel 7."}, } if getitem[getPlayerStorageValue(cid, 12348)] then local tab = getitem[getPlayerStorageValue(cid, 12348)] doPlayerAddItem(cid, tab[1], 1) doSendMagicEffect(getCreaturePosition(cid), 15) doPlayerSendTextMessage(cid, 27, tab[2]) if doPlayerRemoveItem(cid, 3630, 1) else return doPlayerSendCancel(cid, "Voce nao possui pontos suficientes") else return doPlayerSendCancel(cid, "Voce nao possui pontos suficientes") end (Foi o Zipter que fez a maior parte) Oque eu quero no script: Gostaria que verifica-sem e reviza-sem pra ver se errei algo na parte do else, e me fala-sem oque eu errei, e também queria trocar o Storage por skill, a quantidade de certa skill. Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1614922 Compartilhar em outros sites More sharing options...
Killua 389 Postado Fevereiro 19, 2014 Autor Share Postado Fevereiro 19, 2014 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 Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615046 Compartilhar em outros sites More sharing options...
SeKtooR 9 Postado Fevereiro 19, 2014 Share Postado Fevereiro 19, 2014 Não quero ser preguiçoso mais Killua, qual a função/tag que eu utilizo para adicionar mais um Storage, (o Jogador Ganhar +1 de Storage) Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615056 Compartilhar em outros sites More sharing options...
Killua 389 Postado Fevereiro 19, 2014 Autor Share Postado Fevereiro 19, 2014 Se eu entendi direito sua pergunta, é só setar a quantidade atual + 1, assim: doPlayerSetStorageValue(cid, XXXX, getPlayerStorageValue(cid, XXXX) + 1) Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615065 Compartilhar em outros sites More sharing options...
Madarada 63 Postado Fevereiro 20, 2014 Share Postado Fevereiro 20, 2014 (editado) Parabéns cara iniciativa foda de vocês era o que faltava no xtibia. Eu tenho muita dificuldade com scripting apesar de gostar e não ter muito tempo. Tenho esse script que transforma um ninja normal em um genin.Queria que ele também transformasse em 2 outras vocations, ex:chunin,jounin. 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 vocation = 2 local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if (msgcontains(msg, 'ninja')) or (msgcontains(msg, 'promotion')) then talkState[talkUser] = 1 selfSay('Are you prepared to become a genin?', cid) elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if (getPlayerLevel(cid) >= 8) then if (getPlayerVocation(cid) ~= vocation) then doPlayerSetVocation(cid, vocation) doSendMagicEffect(getThingPos(cid), 1) else talkState[talkUser] = 0 selfSay('You already became a genin,you can leave...', cid) end else talkState[talkUser] = 0 selfSay('I can not promote you yet. Must be very experienced, with level 8. There are only '..tostring(8 - getPlayerLevel(cid))..' level(s).', cid) end return true end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Também queria saber como fazer um NPC de uma maneira simples começado do 0 se puder. Editado Fevereiro 20, 2014 por Madarada Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615189 Compartilhar em outros sites More sharing options...
Killua 389 Postado Fevereiro 21, 2014 Autor Share Postado Fevereiro 21, 2014 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ê local tabela = {"chunin", "jounin", "hokage", "senin", "sanin"} if (msgcontains(msg, 'promotion')) then talkState[talkUser] = 1 selfSay('Wich vocation do you choose? chunin, jounin, hokage, sanin or senin?', cid) end if isInArray(tabela, msg) then if getPlayerLevel(cid) >= 8 then if msgcontains(msg, 'chunin') and talkState[talkUser] == 1 then doPlayerSetVocation(cid, 1) doSendMagicEffect(getThingPos(cid), 1) elseif msgcontains(msg, 'jounin') and talkState[talkUser] == 1 then doPlayerSetVocation(cid, 2) doSendMagicEffect(getThingPos(uid), 1) 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 Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615216 Compartilhar em outros sites More sharing options...
Madarada 63 Postado Fevereiro 21, 2014 Share Postado Fevereiro 21, 2014 (editado) Vlw cara por ajudar você explicou direitinho Vou fazer essas modificações e posteriormente trarei outros scripts e etc. Rep+ Editado Fevereiro 21, 2014 por Madarada Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615218 Compartilhar em outros sites More sharing options...
Killua 389 Postado Fevereiro 21, 2014 Autor Share Postado Fevereiro 21, 2014 Beleza obrigado por participar do projeto Qualquer coisa pode postar mais Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615221 Compartilhar em outros sites More sharing options...
Madarada 63 Postado Fevereiro 21, 2014 Share Postado Fevereiro 21, 2014 (editado) Eae tentei fazer esse 1º script sozinho mais ficou meio bugado Quando eu falo "yes" ou "no" pra aceitar o pao ele fala as duas frases ao mesmo tempo e o pao nao vem pra min. 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 if (msgcontains(msg, 'bread')) or (msgcontains(msg, 'pao')) then talkState[talkuser] = 1 selfSay('Voce quer um pao?',cid) elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1)then doPlayerAddItem(cid, 3600, 1) doSendMagicEffect(getThingPos(cid), 1) else talkState[talkUser] = 0 selfSay('Pao quentinho entregue',cid) end talkState[talkUser] = 0 selfSay('O pao vai esfriar') return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Também fiz esse 2º e tenho uma dúvida:todos os npcs tem que ter uma "greet message"? porque da um erro no client quando eu tento colocar o npc no ot. 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 vocation = 2 local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if (msgcontains(msg, 'hi'))then talkState[talkUser] = 1 selfSay('Do you want a mission?', cid) if (msgcontains(msg, 'yes'))then doSendMagicEffect(getThingPos(cid), 1) else talkState[talkUser] = 0 selfSay('Voce ainda não pode pegar missões',cid) end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) VLw abraços Editado Fevereiro 21, 2014 por Madarada Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615247 Compartilhar em outros sites More sharing options...
Oneshot 732 Postado Fevereiro 21, 2014 Share Postado Fevereiro 21, 2014 Nossa, adorei a iniciativa. Era isso que estava faltando, um tópico de tutores mesmo, onde pessoas interessadas pelo Scripting pudessem tirar suas dúvidas. Parabéns e se precisarem da minha ajuda em algo, só mandar PM. Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615383 Compartilhar em outros sites More sharing options...
Killua 389 Postado Fevereiro 22, 2014 Autor Share Postado Fevereiro 22, 2014 (editado) Eae tentei fazer esse 1º script sozinho mais ficou meio bugado Quando eu falo "yes" ou "no" pra aceitar o pao ele fala as duas frases ao mesmo tempo e o pao nao vem pra min. 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 if (msgcontains(msg, 'bread')) or (msgcontains(msg, 'pao')) then talkState[talkuser] = 1 selfSay('Voce quer um pao?',cid) elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 1)then doPlayerAddItem(cid, 3600, 1) doSendMagicEffect(getThingPos(cid), 1) else talkState[talkUser] = 0 selfSay('Pao quentinho entregue',cid) end talkState[talkUser] = 0 selfSay('O pao vai esfriar') return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Também fiz esse 2º e tenho uma dúvida:todos os npcs tem que ter uma "greet message"? porque da um erro no client quando eu tento colocar o npc no ot. 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 vocation = 2 local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if (msgcontains(msg, 'hi'))then talkState[talkUser] = 1 selfSay('Do you want a mission?', cid) if (msgcontains(msg, 'yes'))then doSendMagicEffect(getThingPos(cid), 1) else talkState[talkUser] = 0 selfSay('Voce ainda não pode pegar missões',cid) end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) VLw abraços Desculpe estar demorando, estou bem corrido hoje. Amanhã garanto que vou responder suas dúvidas, abraços. Nossa, adorei a iniciativa. Era isso que estava faltando, um tópico de tutores mesmo, onde pessoas interessadas pelo Scripting pudessem tirar suas dúvidas. Parabéns e se precisarem da minha ajuda em algo, só mandar PM. 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: 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 if msgcontains(msg, 'bread') or msgcontains(msg, 'pao') then talkState[talkUser] = 1 selfSay('Voce quer um pao?',cid) elseif msgcontains(msg, 'yes') and talkState[talkUser] == 1 then doPlayerAddItem(cid, 3600, 1) doSendMagicEffect(getThingPos(cid), 1) selfSay('Pao quentinho entregue',cid) talkState[talkUser] = 0 else selfSay('Nao entendi', cid) talkState[talkUser] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) 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. Editado Fevereiro 22, 2014 por Killua Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615434 Compartilhar em outros sites More sharing options...
Vills 39 Postado Fevereiro 22, 2014 Share Postado Fevereiro 22, 2014 Quero fazer um script assim O player clica numa alavanca e é teleportado para um local onde começa a surgir monstros e mais monstros, dependendo do tempo que ele aguenta lá ele ganha prêmios por exemplo de 0 a 1 minuto ele ganha 1kk de 1 a 3 minutos 2kk e assim por diante, ele só pode clicar nessa alavanca de 3 em 3 horas se possuir item X e se um player já estiver dentro desse evento outro player não consiga entrar lá (Cê o player aguentar 5 minutos na arena, ele é teleportado para o templo com o prêmio e seu nome anunciado para todo servidor "O player "Ziriguidum" venceu na arena e ganhou "Nome do item". PS: não sei nem como começar =\ Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615605 Compartilhar em outros sites More sharing options...
Benny 736 Postado Fevereiro 23, 2014 Share Postado Fevereiro 23, 2014 Quero fazer um script assim O player clica numa alavanca e é teleportado para um local onde começa a surgir monstros e mais monstros, dependendo do tempo que ele aguenta lá ele ganha prêmios por exemplo de 0 a 1 minuto ele ganha 1kk de 1 a 3 minutos 2kk e assim por diante, ele só pode clicar nessa alavanca de 3 em 3 horas se possuir item X e se um player já estiver dentro desse evento outro player não consiga entrar lá (Cê o player aguentar 5 minutos na arena, ele é teleportado para o templo com o prêmio e seu nome anunciado para todo servidor "O player "Ziriguidum" venceu na arena e ganhou "Nome do item". PS: não sei nem como começar =\ o tópico é pra ajudar a fazer o script n fazer pra ti ¬¬ de qlqr forma parabéns :33 Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615814 Compartilhar em outros sites More sharing options...
Killua 389 Postado Fevereiro 23, 2014 Autor Share Postado Fevereiro 23, 2014 (editado) 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. Editado Fevereiro 23, 2014 por Killua Link para o comentário https://xtibia.com/forum/topic/228906-projeto-tutores-de-scripting/#findComment-1615886 Compartilhar em outros sites More sharing options...
Posts Recomendados