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.