Ir para conteúdo

Featured Replies

Postado

Olá galera, estou batendo em uma tecla a algum tempo..

 

Bem.. uma breve explicação do "bug".

Digamos que um jogador seja mago(nao importa sua vocation), e ele tenha os atributos seguintes:

100 de ML

20 de Shield

 

Se eu criar um item custom, e colocar para este item dar 20 de ML e remover 20 de Shield, o jogador ficará bugado, ele não vai conseguir usar spells.

Por que? Bem, como pudi notar nas sources, na checagem em spells.cpp tem uma condição onde ela verifica se a skill do personagem é menor ou igual a 10(o minimo dado pelo tibia).

	for(int16_t i = SKILL_FIRST; i <= SKILL_LAST; ++i)
	{
		if((int32_t)player->getSkill((skills_t)i, SKILL_LEVEL) < skills[i])
		{
			player->sendCancelMessage(RET_NOTENOUGHSKILL);
			g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF);
			return false;
		}
	}

Então se um jogador usar uma spell, a mesma não vai sair, vai dar a mensagem, "sorry, not possible.".

Isso acontece bem nessa parte em spells.cpp

 

Porem o correto não seria mexer nesta parte, e sim em conditions.cpp

Pois a condição deveria ter um LIMITE para remover pontos de atributos.

 

 

Enfim, não sou bom com explicações.. mas minha ideia é colocar um LIMITE de 10 pontos nas skills.

Ou seja, se algum atributo for dado para o jogador, e ter alguma modificação no valor de suas skills, sempre checar e ver se vai ser menor que 10, se for menor que 10, o atributo colocado será o valor 10, sendo assim, este bug não vai mais acontecer.

Editado por Milbradt (veja o histórico de edições)

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.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo