Ir para conteúdo
  • Cadastre-se

(Resolvido)[Ajuda] Colocar pausa de tempo entre os laços do for


Ir para solução Resolvido por Alencar123,

Posts Recomendados

Possuo um script que suga o HP do target varias vezes, mas se o target morre fica dando creature not found, etc. Coloquei verificação se tem target no evento, ta tudo certo, mas no for ele roda tudo de uma só vez, então mesmo a magia sendo pausada colocando tempo no addevent, o for não pausa, apenas encomenda tudo de uma só vez. Queria que colocasse uma pausa entre os laços, por exemplo:
For de 1 a 10.
Ele testa tudo que está no script, executa e espera 1 segundo para passar para o 2. E assim sucessivamente.

@Edit: Se souber, apenas posta a função da pausa que eu encaixo no script.

Editado por Danves (veja o histórico de edições)



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

Mas aí no momento da spell ele tinha target, então não dá break e encomenda todos os addevents da spell que suga hp, porem no segundo que executar algum addevent encomendado o target pode ter morrido, e isso causa creature not found.
Por isso queria uma pausa por tempo em cada laço do for.



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

Então crie uma função local para fazer a mesma coisa que esse addEvent, e coloca pra checar o target.

Caso não souber, manda o script no tópico, ou se for algo "próprio, particular ou único", manda por PM.

Link para o post
Compartilhar em outros sites
elseif spell == "Leech Seed" then
setPlayerStorageValue(cid, 498587, 1)
for var = 1,10 do
if not target then 
break
 end
addEvent(function()
if getPlayerStorageValue(cid, 498587) == 1 then
local life = getCreatureHealth(target)
doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(target), 1)
doAreaCombatHealth(cid, GRASSDAMAGE, getThingPosWithDebug(target), 0, -min, -max, 14)
    
local newlife = life - getCreatureHealth(target)
 
doSendMagicEffect(getThingPosWithDebug(cid), 12)
doSendMagicEffect(getThingPosWithDebug(target), 45)
if newlife >= 1 then
doCreatureAddHealth(cid, newlife)
        doSendAnimatedText(getThingPosWithDebug(cid), "+"..newlife.."", 32)
end 
end
 end, 1000*var)
end 

(O storage foi algo que pus em outros scripts pra quando o player puxar o summon de volta ou deslogar ele mudar o storage pra -1, evitando outros bugs da spell)



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites
elseif spell == "Leech Seed" then
	setPlayerStorageValue(cid, 498587, 1)
	for var = 1,10 do
		addEvent(function()
			if not target then return false end
			if getPlayerStorageValue(cid, 498587) == 1 then
				local life = getCreatureHealth(target)
				local newlife = life - getCreatureHealth(target)
				doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(target), 1)
				doAreaCombatHealth(cid, GRASSDAMAGE, getThingPosWithDebug(target), 0, -min, -max, 14)
				doSendMagicEffect(getThingPosWithDebug(cid), 12)
				doSendMagicEffect(getThingPosWithDebug(target), 45)
				if newlife >= 1 then
					doCreatureAddHealth(cid, newlife)
					doSendAnimatedText(getThingPosWithDebug(cid), "+"..newlife.."", 32)
				end 
			end
		end, 1000*var)
	end 
Link para o post
Compartilhar em outros sites

Fica aparecendo attempt to perform arithmetic on local 'life' (a boolean value)
Quando o target morre. Aparece no log o numero de vezes que falta pra terminar o for.



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites
elseif spell == "Leech Seed" then
	setPlayerStorageValue(cid, 498587, 1)
	for var = 1,10 do
		addEvent(function()
			if not isCreature(target) or not isCreature(cid) then return false end
			if getPlayerStorageValue(cid, 498587) == 1 then
				local life = getCreatureHealth(target)
				doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(target), 1)
				doAreaCombatHealth(cid, GRASSDAMAGE, getThingPosWithDebug(target), 0, -min, -max, 14)
				doSendMagicEffect(getThingPosWithDebug(cid), 12)
				doSendMagicEffect(getThingPosWithDebug(target), 45)
				local newlife = life - getCreatureHealth(target)
				if newlife >= 1 then
					doCreatureAddHealth(cid, newlife)
					doSendAnimatedText(getThingPosWithDebug(cid), "+"..newlife.."", 32)
				end 
			end
		end, 1000*var)
	end 
Link para o post
Compartilhar em outros sites

Bom... Se não for agora, vou passar ter que deixar outra pessoa resolver.

elseif spell == "Leech Seed" then
	setPlayerStorageValue(cid, 498587, 1)
	for var = 1,10 do
		addEvent(function()
			if not isCreature(target) or not isCreature(cid) then return false end
			if getPlayerStorageValue(cid, 498587) == 1 then
				local life = getCreatureHealth(target)
				doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(target), 1)
				doSendMagicEffect(getThingPosWithDebug(cid), 12)
				doSendMagicEffect(getThingPosWithDebug(target), 45)
				doAreaCombatHealth(cid, GRASSDAMAGE, getThingPosWithDebug(target), 0, -min, -max, 14)
				local newlife = isCreature(target) and (life - getCreatureHealth(target)) or 0
				if newlife >= 1 then
					doCreatureAddHealth(cid, newlife)
					doSendAnimatedText(getThingPosWithDebug(cid), "+"..newlife.."", 32)
				end 
			end
		end, 1000*var)
	end
Link para o post
Compartilhar em outros sites

Mesma coisa no life. Mas valeu pelas tentativas, eu acho que ele executa todos os testes quando lança a spell, e não no momento dos eventos, isso que não soluciona. Por isso procurava uma pausa de tempo na execução do for.



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites
  • Solução
elseif spell == "Leech Seed" then

    setPlayerStorageValue(cid, 498587, 1)

    for var = 1,10 do

        addEvent(function()

            if not isCreature(target) or not isCreature(cid) then return false end

            if getPlayerStorageValue(cid, 498587) == 1 then

                doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(target), 1)

                doSendMagicEffect(getThingPosWithDebug(cid), 12)

                doSendMagicEffect(getThingPosWithDebug(target), 45)

                doAreaCombatHealth(cid, GRASSDAMAGE, getThingPosWithDebug(target), 0, -min, -max, 14)

                local newlife = getCreatureHealth(target) - getCreatureHealth(target)

                if getCreatureHealth(target) >= 1 then

                    doCreatureAddHealth(cid, newlife)

                    doSendAnimatedText(getThingPosWithDebug(cid), "+"..newlife.."", 32)

                end

            end

        end, 1000*var)

    end 

OBS: Não testei!
Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo