Search the Community
Showing results for tags 'share'.
-
- Caso alguém tenha interesse, sei implementar este sistema em servidores 8.6, conforme tibia global em versões recentes: Shared Experience Para compartilhar pontos de experiência, o líder da party deve ativar esse recurso através do menu clicando em si mesmo. Se a experiência compartilhada for ativada, e a criatura derrotada der pelo menos 20 pontos de exp, um bônus de experiência será dado, conforme a tabela a seguir: 20% de bônus, se os jogadores forem da mesma vocação; 30% de bônus se duas vocações diferentes estiverem compartilhando experiência; 60% de bônus se três vocações diferentes estiverem compartilhando experiência; 100% de bônus se as quatro vocações diferentes estiverem compartilhando experiência.
- 8 replies
-
- shared exp
- party
-
(and 8 more)
Tagged with:
-
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. 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.