Ir para conteúdo
  • 0

Script para aumentar em +30 de mana a cada vez que usar mana rune ou potion


Inthebang

Pergunta

O que estou procurando de fato é uma script que quando eu equipo um magic plate armor por exemplo, que cada vez que eu for usar um item de mana seja uma mana rune ou potion, ele cure entre 20-30 a mais de mana cada vez que usar o item de curar a mana.

 

Exemplo: o potion cura 150 de mana fixo e quando equipo a MPA ele vai curar +30 cada vez que usa a potion, totalizando 180 de mana.

 

Obrigado!

Editado por Inthebang
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0
3 horas atrás, Inthebang disse:

 

Tudo bem, Yan?

 

A script está funcionando corretamente, entretanto funciona apenas quando a pessoa está com o item equipado, quando não tá equipado dá erro no TFS e a mana rune não cura..

 

O erro é esse:

[04/02/2021 16:35:23] Lua Script Error: [Spell Interface] 
[04/02/2021 16:35:23] data/spells/scripts/support/mana rune.lua:onCastSpell

[04/02/2021 16:35:23] luaGetItemDescriptions(). Item not found

[04/02/2021 16:35:23] Lua Script Error: [Spell Interface] 
[04/02/2021 16:35:23] data/spells/scripts/support/mana rune.lua:onCastSpell

[04/02/2021 16:35:23] data/lib/function.lua:396: attempt to index a number value
[04/02/2021 16:35:23] stack traceback:
[04/02/2021 16:35:23]     data/lib/function.lua:396: in function 'getItemName'
[04/02/2021 16:35:23]     data/spells/scripts/support/mana rune.lua:14: in function <data/spells/scripts/support/mana rune.lua:12>
 

Opa, é porque faltou verificar se existe item no slot. 

 

Substitui o código por esse:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local item = getPlayerSlotItem(cid, CONST_SLOT_ARMOR) -- PEGA O ITEM DO SLOT (PARA VERIFICAR SE TEM ITEM)
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM  

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
	end 
	

    if item and id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
    else
		doCreatureAddMana(cid, manaextra)
    end	
	
	return doCombat(cid, combat, var)
end

 

Testa e se der problema me avisa.

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Yan18 disse:

Posta o seu script da pasta actions de potions.

No meu servidor eu utilizo MANARUNE e não potion, mas irei cita-lo aqui (acredito que seja o correto mandar o code da ManaRune, não?).

 

Caso não seja, por favor, me corrija!

 

 

Citar

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end

function onCastSpell(cid, var)

if getPlayerLevel(cid) > 200 then
doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)

end
              if (((getPlayerLevel(cid))%10) == 0) then
              manaextra = (((getPlayerLevel(cid))/10)*3)
              else    
              manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
              end   
              doCreatureAddMana(cid, manaextra)
              return doCombat(cid, combat, var)
end

 

 

 

Editado por Inthebang
Link para o comentário
Compartilhar em outros sites

  • 0
Em 16/01/2021 em 01:36, Inthebang disse:

No meu servidor eu utilizo MANARUNE e não potion, mas irei cita-lo aqui (acredito que seja o correto mandar o code da ManaRune, não?).

 

Caso não seja, por favor, me corrija!

 

 

 

 

 

 

Seu script parecia estar com erro, estava duplicado a função onCastSpel().

 

Substitui o código por esse:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
    end 
	
	if id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
	else
		doCreatureAddMana(cid, manaextra)
	end	
	
	return doCombat(cid, combat, var)
end

 

 

Deixei tudo comentado, mas praticamente você vai precisar mexer no id do Magic Plate Armor, olhei aqui em uma base de Tibia e estava com esse ID 2472, precisa ver no itens.xml se é esse ID mesmo. Caso queira que tenha mensagem, só mudar a variável message de false para true e se quiser mudar o texto, só alterar na variável text, mas cuidado para não apagar os dois hífen (que é assim para se comentar em lua) que vai dar ruim kk. Você também pode alterar a quantidade mínima e máxima de cura extra alterando o valor entre parênteses da variável mana_magic_plate_armor mudando o valor dentro da função math.random. 

 

Procurei deixar o mais intuitivo possível, eu testei e funcionou, mas, qualquer problema me avisa. 

Editado por Yan18
Link para o comentário
Compartilhar em outros sites

  • 0
Em 21/01/2021 em 02:41, Yan18 disse:

 

Seu script parecia estar com erro, estava duplicado a função onCastSpel().

 

Substitui o código por esse:

 


local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
    end 
	
	if id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
	else
		doCreatureAddMana(cid, manaextra)
	end	
	
	return doCombat(cid, combat, var)
end

 

 

Deixei tudo comentado, mas praticamente você vai precisar mexer no id do Magic Plate Armor, olhei aqui em uma base de Tibia e estava com esse ID 2472, precisa ver no itens.xml se é esse ID mesmo. Caso queira que tenha mensagem, só mudar a variável message de false para true e se quiser mudar o texto, só alterar na variável text, mas cuidado para não apagar os dois hífen (que é assim para se comentar em lua) que vai dar ruim kk. Você também pode alterar a quantidade mínima e máxima de cura extra alterando o valor entre parênteses da variável mana_magic_plate_armor mudando o valor dentro da função math.random. 

 

Procurei deixar o mais intuitivo possível, eu testei e funcionou, mas, qualquer problema me avisa. 

 

 

Boa tarde Yan, tudo bem?

Desculpe a demora para responde-lo.

 

Eu testei a script e não funcionou, quando tento utilizar a manarune aparece a mensagem: You can not use this object e ninguém consegue utilizar a manarune.

 

A única alteração que fiz na script foi no ID da mpa que ficou assim:

 

Citar

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 8884 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
    end 
	
	if id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
	else
		doCreatureAddMana(cid, manaextra)
	end	
	
	return doCombat(cid, combat, var)
end

 

Só por desencargo de consciência, é tudo uma script só, correto?

 

Link para o comentário
Compartilhar em outros sites

  • 0
5 horas atrás, Inthebang disse:

 

 

Boa tarde Yan, tudo bem?

Desculpe a demora para responde-lo.

 

Eu testei a script e não funcionou, quando tento utilizar a manarune aparece a mensagem: You can not use this object e ninguém consegue utilizar a manarune.

 

A única alteração que fiz na script foi no ID da mpa que ficou assim:

 

 

Só por desencargo de consciência, é tudo uma script só, correto?

 

 

Sim, é um script só. Mas, então amigo, você não comentou se deu erro na distro(que provavelmente deu), mas eu vi que fiz uma coisa errada, troca o código por esse:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
    end 
	
	if id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
	else
		doCreatureAddMana(cid, manaextra)
	end	
	
	return doCombat(cid, combat, var)
end

 

É para funcionar, testei aqui e está funcionando.

 

Qualquer problema avisa.

Link para o comentário
Compartilhar em outros sites

  • 0
Em 30/01/2021 em 23:30, Yan18 disse:

 

Sim, é um script só. Mas, então amigo, você não comentou se deu erro na distro(que provavelmente deu), mas eu vi que fiz uma coisa errada, troca o código por esse:

 


local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
    end 
	
	if id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
	else
		doCreatureAddMana(cid, manaextra)
	end	
	
	return doCombat(cid, combat, var)
end

 

É para funcionar, testei aqui e está funcionando.

 

Qualquer problema avisa.

 

 

 

Olá Yan, Tudo bem?

 

A script deu dois erros, sendo uma na distro e outra ingame

 

 

Distro:

[01/02/2021 11:33:21] Lua Script Error: [Spell Interface] 
[01/02/2021 11:33:21] data/spells/scripts/support/mana rune.lua:onCastSpell

[01/02/2021 11:33:21] data/spells/scripts/support/mana rune.lua:13: attempt to concatenate global 'mana_magic_plate_armor' (a nil value)
[01/02/2021 11:33:21] stack traceback:
[01/02/2021 11:33:21]     data/spells/scripts/support/mana rune.lua:13: in function <data/spells/scripts/support/mana rune.lua:12>
 

 

 

Ingame quando a pessoa utiliza a manarune sobe o "aaaah" e após ter dado reload spells/reiniciado o servidor a mana não curava e nem subia o "aaaah", inclusive ela também não curava.

Mas no default aparecia que estava sendo utilizado: 11:35 Using one of 100 Mana Runes...

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Inthebang disse:

 

 

 

Olá Yan, Tudo bem?

 

A script deu dois erros, sendo uma na distro e outra ingame

 

 

Distro:

[01/02/2021 11:33:21] Lua Script Error: [Spell Interface] 
[01/02/2021 11:33:21] data/spells/scripts/support/mana rune.lua:onCastSpell

[01/02/2021 11:33:21] data/spells/scripts/support/mana rune.lua:13: attempt to concatenate global 'mana_magic_plate_armor' (a nil value)
[01/02/2021 11:33:21] stack traceback:
[01/02/2021 11:33:21]     data/spells/scripts/support/mana rune.lua:13: in function <data/spells/scripts/support/mana rune.lua:12>
 

 

 

Ingame quando a pessoa utiliza a manarune sobe o "aaaah" e após ter dado reload spells/reiniciado o servidor a mana não curava e nem subia o "aaaah", inclusive ela também não curava.

Mas no default aparecia que estava sendo utilizado: 11:35 Using one of 100 Mana Runes...

 

 

 

Sobre o erro, foi bobeira minha, acabei invertendo a ordem das variáveis e como a variável mana_magic_plate_armor não existia na concatenação do texto, então deu erro.  

 

Sobre ele mandar a mensagem do "Aaahh"  é porque Lua é uma linguagem interpretada, então ela executa linha por linha até a linha com erro. Diferente de uma linguagem compilada que se tem erro ele nem executa.

 

Troca o código por esse:

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM  

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
	end 
	
	if id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
    else
		doCreatureAddMana(cid, manaextra)
    end	
	
	return doCombat(cid, combat, var)
end

 

Editado por Yan18
Link para o comentário
Compartilhar em outros sites

  • 0
Em 01/02/2021 em 12:36, Yan18 disse:

Sobre o erro, foi bobeira minha, acabei invertendo a ordem das variáveis e como a variável mana_magic_plate_armor não existia na concatenação do texto, então deu erro.  

 

Sobre ele mandar a mensagem do "Aaahh"  é porque Lua é uma linguagem interpretada, então ela executa linha por linha até a linha com erro. Diferente de uma linguagem compilada que se tem erro ele nem executa.

 

Troca o código por esse:


local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM  

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
	end 
	
	if id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
    else
		doCreatureAddMana(cid, manaextra)
    end	
	
	return doCombat(cid, combat, var)
end

 

 

Tudo bem, Yan?

 

A script está funcionando corretamente, entretanto funciona apenas quando a pessoa está com o item equipado, quando não tá equipado dá erro no TFS e a mana rune não cura..

 

O erro é esse:

[04/02/2021 16:35:23] Lua Script Error: [Spell Interface] 
[04/02/2021 16:35:23] data/spells/scripts/support/mana rune.lua:onCastSpell

[04/02/2021 16:35:23] luaGetItemDescriptions(). Item not found

[04/02/2021 16:35:23] Lua Script Error: [Spell Interface] 
[04/02/2021 16:35:23] data/spells/scripts/support/mana rune.lua:onCastSpell

[04/02/2021 16:35:23] data/lib/function.lua:396: attempt to index a number value
[04/02/2021 16:35:23] stack traceback:
[04/02/2021 16:35:23]     data/lib/function.lua:396: in function 'getItemName'
[04/02/2021 16:35:23]     data/spells/scripts/support/mana rune.lua:14: in function <data/spells/scripts/support/mana rune.lua:12>
 

Link para o comentário
Compartilhar em outros sites

  • 0
23 minutos atrás, Yan18 disse:

Opa, é porque faltou verificar se existe item no slot. 

 

Substitui o código por esse:

 




local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_MANADRAIN)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, 250, 0, 320)   

local id_magic_plate_armor = 2472 -- ID DO MAGIC PLATE ARMOR
local message = false -- SE QUISER QUE TENHA UMA MENSAGEM PARA O PLAYER SABER QUE FOI CURADO A MAIS POR ESTAR EQUIPADO COM MAGIC PLATE ARMOR, MUDE PARA true

-------- CÓDIGO ---------
function onCastSpell(cid, var)
local item = getPlayerSlotItem(cid, CONST_SLOT_ARMOR) -- PEGA O ITEM DO SLOT (PARA VERIFICAR SE TEM ITEM)
local mana_magic_plate_armor = math.random(20, 30) -- O TANTO DE MANA QUE VAI CURAR SE TIVER EQUIPADO COM MAGIC PLATE ARMOR. ESTÁ ENTRE 20-30 A MAIS DE CURA DA MANA 
local id_item_slot_armor = getItemIdByName(getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid)) -- NÃO MEXER, ESSA VARIÁVEL PEGA O ID DO ITEM EQUIPADO NO SLOT DE ARMOR 
local text = "Você teve +" .. mana_magic_plate_armor .. " de cura por estar equipado com " .. getItemName(getPlayerSlotItem(cid, CONST_SLOT_ARMOR).uid) .. "." -- TEXTO CASO TENHA MENSAGEM  

	if getPlayerLevel(cid) > 200 then
		doSendAnimatedText(getPlayerPosition(cid), "Aaaaah...", TEXTCOLOR_BLUE)
	end
    
	if (((getPlayerLevel(cid))%10) == 0) then
		manaextra = (((getPlayerLevel(cid))/10)*3)
    
	else    
		manaextra = ((((getPlayerLevel(cid))/10)+0.5)*3)
	end 
	

    if item and id_magic_plate_armor == id_item_slot_armor then
		doCreatureAddMana(cid, math.floor(manaextra + mana_magic_plate_armor))
		
		if message then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, text)
		end	
    
    else
		doCreatureAddMana(cid, manaextra)
    end	
	
	return doCombat(cid, combat, var)
end

 

Testa e se der problema me avisa.

 

A script funcionou corretamente, entretanto, é necessário estar utilizando alguma armadura, se não, ela não cura e continua dando o mesmo erro no TFS. Mas para mim está perfeito amigo. 

Muitíssimo Obrigado!!!

 

Lhe dei um REP+ pela imensa ajuda que me deu, novamente muitíssimo obrigado!

Editado por Inthebang
Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, Inthebang disse:

 

A script funcionou corretamente, entretanto, é necessário estar utilizando alguma armadura, se não, ela não cura e continua dando o mesmo erro no TFS. Mas para mim está perfeito amigo. 

Muitíssimo Obrigado!!!

 

Lhe dei um REP+ pela imensa ajuda que me deu, novamente muitíssimo obrigado!

De nada! Que bom que funcionou, fico feliz amigo ?.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...