Posta o seu script da pasta actions de potions.
Script para aumentar em +30 de mana a cada vez que usar mana rune ou potion
Por Inthebang, 11 de jan. de 2021 em Scripts
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

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!
Citarlocal 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)
endfunction 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 Janeiro 16 por Inthebang
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

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 Janeiro 21 por Yan18
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:
Citarlocal 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?
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

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.
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...
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

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 Fevereiro 1 por Yan18
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>
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

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.
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 Fevereiro 4 por Inthebang
info
Grupo: Lorde
Registrado: 05/06/12
Posts: 2.2k
Reputação: +215
Gênero: Masculino

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 ?.



info
Grupo: Campones
Registrado: 28/08/19
Posts: 11
Reputação: 0
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 Janeiro 11 por Inthebang