Ir para conteúdo
  • 0

Spell Drenar mana e Ganhar Health


julhinhuu

Pergunta

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

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

 

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 ^^'

Link para o comentário
Compartilhar em outros sites

  • 0

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?

Link para o comentário
Compartilhar em outros sites

  • 0

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"

 

Link para o comentário
Compartilhar em outros sites

  • 0

 

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.
Link para o comentário
Compartilhar em outros sites

  • 0

 

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.

 

 

@@othereality Funcionou porém, se o player soltar magia mesmo sem target ele aumenta sua vida.

 

Só mudar essa linha:

	local min = (level + 2) + (magic * 3) / 2
	local max = (level + 2) + (magic * 6) / 2

pode colocar assim tambem, exemplo:

	local min = (level + 2) + (magic * 13) / 2
	local max = (level + 2) + (magic * 16) / 2
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...