Ir para conteúdo

Featured Replies

Postado

 

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:

spacer.png

 

depois de equipar:

spacer.png

 

depois de desequipar: (removeu o valor certinho que deveria ter sido adicionado)

spacer.png

 

 

 

 

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 por nandobfer
resolvido (veja o histórico de edições)

Postado

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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo