Em 27/06/2020 em 14:04, bperotto disse:Boa tarde a todos,
Eu gostaria de pedir o apoio de vocês com um script. Estou precisando alterar a cura das poções do meu sistema, mas eu preciso que elas curem com base na vida máxima do player.
Exemplo uma poção de vida que cure 40% da vida máxima:
Um personagem de 3000 de vida, curaria 1200, enquanto um personagem de 1000 de vida curaria 400.
Desde já, meus agradecimentos.
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.




info
Grupo: Campones
Registrado: 26/06/20
Posts: 1
Reputação: 0
Boa tarde a todos,
Eu gostaria de pedir o apoio de vocês com um script. Estou precisando alterar a cura das poções do meu sistema, mas eu preciso que elas curem com base na vida máxima do player.
Exemplo uma poção de vida que cure 40% da vida máxima:
Um personagem de 3000 de vida, curaria 1200, enquanto um personagem de 1000 de vida curaria 400.
Desde já, meus agradecimentos.