Ir para conteúdo
  • Cadastre-se

(Resolvido)Parar função


Ir para solução Resolvido por lazarocp,

Posts Recomendados

Olá, primeiramente estou usando:
TFS 0.4 rev3777

Seguinte, implantei no meu servidor um sistema de aura, que nem lembro onde achei. Ele funciona perfeitamente, porém se o player esta com a aura ativa e desloga, apresenta esses erros no distro:
print1.thumb.png.55267209583c363b296c56708ec34407.png

Segue meu script:
 

Spoiler

-- CONFIGURAÇÕES
lvlaura = 8445682
aurastr = 8445680
estr = 8445681
tempo = 1310

function efeitosAura(i,tm,cid)
	if getPlayerStorageValue(cid, lvlaura) == 1 then
		porcentagem = 25 -- chance de curar em cada volta da aura
		quantheal = 6 -- porcentagem do hp máximo que cada cura irá curar
		tipoaura = 12 -- efeito da aura /x
		efeitocura = 43 --efeito quando a cura chega ao player /z
	elseif getPlayerStorageValue(cid, lvlaura) == 2 then
		porcentagem = 30 -- chance de curar em cada volta da aura
		quantheal = 8 -- porcentagem do hp máximo que cada cura irá curar
		tipoaura = 28 -- efeito da aura /x
		efeitocura = 43 --efeito quando a cura chega ao player /z
	elseif getPlayerStorageValue(cid, lvlaura) == 3 then
		porcentagem = 35 -- chance de curar em cada volta da aura
		quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar
		tipoaura = 30 -- efeito da aura /x
		efeitocura = 39 --efeito quando a cura chega ao player /z
	elseif getPlayerStorageValue(cid, lvlaura) == 4 then
		porcentagem = 40 -- chance de curar em cada volta da aura
		quantheal = 12 -- porcentagem do hp máximo que cada cura irá curar
		tipoaura = 31 -- efeito da aura /x
		efeitocura = 38 --efeito quando a cura chega ao player /z
	end
	if(isCreature(cid)) then
		local atual = getCreaturePosition(cid)
		local posaura = {
			{x=(atual.x)-1, y=(atual.y)-1, z=atual.z},
			{x=atual.x, y=(atual.y)-1, z=atual.z},
			{x=(atual.x)+1, y=(atual.y)-1, z=atual.z},
			{x=(atual.x)+1, y=atual.y, z=atual.z},
			{x=(atual.x)+1, y=(atual.y)+1, z=atual.z},
			{x=atual.x, y=(atual.y)+1, z=atual.z},
			{x=(atual.x)-1, y=(atual.y)+1, z=atual.z},
			{x=(atual.x)-1, y=atual.y, z=atual.z},
		}
		if i == 1 then
			local chances = math.random(1, 100)
			if(chances<=porcentagem and (getCreatureHealth(cid)<getCreatureMaxHealth(cid) or getCreatureMana(cid)<getCreatureMaxMana(cid))) then
				local hpheal = (getCreatureMaxHealth(cid)/100) * quantheal
				local mpheal = (getCreatureMaxMana(cid)/100) * quantheal
				doCreatureAddHealth(cid, hpheal)
				doCreatureAddMana(cid, mpheal)
				if(i<=8 and i>1) then
					doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura)
				else
					doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura)
				end
				doSendMagicEffect(atual, efeitocura)
			end
		end
		if(i==8) then
			doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura)
		elseif(i<8) then
			doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura)
		end
		if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then
			i = i+1
			tm = tempo/8
			return addEvent(efeitosAura,tm,i,tm,cid)
		elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then
			return efeitosAura(1,0,cid)
		else
			return TRUE
		end
	else
		return TRUE
	end
end

-- Função principal
function onSay(cid, words, param, channel)
	if getPlayerStorageValue(cid, lvlaura) <= 0 then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[AURA SYSTEM] Você não possui aura.")
		return true
	end
	if(param=="on") then
		if getPlayerStorageValue(cid, estr) > os.time() then
			doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.")
		else
			if(getPlayerStorageValue(cid, aurastr)==2) then
				doPlayerSendCancel(cid,"Sua aura já está habilitada.")
			elseif(getPlayerStorageValue(cid, aurastr)==-1) then
				doPlayerSendCancel(cid,"Aura ligada!")
				setPlayerStorageValue(cid, aurastr, 2)
				efeitosAura(1,tempo/8,cid)
			end
		end
	elseif(param=="off") then
		if(getPlayerStorageValue(cid, aurastr)==2) then
			setPlayerStorageValue(cid, estr, os.time()+2)
			setPlayerStorageValue(cid, aurastr, -1)
			doPlayerSendCancel(cid,"Aura desligada!")
		end
	else	
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.")
	end
	return TRUE
end

 

Obs: Já tentei fazer um creaturescript OnLogout usando stopEvent(efeitosAura) e não funcionou.

Te ajudei? Clique em  Gostei ! 

²²²d¬¬b²²²

 

 

"She's got a smile that it seems to me...."  ♪♪

Link para o post
Compartilhar em outros sites
  • Solução

Os eventos não estão encontrando a criatura para executá-los , Basta checar se existe um player e retornar falso caso não.

Exemplo:

 

         if not player then 
          return false
         end

 

Caso não saiba como funciona : 

 

addEvent(function(playerid)
        local player = Player(playerid)
        
         if not player then -- verifica player
          return false
         end

 

end, cid)

 

Faço a checagem dessa forma :) 

Editado por lazarocp (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

edited---

Consegui resolver, tirei os getPlayerStorageValue(cid, aurastr)==2 que faziam a checagem no final do script, antes de iniciar o loop novamente, e botei essa checagem no inicio do event, mais ou menos dessa forma:
 

function efeitosAura(i,tm,cid)
	if isPlayer(cid) and getPlayerStorageValue(cid, aurastr)==2 then
		FUNÇÃO DA FUNCTION
		return true
	end
end

Obrigado pela ajuda! =)

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

Te ajudei? Clique em  Gostei ! 

²²²d¬¬b²²²

 

 

"She's got a smile that it seems to me...."  ♪♪

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo