Postado Julho 17, 2020 4 anos Qual servidor ou website você utiliza como base? o otg Qual o motivo deste tópico? Fiz um script para ao equipar um item, a vida do player aumenta em 25% e quando desequipa, volta ao que era antes. O problema é que o valor adicionado não é nada perto do que deveria ser. Testando com um char com 6905 de vida, deveria aumentar pra 8631, só que a maioria das vezes vai pra 10788, 13000+/- e cada vez que eu desequipo e equipo de novo, aumenta cada vez mais, como se fosse acumulando, e o deequip sempre tirando o valor certinho, no caso o que o onequip deveria ter adicionado. Está surgindo algum erro? Se sim coloque-o aqui. sem erros Você tem o código disponível? Se tiver publique-o aqui: maxhealth_legs.lua function onEquip(player) local item = player:getSlotItem(CONST_SLOT_LEGS) if not item then player:setMaxHealth(player:getMaxHealth()*1.25) return true end end function onDeEquip(player) player:setMaxHealth(player:getMaxHealth()*0.8) return true end movements.xml <movevent event="Equip" itemid="2470" slot="legs" function="onEquipItem" script="maxhealth_legs.lua"> <vocation name="Knight" /> <vocation name="Elite Knight" showInDescription="0" /> <vocation name="Paladin" /> <vocation name="Royal Paladin" showInDescription="0" /> </movevent> Você tem alguma imagem que possa auxiliar no problema? Se sim, coloque-a aqui. antes de equipar o item: depois de equipar: depois de desequipar: (removeu o valor certinho que deveria ter sido adicionado) edit: consegui resolver, se alguém tiver com o mesmo problema é um bug que o onEquip é aplicado 2x, resolvi colocando um getstorage/setstorage pra cada slot se alguém quiser function onEquip(player) if player:getStorageValue(88857) == -1 then player:setStorageValue(88857, player:getLevel()*15*0.25) player:setMaxHealth(player:getMaxHealth() + player:getStorageValue(88857)) player:addHealth(player:getStorageValue(88857)) end return true end function onDeEquip(player) player:setMaxHealth(player:getMaxHealth() - player:getStorageValue(88857)) player:setStorageValue(88857, -1) return true end ta meio confuso sem ter declarado nenhuma variável mas é isso: adicionando % da vida e removendo tava bugando muito, por causa dos arredondamentos acontecia de remover 1 de vida mais ou a menos, acumulava 25% em cima do outro 25% (equipando 2 items, armor e legs por exemplo), então coloquei pra armazenar no storage o valor equivalente ao level no knight * 15 * 0.25, que dá basicamente 25% da vida maxima dele naquele level, o setmaxhealth ta puxando direto do storage e o onDeEquip antes de setar -1 de novo, ta removendo a vida no valor do storage também. Assim ele sempre adiciona e remove o mesmo valor não importando a vida nem o level e não fica 25% em cima de 25% (que da mais de 50% adicional), fica certinho 25% + 25% + ... Editado Julho 18, 2020 4 anos por nandobfer resolvido (veja o histórico de edições)
Postado Julho 19, 2020 4 anos O problema ta justamente em você possuir + de 1 item que faz essa função. Se você sempre trabalhar com vida máxima, então digamos que: 1 player em nenhum item tem: 10.000 de vida. 1 player com 1 legs que aumente 2.000, tem: 10.000 + 2.000 de vida. Porém, quando o player equipar 1 segundo item de vida, é ai que o problema começa: 1 player com 1 legs que aumente 2k equipado, ao equipar 1 armor que aumente + 2k, vai ficar basicamente assim: 12k+2k = 14k, porém ao retirar, ele vai setar a "vida máxima" do player, em 12k, quando na vrdd deveria ser 10k de vida máxima e 2k de vida "extra". Eu recomendo você fazer essas scripts trabalhando com condições e não setando vida máxima.
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.