JU
tfs 1.0/1.2

Spell Drenar mana e Ganhar Health

Por julhinhuu, 10 de fev. de 2016 em Scripts

mana drain
health
ganharheath
18
4.6k
julhinhuuJ
10 de fevereiro de 2016 às 20:14

Olá galera boa noite;

 

Gostaria de pedir mais uma spell para vocês.

Detalhes:

 

*A spell vai drenar a mana do oponente e o jogador que lançou a magia irá ganhar vida;

*A spell irá drenar a mana do oponente aleatório e ganhar vida, a mesma quantidade que retirou de mana do player.

-Não tem muitos detalhes é so isso mesmo.

 

Então é isso, espero que vocês me ajudem novamente.

 

Versão: 10.90

TFS: 1x

julhinhuuJ
14 de fevereiro de 2016 às 14:00

UP!

SkullsS
14 de fevereiro de 2016 às 14:02

Posso fazer, mas 0.4.

julhinhuuJ
14 de fevereiro de 2016 às 14:05

Faça ai se funcionar hehe.

gabriel28G
14 de fevereiro de 2016 às 14:11

Posso fazer, mas 0.4.

Faz! hahahaha

Lucas CPL
16 de fevereiro de 2016 às 12:22

Tenta essa: Versão 1.x

local function verDano(level, magic)
	local min = (level + 2) + (magic * 3) / 2
	local max = (level + 2) + (magic * 6) / 2
	return min, max
end
local function executar(player,target)
	if target:getGroup():getId() > 1 then
		return true
	end
	if target:getLevel() <= configManager.getNumber(configKeys.PROTECTION_LEVEL) then
		return true
	end
	
	local level = player:getLevel()
	local magic = player:getMagicLevel()
	local healtPlayer = player:getHealth()
	local manaAlvo = target:getMana()
	
	local dano = math.random(verDano(level, magic))
	print(dano)
	if manaAlvo >= dano then
		target:addMana(-dano)
	elseif dano > manaAlvo then
		target:addMana(-manaAlvo)
	end
	
	if healtPlayer < dano then
		player:addHealth(dano)
		player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
	end
	
end

local function encontrarAlvo(player, position)
	if player:getTarget() == nil then
		local c = Player(getTopCreature(position).uid)
		if not c then
			return true
		end
		target = c
	else
		if Player(player:getTarget()) then
			target = player:getTarget()
		else
			return true
		end
	end
	return target
end

function onCastSpell(cid, var)
	local player = Player(cid)
	local position = player:getPosition()
	position:getNextPosition(player:getDirection(), 1)
	local target = Player(encontrarAlvo(player, position))
	if not target then 
		player:sendCancelMessage('Você só pode usar essa magia em jogadores.')
		return true
	end
	position:sendMagicEffect(CONST_ME_PURPLEENERGY)
	executar(player,target)
	return true
end

julhinhuuJ
16 de fevereiro de 2016 às 16:57

 

Tenta essa: Versão 1.x

local function verDano(level, magic)
	local min = (level + 2) + (magic * 3) / 2
	local max = (level + 2) + (magic * 6) / 2
	return min, max
end
local function executar(player,target)
	if target:getGroup():getId() > 1 then
		return true
	end
	if target:getLevel() <= configManager.getNumber(configKeys.PROTECTION_LEVEL) then
		return true
	end
	
	local level = player:getLevel()
	local magic = player:getMagicLevel()
	local healtPlayer = player:getHealth()
	local manaAlvo = target:getMana()
	
	local dano = math.random(verDano(level, magic))
	print(dano)
	if manaAlvo >= dano then
		target:addMana(-dano)
	elseif dano > manaAlvo then
		target:addMana(-manaAlvo)
	end
	
	if healtPlayer < dano then
		player:addHealth(dano)
		player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
	end
	
end

local function encontrarAlvo(player, position)
	if player:getTarget() == nil then
		local c = Player(getTopCreature(position).uid)
		if not c then
			return true
		end
		target = c
	else
		if Player(player:getTarget()) then
			target = player:getTarget()
		else
			return true
		end
	end
	return target
end

function onCastSpell(cid, var)
	local player = Player(cid)
	local position = player:getPosition()
	position:getNextPosition(player:getDirection(), 1)
	local target = Player(encontrarAlvo(player, position))
	if not target then 
		player:sendCancelMessage('Você só pode usar essa magia em jogadores.')
		return true
	end
	position:sendMagicEffect(CONST_ME_PURPLEENERGY)
	executar(player,target)
	return true
end

Deu esse erro:

post-321783-0-87701400-1455649001_thumb.png

 

e pelo que vi só é para atacar player, gostaria que atacassem monstros também se possível.

Obrigado ^^'

Lucas CPL
17 de fevereiro de 2016 às 14:28

Deu esse erro:

attachicon.gif1212.png

 

e pelo que vi só é para atacar player, gostaria que atacassem monstros também se possível.

Obrigado ^^'

Vi o erro, chegando em casa eu arrumo

vou colocar para atacar só um sqm a frente e também os monstros. Pdc?

julhinhuuJ
17 de fevereiro de 2016 às 16:07

Vi o erro, chegando em casa eu arrumo

vou colocar para atacar só um sqm a frente e também os monstros. Pdc?

 

com certeza, e é necessário marca o target.

Lucas CPL
17 de fevereiro de 2016 às 16:10

 

com certeza, e é necessário marca o target.

O target tem que estar na sua frente ou não precisa?

Para atacar tem que ter target?

julhinhuuJ
17 de fevereiro de 2016 às 16:14

O target tem que estar na sua frente ou não precisa?

Para atacar tem que ter target?

 

é igual uma magia de ataque (Exori vis por exemplo),mas irá atacar a mana do oponente e converter em vida para si mesmo.

Lucas CPL
17 de fevereiro de 2016 às 16:39
Melhor resposta

Tenta assim:

local function verDano(level, magic)
	local min = (level + 2) + (magic * 3) / 2
	local max = (level + 2) + (magic * 6) / 2
	return min, max
end

local function executar(player, uid)
	local target = Creature(uid)
	local level = player:getLevel()
	local magic = player:getMagicLevel()
	local manaAlvo = target:getMana()
	local dano = math.floor(math.random(verDano(level, magic)))
	
	doTargetCombatMana(player, target, 0, 0, CONST_ME_PURPLEENERGY)
	if manaAlvo >= dano then
		target:addMana(-dano, true)
	elseif dano > manaAlvo then
		target:addMana(-manaAlvo, true)
	end
	
	player:addHealth(dano, true)
	player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
end

function onCastSpell(cid, var)

	local player = Player(cid)
	local uid = player:getTarget()

	if uid == nil then
		position = player:getPosition()
		position:getNextPosition(player:getDirection(), 1)
		uid = Creature(getTopCreature(position).uid)
	else
		position = uid:getPosition()
	end
	local pos = Tile(position)
	
	if pos:hasFlag(TILESTATE_PROTECTIONZONE) then
		player:sendCancelMessage('O alvo não pode estar em pz')
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end
	if not uid then 
		player:sendCancelMessage('Você só pode usar essa magia em criaturas.')
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end
	if uid:isPlayer() then
		if uid:getGroup():getId() > 1 then
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
		if uid:getLevel() <= configManager.getNumber(configKeys.PROTECTION_LEVEL) then
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
	end
	executar(player, uid)
	return true
end

otherealityO
20 de fevereiro de 2016 às 18:26

Vou deixar a minha tb e.e

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) --ESCOLHE OS EFEITOS
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ARROW) --ESCOLHE OS EFEITOS

function onCastSpell(cid, var)
	if(variantToNumber(var) == 0) then
		return doPlayerSendCancel(cid, "vc precisa de um target")
	end

	local target = getCreatureTarget(cid)
	local lv = getPlayerLevel(cid)
	local ml = getPlayerMagLevel(cid)
	local manaDrainMin = (lv+ml) * 2
	local manaDrainMax = (lv+ml) * 3
	
	local dmg = math.random(manaDrainMin, manaDrainMax)
	
	doCreatureAddMana(target, -dmg)
	doCreatereAddHealth(cid, dmg)
	return doCombat(cid, combat, var)
end

Na tag em spells.xml precisa ter:

aggressive="1"

 

julhinhuuJ
22 de fevereiro de 2016 às 17:06

 

Tenta assim:

local function verDano(level, magic)
	local min = (level + 2) + (magic * 3) / 2
	local max = (level + 2) + (magic * 6) / 2
	return min, max
end

local function executar(player, uid)
	local target = Creature(uid)
	local level = player:getLevel()
	local magic = player:getMagicLevel()
	local manaAlvo = target:getMana()
	local dano = math.floor(math.random(verDano(level, magic)))
	
	doTargetCombatMana(player, target, 0, 0, CONST_ME_PURPLEENERGY)
	if manaAlvo >= dano then
		target:addMana(-dano, true)
	elseif dano > manaAlvo then
		target:addMana(-manaAlvo, true)
	end
	
	player:addHealth(dano, true)
	player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
end

function onCastSpell(cid, var)

	local player = Player(cid)
	local uid = player:getTarget()

	if uid == nil then
		position = player:getPosition()
		position:getNextPosition(player:getDirection(), 1)
		uid = Creature(getTopCreature(position).uid)
	else
		position = uid:getPosition()
	end
	local pos = Tile(position)
	
	if pos:hasFlag(TILESTATE_PROTECTIONZONE) then
		player:sendCancelMessage('O alvo não pode estar em pz')
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end
	if not uid then 
		player:sendCancelMessage('Você só pode usar essa magia em criaturas.')
		player:getPosition():sendMagicEffect(CONST_ME_POFF)
		return false
	end
	if uid:isPlayer() then
		if uid:getGroup():getId() > 1 then
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
		if uid:getLevel() <= configManager.getNumber(configKeys.PROTECTION_LEVEL) then
			player:getPosition():sendMagicEffect(CONST_ME_POFF)
			return false
		end
	end
	executar(player, uid)
	return true
end

Funcionou @@Lucas CP, só tenho uma duvida gostaria que ele retirasse mais mana do player e transformasse mais vida para si, já tentei alterar mais continua mesma base.

 

 

Vou deixar a minha tb e.e

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA) --ESCOLHE OS EFEITOS
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ARROW) --ESCOLHE OS EFEITOS

function onCastSpell(cid, var)
	if(variantToNumber(var) == 0) then
		return doPlayerSendCancel(cid, "vc precisa de um target")
	end

	local target = getCreatureTarget(cid)
	local lv = getPlayerLevel(cid)
	local ml = getPlayerMagLevel(cid)
	local manaDrainMin = (lv+ml) * 2
	local manaDrainMax = (lv+ml) * 3
	
	local dmg = math.random(manaDrainMin, manaDrainMax)
	
	doCreatureAddMana(target, -dmg)
	doCreatereAddHealth(cid, dmg)
	return doCombat(cid, combat, var)
end

Na tag em spells.xml precisa ter:

 

aggressive="1"

 

 

@@othereality Funcionou porém, se o player soltar magia mesmo sem target ele aumenta sua vida.
gabriel28G
22 de fevereiro de 2016 às 17:17

Poem isso, needtarget="1", na tag da spell, creio que eliminará o problema.