Ir para conteúdo
  • Cadastre-se

zipter98

Membro
  • Total de itens

    711
  • Registro em

  • Última visita

  • Dias Ganhos

    14

zipter98 venceu a última vez em Janeiro 27 2020

zipter98 teve o conteúdo mais curtido!

Sobre zipter98

  • Rank
    Nobre

Informação de Perfil

  • Eu sou
    Tibiano

Últimos Visitantes

4626 visualizações

Atualização de Status Simples

Veja todas atualizações de zipter98

  1. Ei, to começando a estudar a linguagem .lua ainda estou bem no começo, eu estudo aqui pelo forum mesmo, nos tutoriais, tento fazer algumas scripts arrumar algumas coisas, queria saber se você tem algum material pra me indicar pra mim ler, atualmente to começando a ler esse manual: http://www.lua.org/manual/5.1/pt/manual.html

    1. zipter98

      zipter98

      Procure ler tutoriais de outros sites e fóruns também (OTLand, XTibia e o site oficial da linguagem). A variedade que encontramos é grande, e mesmo tutoriais sobre o mesmo assunto trazem diferenças entre si em alguns aspectos. 
      Ler códigos de scripters mais experientes também ampliam seu conhecimento. Um script tem várias maneiras diferentes de ser escrito, e seguindo esta dica você pode acabar aprendendo novas técnicas que tornem seus códigos mais simples e práticos.
      O melhor a ser fazer, entretanto, é praticar. Não fique preso à teoria. Ajude o máximo que puder em áreas de suporte, como a encontrada neste fórum.

    2. LucasAyres

      LucasAyres

      Sim, eu tento, mas todos que responderam até agora o código saiu bugado -.-' ei, poderia me dar uma ajuda?

       

      Spoiler
      
      local combat = createCombatObject()
      setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
      setCombatParam(combat, COMBAT_PARAM_EFFECT, 66)
      setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -120.2, 1, -125.2, 1)
      
      function onCastSpell(cid, var)
      local waittime = 2 -- Tempo de exhaustion
      local storage = 5818
      end
      
      if exhaustion.check(cid, storage) then
      doCreatureSay(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.", TALKTYPE_MONSTER)
      return false
      end
      
      function onCastSpell(cid, var)
      local position1 = {x=getThingPosition(getCreatureTarget(cid)).x, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z}
      doSendMagicEffect(position1, 66)
      return doCombat(cid, combat, var)
      end

       

       

      Eu que modifiquei essa spell e ela era pra ser basicamente uma spell de target que quando você usa o golpe você precisa esperar 'x' segundos pra usar de novo, ai aparece a mensagem: 'você precisa esperar 2 segundos antes de usar essa spell novamente', eu usei duas referências de script pra tentar fazer esse, porém, não funciona, o que eu fiz de errado pode me explicar? eu ainda não entendo muito desse storage também 

    3. zipter98

      zipter98

      Você declarou dois callbacks de mesma função, sendo que finalizou o primeiro sem retornar valor algum e contendo apenas duas variáveis, que não poderiam ser acessadas em outras partes do código.

      function onCastSpell(cid, var)
      local waittime = 2 -- Tempo de exhaustion
      local storage = 5818
      end

      Você escreveu um escopo fora de qualquer callback que exige a declaração de variáveis/parâmetros (storage/cid) inacessíveis nesta situação.

      if exhaustion.check(cid, storage) then
      	doCreatureSay(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.", TALKTYPE_MONSTER)
      	return false
      end

      Uma versão teoricamente correta do código seria:

      --Declare as variáveis que não precisam de informações somente acessíveis dentro do callback fora dele. Assim, serão declaradas apenas uma vez, otimizando o processo.
      
      local exhaust_time = 2     --Tempo, em minutos, de exaustão.
      local storage = 5818       --Storage/key.
      
      local combat = createCombatObject()
      setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
      setCombatParam(combat, COMBAT_PARAM_EFFECT, 66)
      setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -120.2, 1, -125.2, 1)
      
      function onCastSpell(cid, var)
          if getPlayerStorageValue(cid, storage) > os.time() then                       --Verificando exaustão.
              doPlayerSendCancel(cid, "Aguarde "..getPlayerStorageValue(cid, storage) - os.time().." segundos para usar esta magia novamente.")
              return true
          end
          
          setPlayerStorageValue(cid, storage, os.time() + exhaust_time * 60)            --Aplicando exaustão.
          doSendMagicEffect(getThingPosition(getCreatureTarget(cid)), 66)
          return doCombat(cid, combat, var)
      end

      PS: Não se esqueça da identação. É uma técnica de fácil aprendizado e que torna seu código, além de elegante, mais legível.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo