Ir para conteúdo

Pergunta

Blood Drain

Uso essa spell de tirar vida do player e aumentar a própria a vida ou seja um drain de life.

 

Erro:

Remove 25% da vida total do player matando o player com 4 spell do blood drain

 

Remove 25% da vida total dos monstros.

 

Solução:

Depois de usar 3 vezes a spell "blood drain" no inimigo ele vai ficar com 25% de total de vida.

exemplo: Player com 10000 de vida foi usado 3 vezes a spell e agora está com 2500 de vida.

 

>Se usar de novo a magia mataria o player por estar com 2500 de vida, então podia começar tirar 5% da vida do inimigo. Sendo que o inimigo não possa morrer. Como?

>A spell só pode tirar até 5% de vida total do player sendo que até 500 de vida o player pode usar a spell "blood drain" no inimigo ou seja sendo que o inimigo nunca possa morrer.

 

Observação: No caso seria o limite de HP que pode tirar na spell é até 500 de vida.

 

Retira-se 2% da vida total dos monstros e acontecendo o mesmo o caso com limite de 500 de vida que pode tirar dos monstros.

 

Script:

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_EFFECT, 13)

setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 40)

local percent = 24 --porcentagem que irá drenar.
local exhaust = 0 --tempo em segundos para usar a magia de novo.


function onCastSpell(cid, var)
	local enemy = getCreatureTarget(cid)
	local enemyHealth = (getCreatureMaxHealth(enemy) / 100 * percent)
	if exhaustion.get(cid, 10223) then
	return false 
	end
	if getCreatureHealth(enemy) >= enemyHealth then
	doCreatureAddHealth(enemy, -(enemyHealth))
	doCreatureAddHealth(cid, enemyHealth)
        doSendAnimatedText(getThingPos(enemy), "-"..enemyHealth, 5001)
	exhaustion.set(cid, 10223, exhaust)
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando 15% de life do sua vitima e crescentando a você.")
        return doCombat(cid, combat, var)
	else
		enemyHealth = getCreatureHealth(enemy)
		doCreatureAddHealth(enemy, -enemyHealth)
		doCreatureAddHealth(cid, enemyHealth)
		exhaustion.set(cid, 10223, exhaust)
	end
return true
end

Espero que entenda e ajude. Agradeço! Rep+

Link para o comentário
https://xtibia.com/forum/topic/234482-blood-drain/
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Falta de atenção minha no primeiro código :

local config = {
	percentM = 0.5, --porcentagem que irá drenar dos montros.
	percentP = 25, --porcentagem que irá drenar dos players
	exhaust = 0 --tempo em segundos para usar a magia de novo.
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 13)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 40)
function onCastSpell(cid, var)
	local enemy = getCreatureTarget(cid)
	local enemyHealthP = (getCreatureMaxHealth(enemy) / 100 * config.percentP)
	local enemyHealthM = (getCreatureMaxHealth(enemy) / 100 * config.percentM)
	if exhaustion.get(cid, 10223) then
		return false 
	end
	if isMonster(enemy) then
		if getCreatureHealth(enemy) >= enemyHealthM then
			doCreatureAddHealth(enemy, -(enemyHealthM))
			doCreatureAddHealth(cid, enemyHealthM)
                        doSendAnimatedText(getThingPos(enemy), "-"..enemyHealthM, 5001)
			exhaustion.set(cid, 10223, config.exhaust)
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando " .. config.percentM .."% de life de sua vitima e acrescentando a você.")
           	        return doCombat(cid, combat, var)
		else
			doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de " .. config.percentM .. "% de life a magia não pode ser usada!")
			return false
		end
	elseif isPlayer(enemy) then
		if getCreatureHealth(enemy) >= enemyHealthP then
			doCreatureAddHealth(enemy, -(enemyHealthP))
			doCreatureAddHealth(cid, enemyHealthP)
                        doSendAnimatedText(getThingPos(enemy), "-"..enemyHealthP, 5001)
			exhaustion.set(cid, 10223, config.exhaust)
                       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando " .. config.percentP .. "% de life de sua vitima e acrescentando a você.")
           	       return doCombat(cid, combat, var)
		else
			doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de "..config.percentP.."% de life a magia não pode ser usada!")
			return false
		end
	end
	return true
end

Código com a outra lógica :

local config = {
	percentM = 0.5, --porcentagem que irá drenar dos montros.
	percentP = 25, --porcentagem que irá drenar dos players
	exhaust = 0 --tempo em segundos para usar a magia de novo.
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 13)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 40)
function onCastSpell(cid, var)
	local enemy, enemyHealth = getCreatureTarget(cid), 0
	if exhaustion.get(cid, 10223) then
		return false 
	end
	if isMonster(enemy) then
		enemyHealth = (getCreatureMaxHealth(enemy) / 100 * config.percentM)
	else
		enemyHealth = (getCreatureMaxHealth(enemy) / 100 * config.percentP)
	end
	if getCreatureHealth(enemy) >= enemyHealth then
		doCreatureAddHealth(enemy, -(enemyHealth))
		doCreatureAddHealth(cid, enemyHealth)
                doSendAnimatedText(getThingPos(enemy), "-"..enemyHealth, 5001)
		exhaustion.set(cid, 10223, config.exhaust)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando " .. isMonster(enemy) == true and config.percentM or config.percentP .. "% de life de sua vitima e acrescentando a você.")
                return doCombat(cid, combat, var)
	else
		doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de " .. isMonster(enemy) == true and config.percentM or config.percentP .."% de life a magia não pode ser usada!")
		return false
	end
	return true
end
Link para o comentário
https://xtibia.com/forum/topic/234482-blood-drain/#findComment-1654495
Compartilhar em outros sites

  • 0

Não sou de editar ou fazer spells, então é capaz que não funcione de primeira, mas teste aí:

local config = {
	percentNo = 5, -- a partir de que porcentagem ele não drena mais
	percent = 25, --porcentagem que irá drenar.
	exhaust = 0 --tempo em segundos para usar a magia de novo.
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 13)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 40)
function onCastSpell(cid, var)
	local enemy = getCreatureTarget(cid)
	local enemyHealth = (getCreatureMaxHealth(enemy) / 100 * config.percent)
	local enemyHealthTwo = (getCreatureMaxHealth(enemy) / 100 * config.percentNo) -- Retira 5%
	if exhaustion.get(cid, 10223) then
		return false 
	end
	if getCreatureHealth(enemy) >= enemyHealth then
		doCreatureAddHealth(enemy, -(enemyHealth))
		doCreatureAddHealth(cid, enemyHealth)
                doSendAnimatedText(getThingPos(enemy), "-"..enemyHealth, 5001)
		exhaustion.set(cid, 10223, config.exhaust)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando "..config.percent"% de life de sua vitima e acrescentando a você.")
                return doCombat(cid, combat, var)
	elseif getCreatureHealth(enemy) <= enemyHealth then
		if getCreatureHealth(enemy) <= enemyHealthTwo then
			doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de "..config.percentNo.."% de life a magia não pode ser usada!")
			return false
		else
			doCreatureAddHealth(enemy, -(enemyHealthTwo))
			doCreatureAddHealth(cid, enemyHealthTwo)
	                doSendAnimatedText(getThingPos(enemy), "-"..enemyHealthTwo, 5001)
			exhaustion.set(cid, 10223, config.exhaust)
	                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando "..config.percentNo"% de life de sua vitima e acrescentando a você.")
	                return doCombat(cid, combat, var)
    	        end
        end
	return true
end
Editado por Flavio S
Link para o comentário
https://xtibia.com/forum/topic/234482-blood-drain/#findComment-1654360
Compartilhar em outros sites

  • 0

Deu esse erro no distro e não funcionou no jogo.

 

[04/06/2015 21:37:34] [Error - LuaScriptInterface::loadFile] data/spells/scripts/260/lifedrain.lua:3: '}' expected (to close '{' at line 1) near 'percent'
[04/06/2015 21:37:34] [Warning - Event::loadScript] Cannot load script (data/spells/scripts/260/lifedrain.lua)
[04/06/2015 21:37:34] data/spells/scripts/260/lifedrain.lua:3: '}' expected (to close '{' at line 1) near 'percent'

Link para o comentário
https://xtibia.com/forum/topic/234482-blood-drain/#findComment-1654417
Compartilhar em outros sites

  • 0

...

local config = {
	percent = 0.5, --porcentagem que irá drenar.
	exhaust = 0 --tempo em segundos para usar a magia de novo.
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 13)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 40)
function onCastSpell(cid, var)
	local enemy = getCreatureTarget(cid)
	local enemyHealth = (getCreatureMaxHealth(enemy) / 100 * config.percent)
	if exhaustion.get(cid, 10223) then
		return false 
	end
	if getCreatureHealth(enemy) >= enemyHealth then
		doCreatureAddHealth(enemy, -(enemyHealth))
		doCreatureAddHealth(cid, enemyHealth)
                doSendAnimatedText(getThingPos(enemy), "-"..enemyHealth, 5001)
		exhaustion.set(cid, 10223, config.exhaust)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando "..config.percent"% de life de sua vitima e acrescentando a você.")
                return doCombat(cid, combat, var)
	else
		doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de "..config.percent.."% de life a magia não pode ser usada!")
		return false
	end
	return true
end
Link para o comentário
https://xtibia.com/forum/topic/234482-blood-drain/#findComment-1654425
Compartilhar em outros sites

  • 0

... explica certo tio ...

 

o tópico poderia ser feito apenas falando :

 

"Eu quero que essa spell tire 0.5% de monsters e 25% de players, sendo que quando forem drenar a life dele para morrer, não seria possível"

local config = {
	percentM = 0.5, --porcentagem que irá drenar dos montros.
	percentP = 25, --porcentagem que irá drenar dos players
	exhaust = 0 --tempo em segundos para usar a magia de novo.
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 13)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 40)
function onCastSpell(cid, var)
	local enemy = getCreatureTarget(cid)
	local enemyHealthP = (getCreatureMaxHealth(enemy) / 100 * config.percentP)
	local enemyHealthM = (getCreatureMaxHealth(enemy) / 100 * config.percentM)
	if exhaustion.get(cid, 10223) then
		return false 
	end
	if isMonster(enemy) then
		if getCreatureHealth(enemy) >= enemyHealthM then
			doCreatureAddHealth(enemy, -(enemyHealthM))
			doCreatureAddHealth(cid, enemyHealthM)
                        doSendAnimatedText(getThingPos(enemy), "-"..enemyHealthM, 5001)
			exhaustion.set(cid, 10223, config.exhaust)
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando "..config.percentM"% de life de sua vitima e acrescentando a você.")
           	        return doCombat(cid, combat, var)
		else
			doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de "..config.percentM.."% de life a magia não pode ser usada!")
			return false
		end
	elseif isPlayer(enemy) then
		if getCreatureHealth(enemy) >= enemyHealthP then
			doCreatureAddHealth(enemy, -(enemyHealthP))
			doCreatureAddHealth(cid, enemyHealthP)
                        doSendAnimatedText(getThingPos(enemy), "-"..enemyHealthP, 5001)
			exhaustion.set(cid, 10223, config.exhaust)
                       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando "..config.percentP"% de life de sua vitima e acrescentando a você.")
           	       return doCombat(cid, combat, var)
		else
			doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de "..config.percentP.."% de life a magia não pode ser usada!")
			return false
		end
	end
	return true
end

Código com outra lógica :

local config = {
	percentM = 0.5, --porcentagem que irá drenar dos montros.
	percentP = 25, --porcentagem que irá drenar dos players
	exhaust = 0 --tempo em segundos para usar a magia de novo.
}
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_EFFECT, 13)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 40)
function onCastSpell(cid, var)
	local enemy, enemyHealth = getCreatureTarget(cid), 0
	if exhaustion.get(cid, 10223) then
		return false 
	end
	if isMonster(enemy) then
		enemyHealth = (getCreatureMaxHealth(enemy) / 100 * config.percentM)
	else
		enemyHealth = (getCreatureMaxHealth(enemy) / 100 * config.percentP)
	end
	if getCreatureHealth(enemy) >= enemyHealth then
		doCreatureAddHealth(enemy, -(enemyHealth))
		doCreatureAddHealth(cid, enemyHealth)
                doSendAnimatedText(getThingPos(enemy), "-"..enemyHealth, 5001)
		exhaustion.set(cid, 10223, config.exhaust)
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Uma drenagem de health foi ativada, retirando " .. isMonster(enemy) and config.percentM or config.percentP .. "% de life de sua vitima e acrescentando a você.")
                return doCombat(cid, combat, var)
	else
		doPlayerSendTextMessage(cid, 22, "Seu alvo está com menos de " .. isMonster(enemy) and config.percentM or config.percentP .."% de life a magia não pode ser usada!")
		return false
	end
	return true
end
Editado por Flavio S
Link para o comentário
https://xtibia.com/forum/topic/234482-blood-drain/#findComment-1654431
Compartilhar em outros sites

  • 0

Era isso que eu queria mano só tem um erro que acontece no distro mais no jogo está tudo ok! tem como arrumar ?

 

sempre que uso a magia acontece isso no distro;

 

[05/06/2015 00:17:08] [Error - Spell Interface]
[05/06/2015 00:17:08] data/spells/scripts/260/lifedrain.lua:onCastSpell
[05/06/2015 00:17:08] Description:
[05/06/2015 00:17:08] data/spells/scripts/260/lifedrain.lua:34: attempt to call field 'percentP' (a number value)
[05/06/2015 00:17:08] stack traceback:
[05/06/2015 00:17:08] data/spells/scripts/260/lifedrain.lua:34: in function <data/spells/scripts/260/lifedrain.lua:9>

 

e outro codigo com mesma lógica:

 

[05/06/2015 02:06:27] [Error - Spell Interface]
[05/06/2015 02:06:27] data/spells/scripts/260/lifedrain.lua:onCastSpell
[05/06/2015 02:06:27] Description:
[05/06/2015 02:06:27] data/spells/scripts/260/lifedrain.lua:24: attempt to concatenate a boolean value
[05/06/2015 02:06:27] stack traceback:
[05/06/2015 02:06:27] data/spells/scripts/260/lifedrain.lua:24: in function <data/spells/scripts/260/lifedrain.lua:9>


Editado por xCookie
Link para o comentário
https://xtibia.com/forum/topic/234482-blood-drain/#findComment-1654435
Compartilhar em outros sites

×
×
  • Criar Novo...