Spell Drenar mana e Ganhar Health

julhinhuu
em Scripts
  • 1
  • 2

julhinhuu

Sempre em busca de novidades
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/06/11Posts: 352Char no Tibia: Akor Rysea

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

julhinhuu

Sempre em busca de novidades
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/06/11Posts: 352Char no Tibia: Akor Rysea

UP!

Skulls

Coordenador de Eventos
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 26/02/07Posts: 859Gênero: Masculino

Posso fazer, mas 0.4.

julhinhuu

Sempre em busca de novidades
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/06/11Posts: 352Char no Tibia: Akor Rysea

Faça ai se funcionar hehe.

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian

Posso fazer, mas 0.4.

Faz! hahahaha

Lucas CP

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/04/15Posts: 54

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

julhinhuu

Sempre em busca de novidades
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/06/11Posts: 352Char no Tibia: Akor Rysea

 

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 CP

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/04/15Posts: 54

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?

julhinhuu

Sempre em busca de novidades
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/06/11Posts: 352Char no Tibia: Akor Rysea

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 CP

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/04/15Posts: 54

 

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?

julhinhuu

Sempre em busca de novidades
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/06/11Posts: 352Char no Tibia: Akor Rysea

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 CP

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 13/04/15Posts: 54

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

othereality

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 18/01/11Posts: 343Char no Tibia: Zodriac

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"

 

não me dê rep

apenas leia abaixo

###motivos pra você clicar aqui agora e entrar no Uwnia99 OT###

 

Temos 15 classes e está sempre lançando mais.
A classe Assassin fica invisível até pra
 players :rip:

A classe Cake Guardian tem uma magia de refletir dano

Temos Eventos próprios acontecendo todo momento

Temos várias sprites únicas do OT

 A classe Feral Druid se transforma em vários bichos e tem magias diferentes dependendo da forma que está  :beurk:

Temos um contato muito grande entre desenvolvedor e jogador

 Temos uma classe chamada CAKE GUARDIAN! ELE ATIRA BOLOS!!!!! :love:

Não temos sistema vip e não vamos ter

Não vendemos nenhum tipo de vantagem na loja do site e nem vamos vender (apenas cosméticos)

 24h  :ph34r:

 

Entre no site clicando aqui!

julhinhuu

Sempre em busca de novidades
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 28/06/11Posts: 352Char no Tibia: Akor Rysea

 

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.

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian

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

  • 1
  • 2