Ir para conteúdo
  • 0

Exp Share com problema


Inari

Pergunta

Primeiramente, desculpe se essa for a área errada.

Agora o problema: Ao dividir a experiência em grupo, a quantidade está correta caso 1 jogador dê conta de causar 100% do dano no monstro, mas caso outro membro do grupo ataque o mesmo monstro a experiência se divide de forma esquisita, como se levasse KS do próprio grupo, a experiência total é reduzida para todos. (Checar as Screenshots)

 

Para ficar mais fácil de visualizar o problema, vou identificar algumas coisas:
        A Experiência do Troll no servidor é 360 (Total sem modificador [RateStage: 13x]).

        O Troll tem 50 Hp (como todos devem saber), logo, ele da 7.2 Exp por 1 Hp (referente a Exp acima).

        A personagem Flandre já está em outro Stage de Exp, então para facilitar, pense que ela recebe a mesma quantidade de exp dos outros 2 personagens mais fracos.

        O grupo receberá um bônus de experiência conforme a quantidade de jogadores no grupo, fazendo com que a experiência seja maior do que a base(360 no caso do Troll), compensando sempre caçar em grupos para aumentar a Rate imposta pelo servidor (13x), além de ser favorável também àqueles que têm de dividir o mesmo respawn.
 

Spoiler

Aqui eles recebem a Experiência normalmente quando apenas 1 personagem causou 100% do dano no Troll:

 

asd.thumb.png.82631b6c5b31003064a30e0cad981976.png

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Aqui todos os personagens atacaram o mesmo monstro, sendo que a Flandre causou metade do dano sozinha:

 

asdf.thumb.png.5ded81a7e8d8029197da8750325ad2b2.png

 

Vale notar também que a quantidade de Experiência dividida varia conforme o dano causado de cada jogador, mas ele é sempre dividido em números iguais para todos.

Quanto mais igualado for a quantidade de dano causado por todos os membros, menor será a experiência recebida, é como receber KS da própria party.

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Agora que o problema foi explicado, vamos a parte dos códigos:

* Lembrete: Tenho noção de programação, mas tenho pouca experiência com os códigos do Tibia, provavelmente meu método possa ser mais efetivo de outra forma, mas ainda estou aprendendo. *

 

A seguir o código em sources/party.cpp:

void Party::shareExperience(double experience, bool fromMonster, bool multiplied)
{
	double shareExperience = experience;
	if(experience >= (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT))
		shareExperience = experience * ((memberList.size() + 1) * (0.8 + 0.2 * (memberList.size() + 1))); // shareExperience += (experience * ((double)g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100));

	shareExperience /= memberList.size() + 1;
	double tmpExperience = shareExperience; //we need this, as onGainSharedExperience increases the value

	leader->onGainSharedExperience(tmpExperience, fromMonster, multiplied);
	for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
	{
		tmpExperience = shareExperience;
		(*it)->onGainSharedExperience(tmpExperience, fromMonster, multiplied);
	}
}

A modificação está na linha 5, a versão original está como comentário em caso de backup.
O que ela faz: Para cada jogador na party, é adicionado um bônus de 20% na experiência total recebida.

Ex.: Monstro A da 1000 pontos de experiência. Caso a party possua 2 jogadores, cada um receberá 1200 de Exp. Caso a party possua 5 jogadores, cada um receberá 1800 de Exp. Etc...

 

Na fórmula: shareExperience = experience * ((memberList.size() + 1) * (0.8 + 0.2 * (memberList.size() + 1)))
Ex.: Troll = 360 Exp, 3 membros na party. (Assim como nas Screenshots)
      shareExperience = 360 * ( 3 * ( 0.8 + 0.2 * 3 ) )

      shareExperience = 360 * ( 3 * 1.4 )
      shareExperience = 360 * 4.2

      shareExperience = 1512

A seguir ocorre a fórmula: shareExperience /= memberList.size() + 1;
      shareExperience = 1512 / 3

      shareExperience = 504 (Assim como na primeira Screenshot)

 

Logo depois vem: double tmpExperience = shareExperience; e os seguintes códigos que acredito eu, sejam para adicionar de fato a experiência aos personagens (me corrija se tiver errado).

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Conclusão: Não sei o motivo realmente, fiquei quase 7 horas procurando em diversos arquivos a solução (google also) e ainda não sei porque a experiência recebida muda caso outro player do grupo ataque o mesmo monstro.
                Por favor, se alguém puder me dizer onde eu posso ter errado ou que função poderia ter adicionado para essa funcionalidade, ou ainda se teria uma forma mais simples de ter feito o que eu fiz, ficaria muito agradecido, já que esse é um servidor No-Pvp, é realmente importante que a divisão de experiência funcione corretamente.

 

 

 

TL;DR: Preciso de um Script que faça com que os personagens dentro de uma party recebam a quantidade correta de experiência mesmo atacando o mesmo monstro, assim como no Tibia Global.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

×
×
  • Criar Novo...