Ir para conteúdo
  • Cadastre-se

(Resolvido)[PEDIDO] Spells Hiraishin Ni No Dan Seal e Hiraishin Ni No Dan


Ir para solução Resolvido por marcot,

Posts Recomendados

Agora consegui consertar, estava bugando devido aos espaços na talkaction.

 

0e3171d49cd66713f2fedfc1746217a6.gif

Hotkeys usadas:

hiraishin ni no dan seal Test
hiraishin ni no dan

Testado em The Forgotten Server 0.4

 

Em data/talkactions/talkactions.xml insira a TAG:

<talkaction words = "hiraishin" event = "script" value = "hiraishin no jutsu.lua"/>

OBS.: Tenha atenção pois agora é só um script.

 

Em data/talkactions/scripts/ crie o script hiraishin no jutsu.lua e cole dentro dele:

local config = {
	storage = 49608,
	time = 6,
	vocation = 4
}

local errorMsg = {
	pz = "Voce so pode usar este jutsu fora do PZ.",
	playerOnly = "Voce so pode usar este jutsu em players.",
	alreadyMarked = "Voce ja marcou um jogador.",
	doesntExist = "Este jogador nao existe ou nao esta online.",
	noVocation = "Voce nao tem a vocation necessaria"
}

function onSay(cid, words, param)
	if getPlayerVocation(cid) ~= config.vocation then
		doPlayerSendCancel (cid, errorMsg.noVocation)
		return true
	end

	parametros = string.explode (param, " ")
	if #parametros == 3 then
		if parametros[1] == "ni" and parametros[2] == "no" and parametros[3] == "dan" then
			if getPlayerStorageValue (cid, config.storage) == 1 then
				setPlayerStorageValue(cid, config.storage, 2)
			else
				doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.")
			end
		end
		return true
	end

	if not parametros[1] == "ni" and not parametros[2] == "no" and not parametros[3] == "dan" and not parametros[4] == "seal" then
		return false
	end

	playerName = parametros[5]

	for i = 6, #parametros do
		playerName = playerName .. " " .. parametros[i]
	end

	caster = cid
	target = getPlayerByName (playerName)

	if target == nil then
		doPlayerSendCancel (cid, errorMsg.doesntExist)
		return false
	end

	if not getTilePzInfo(getThingPosition(cid)) and not getTilePzInfo(getThingPosition(target)) then
		if isPlayer (target) then
			if getPlayerStorageValue (cid, config.storage) <= 0 then
				setPlayerStorageValue(cid, config.storage, 1)
				doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getPlayerName(target))
				local struct = {
					left = config.time, 
					player = cid,
					target = target
				}
				addEvent(teleportIsTrue, 1000, struct)
			elseif getPlayerStorageValue (cid, config.storage) > 0 then
				doSendMagicEffect(getPlayerPosition(cid), 2) 
				doPlayerSendCancel (cid, errorMsg.alreadyMarked)
			end
		else
			doPlayerSendCancel (cid, errorMsg.playerOnly)
		end
	else
		doPlayerSendCancel (cid, errorMsg.pz)
	end
end

function teleportIsTrue (struct)
	if struct.left ~= 0 then
		if getPlayerStorageValue (struct.player, config.storage) == 2 then
			doTeleportThing(struct.player, getThingPosition(struct.target), true)
			setPlayerStorageValue(struct.player, config.storage, 0)
			doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
			return TRUE
		end
		doPlayerSendTextMessage(struct.player,22, struct.left .. " segundos restantes.")
		struct.left = struct.left - 1
		addEvent (teleportIsTrue, 1000, struct)
	elseif struct.left == 0 then
		doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
		setPlayerStorageValue(struct.player, config.storage, 0)
	else
		return FALSE
	end
end
10 horas atrás, hallanehallex disse:

ao invez de colocar o nome da pessoa como vc deu o exemplo hiraishin "Teste3  tem como colocar a vocation por exemplo hiraishin"230-246 para X vocation pode usar essa spell/talkaction ??

Acredito eu que isso dificulte um pouco as coisas, porque é uma margem enorme para bugs, como a possibilidade do jogador parar em lugares que bugue ou que não tenha como sair.

Mas aqui tem um script semelhante a esse que você pediu:

 

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

@marcot 

1 - quando você escreveu (hiraishin ni no dan test) invez de escrever assim eu posso escrever o nome de qualquer outra pessoa do otserver ??

2 - teria como fazer ela como spell ??

3 - se não der para fazer como spell como faz para deixar essa talkactions com letras em ORANGE ao falar o nome dela 

4 -  teria como deixar ela como exclusiva para X vocation ??

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

1) Dá pra colocar o nome de qualquer pessoa do server

2) O meu problema com spell é que não sei como posso pegar o nome do jogador target como parâmetro

3) Eu não estou sabendo porque o comando de marcar o jogador fala, enquanto o segundo o jogador nao fala

4) Ja esta exclusiva para vocation X, a definição está no config 

Link para o post
Compartilhar em outros sites
2 hours ago, marcot said:

1) Dá pra colocar o nome de qualquer pessoa do server

2) O meu problema com spell é que não sei como posso pegar o nome do jogador target como parâmetro

3) Eu não estou sabendo porque o comando de marcar o jogador fala, enquanto o segundo o jogador nao fala

4) Ja esta exclusiva para vocation X, a definição está no config 

2) para pegar o nome do jogador target vc pode fazer igual em talkaction, só precisa ativar param = "1" na tag no xml e aí pegar pelo nome, semelhante ao exura sio.
3) o que faz a fala não sair é o return false. Se tiver return true o texto sai, se tiver false ele não sai. Pra falar em laranja tu coloca return false e faz a mensagem sair por doCreatureSay.
Note que a função doCreatureSay tem um parametro que representa o tipo de texto, um dos tipos é o TALKTYPE_MONSTER (ou algo assim). Você pode ver todos os tipos dentro do arquivo data/lib/constant.lua e inclusive tem um tópico do Caronte sobre o constant.lua explicando várias coisas úteis lá.
4) Eu sugiro que vc troque a forma que vc fez para suportar mais de uma vocação permitida, é relativamente fácil vc só precisa mudar

vocation = 4 para vocation = {4}

e no check ao invés de fazer if getPlayerVocation(cid) == config.vocation then fazer if isInArray(config.vocation, getPlayerVocation(cid)) then.

Dessa forma ele vai procurar se o numero da sua vocação tá dentro daquele array/vetor/tabela que é o vocation. E aí você pode fazer vocation = {4,5,8,12,250} que ele vai aceitar todas essas vocações.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

@hallanehallex

Consegui fazer seguindo as dicas do Wolf.

Hiraishin no Jutsu 2.0:

Citar

Ao utilizar "hiraishin ni no dan seal" o player que o jogador targetou é marcado por X segundos. Ao usar "hiraishin ni no dan" o jogador é teleportado ao outro que está marcado após um pequeno delay.

 

Em data/spells/spells.xml cole:

	<instant name="Hiraishin No Jutsu" words="hiraishin ni no dan seal" lvl="12" mana="20" prem="1" range="5" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="hiraishin.lua">
		<vocation id="4"/>
	</instant>
	
	
	<instant name="Hiraishin no Jutsu" words="hiraishin ni no dan" lvl="18" mana="140" prem="1" aggressive="0" params="1" exhaustion="2000" needlearn="0" event="script" value="hiraishinII.lua">
		<vocation id="4"/>
	</instant>

Em data/spells/scripts crie hiraishin.lua e cole:

local config = {
	storageID = 49609,
	mark_time = 6,
}

local errorMsg = {
	pz = "Seu alvo nao pode estar fora do PZ.",
	playerOnly = "Voce so pode usar este jutsu em players.",
	alreadyMarked = "Voce ja marcou um jogador.",
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)


function onCastSpell(cid, var)
	--local target = getThingFromPosition(variantToPosition(var), 1)
	if isPlayer(getCreatureTarget(cid)) then
		if not getTilePzInfo(getThingPosition(getCreatureTarget(cid))) then
			if getPlayerStorageValue (cid, config.storageID) <= 0 then
				setPlayerStorageValue(cid, config.storageID, 1)
				doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getCreatureName(getCreatureTarget(cid)))
				local struct = {
					left = config.mark_time, 
					player = cid,
					target = target,
					var = var
				}
				addEvent(teleportIsTrue, 1000, struct)
			else
				doSendMagicEffect(getPlayerPosition(cid), 2)
				doPlayerSendCancel(cid, errorMsg.alreadyMarked)
			end
		else
			doSendMagicEffect(getPlayerPosition(cid), 2)
			doPlayerSendCancel(cid, errorMsg.pz)
		end
	else
		doSendMagicEffect(getPlayerPosition(cid), 2)
		doPlayerSendCancel(cid, errorMsg.playerOnly)		
	end
	return doCombat(cid, combat, var)
end

function teleportIsTrue (struct)
	if struct.left ~= 0 then
		if getPlayerStorageValue (struct.player, config.storageID) == 2 then
			doTeleportThing(struct.player, getThingPosition(getCreatureTarget(struct.player)), true)
			setPlayerStorageValue(struct.player, config.storageID, 0)
			doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
			return true
		end
		doPlayerSendTextMessage(struct.player,22, struct.left .. " segundos restantes.")
		struct.left = struct.left - 1
		addEvent (teleportIsTrue, 1000, struct)
	elseif struct.left == 0 then
		doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
		setPlayerStorageValue(struct.player, config.storageID, 0)
	else
		return false
	end
end

E em hiraishinII.lua cole:

local config = {
	storageID = 49609,
	mark_time = 6,
}

function onCastSpell(cid, var)
	if getPlayerStorageValue (cid, config.storageID) == 1 then
		setPlayerStorageValue(cid, config.storageID, 2)
	else
		doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.")
	end

	return true
end

 

Link para o post
Compartilhar em outros sites

Ficou muito bom, meus parabéns amigo :D

Só tem 1 coisinha: as funções de param de spells só funcionam em players então essa mensagem de

playerOnly = "Voce so pode usar este jutsu em players.",

nunca vai ser printada até onde eu sei. O mesmo vale para target em pz, a menos que a spell tivesse a tag agressive = "0", então vc podia excluir essa checagem e só colocar a tag na spells.
Além disso, mesmo se ele executasse os prints, ele também ia executar o combat em ambos os casos pq vc não cancelou a spell após cair nesses casos em que ela não deveria ser castada, ele só não iria teleportar.

else
			doSendMagicEffect(getPlayerPosition(cid), 2)
			doPlayerSendCancel(cid, errorMsg.pz)
		end
	else
		doSendMagicEffect(getPlayerPosition(cid), 2)
		doPlayerSendCancel(cid, errorMsg.playerOnly)		
	end
	return doCombat(cid, combat, var)

deveria ter um return false antes do end de cada else para você colocar o return doCombat sem checar nada no fim.

Outra coisa é que o addEvent tá checando de 1 em 1 segundo, se vc usar a spell de teleportar pode ser q leve 1 segundo de delay até vc teleportar, isso pode ser mitigado se vc fazer o addEvent em 333 milisegundos e ai na função teleportisTrue vc faz pra só soltar a mensagem se for a terceira vez, ou algo assim. E faz o timeleft tb modificado. Garanto q isso iria melhorar enormemente a experiencia de soltar a magia.

Essas são as minhas dicas, claro q vc não precisa aplicá-las aqui, mas é o que eu notei que poderia melhorar.

Eu gostei muito da forma q vc pensou pra fazer teleportar sem precisar guardar nenhuma informação do player, eu to a tantos anos usando storage com nome do target salvo q eu confesso q fiquei um pouco engessado nessa ideia; Você pensou fora da caixa e conseguiu fazer o que vc se propôs a fazer. Meus parabéns!

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

@marcot @xWhiteWolf a spell ta quase perfeita eu so gostaria que você fizesse as seguintes alterações nela

 

1 - remove-se esse delay ao teleportar até o player

 

2 - ao tentar usar Hiraishin Ni No Dan remove-se a letra em laranja Hiraishin No Jutsu e so deixa-se a mensagem "Voce nao marcou nenhum jogador." (Caso você não consiga, isso não é de muita importancia é so um complemento para deixar mais bonitinha :v

 

3 - ao usar Hiraishin Ni No Dan aparecera o effect 339 quando eu teleporto até o player

 

4 - ao usar Hiraishin Ni No Dan Seal aparecera o effect 152 (Effect de Selamento)

 

5 - ao usar Hiraishin Ni No Dan Seal eu queria, SIM, que tivesse tempo mais não aparece-se na tela do Player por que o tempo seria muito grande para ficar a contagem na tela (Tempo Estimado para spell se desfazer uns 8~10 Minutos)

 

6 - ao usar Hiraishin Ni No Dan Seal eu queria que voce tirasse o target lost pois quando uso a spell hiraishin ni no dan seal eu so posso o usar o ativador (hiraishin ni no dan) so quando o player estiver targetado: gostaria que eu pudesse usar hiraishin ni no dan a qualquer distancia do player selado

 

7 - eu tambem queria que eu pode-se usar o Hiraishin Ni No Dan em qualquer distancia por ex: o Player Selado estivesse a uns 50~20000000 de passos de distancia (Distancia Ficticia) resumindo eu gostaria que não importa-se onde o Player Selado Estivesse o Player que Fez o Selamento iria até ele de qualquer jeito menos em PZ

 

P.S.: essas seguintes falhas nas spells não foi culpa sua e sim minha porque como eu disse no começo do topico não sou bom em explicar funções de spells ou script (eu sei que todo mundo ja deve estar de saco cheio de eu esquecer de explicar o Script corretamente mais eu ainda to comesando aprender Lua :laugh:)

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

TAG data/spells/spells.xml:

	<instant name="Hiraishin No Jutsu" words="hiraishin ni no dan seal" lvl="12" mana="20" prem="1" aggressive="1" casterTargetOrDirection="1" blockwalls="1" exhaustion="2000" needlearn="0" event="script" value="hiraishin.lua">
		<vocation id="4"/>
	</instant>
	
	
	<instant name="Hiraishin no Jutsu" words="hiraishin ni no dan" lvl="18" mana="10" prem="1" aggressive="1" params="1" exhaustion="2000" needlearn="0" event="script" value="hiraishinII.lua">
		<vocation id="4"/>
	</instant>

hiraishin.lua

local config = {
	storageID = 49609,
	mark_time = 10 * 60,
	effectWhenTeleport = 339, -- Efeito ao teleportar
	effectWhenUsed = 152,
}

local errorMsg = {
	pz = "Seu alvo nao pode estar fora do PZ.",
	playerOnly = "Voce so pode usar este jutsu em players.",
	alreadyMarked = "Voce ja marcou um jogador.",
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 152)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)


function onCastSpell(cid, var)
	--local target = getThingFromPosition(variantToPosition(var), 1)
	if isPlayer(getCreatureTarget(cid)) then
		if getPlayerStorageValue (cid, config.storageID) <= 0 then
			setPlayerStorageValue(cid, config.storageID, 1)
			doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getCreatureName(getCreatureTarget(cid)))
			local struct = {
				left = config.mark_time * 3, 
				player = cid,
				target = target,
				var = var
			}
			addEvent(teleportIsTrue, 333, struct)
		else
			doSendMagicEffect(getPlayerPosition(cid), 2)
			doPlayerSendCancel(cid, errorMsg.alreadyMarked)
			return false
		end
	else
		doSendMagicEffect(getPlayerPosition(cid), 2)
		doPlayerSendCancel(cid, errorMsg.playerOnly)
		return false	
	end
	return doCombat(cid, combat, var)
end

function teleportIsTrue (struct)
	if struct.left ~= 0 then
		if getPlayerStorageValue (struct.player, config.storageID) == 2 then
			doTeleportThing(struct.player, getThingPosition(getCreatureTarget(struct.player)), true)
			setPlayerStorageValue(struct.player, config.storageID, 0)
			doSendMagicEffect(getPlayerPosition(struct.player), config.effectWhenTeleport)
			doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
			return TRUE
		end
		struct.left = struct.left - 1
		addEvent (teleportIsTrue, 333, struct)
	elseif struct.left == 0 then
		doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
		setPlayerStorageValue(struct.player, config.storageID, 0)
	else
		return FALSE
	end
end

hiraishinII.lua

local config = {
	storageID = 49609,
	mark_time = 6,
}

function onCastSpell(cid, var)
	--local target = getThingFromPosition(variantToPosition(var), 1)
	if getPlayerStorageValue (cid, config.storageID) == 1 then
		setPlayerStorageValue(cid, config.storageID, 2)
	else
		doPlayerSendTextMessage(cid,22, "Voce nao marcou nenhum jogador.")
		return false
	end

	return true
end

Quanto à parte de não cancelar o target não conheço muito bem, mas acredito que a própria source do OTServer ja deva cancelar quando sái da tela. Não sei se existe alguma função em LUA que mantenha o target enquanto o jogador está fora da tela.

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

@marcot  o não lembro quem foi que fez uma spell parecida com essa que pedi que ao usar hiraishin ni no dan usa o selamento no player e ao usar novamente fora ou dentro do target ele teleporta até o player se não me engano foi o @xWhiteWolf  que criou essa spell 

 

e quando falei em cancelar target eu queria que ele usa-se hiraishin ni no dan  para teleportar até o player sem precisar estar com o target ativo no player, mais eu acho que isso pode ser mudado no spells.xml

 

P.S.: vou verificar a spell ainda pois não tive tempo meu pai usa pc para trabalho então ta dificil de eu usar hoje

@marcot  esqueci de mencionar um detalhe que esqueci de avisar eu gostaria que a spell não tira-se dano e aparece-se 1 effect ao selar o player e um outro effect ao teleportar 

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

@marcot 

desculpa eu encher o saco novamente mais como faço para  retirar o Dano da Spell ?? esqueci de avisar desse detalhe tbm gostaria que ele não tivesse dano

 

P.S.: não sei se é um bug ou se você programou a spell assim, mais quando uso hiraishin ni no dan seal  e ativo com hiraishin ni no dan funciona normal até ai, so que quando vou usar novamente o hiraishin ni no dan seal ele não usa e aparece a mensagem "você ja marcou um jogador"

e se eu não estou com target no player ele não teleporta, aparece o effect normalmente mais ele não teleporta

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

Script sem o bug de tirar o target e sem damage:

local config = {
	storageID = 49609,
	mark_time = 10 * 60,
	effectWhenTeleport = 339, -- Efeito ao teleportar
	effectWhenUsed = 152,
}

local errorMsg = {
	pz = "Seu alvo nao pode estar fora do PZ.",
	playerOnly = "Voce so pode usar este jutsu em players.",
	alreadyMarked = "Voce ja marcou um jogador.",
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 152)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)

function onCastSpell(cid, var)
	if isPlayer(getCreatureTarget(cid)) then
		if getPlayerStorageValue (cid, config.storageID) <= 0 then
			setPlayerStorageValue(cid, config.storageID, 1)
			doPlayerSendTextMessage(cid,22, "Voce marcou o player ".. getCreatureName(getCreatureTarget(cid)))
			target = getCreatureTarget(cid)
			doSendMagicEffect(getPlayerPosition(target), 152)
			local struct = {
				left = config.mark_time * 3, 
				player = cid,
				target = target,
				var = var
			}
			addEvent(teleportIsTrue, 333, struct)
		else
			doSendMagicEffect(getPlayerPosition(cid), 2)
			doPlayerSendCancel(cid, errorMsg.alreadyMarked)
			return false
		end
	else
		doSendMagicEffect(getPlayerPosition(cid), 2)
		doPlayerSendCancel(cid, errorMsg.playerOnly)
		return false	
	end
	return doCombat(cid, combat, var)
end

function teleportIsTrue (struct)
	if struct.left ~= 0 then
		if getPlayerStorageValue (struct.player, config.storageID) == 2 then
			doTeleportThing(struct.player, getThingPosition(struct.target), true)
			setPlayerStorageValue(struct.player, config.storageID, 0)
			doSendMagicEffect(getPlayerPosition(struct.player), config.effectWhenTeleport)
			doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
			return TRUE
		end
		struct.left = struct.left - 1
		addEvent (teleportIsTrue, 333, struct)
	elseif struct.left == 0 then
		doPlayerSendTextMessage(struct.player,22, "Voce perdeu sua marcacao.")
		setPlayerStorageValue(struct.player, config.storageID, 0)
	else
		return FALSE
	end
end
Link para o post
Compartilhar em outros sites

@marcot mano, vlw mesmo funcionou perfeitamente REP++

 

se quiser me ajudar em outro pedido agradeço 

http://www.tibiaking.com/forum/forums/topic/85973-pedido-script-spell-hiraishin-no-jutsu-seal-123-e-hiraishin-no-jutsu-123/

 

Acho que esse /\ /\ expliquei melhor como funciona o script da spell

 

Editado por hallanehallex (veja o histórico de edições)
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