Qual é a versão de TFS?
Eu fiz um script baseado na versão de TFS 0.3.6/0.4
-- LUA --
Se você já tem o arquivo do script criado ignore o restante dessa linha e vá para o código, caso não tenha, vá em Data/Actions/Scripts e crie o arquivo potions.lua e adiciona o script:
--------------- POTION QUE CURA BASEADO NA PORCENTAGEM DA VIDA MÁXIMA BY YAN18 ---------------
----- FUNÇÃO PARA CURAR O PLAYER -----
function doHealPlayer(cid, porcentagem_hp, effect, message_heal)
local porcentagem = math.abs(porcentagem_hp / 100) -- PEGA O VALOR INTEIRO PASSADO DO PARÂMETRO DESEJADO COMO A PORCENTAGEM E DIVIDE POR 100 PARAR GERAR A PORCENTAGEM
local life_recovered = math.floor(getCreatureMaxHealth(cid) * porcentagem) -- QUANTIDADE DE HP QUE VAI RECUPERAR
doSendMagicEffect(getThingPos(cid), effect)
doCreatureAddHealth(cid, life_recovered)
-- CONDICIONAL PARA EXIBIR MENSAGEM EM CIMA DO PLAYER AO CURAR --
if message_heal then
doCreatureSay(cid, "Life recovered...")
end
doPlayerSendCancel(cid, "Life recovered...") -- MENSAGEM BRANCE EM CIMA DO CONSOLE
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You recovered " ..life_recovered.. " of your maximum life.")
end
--------- TABELA COM O ID, PORCENTAGEM E EFEITO DAS POTIONS ---------
local potions = {
[12344] = {porcentagem = 40, effect = 14}, -- ID, PORCENTAGEM E EFEITO DA POTION
[12345] = {porcentagem = 40, effect = 14}, -- ID, PORCENTAGEM E EFEITO DA POTION
[12346] = {porcentagem = 40, effect = 12}, -- ID, PORCENTAGEM E EFEITO DA POTION
[12347] = {porcentagem = 40, effect = 13}, -- ID, PORCENTAGEM E EFEITO DA POTION
[12348] = {porcentagem = 40, effect = 13}, -- ID, PORCENTAGEM E EFEITO DA POTION
}
---------------------------------------- CÓDIGO ----------------------------------------
function onUse(cid, item, fromPosition, itemEx, toPosition)
local verificar_batalha = true -- VARIÁVEL QUE VERIFICA SE ESTÁ EM BATALHA PARA USAR A POTION
if not isCreature(cid) or not getCreatureMaster(cid) then
return doPlayerSendCancel(cid, "You only can use this potion in you.")
end
if getCreatureHealth(cid) == getCreatureMaxHealth(cid) then
return doPlayerSendCancel(cid, "You are already with full health.")
end
-- VERIFICA SE ESTÁ EM BATALHA --
if verificar_batalha then
if getCreatureCondition(cid, CONDITION_INFIGHT) then
doPlayerSendCancel(cid, "You can't use this potion during a battle.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can't use this potion during a battle.")
return true
end
end
doRemoveItem(item.uid, 1)
doHealPlayer(cid, potions[item.itemid].porcentagem, potions[item.itemid].effect, true)
return true
end
* Explicação sobre o script: Eu criei uma função que recupera vida do player de acordo com a vida máxima, ela contém quatro parâmetros, que é: criatura, porcentagem baseado na vida máxima, efeito da potion e se exibe mensagem que está curando (esse último argumento é mais estética e não muda e interfere em nada na cura), mas, caso não queira essas mensagens (em cima do player e em cima do console), lá no fim do script dentro da função onUse, mude o último parâmetro da função doHealPlayer de true para false, ficando:
doHealPlayer(cid, potions[item.itemid].porcentagem, potions[item.itemid].effect, false)
Em cima da função onUse tem a tabela com as potions, então no índice ([] colchetes) coloque o id da potion e na tabela dentro do id tem o valor da porcentagem e efeito da potion. No valor da porcentagem passe a quantidade direto (10, 20, 30 por exemplo) pois eu já estou criando a porcentagem dentro da função (valor dividido por 100 para criar a porcentagem), deixei bem simples para você. Então com a tabela você consegue inserir mais de uma potion, caso só queira usar 1, pode apagar a tabela e passar o id e efeito da potion direto na função doHealPlayer no segundo e terceiro parâmetro:
doHealPlayer(cid, 14523, 25, true)
Fiz um exemplo acima, também pode deixar só 1 potion na tabela, não tem problema! É até melhor para não correr risco de acabar pagando o que não deve, mas, nesse caso apague os elementos restantes da tabela deixando só um.
E por fim, fiz uma verificação para verificar se o player está em batalha, e se estiver, não usa a potion. Caso queira mudar isso, só mudar o valor da variável verificar_batalha de true para false:
local verificar_batalha = false
-- XML --
Terminado a explicação sobre o script, agora é a parte do xml. Caso, já tenha a tag da potion criada, pode ignorar essa parte, mas lembrando que precisa colocar os mesmos ID das potions da tag xml na tabela do script.lua caso optou em manter a tabela. Mas, se não criou a tag xml, vamos lá! Abra o actions.xml e adicione a tag:
<action itemid="12344-12348" event="script" value="potions.lua"/>
Lembrando que se você está usando mais de 1 potion e os id delas não são em sequência, precisa tirar o hífen (-) da tag xml e colocar ponto e vírgula (;) para separar os id, pois com hífen é quando é mais de 1 id que são em sequência.
Testa e me fala se deu algum problema. Qualquer dúvida só falar.